# nikitakorotaevnikita-sudo/mcp-directum-rx architecture

> Architecture diagram of the GitHub repository nikitakorotaevnikita-sudo/mcp-directum-rx, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/nikitakorotaevnikita-sudo/mcp-directum-rx
- Repository: https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx

## Overview

MCP Directum RX is a Russian-language chat assistant and backoffice for querying and acting on Directum RX through an LLM tool interface and deterministic routes. The primary workflow runs from the chat UI through FastAPI to the LLM service, which dispatches tools to domain services; those services use the Directum OData client, and results return for display. Creation uses preview followed by explicit user confirmation. Discipline metrics are computed deterministically and visualized in the browser. The map follows README capabilities; several endpoint internals were not sampled, so uncertain wiring is omitted.

Main entry points: [`src/services/tool_registry.py`](https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/tool_registry.py) (Tool registry), [`src/main.py`](https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/main.py) (FastAPI API), [`src/services/directum_client.py`](https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/directum_client.py) (OData client), [`src/static/app.js`](https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/static/app.js) (Chat UI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interaction["User interaction"]
  node_chat_ui["Chat UI<br/>[app.js]"]
  node_backoffice_ui["Backoffice UI<br/>[backoffice.js]"]
  node_analytics_view["Analytics charts<br/>[app.js]"]
end

subgraph group_orchestration["Chat orchestration"]
  node_api["FastAPI API<br/>[main.py]"]
  node_llm["LLM service<br/>[llm_service.py]"]
  node_registry["Tool registry<br/>[tool_registry.py]"]
end

subgraph group_domain["Directum capabilities"]
  node_assignments["Assignments<br/>[assignments.py]"]
  node_action_items["Tasks and search<br/>[action_items.py]"]
  node_current_user["Current user<br/>[current_user.py]"]
  node_meetings["Meetings<br/>[meetings.py]"]
  node_discipline["Discipline analytics"]
end

subgraph group_integrations["External systems and state"]
  node_directum_client["OData client<br/>[directum_client.py]"]
  node_directum{{"Directum RX"}}
  node_llm_provider{{"LLM provider"}}
  node_metrics[("Metrics storage<br/>[metrics_storage.py]")]
end

node_user(("User"))

node_user -->|"sends message"| node_chat_ui
node_chat_ui -->|"submits chat"| node_api
node_api -->|"streams chat"| node_llm
node_llm -->|"requests completion"| node_llm_provider
node_llm -->|"dispatches tools"| node_registry
node_registry -->|"queries assignments"| node_assignments
node_registry -->|"searches or creates"| node_action_items
node_registry -->|"resolves user"| node_current_user
node_registry -->|"queries meetings"| node_meetings
node_registry -->|"requests metrics"| node_discipline
node_assignments -->|"queries OData"| node_directum_client
node_action_items -->|"searches and posts"| node_directum_client
node_current_user -->|"queries OData"| node_directum_client
node_meetings -->|"queries OData"| node_directum_client
node_discipline -->|"counts OData"| node_directum_client
node_directum_client -->|"reads and writes"| node_directum
node_api -->|"records and reads"| node_metrics
node_api -->|"returns response"| node_chat_ui
node_api -->|"serves backoffice"| node_backoffice_ui
node_backoffice_ui -->|"requests settings"| node_api
node_chat_ui -->|"renders analytics"| node_analytics_view
node_user -->|"opens backoffice"| node_backoffice_ui

click node_chat_ui "https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/static/app.js"
click node_backoffice_ui "https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/static/backoffice.js"
click node_api "https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/main.py"
click node_llm "https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/llm_service.py"
click node_registry "https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/tool_registry.py"
click node_assignments "https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/assignments.py"
click node_action_items "https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/action_items.py"
click node_current_user "https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/current_user.py"
click node_meetings "https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/meetings.py"
click node_discipline "https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/discipline_analytics.py"
click node_directum_client "https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/directum_client.py"
click node_metrics "https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/metrics_storage.py"
click node_analytics_view "https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/static/app.js"

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_chat_ui,node_backoffice_ui,node_analytics_view,node_user toneBlue
class node_api,node_llm,node_registry toneAmber
class node_assignments,node_action_items,node_current_user,node_meetings,node_discipline toneMint
class node_directum_client,node_directum,node_llm_provider,node_metrics toneRose
```

## Components

### User interaction

- [Chat UI](https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/static/app.js): `src/static/app.js`
- [Backoffice UI](https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/static/backoffice.js): `src/static/backoffice.js`
- [Analytics charts](https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/static/app.js): `src/static/app.js`

### Chat orchestration

- [FastAPI API](https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/main.py): `src/main.py`
- [LLM service](https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/llm_service.py): `src/services/llm_service.py`
- [Tool registry](https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/tool_registry.py): `src/services/tool_registry.py`

### Directum capabilities

- [Assignments](https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/assignments.py): `src/services/assignments.py`
- [Tasks and search](https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/action_items.py): `src/services/action_items.py`
- [Current user](https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/current_user.py): `src/services/current_user.py`
- [Meetings](https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/meetings.py): `src/services/meetings.py`
- [Discipline analytics](https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/discipline_analytics.py): `src/services/discipline_analytics.py`

### External systems and state

- [OData client](https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/directum_client.py): `src/services/directum_client.py`
- **Directum RX**
- **LLM provider**
- [Metrics storage](https://github.com/nikitakorotaevnikita-sudo/mcp-directum-rx/blob/main/src/services/metrics_storage.py): `src/services/metrics_storage.py`

### Other components

- **User**

## Connections

- User → Chat UI: sends message
- Chat UI → FastAPI API: submits chat
- FastAPI API → LLM service: streams chat
- LLM service → LLM provider: requests completion
- LLM service → Tool registry: dispatches tools
- Tool registry → Assignments: queries assignments
- Tool registry → Tasks and search: searches or creates
- Tool registry → Current user: resolves user
- Tool registry → Meetings: queries meetings
- Tool registry → Discipline analytics: requests metrics
- Assignments → OData client: queries OData
- Tasks and search → OData client: searches and posts
- Current user → OData client: queries OData
- Meetings → OData client: queries OData
- Discipline analytics → OData client: counts OData
- OData client → Directum RX: reads and writes
- FastAPI API → Metrics storage: records and reads
- FastAPI API → Chat UI: returns response
- FastAPI API → Backoffice UI: serves backoffice
- Backoffice UI → FastAPI API: requests settings
- Chat UI → Analytics charts: renders analytics
- User → Backoffice UI: opens backoffice
