medical-mcp
Un servidor MCP que proporciona información médica completa consultando múltiples APIs médicas autorizadas, incluyendo FDA, WHO, PubMed, Google Scholar y RxNorm.
Documentación
🩺 Servidor MCP Médico
Lleva datos médicos confiables directamente a tu flujo de trabajo de IA. Un servidor local para acceso privado y gratuito a FDA, OMS, PubMed, RxNorm, Semantic Scholar y Google Scholar. Sin claves API. Sin fugas de datos.
Un servidor MCP (Protocolo de Contexto de Modelo) que lleva información médica autorizada a entornos de codificación de IA como Cursor y Claude Desktop.
¿Por qué usar Medical MCP?
- 🔒 Tus datos nunca salen – Se ejecuta 100% localmente; sin seguimiento, sin registros, sin nube
- 🆓 Sin claves API – Funciona de inmediato, cero configuración
- 🏥 Fuentes autorizadas – FDA, TGA, Health Canada, EMA, DailyMed, OMS, PubMed, RxNorm, ClinicalTrials.gov
- ⚡ Configuración fácil – Instalación con un clic en Cursor o configuración manual simple
- 🔬 Integral – Información de medicamentos, estadísticas de salud, literatura médica, guías clínicas, fuentes pediátricas
- 🛡️ Resiliente – Interruptores de circuito, reintentos con retroceso, limitación de velocidad y respaldos automáticos
- 📊 Clasificación por evidencia – Resultados etiquetados con tipo de estudio y nivel de evidencia (Metaanálisis → Reporte de caso). Las etiquetas son rótulos automáticos del título y resumen, no grados verificados de forma independiente.
- 🏥 Monitoreo de salud – Herramienta de verificación de salud integrada para diagnosticar disponibilidad de fuentes
Novedades en v2.0
- Capa de resiliencia – Interruptores de circuito por fuente, reintentos con retroceso exponencial + fluctuación, limitadores de velocidad por fuente tipo token bucket
- Búsqueda web Monid – Scholar, AAP y HTML de PMC pasan por Monid TinyFish (búsqueda/extracción estilo Tavily). Semantic Scholar es el respaldo sin clave
- Clasificación de evidencia – Resultados de PubMed y bases de datos múltiples etiquetados con tipo de estudio (Revisión sistemática, ECA, Cohorte, Reporte de caso, etc.) y grado de evidencia (I–V). Estas etiquetas son rótulos automáticos del título y resumen, no grados verificados de forma independiente.
- Validación de respuestas – Los esquemas Zod validan todas las respuestas de API ascendentes, registrando advertencias sobre desviaciones de esquema sin interrumpir
- Soporte de clave API NCBI – La variable de entorno opcional
NCBI_API_KEYaumenta PubMed de 3 req/seg a 10 req/seg - Herramienta de verificación de salud –
health-checkverifica todas las fuentes ascendentes e informa latencia, estados de interruptores de circuito, estado de limitadores de velocidad y salud de caché - Registro estructurado – Registro estructurado por niveles (DEBUG/INFO/WARN/ERROR) con seguimiento de fuente y tiempos para cada llamada API
- Tiempos de espera de solicitudes – Todas las llamadas ascendentes tienen tiempos de espera explícitos de respuesta/plazo para evitar bloqueos
Inicio rápido
Instalar en Cursor (Recomendado):
O instalar manualmente:
npm install -g medical-mcp
# Or from source:
git clone https://github.com/JamesANZ/medical-mcp.git
cd medical-mcp && npm install && npm run build
Características
💊 Información de medicamentos
search-drugs– Busca en FDA, DailyMed, TGA (Australia), Health Canada y EMA. Filtra concountries(US,AU,CA,EU). Los códigos no admitidos se rechazan en lugar de devolverse como resultados regulatorios vacíos.search-drug-nomenclature– Nombres de medicamentos estandarizados mediante RxNorm (limittiene un valor predeterminado de 25)search-drug-safety– Eventos adversos de FDA FAERS (con IDs de reporte), retiros del mercado y escasez
📊 Estadísticas de salud
get-health-statistics– Datos del Observatorio Global de Salud de la OMS (esperanza de vida, mortalidad, prevalencia de enfermedades)
🔬 Literatura médica
search-medical-literature– Busca en más de 30 millones de artículos de PubMed (con clasificación de evidencia). Elquestionorerankopcional reordena esos resultados para que los artículos que realmente responden la pregunta aparezcan por encima de los que solo comparten palabras clave.rank-search-hits– Misma reclasificación para una lista que ya tienes (título + resumen). Solo clasificación de recuperación, no diagnóstico ni consejo.get-article-details– Información detallada del artículo por PMIDsearch-google-scholar– Artículos académicos mediante Monid TinyFish (research_paper) cuandoMONID_API_KEYestá configurado; de lo contrario, Semantic Scholarsearch-medical-journals– Revistas principales (NEJM, JAMA, Lancet, BMJ, Nature Medicine)
🏥 Herramientas clínicas
search-clinical-guidelines– Recomendaciones de práctica de organizaciones médicassearch-clinical-trials– ClinicalTrials.govlist-sources– Catálogo completo de adaptadores de registro y fuentes de herramientas dedicadas (OMS, PubMed, RxNorm, Scholar, AAP), incluyendo qué herramienta MCP llega a cada una. Esto no es elsearch-drugsde cinco reguladores.
👶 Fuentes pediátricas
search-pediatric-guidelines– Informes de políticas/clínicos de AAP mediante PubMed, además de Bright Futures. Los resultados web fuera del dominio se descartan; las etiquetas provienen de la página, no de la búsqueda ejecutada.search-pediatric-literature– Investigación de las principales revistas pediátricas.question/rerankopcionales como en literatura médica.search-pediatric-drugs– Medicamentos con etiquetado pediátrico, NDC, fabricante y URL de DailyMed
🛡️ Confiabilidad y monitoreo
health-check– Verifica todas las fuentes ascendentes, informa latencia/estado, estados de interruptores de circuito y salud de cachéget-cache-stats– Ver estadísticas de caché (tasa de aciertos, uso de memoria, cantidad de entradas)
Instalación
Cursor (Un clic)
Haz clic en el enlace de instalación anterior o usa:
cursor://anysphere.cursor-deeplink/mcp/install?name=medical-mcp&config=eyJtZWRpY2FsLW1jcCI6eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIm1lZGljYWwtbWNwIl19fQ==
Instalación manual
Requisitos: Node.js 18+ y npm
git clone https://github.com/JamesANZ/medical-mcp.git
cd medical-mcp
npm install
npm run build
npm start
Claude Desktop
Agrega a claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"medical-mcp": {
"command": "node",
"args": ["/absolute/path/to/medical-mcp/build/index.js"],
"env": {
"NCBI_API_KEY": "your_optional_key_here"
}
}
}
}
Reinicia Claude Desktop después de la configuración.
Ejemplos de uso
Buscar información de medicamentos
{
"tool": "search-drugs",
"arguments": { "query": "Tylenol", "limit": 5 }
}
Buscar literatura médica (con clasificación de evidencia)
Los resultados ahora incluyen etiquetas de evidencia:
1. Efficacy of COVID-19 Treatments: A Meta-Analysis
Evidence: [Systematic Review / Meta-Analysis • tool grade I]
Authors: Smith J, Jones K...
2. Randomized Trial of Remdesivir in Adults
Evidence: [Randomized Controlled Trial • tool grade II]
Authors: Chen L, Wang M...
Ejecutar verificación de salud
{ "tool": "health-check", "arguments": {} }
Devuelve:
✅ FDA: healthy (234ms)
✅ PubMed: healthy (156ms)
✅ WHO: healthy (890ms)
✅ RxNorm: healthy (312ms)
✅ ClinicalTrials: healthy (445ms)
✅ SemanticScholar: healthy (189ms)
NCBI API Key: ✅ Configured (10 req/sec PubMed)
Arquitectura
Pila de resiliencia
Cada llamada API pasa por una pila de resiliencia de tres capas:
Request → Rate Limiter → Circuit Breaker → Retry (with backoff) → Upstream API
- Limitador de velocidad – Token bucket por fuente evita exceder los límites de API (PubMed: 3/seg sin clave, 10/seg con; FDA: 4/seg; Google Scholar: 0.2/seg)
- Interruptor de circuito – Después de 3 fallos consecutivos, el circuito se abre durante 60s, evitando fallos en cascada. Transiciones: CERRADO → ABIERTO → MEDIO ABIERTO → CERRADO
- Reintento – Retroceso exponencial con fluctuación completa en fallos transitorios (429, 5xx, errores de red). Máximo 2 reintentos
Clasificación de evidencia
Los resultados de PubMed y bases de datos múltiples se clasifican automáticamente:
| Grado | Tipo de estudio | Ejemplos |
|---|---|---|
| I | Revisión sistemática / Metaanálisis | Revisiones Cochrane, estudios PRISMA |
| II | Ensayo controlado aleatorizado | Ensayos doble ciego controlados con placebo |
| III | Estudio de cohorte / caso-control | Prospectivos, retrospectivos, basados en población |
| IV | Reporte de caso / serie de casos | Presentaciones de casos clínicos |
| V | Opinión de experto / Editorial | Comentarios, perspectivas, revisiones narrativas |
Estas etiquetas son rótulos automáticos del título y resumen, no grados verificados de forma independiente.
Respaldo automático
Cuando MONID_API_KEY está configurado, la búsqueda de Scholar/AAP y la extracción de HTML de PMC pasan por Monid TinyFish. Sin clave, Scholar recurre a la API de Semantic Scholar — gratuita, bien estructurada, 100 req/seg, sin necesidad de clave API.
Validación de respuestas
Todas las respuestas de API ascendentes se validan contra esquemas Zod. Si una fuente cambia el formato de su respuesta API, el servidor registra una advertencia pero continúa operando con datos sin procesar — sin fallos, solo alertas.
Fuentes de datos
| Fuente | Cobertura | Frecuencia de actualización | Resiliencia |
|---|---|---|---|
| FDA | Etiquetas de medicamentos aprobados en EE. UU. | Tiempo real | Interruptor de circuito + reintento |
| DailyMed | Etiquetas de productos estructurados de EE. UU. | Diaria | Interruptor de circuito + reintento |
| TGA ARTG | Registro Australiano de Bienes Terapéuticos | Tiempo real | Interruptor de circuito + reintento |
| Health Canada DPD | Medicamentos comercializados/aprobados en Canadá | Tiempo real | Interruptor de circuito + reintento |
| EMA | Medicamentos autorizados centralmente en la UE | JSON dos veces al día | Caché en memoria + reintento |
| FDA FAERS / retiros / escasez | Señales de seguridad de EE. UU. | Tiempo real | Interruptor de circuito + reintento |
| OMS | Estadísticas de salud global (194 países) | Anual | Interruptor de circuito + reintento |
| PubMed | Más de 30 millones de citas médicas | Diaria | Interruptor de circuito + reintento + clave NCBI |
| RxNorm | Nomenclatura estandarizada de medicamentos (EE. UU.) | Semanal | Interruptor de circuito + reintento |
| TinyFish vía Monid | Artículos de investigación + web con alcance de dominio | Tiempo real | MONID_API_KEY opcional |
| Semantic Scholar | Más de 200 millones de artículos con datos de citas | Tiempo real | Interruptor de circuito + reintento |
| AAP | Bright Futures y declaraciones de políticas | Periódica | Degradación gradual |
| Revistas pediátricas | Principales revistas pediátricas | Diaria | Interruptor de circuito + reintento |
| ClinicalTrials.gov | Ensayos intervencionales y observacionales | Tiempo real | Interruptor de circuito + reintento |
Configuración
Variables de entorno
Rendimiento y confiabilidad:
| Variable | Predeterminado | Descripción |
|---|---|---|
NCBI_API_KEY | (ninguno) | Clave API gratuita de PubMed — 3x de rendimiento. Obtén una en NCBI |
MONID_API_KEY | (ninguno) | Opcional. Cuando se configura, Scholar/AAP/HTML de PMC usan la búsqueda y extracción de TinyFish de Monid (raspador web estilo Tavily). Obtén una clave en Monid |
TINYFISH_API_KEY | (ninguno) | Respaldo opcional si llamas a TinyFish directamente en lugar de a través de Monid. |
TYPESAFE_API_KEY | (ninguno) | Opcional. Necesario para reclasificar resultados de literatura con JEV (jev-1.13.0). Sin él, la búsqueda funciona como antes. Obtén una clave en TypeSafe |
LOG_LEVEL | INFO | Nivel de registro: DEBUG, INFO, WARN, ERROR, SILENT |
Caché:
| Variable | Default | Description |
|---|---|---|
CACHE_ENABLED | true | Habilitar/deshabilitar caché |
CACHE_MAX_SIZE | 1000 | Máximo de entradas de caché |
CACHE_TTL_FDA | 86400 | TTL de FDA en segundos (24h) |
CACHE_TTL_PUBMED | 3600 | TTL de PubMed (1h) |
CACHE_TTL_WHO | 604800 | TTL de WHO (7d) |
CACHE_TTL_RXNORM | 2592000 | TTL de RxNorm (30d) |
CACHE_TTL_GOOGLE_SCHOLAR | 3600 | TTL de Google Scholar (1h) |
CACHE_TTL_BRIGHT_FUTURES | 2592000 | TTL de Bright Futures (30d) |
CACHE_TTL_AAP_POLICY | 604800 | TTL de AAP Policy (7d) |
CACHE_TTL_REGULATORS | 86400 | TTL de TGA/EMA/Health Canada |
CACHE_TTL_SAFETY | 3600 | TTL de FAERS/retiros/escasez |
CACHE_TTL_TRIALS | 3600 | TTL de búsqueda de ensayos clínicos |
CACHE_CLEANUP_INTERVAL | 300000 | Intervalo de limpieza en ms (5min) |
Deduplicación:
| Variable | Default | Description |
|---|---|---|
DEDUP_ENABLED | true | Habilitar/deshabilitar deduplicación entre fuentes |
DEDUP_SIMILARITY_THRESHOLD | 0.9 | Umbral de coincidencia difusa de títulos (0.0–1.0) |
DEDUP_LOG_REMOVED | false | Registrar duplicados eliminados |
Rendimiento: Las respuestas en caché se devuelven en <10ms frente a 800–1500ms para llamadas API. Tasa de aciertos esperada: 60%+ para consultas comunes.
Seguridad y Privacidad
- ✅ Solo localhost – El servidor se ejecuta localmente, sin acceso externo
- ✅ Sin almacenamiento de datos – Todas las consultas son en tiempo real, nada se guarda en disco
- ✅ Aislamiento de procesos – Los datos médicos permanecen en tu máquina
- ✅ Sin necesidad de claves API – Funciona sin credenciales (las claves de NCBI y Monid son opcionales)
Detalles Técnicos
Construido con: Node.js, TypeScript, MCP SDK
Dependencias: @modelcontextprotocol/sdk, superagent, zod, express, cors
Plataformas: macOS, Windows, Linux
Estructura del código fuente:
src/
├── index.ts # MCP tool definitions
├── utils.ts # Core API functions + formatters
├── constants.ts # API URLs, config constants
├── types.ts # TypeScript types
├── logger.ts # Structured leveled logging
├── rank/ # Optional JEV post-retrieval ranker (question vs abstract)
│ ├── policy.ts # Keep / demote / drop — no HTTP
│ └── jev-client.ts # TypeSafe System One client (jev-1.13.0)
├── cache/
│ ├── config.ts # TTL policies, env var support
│ └── manager.ts # In-memory LRU cache
├── resilience/
│ ├── index.ts # Composed resilientCall()
│ ├── circuit-breaker.ts # Per-source circuit breaker
│ ├── retry.ts # Exponential backoff + jitter
│ └── rate-limiter.ts # Token bucket rate limiter
├── validation/
│ └── schemas.ts # Zod schemas for API responses
├── sources/ # Country/source registry + adapters
│ ├── adapters/ # FDA, TGA, Health Canada, EMA, DailyMed, FAERS, trials, TinyFish
│ └── ...
└── utils/
├── deduplication.ts # Cross-source paper dedup
├── evidence-grading.ts # Study type classification
└── semantic-scholar.ts # Semantic Scholar API client
Aviso Médico
⚠️ Importante: Esta herramienta proporciona información de fuentes autorizadas pero no debe reemplazar el consejo médico profesional, el diagnóstico o el tratamiento. Siempre consulta a profesionales de la salud calificados para decisiones médicas.
Contribuciones
⭐ Si este proyecto te resulta útil, ¡dale una estrella en GitHub! ⭐
¡Las contribuciones son bienvenidas! Por favor, abre un issue o envía un pull request.
Licencia
Licencia MIT – consulta LICENSE.md para más detalles.
Soporte
Si encuentras útil este proyecto, considera apoyarlo:
⚡ Red Lightning
lnbc1pjhhsqepp5mjgwnvg0z53shm22hfe9us289lnaqkwv8rn2s0rtekg5vvj56xnqdqqcqzzsxqyz5vqsp5gu6vh9hyp94c7t3tkpqrp2r059t4vrw7ps78a4n0a2u52678c7yq9qyyssq7zcferywka50wcy75skjfrdrk930cuyx24rg55cwfuzxs49rc9c53mpz6zug5y2544pt8y9jflnq0ltlha26ed846jh0y7n4gm8jd3qqaautqa
₿ Bitcoin: bc1ptzvr93pn959xq4et6sqzpfnkk2args22ewv5u2th4ps7hshfaqrshe0xtp
Ξ Ethereum/EVM: 0x42ea529282DDE0AA87B42d9E83316eb23FE62c3f