# chouikh-ghassen/enterprise-mcp-rag architecture

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

- Interactive diagram: https://gitdiagram.com/chouikh-ghassen/enterprise-mcp-rag
- Repository: https://github.com/chouikh-ghassen/enterprise-mcp-rag

## Overview

This repository provides a Confluence-backed enterprise knowledge assistant and warranty-support tools. The main user flow is an employee query in Open WebUI, model-directed tool calls to the FastMCP API, semantic retrieval from ChromaDB, and a grounded response. Separate tools check warranty coverage, estimate repair costs, locate workshops, retrieve documents, and assemble claim reports. Ingestion is a distinct flow from Confluence through chunking and Ollama embeddings into ChromaDB. The ingestion workflow’s details come from the README; its JSON source was not sampled.

Main entry points: [`mcp-server/server.py`](https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/server.py) (FastAPI / FastMCP), [`mcp-server/ingest_from_real_confluence.py`](https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/ingest_from_real_confluence.py) (Confluence ingestion), [`mcp-server/rag/ingest.py`](https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/rag/ingest.py) (Markdown ingestion), [`mcp-server/rag/retriever.py`](https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/rag/retriever.py) (Semantic retriever)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Assistant experience"]
  node_webui["Open WebUI"]
end

subgraph group_tools["MCP tools"]
  node_mcp["FastAPI / FastMCP<br/>[server.py]"]
  node_search["Knowledge search<br/>[server.py]"]
  node_document["Document retrieval<br/>[server.py]"]
  node_warranty["Coverage check<br/>[server.py]"]
  node_cost["Repair estimate<br/>[server.py]"]
  node_workshop["Workshop lookup<br/>[server.py]"]
  node_claim["Claim report<br/>[server.py]"]
end

subgraph group_knowledge["Knowledge ingestion and retrieval"]
  node_retriever["Semantic retriever<br/>[retriever.py]"]
  node_localdocs["Local documents"]
  node_fileingest["Markdown ingestion<br/>[ingest.py]"]
  node_cloudingest["Confluence ingestion"]
  node_workflow["n8n ingestion workflow"]
end

subgraph group_services["Local AI and data services"]
  node_llm["Ollama chat model"]
  node_embedmodel["Ollama embeddings"]
  node_chroma[("ChromaDB collection")]
end

node_employee(("Employee"))
node_confluence["Confluence Cloud"]

node_employee -->|"submits query"| node_webui
node_webui -->|"sends prompt"| node_llm
node_llm -->|"invokes tools"| node_mcp
node_mcp -->|"dispatches"| node_search
node_mcp -->|"dispatches"| node_document
node_mcp -->|"dispatches"| node_warranty
node_mcp -->|"dispatches"| node_cost
node_mcp -->|"dispatches"| node_workshop
node_mcp -->|"dispatches"| node_claim
node_search -->|"searches"| node_retriever
node_document -->|"searches"| node_search
node_warranty -->|"searches"| node_search
node_cost -->|"searches"| node_search
node_workshop -->|"searches"| node_search
node_claim -->|"checks coverage"| node_warranty
node_claim -->|"estimates cost"| node_cost
node_claim -->|"finds workshop"| node_workshop
node_retriever -->|"embeds query"| node_embedmodel
node_retriever -->|"queries vectors"| node_chroma
node_fileingest -->|"reads Markdown"| node_localdocs
node_fileingest -->|"embeds chunks"| node_embedmodel
node_fileingest -->|"upserts chunks"| node_chroma
node_workflow -->|"fetches pages"| node_confluence
node_workflow -->|"triggers ingestion"| node_mcp
node_mcp -->|"calls ingestion"| node_cloudingest
node_cloudingest -->|"fetches pages"| node_confluence
node_cloudingest -->|"embeds chunks"| node_embedmodel
node_cloudingest -->|"upserts chunks"| node_chroma
node_llm -->|"returns response"| node_webui

