# simoafdel-ctrl/dynamics-365-finance-operations architecture

> Architecture diagram of the GitHub repository simoafdel-ctrl/dynamics-365-finance-operations, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/simoafdel-ctrl/dynamics-365-finance-operations
- Repository: https://github.com/simoafdel-ctrl/dynamics-365-finance-operations

## Overview

This repository is a D365 Finance & Operations MCP server, with an accompanying C# metadata bridge and management CLI. The principal workflow is an MCP client request entering the server, being dispatched to a tool, and using indexed metadata, workspace files, or (when available) the live bridge to produce analysis or changes. Other major product capabilities include knowledge guidance, project/SDLC operations, and configurable object naming; the README specifically documents the fork’s `prefix-first` convention. Relationships below rely on the README and SOURCE INDEX references; unsampled subsystems are shown as capabilities without speculative internal call links.

Main entry points: [`src/types/context.ts`](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/types/context.ts) (Shared Context), [`src/tools/toolHandler.ts`](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/tools/toolHandler.ts) (Tool Dispatch), [`src/index.ts`](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/index.ts) (Server Entry), [`src/workspace/hybridSearch.ts`](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/workspace/hybridSearch.ts) (Hybrid Search)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["MCP Runtime"]
  node_server["Server Entry<br/>[index.ts]"]
  node_transport["MCP Transport<br/>[transport.ts]"]
  node_dispatch["Tool Dispatch<br/>[toolHandler.ts]"]
  node_context["Shared Context<br/>[context.ts]"]
end

subgraph group_metadata["Metadata Access"]
  node_search["Search &amp; Analysis"]
  node_symbol_index[("Symbol Index<br/>[symbolIndex.ts]")]
  node_xml_parser["Metadata Parsing<br/>[xmlParser.ts]"]
  node_workspace["Workspace Scan"]
  node_hybrid_search["Hybrid Search<br/>[hybridSearch.ts]"]
  node_bridge_client["Bridge Client<br/>[bridgeClient.ts]"]
  node_bridge_runtime["Bridge Runtime<br/>[Program.cs]"]
  node_bridge_dispatch["Bridge Dispatch"]
  node_bridge_read["Live Metadata Reads"]
  node_bridge_write["Metadata Writes"]
end

subgraph group_authoring["Authoring &amp; Guidance"]
  node_authoring["Object Generation<br/>[generateObject.ts]"]
  node_knowledge["Knowledge Tools"]
  node_naming["Naming Rules<br/>[modelClassifier.ts]"]
end

subgraph group_operations["Project Operations"]
  node_sdlc["SDLC Tools"]
end

subgraph group_setup["Configuration"]
  node_config["Runtime Configuration<br/>[configManager.ts]"]
  node_settings["Settings<br/>[settings.ts]"]
  node_cli["Management CLI<br/>[index.ts]"]
end

node_client(("MCP Client"))

node_client -->|"requests tools"| node_server
node_server -->|"starts transport"| node_transport
node_dispatch -->|"dispatches"| node_search
node_dispatch -->|"dispatches"| node_authoring
node_dispatch -->|"dispatches"| node_knowledge
node_dispatch -->|"dispatches"| node_sdlc
node_context -->|"provides index"| node_symbol_index
node_context -->|"provides parser"| node_xml_parser
node_context -->|"provides scanner"| node_workspace
node_context -->|"provides search"| node_hybrid_search
node_context -->|"provides bridge"| node_bridge_client
node_hybrid_search -->|"searches index"| node_symbol_index
node_hybrid_search -->|"searches workspace"| node_workspace
node_bridge_client -->|"starts process"| node_bridge_runtime
node_bridge_runtime -->|"dispatches requests"| node_bridge_dispatch
node_bridge_dispatch -->|"routes reads"| node_bridge_read
node_bridge_dispatch -->|"routes writes"| node_bridge_write
node_server -->|"loads config"| node_config
node_config -->|"uses settings"| node_settings
node_authoring -.->|"applies naming"| node_naming
node_cli -.->|"manages settings"| node_config

