pharma-rag-mcp
pharma-rag-mcp
Un sistema de Generación Aumentada por Recuperación (RAG) totalmente local y de extremo a extremo para inteligencia de ventas farmacéuticas, construido con LangChain, ChromaDB, Ollama y el Protocolo de Contexto de Modelo (MCP).
El sistema ingiere etiquetas de medicamentos, documentos de ensayos clínicos y notas de llamadas de ventas en una base de datos vectorial local, los expone como herramientas MCP y responde preguntas en lenguaje natural a través de un agente ReAct de LangGraph respaldado por un LLM que se ejecuta localmente.
Arquitectura
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)Módulos de soporte
Módulo | Propósito |
| Envoltorio del modelo de embeddings de HuggingFace ( |
| Constructor / cargador de colecciones de ChromaDB |
| Evaluación de calidad de recuperación (Hit Rate, MRR, Precisión de Contexto) |
Related MCP server: DocAgent-MCP
Base de conocimiento
11 medicamentos × 3 tipos de documentos = 33 archivos fuente:
Colección | Carpeta fuente | Contenidos |
|
| Resúmenes de etiquetas de medicamentos estilo FDA |
|
| Resultados de ensayos clínicos |
|
| Transcripciones de llamadas de representantes de ventas |
Medicamentos: Dupixent, Eliquis, Entresto, Farxiga, Fasenra, Jardiance, Rinvoq, Skyrizi, Trelegy Ellipta, Trulicity, Xarelto
Requisitos previos
Python 3.13+
Ollama ejecutándose localmente con un modelo descargado:
ollama pull llama3.2Un entorno virtual de Python con las dependencias instaladas (ver Configuración).
Configuración
# 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_ingestEjecución del sistema
Cada capa se puede usar de forma independiente. Inicia Ollama antes de usar el agente o la interfaz de usuario.
Agente (CLI)
python -m agent.agentChat interactivo de línea de comandos con memoria de dos niveles:
Memoria de sesión — la consulta de cada turno, las herramientas utilizadas, el modo de fuente y la respuesta se mantienen en RAM durante la ejecución actual.
Memoria a largo plazo — al salir, la sesión se añade (con marcas de tiempo) a
memory/long_term.jsonen disco.
Escribe cualquiera de bye, close, end, exit, goodbye, quit para salir: el agente imprimirá un resumen de la sesión y vaciará la memoria antes de terminar.
Modos de fuente de respuesta
El agente detecta y etiqueta cómo se produjo cada respuesta:
Insignia | Significado |
| Respuesta fundamentada completamente en fragmentos recuperados |
| Hechos recuperados combinados con experiencia general; los puntos fuera de la base de conocimiento se marcan |
| Las herramientas no devolvieron nada relevante; se respondió desde conocimiento general farmacéutico/de ventas |
Contexto multi-turno
El agente pasa los últimos N turnos del historial de conversación al LLM en cada pregunta, de modo que preguntas de seguimiento como "me ignoró, ¿cómo vuelvo a involucrarlo?" se responden en contexto. N se controla mediante config.yaml:
agent:
history_window: 3 # number of prior turns to includeInterfaz de usuario Gradio (navegador)
python -m ui.appAbre una interfaz de chat en http://localhost:7860.
Solo servidor MCP (transporte stdio)
python -m mcp_server.serverCarga las tres colecciones de ChromaDB y espera mensajes JSON-RPC de MCP en stdin.
Herramientas registradas:
Herramienta | Descripción |
| Buscar documentos de etiquetas de medicamentos |
| Buscar datos de ensayos clínicos |
| Buscar notas de llamadas de ventas |
| Buscar en las tres colecciones, combinadas |
Evaluación de recuperación
# Evaluate all three collections
python -m eval.evaluate
# Evaluate one collection with k=5
python -m eval.evaluate --collection drug_info --k 5Imprime Hit Rate, MRR y Precisión de Contexto por colección y en conjunto.
Configuración
Archivo | Propósito |
| Modelo de Ollama y URL base (copiar de |
| Comportamiento del agente (ventana de historial de conversación) |
.env
Variable | Valor predeterminado | Descripción |
|
| Nombre del modelo de Ollama (debe descargarse primero) |
|
| URL del daemon HTTP de Ollama |
config.yaml
agent:
history_window: 3 # prior turns passed to LLM for multi-turn contextEstructura del proyecto
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.txtDecisiones de diseño clave
Local primero — sin APIs en la nube, sin claves de API. Embeddings mediante HuggingFace, almacenamiento vectorial mediante ChromaDB, generación mediante Ollama.
MCP como capa de recuperación — el servidor MCP separa limpiamente la recuperación de la generación. Cualquier cliente compatible con MCP puede llamar a las herramientas de búsqueda.
Modos de respuesta adaptativos — el agente detecta automáticamente si una pregunta se puede responder solo desde la base de conocimiento, requiere combinarse con experiencia general, o cae completamente fuera de la base de conocimiento. Cada respuesta está claramente etiquetada para que el usuario siempre sepa la fuente.
Ventana de historial deslizante — solo los últimos N turnos se envían al LLM, manteniendo acotado el uso de la ventana de contexto mientras se admiten conversaciones naturales de múltiples turnos.
Memoria de dos niveles — la memoria de sesión (en RAM) se vacía a un registro JSON persistente al salir, lo que proporciona un rastro de auditoría completo de cada consulta, herramienta utilizada, modo de fuente y respuesta en todas las ejecuciones.
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