pharma-rag-mcp
pharma-rag-mcp
Ein vollständig lokales, End-to-End-System für Retrieval-Augmented Generation (RAG) für pharmazeutische Vertriebsinformationen – aufgebaut mit LangChain, ChromaDB, Ollama und dem Model Context Protocol (MCP).
Das System nimmt Arzneimittelkennzeichnungen, klinische Studiendokumente und Vertriebsgesprächsnotizen in eine lokale Vektordatenbank auf, stellt sie als MCP-Tools bereit und beantwortet natürlichsprachliche Fragen über einen LangGraph-ReAct-Agenten, der von einem lokal laufenden LLM unterstützt wird.
Architektur
data/sources/ ← raw .txt files (drug labels, trials, call notes)
│
▼
data/ingest.py ← loads, splits into chunks, embeds with all-MiniLM-L6-v2
│
▼
chroma_db/ ← persisted ChromaDB collections (384-dim vectors)
├── drug_info/
├── competitor_intel/
└── pitch_content/
│
▼
mcp_server/server.py ← MCP server over stdio — exposes 4 retrieval tools
│ (MCP JSON-RPC)
▼
agent/agent.py ← LangGraph ReAct agent (ChatOllama + MCP tools)
│
▼
ui/app.py ← Gradio chat interface (browser)Unterstützende Module
Modul | Zweck |
| HuggingFace-Embedding-Modell-Wrapper ( |
| ChromaDB-Collection-Builder / -Lader |
| Bewertung der Retrieval-Qualität (Hit Rate, MRR, Context Precision) |
Related MCP server: DocAgent-MCP
Wissensbasis
11 Medikamente × 3 Dokumenttypen = 33 Quelldateien:
Sammlung | Quellordner | Inhalt |
|
| Zusammenfassungen von Arzneimittelkennzeichnungen im FDA-Stil |
|
| Ergebnisse klinischer Studien |
|
| Transkripte von Vertriebsgesprächen |
Medikamente: Dupixent, Eliquis, Entresto, Farxiga, Fasenra, Jardiance, Rinvoq, Skyrizi, Trelegy Ellipta, Trulicity, Xarelto
Voraussetzungen
Python 3.13+
Ollama läuft lokal mit einem heruntergeladenen Modell:
ollama pull llama3.2Eine Python- virtuelle Umgebung mit installierten Abhängigkeiten (siehe Einrichtung).
Einrichtung
# 1. Clone and enter the project
git clone <repo-url>
cd pharma-rag-mcp
# 2. Create and activate a virtual environment
python -m venv .venv
# Windows:
.venv\Scripts\activate
# macOS / Linux:
source .venv/bin/activate
# 3. Install dependencies
pip install -r requirements.txt
# 4. Configure environment (optional — defaults work out of the box)
cp .env.example .env
# Edit .env to set OLLAMA_MODEL and OLLAMA_BASE_URL if needed
# 5. Build the vector database (only needed once)
python -m data.run_ingestAusführen des Systems
Jede Ebene kann unabhängig verwendet werden. Starten Sie Ollama, bevor Sie den Agenten oder die Benutzeroberfläche verwenden.
Agent (CLI)
python -m agent.agentInteraktiver Befehlszeilen-Chat mit zweistufigem Speicher:
Sitzungsspeicher – Abfrage, aufgerufene Tools, Quellenmodus und Antwort jedes Turns werden für den aktuellen Lauf im RAM gehalten.
Langzeitspeicher – beim Beenden wird die Sitzung (mit Zeitstempeln) an
memory/long_term.jsonauf der Festplatte angehängt.
Geben Sie eines von bye, close, end, exit, goodbye, quit ein, um zu beenden – der Agent gibt eine Sitzungszusammenfassung aus und leert den Speicher, bevor er beendet wird.
Antwort-Quellenmodi
Der Agent erkennt und kennzeichnet, wie jede Antwort erzeugt wurde:
Abzeichen | Bedeutung |
| Antwort vollständig auf abgerufenen Chunks basierend |
| Abgerufene Fakten kombiniert mit allgemeinem Fachwissen; Punkte außerhalb der Wissensbasis sind inline mit |
| Tools haben nichts Relevantes zurückgegeben; Antwort aus allgemeinem Pharma-/Vertriebswissen |
Multi-Turn-Kontext
Der Agent übergibt bei jeder Frage die letzten N Turns des Gesprächsverlaufs an das LLM, sodass Folgefragen wie „er hat mich ignoriert, wie komme ich wieder ins Gespräch?" im Kontext beantwortet werden. N wird über config.yaml gesteuert:
agent:
history_window: 3 # number of prior turns to includeGradio-UI (Browser)
python -m ui.appÖffnet eine Chat-Oberfläche unter http://localhost:7860.
Nur MCP-Server (stdio-Transport)
python -m mcp_server.serverLädt die drei ChromaDB-Sammlungen und wartet auf MCP-JSON-RPC-Nachrichten auf stdin.
Registrierte Tools:
Tool | Beschreibung |
| Arzneimittelkennzeichnungsdokumente durchsuchen |
| Klinische Studiendaten durchsuchen |
| Vertriebsgesprächsnotizen durchsuchen |
| Alle drei Sammlungen durchsuchen, zusammengeführt |
Retrieval-Evaluierung
# Evaluate all three collections
python -m eval.evaluate
# Evaluate one collection with k=5
python -m eval.evaluate --collection drug_info --k 5Gibt Hit Rate, MRR und Context Precision pro Sammlung und insgesamt aus.
Konfiguration
Datei | Zweck |
| Ollama-Modell und Basis-URL (Kopie von |
| Agentenverhalten (Fenster des Gesprächsverlaufs) |
.env
Variable | Standard | Beschreibung |
|
| Ollama-Modellname (muss zuerst heruntergeladen werden) |
|
| Ollama-HTTP-Daemon-URL |
config.yaml
agent:
history_window: 3 # prior turns passed to LLM for multi-turn contextProjektstruktur
pharma-rag-mcp/
├── config.yaml # Agent configuration
├── data/
│ ├── ingest.py # IngestionPipeline class
│ ├── run_ingest.py # CLI: build + spot-check all collections
│ └── sources/
│ ├── drug_labels/ # 11 × drug label .txt files
│ ├── clinical_trials/# 11 × clinical trial .txt files
│ └── call_notes/ # 11 × sales call note .txt files
├── rag/
│ ├── embeddings.py # EmbeddingModel (all-MiniLM-L6-v2)
│ └── vectorstore.py # VectorStoreManager (ChromaDB)
├── mcp_server/
│ ├── server.py # MCP server entrypoint (stdio)
│ └── tools.py # 4 retrieval tool definitions
├── agent/
│ └── agent.py # PharmaAgent + CLI loop with memory
├── ui/
│ └── app.py # Gradio chat UI
├── eval/
│ └── evaluate.py # Hit Rate / MRR / Context Precision
├── memory/
│ └── long_term.json # Persisted session history (auto-created)
├── chroma_db/ # Persisted vector collections (git-ignored)
├── .env.example
├── pyproject.toml
└── requirements.txtWichtige Designentscheidungen
Lokal zuerst – keine Cloud-APIs, keine API-Schlüssel. Embeddings über HuggingFace, Vektorspeicher über ChromaDB, Generierung über Ollama.
MCP als Retrieval-Schicht – der MCP-Server trennt Retrieval und Generierung sauber. Jeder MCP-kompatible Client kann die Suchtools aufrufen.
Adaptive Antwortmodi – der Agent erkennt automatisch, ob eine Frage allein aus der Wissensbasis beantwortet werden kann, eine Kombination mit allgemeinem Fachwissen erfordert oder vollständig außerhalb der Wissensbasis liegt. Jede Antwort ist klar gekennzeichnet, sodass der Benutzer immer die Quelle kennt.
Gleitendes Verlaufsfenster – nur die letzten N Turns werden an das LLM gesendet, wodurch die Nutzung des Kontextfensters begrenzt bleibt und dennoch natürliche Multi-Turn-Gespräche unterstützt werden.
Zweistufiger Speicher – der Sitzungsspeicher (im RAM) wird beim Beenden in ein persistentes JSON-Protokoll geleert, wodurch ein vollständiger Prüfpfad für jede Abfrage, jedes verwendete Tool, jeden Quellenmodus und jede Antwort über alle Läufe hinweg entsteht.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables natural language queries on technical specifications and automated code compliance checks using local RAG with vector search, integrated via MCP.
- FlicenseNot gradedqualityCmaintenanceEnables local document question-answering and retrieval via MCP, supporting multi-turn conversation, intent recognition, and tools for document search, Q&A, and summarization.5
- AlicenseNot gradedqualityCmaintenanceA privacy-preserving local RAG system integrated with MCP, enabling natural language queries over ingested documents and a SQLite database through vector search and local database tools.MIT
- FlicenseNot gradedqualityCmaintenanceProvides read-only, citation-backed semantic search and retrieval-augmented generation over enterprise documents via standardized MCP tools, with local embeddings for privacy.
Related MCP Connectors
Multi-engine search for AI agents. Trust scoring, local corpus, MCP-native. Self-hostable, BYOK.
Certified SEC EDGAR fact memory for AI agents with zero hallucination and filing provenance.
Hosted MCP server exposing US hospital procedure cost data to AI assistants
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kartikeya788/pharma-rag-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server