click node_mcp "https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/server.py"
click node_search "https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/server.py"
click node_document "https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/server.py"
click node_warranty "https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/server.py"
click node_cost "https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/server.py"
click node_workshop "https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/server.py"
click node_claim "https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/server.py"
click node_retriever "https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/rag/retriever.py"
click node_localdocs "https://github.com/chouikh-ghassen/enterprise-mcp-rag/tree/main/confluence-data"
click node_fileingest "https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/rag/ingest.py"
click node_cloudingest "https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/ingest_from_real_confluence.py"
click node_workflow "https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/n8n-workflows/document_ingestion.json"

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_webui toneBlue
class node_mcp,node_search,node_document,node_warranty,node_cost,node_workshop,node_claim toneAmber
class node_retriever,node_localdocs,node_fileingest,node_cloudingest,node_workflow toneMint
class node_llm,node_embedmodel,node_chroma toneRose
class node_employee,node_confluence toneIndigo
```

## Components

### Assistant experience

- **Open WebUI**

### MCP tools

- [FastAPI / FastMCP](https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/server.py): `mcp-server/server.py`
- [Knowledge search](https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/server.py): `mcp-server/server.py`
- [Document retrieval](https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/server.py): `mcp-server/server.py`
- [Coverage check](https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/server.py): `mcp-server/server.py`
- [Repair estimate](https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/server.py): `mcp-server/server.py`
- [Workshop lookup](https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/server.py): `mcp-server/server.py`
- [Claim report](https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/server.py): `mcp-server/server.py`

### Knowledge ingestion and retrieval

- [Semantic retriever](https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/rag/retriever.py): `mcp-server/rag/retriever.py`
- [Local documents](https://github.com/chouikh-ghassen/enterprise-mcp-rag/tree/main/confluence-data): `confluence-data`
- [Markdown ingestion](https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/rag/ingest.py): `mcp-server/rag/ingest.py`
- [Confluence ingestion](https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/mcp-server/ingest_from_real_confluence.py): `mcp-server/ingest_from_real_confluence.py`
- [n8n ingestion workflow](https://github.com/chouikh-ghassen/enterprise-mcp-rag/blob/main/n8n-workflows/document_ingestion.json): `n8n-workflows/document_ingestion.json`

### Local AI and data services

- **Ollama chat model**
- **Ollama embeddings**
- **ChromaDB collection**

### Other components

- **Employee**
- **Confluence Cloud**

## Connections

- Employee → Open WebUI: submits query
- Open WebUI → Ollama chat model: sends prompt
- Ollama chat model → FastAPI / FastMCP: invokes tools
- FastAPI / FastMCP → Knowledge search: dispatches
- FastAPI / FastMCP → Document retrieval: dispatches
- FastAPI / FastMCP → Coverage check: dispatches
- FastAPI / FastMCP → Repair estimate: dispatches
- FastAPI / FastMCP → Workshop lookup: dispatches
- FastAPI / FastMCP → Claim report: dispatches
- Knowledge search → Semantic retriever: searches
- Document retrieval → Knowledge search: searches
- Coverage check → Knowledge search: searches
- Repair estimate → Knowledge search: searches
- Workshop lookup → Knowledge search: searches
- Claim report → Coverage check: checks coverage
- Claim report → Repair estimate: estimates cost
- Claim report → Workshop lookup: finds workshop
- Semantic retriever → Ollama embeddings: embeds query
- Semantic retriever → ChromaDB collection: queries vectors
- Markdown ingestion → Local documents: reads Markdown
- Markdown ingestion → Ollama embeddings: embeds chunks
- Markdown ingestion → ChromaDB collection: upserts chunks
- n8n ingestion workflow → Confluence Cloud: fetches pages
- n8n ingestion workflow → FastAPI / FastMCP: triggers ingestion
- FastAPI / FastMCP → Confluence ingestion: calls ingestion
- Confluence ingestion → Confluence Cloud: fetches pages
- Confluence ingestion → Ollama embeddings: embeds chunks
- Confluence ingestion → ChromaDB collection: upserts chunks
- Ollama chat model → Open WebUI: returns response