click node_server "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/index.ts"
click node_transport "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/server/transport.ts"
click node_dispatch "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/tools/toolHandler.ts"
click node_context "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/types/context.ts"
click node_search "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/tree/main/src/tools/analysis"
click node_symbol_index "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/metadata/symbolIndex.ts"
click node_xml_parser "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/metadata/xmlParser.ts"
click node_workspace "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/workspace/workspaceScanner.ts"
click node_hybrid_search "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/workspace/hybridSearch.ts"
click node_bridge_client "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/bridge/bridgeClient.ts"
click node_bridge_runtime "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/bridge/D365MetadataBridge/Program.cs"
click node_bridge_dispatch "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/bridge/D365MetadataBridge/Protocol/RequestDispatcher.cs"
click node_bridge_read "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/bridge/D365MetadataBridge/Services/MetadataReadService.cs"
click node_bridge_write "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/bridge/D365MetadataBridge/Services/MetadataWriteService.cs"
click node_authoring "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/tools/generateObject.ts"
click node_knowledge "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/tree/main/src/tools/knowledge"
click node_naming "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/utils/modelClassifier.ts"
click node_sdlc "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/tree/main/src/tools/sdlc"
click node_config "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/utils/configManager.ts"
click node_settings "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/config/settings.ts"
click node_cli "https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/cli/index.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_server,node_transport,node_dispatch,node_context,node_client toneBlue
class node_search,node_symbol_index,node_xml_parser,node_workspace,node_hybrid_search,node_bridge_client,node_bridge_runtime,node_bridge_dispatch,node_bridge_read,node_bridge_write toneAmber
class node_authoring,node_knowledge,node_naming toneMint
class node_sdlc toneRose
class node_config,node_settings,node_cli toneIndigo
```

## Components

### MCP Runtime

- [Server Entry](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/index.ts): `src/index.ts`
- [MCP Transport](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/server/transport.ts): `src/server/transport.ts`
- [Tool Dispatch](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/tools/toolHandler.ts): `src/tools/toolHandler.ts`
- [Shared Context](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/types/context.ts): `src/types/context.ts`

### Metadata Access

- [Search & Analysis](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/tree/main/src/tools/analysis): `src/tools/analysis`
- [Symbol Index](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/metadata/symbolIndex.ts): `src/metadata/symbolIndex.ts`
- [Metadata Parsing](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/metadata/xmlParser.ts): `src/metadata/xmlParser.ts`
- [Workspace Scan](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/workspace/workspaceScanner.ts): `src/workspace/workspaceScanner.ts`
- [Hybrid Search](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/workspace/hybridSearch.ts): `src/workspace/hybridSearch.ts`
- [Bridge Client](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/bridge/bridgeClient.ts): `src/bridge/bridgeClient.ts`
- [Bridge Runtime](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/bridge/D365MetadataBridge/Program.cs): `bridge/D365MetadataBridge/Program.cs`
- [Bridge Dispatch](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/bridge/D365MetadataBridge/Protocol/RequestDispatcher.cs): `bridge/D365MetadataBridge/Protocol/RequestDispatcher.cs`
- [Live Metadata Reads](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/bridge/D365MetadataBridge/Services/MetadataReadService.cs): `bridge/D365MetadataBridge/Services/MetadataReadService.cs`
- [Metadata Writes](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/bridge/D365MetadataBridge/Services/MetadataWriteService.cs): `bridge/D365MetadataBridge/Services/MetadataWriteService.cs`

### Authoring & Guidance

- [Object Generation](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/tools/generateObject.ts): `src/tools/generateObject.ts`
- [Knowledge Tools](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/tree/main/src/tools/knowledge): `src/tools/knowledge`
- [Naming Rules](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/utils/modelClassifier.ts): `src/utils/modelClassifier.ts`

### Project Operations

- [SDLC Tools](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/tree/main/src/tools/sdlc): `src/tools/sdlc`

### Configuration

- [Runtime Configuration](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/utils/configManager.ts): `src/utils/configManager.ts`
- [Settings](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/config/settings.ts): `src/config/settings.ts`
- [Management CLI](https://github.com/simoafdel-ctrl/dynamics-365-finance-operations/blob/main/src/cli/index.ts): `src/cli/index.ts`

### Other components

- **MCP Client**

## Connections

- MCP Client → Server Entry: requests tools (evidence: `README.md`)
- Server Entry → MCP Transport: starts transport (evidence: `src/index.ts`)
- Tool Dispatch → Search & Analysis: dispatches (evidence: `src/tools/toolHandler.ts`)
- Tool Dispatch → Object Generation: dispatches (evidence: `src/tools/toolHandler.ts`)
- Tool Dispatch → Knowledge Tools: dispatches (evidence: `src/tools/toolHandler.ts`)
- Tool Dispatch → SDLC Tools: dispatches (evidence: `src/tools/toolHandler.ts`)
- Shared Context → Symbol Index: provides index (evidence: `src/types/context.ts`)
- Shared Context → Metadata Parsing: provides parser (evidence: `src/types/context.ts`)
- Shared Context → Workspace Scan: provides scanner (evidence: `src/types/context.ts`)
- Shared Context → Hybrid Search: provides search (evidence: `src/types/context.ts`)
- Shared Context → Bridge Client: provides bridge (evidence: `src/types/context.ts`)
- Hybrid Search → Symbol Index: searches index (evidence: `src/workspace/hybridSearch.ts`)
- Hybrid Search → Workspace Scan: searches workspace (evidence: `src/workspace/hybridSearch.ts`)
- Bridge Client → Bridge Runtime: starts process (evidence: `src/bridge/bridgeClient.ts`)
- Bridge Runtime → Bridge Dispatch: dispatches requests (evidence: `bridge/D365MetadataBridge/Program.cs`)
- Bridge Dispatch → Live Metadata Reads: routes reads (evidence: `bridge/D365MetadataBridge/Program.cs`)
- Bridge Dispatch → Metadata Writes: routes writes (evidence: `bridge/D365MetadataBridge/Program.cs`)
- Server Entry → Runtime Configuration: loads config (evidence: `src/index.ts`)
- Runtime Configuration → Settings: uses settings (evidence: `src/utils/configManager.ts`)
- Object Generation → Naming Rules: applies naming
- Management CLI → Runtime Configuration: manages settings
