Skip to main content
Glama
kartikeya788

pharma-rag-mcp

by kartikeya788

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

rag/embeddings.py

HuggingFace-Embedding-Modell-Wrapper (all-MiniLM-L6-v2)

rag/vectorstore.py

ChromaDB-Collection-Builder / -Lader

eval/evaluate.py

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

drug_info

data/sources/drug_labels/

Zusammenfassungen von Arzneimittelkennzeichnungen im FDA-Stil

competitor_intel

data/sources/clinical_trials/

Ergebnisse klinischer Studien

pitch_content

data/sources/call_notes/

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.2
  • Eine 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_ingest

Ausfü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.agent

Interaktiver 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.json auf 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

[Source: Knowledge Base]

Antwort vollständig auf abgerufenen Chunks basierend

[Source: Knowledge Base + General Knowledge]

Abgerufene Fakten kombiniert mit allgemeinem Fachwissen; Punkte außerhalb der Wissensbasis sind inline mit [GK] markiert

[Source: General Knowledge only]

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 include

Gradio-UI (Browser)

python -m ui.app

Öffnet eine Chat-Oberfläche unter http://localhost:7860.

Nur MCP-Server (stdio-Transport)

python -m mcp_server.server

Lädt die drei ChromaDB-Sammlungen und wartet auf MCP-JSON-RPC-Nachrichten auf stdin.

Registrierte Tools:

Tool

Beschreibung

search_drug_info

Arzneimittelkennzeichnungsdokumente durchsuchen

search_competitor_intel

Klinische Studiendaten durchsuchen

search_pitch_content

Vertriebsgesprächsnotizen durchsuchen

search_all

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 5

Gibt Hit Rate, MRR und Context Precision pro Sammlung und insgesamt aus.


Konfiguration

Datei

Zweck

.env

Ollama-Modell und Basis-URL (Kopie von .env.example)

config.yaml

Agentenverhalten (Fenster des Gesprächsverlaufs)

.env

Variable

Standard

Beschreibung

OLLAMA_MODEL

llama3.2

Ollama-Modellname (muss zuerst heruntergeladen werden)

OLLAMA_BASE_URL

http://localhost:11434

Ollama-HTTP-Daemon-URL

config.yaml

agent:
  history_window: 3   # prior turns passed to LLM for multi-turn context

Projektstruktur

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.txt

Wichtige 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.

F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables natural language queries on technical specifications and automated code compliance checks using local RAG with vector search, integrated via MCP.
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables local document question-answering and retrieval via MCP, supporting multi-turn conversation, intent recognition, and tools for document search, Q&A, and summarization.
    5
  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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

View all related MCP servers

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

View all MCP Connectors

Latest Blog Posts

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