pharma-rag-mcp
pharma-rag-mcp
Полностью локальная, сквозная система Retrieval-Augmented Generation (RAG) для фармацевтической аналитики продаж — построена на LangChain, ChromaDB, Ollama и Model Context Protocol (MCP).
Система загружает инструкции к препаратам, документы клинических испытаний и заметки с переговоров в локальную векторную базу данных, предоставляет их в виде MCP-инструментов и отвечает на вопросы на естественном языке через агента LangGraph ReAct, работающего на локально запущенной LLM.
Архитектура
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)Вспомогательные модули
Модуль | Назначение |
| Обёртка модели эмбеддингов HuggingFace ( |
| Сборщик / загрузчик коллекций ChromaDB |
| Оценка качества поиска (Hit Rate, MRR, Context Precision) |
Related MCP server: DocAgent-MCP
База знаний
11 препаратов × 3 типа документов = 33 исходных файла:
Коллекция | Исходная папка | Содержимое |
|
| Сводки инструкций к препаратам в стиле FDA |
|
| Результаты клинических испытаний |
|
| Транскрипты звонков торговых представителей |
Препараты: Dupixent, Eliquis, Entresto, Farxiga, Fasenra, Jardiance, Rinvoq, Skyrizi, Trelegy Ellipta, Trulicity, Xarelto
Предварительные требования
Python 3.13+
Ollama запущен локально с загруженной моделью:
ollama pull llama3.2Виртуальное окружение Python с установленными зависимостями (см. Setup).
Установка
# 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Запуск системы
Каждый слой можно использовать независимо. Запустите Ollama перед использованием агента или интерфейса.
Агент (CLI)
python -m agent.agentИнтерактивный чат в командной строке с двухуровневой памятью:
Память сессии — запрос, использованные инструменты, режим источника и ответ каждого хода хранятся в оперативной памяти во время текущего запуска.
Долговременная память — при выходе сессия добавляется (с временными метками) в
memory/long_term.jsonна диске.
Введите любое из bye, close, end, exit, goodbye, quit для выхода — агент выведет сводку сессии и сбросит память перед завершением.
Режимы источника ответа
Агент определяет и помечает, как был получен каждый ответ:
Значок | Значение |
| Ответ полностью основан на извлечённых фрагментах |
| Извлечённые факты объединены с общими знаниями; пункты вне базы помечены |
| Инструменты не вернули ничего релевантного; ответ дан на основе общих фармацевтических/продажных знаний |
Многоходовой контекст
Агент передаёт последние N ходов истории разговора в LLM на каждый вопрос, поэтому уточняющие вопросы, например "он меня проигнорировал, как мне снова вовлечь его?", получают ответ с учётом контекста. N задаётся в config.yaml:
agent:
history_window: 3 # number of prior turns to includeGradio UI (браузер)
python -m ui.appОткрывает чат-интерфейс по адресу http://localhost:7860.
Только MCP-сервер (транспорт stdio)
python -m mcp_server.serverЗагружает три коллекции ChromaDB и ожидает MCP JSON-RPC сообщения на stdin.
Зарегистрированные инструменты:
Инструмент | Описание |
| Поиск по документам инструкций к препаратам |
| Поиск по данным клинических испытаний |
| Поиск по заметкам с переговоров |
| Поиск по всем трём коллекциям, объединённый |
Оценка поиска
# Evaluate all three collections
python -m eval.evaluate
# Evaluate one collection with k=5
python -m eval.evaluate --collection drug_info --k 5Выводит Hit Rate, MRR и Context Precision по каждой коллекции и в целом.
Конфигурация
Файл | Назначение |
| Модель Ollama и базовый URL (скопируйте из |
| Поведение агента (окно истории разговора) |
.env
Переменная | По умолчанию | Описание |
|
| Имя модели Ollama (должна быть загружена) |
|
| URL HTTP-демона Ollama |
config.yaml
agent:
history_window: 3 # prior turns passed to LLM for multi-turn contextСтруктура проекта
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Ключевые проектные решения
Локальность прежде всего — никаких облачных API, никаких ключей API. Эмбеддинги через HuggingFace, векторное хранилище через ChromaDB, генерация через Ollama.
MCP как уровень поиска — MCP-сервер чётко разделяет поиск и генерацию. Любой MCP-совместимый клиент может вызывать инструменты поиска.
Адаптивные режимы ответа — агент автоматически определяет, можно ли ответить на вопрос только из базы знаний, требуется ли объединение с общими знаниями, или вопрос полностью вне базы. Каждый ответ чётко помечен, чтобы пользователь всегда знал источник.
Скользящее окно истории — в LLM отправляются только последние N ходов, что ограничивает использование контекстного окна, сохраняя при этом поддержку естественных многоходовых разговоров.
Двухуровневая память — память сессии (в оперативной памяти) сбрасывается в постоянный JSON-журнал при выходе, что даёт полный аудит-след каждого запроса, использованного инструмента, режима источника и ответа во всех запусках.
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