pubmed-search-mcp
PubMed Search MCP
Asistente profesional de investigación bibliográfica para agentes de IA - Mucho más que un simple envoltorio de API
Un servidor MCP basado en Diseño Dirigido por el Dominio (DDD) que sirve como asistente de investigación inteligente para agentes de IA, con capacidades de búsqueda y análisis de literatura orientadas a tareas.
✨ Qué incluye:
🔧 45 herramientas MCP - Acceso simplificado a PubMed, Europe PMC, CORE, NCBI y Research Chronicle / Context Graph
🛡️ Modo de servicio multiagente - Implante una vez y atienda a muchos agentes: sesiones por inquilino, cachés y artefactos, autenticación con token de portador y límites de reparto equitativo por inquilino. Consulte DEPLOYMENT.md
🖼️ Extracción de figuras de acceso abierto - Obtenga pies de figura, URL de imágenes directas y enlaces PDF de artículos de acceso abierto de PMC
📘 Sitio de documentación - Explore el manual completo con cambio de idioma: flujos de trabajo de usuario, arquitectura, referencia de las 45 herramientas, tutoriales de canalizaciones, contratos de fuentes/intermediarios, integraciones y operaciones, seguridad e implementación en u9401066.github.io/pubmed-search-mcp
📖 GitHub Wiki - Espejo nativo de GitHub de la misma documentación canónica en github.com/u9401066/pubmed-search-mcp/wiki
📚 26 Claude Skills - Guías de flujo de trabajo listas para usar para agentes de IA (específicas de Claude Code)
📖 Instrucciones de Copilot - Guía de integración de VS Code GitHub Copilot
🌐 Idioma: Inglés | 繁體中文
📘 Mapa de documentación: README es el punto de entrada rápido del proyecto. Use el Sitio de documentación para la mejor experiencia de lectura, el GitHub Wiki para la navegación nativa de GitHub, y los documentos fuente para ediciones: Guía de usuario | Flujos de trabajo avanzados | Guía basada en capacidades | Planos de datos de proveedores | Análisis de arquitectura BioMCP | Guía de desarrollador | Índice completo
🚀 Instalación rápida
Requisitos previos
Python 3.10+ — Descargar
uv (recomendado) — Instalar uv
# macOS / Linux curl -LsSf https://astral.sh/uv/install.sh | sh # Windows powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Correo electrónico de NCBI — Requerido por la política de API de NCBI. Cualquier dirección de correo electrónico válida.
Clave de API de NCBI (opcional) — Obtenga una aquí para límites de frecuencia más altos (10 solicitudes/s vs 3 solicitudes/s)
Clave de API de OpenAlex (opcional) — establezca
OPENALEX_API_KEYpara usar una asignación de crédito autenticada; sin ella, las solicitudes usan el presupuesto anónimo actual de uso casual de OpenAlex.mailtoson metadatos de contacto, no autenticación. Sin correos electrónicos específicos de la fuente, el servidor reutiliza el correo electrónico de contacto configurado en tiempo de ejecución para OpenAlex, CrossRef y Unpaywall.
Instalar y ejecutar
# Option 1: Zero-install with uvx (recommended for trying out)
uvx pubmed-search-mcp
# Option 2: Add as project dependency
uv add pubmed-search-mcp
# Option 3: pip install
pip install pubmed-search-mcpFachada del SDK de Python
Para integraciones de Python en proceso, use la fachada estable del SDK en lugar de importar los módulos de herramientas MCP:
from pubmed_search.api import PubMedSearchClient, PubMedSearchConfig
client = PubMedSearchClient(PubMedSearchConfig(email="your@email.com"))
result = await client.unified_search("remimazolam ICU sedation", limit=20)
print(result.articles)
print(result.source_counts)
print(result.artifact) # artifact locator when persistence is enabledUse uvx pubmed-search-mcp o /mcp para el descubrimiento de herramientas de agente. Use el SDK para llamadas de paquetes/cuadernos de Python donde un objeto tipado es más fácil que analizar una cadena de respuesta MCP.
Elija un contrato de ejecución
Contrato | Comando | Límite de red y de confianza |
stdio local |
| Recomendado para un cliente de IA local; sin puerto MCP a la escucha |
HTTP de loopback local |
| Integración local de un solo usuario; las solicitudes MCP comparten el inquilino |
Servicio multiusuario |
| Uso remoto/equipo detrás de HTTPS; autenticación de portador, hosts/orígenes permitidos y almacenamiento por principal son obligatorios |
Las implementaciones locales y de servicio son contratos intencionalmente separados. No convierta el comando HTTP local en un servicio público cambiando solo su dirección de enlace. El perfil local explícito conserva pmids="last", sesiones, caché y exportaciones a través de solicitudes MCP y reconexiones en su inquilino default duradero; esto es seguro solo dentro del límite impuesto de loopback/Host/Origin. El modo de servicio nunca hereda esa confianza: falla en estado cerrado sin un principal de portador. Use DEPLOYMENT.md para el entorno de servicio y el perfil de Compose. El perfil de servicio actual admite muchos principales autenticados en un solo proceso de servidor; mantenga una réplica hasta que las sesiones, bloqueos, artefactos y suscripciones tengan backends compartidos.
La línea base del protocolo es MCP SDK v2 (mcp>=2.0,<3). Los clientes modernos de 2026-07-28 envían tools/list y tools/call directamente, sin un handshake initialize ni Mcp-Session-Id. El modo local conserva las funciones de sistema de archivos. Los llamadores de servicio autenticados no pueden cargar canalizaciones file:, seleccionar nota output_dir/template_file, ni heredar un espacio de trabajo de canalización de todo el proceso; el programador de Compose del servicio está deshabilitado. Consulte la Guía de integraciones y operaciones para la matriz de capacidades.
Related MCP server: ScholarMCP
⚙️ Configuración
Este servidor MCP funciona con cualquier herramienta de IA compatible con MCP. Elija su cliente preferido:
VS Code / Cursor (.vscode/mcp.json)
{
"servers": {
"pubmed-search": {
"type": "stdio",
"command": "uvx",
"args": ["pubmed-search-mcp"],
"env": {
"NCBI_EMAIL": "your@email.com"
}
}
}
}Opcional: habilite la alternativa de PDF por sesión de navegador una vez y deje que las herramientas la usen automáticamente:
{
"servers": {
"pubmed-search": {
"type": "stdio",
"command": "uvx",
"args": ["pubmed-search-mcp"],
"env": {
"NCBI_EMAIL": "your@email.com",
"BROWSER_FETCH_CONFIG": "{\"enabled\":true,\"auto_enabled\":true,\"broker_url\":\"http://127.0.0.1:8766/fetch\",\"token\":\"<random-32-byte-token>\",\"allowed_hosts\":[\"jamanetwork.com\",\"*.jamanetwork.com\",\"nejm.org\",\"*.nejm.org\"]}"
}
}
}
}Con esta configuración, get_fulltext intentará automáticamente usar el intermediario local para páginas de aterrizaje institucionales o de editorial. Pase allow_browser_session=false solo cuando desee suprimirlo para una llamada específica.
Ejecute el intermediario local con intercepción de descargas:
uv sync --extra browser-broker
uv run playwright install chromium
uv run python -c "import secrets; print(secrets.token_urlsafe(32))"
uv run pubmed-browser-fetch-broker --token "<same-random-32-byte-token>"Copie el valor generado en ambos comandos/configuraciones; nunca reutilice un token de ejemplo publicado. Si se omite --token, el intermediario genera e imprime un token de tiempo de ejecución de alta entropía. El intermediario lanza un perfil de navegador persistente con intercepción de descargas habilitada. Inicie sesión una vez dentro de esa ventana del navegador controlada por el intermediario, y las descargas de PDF posteriores se capturarán automáticamente sin un diálogo nativo de "Guardar como".
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"pubmed-search": {
"command": "uvx",
"args": ["pubmed-search-mcp"],
"env": {
"NCBI_EMAIL": "your@email.com"
}
}
}
}Ubicación del archivo de configuración:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Claude Code
claude mcp add pubmed-search -- uvx pubmed-search-mcpO agregue a .mcp.json en la raíz de su proyecto:
{
"mcpServers": {
"pubmed-search": {
"command": "uvx",
"args": ["pubmed-search-mcp"],
"env": {
"NCBI_EMAIL": "your@email.com"
}
}
}
}Zed AI (settings.json)
El editor Zed (z.ai) admite servidores MCP de forma nativa. Agregue a su settings.json de Zed:
{
"context_servers": {
"pubmed-search": {
"command": "uvx",
"args": ["pubmed-search-mcp"],
"env": {
"NCBI_EMAIL": "your@email.com"
}
}
}
}Consejo: Abra la Paleta de comandos →
zed: open settingspara editar, o vaya al Panel de Agente → Configuración → "Add Custom Server".
OpenClaw 🦞 (~/.openclaw/openclaw.json)
OpenClaw utiliza servidores MCP mediante el plugin mcp-adapter. Instale el adaptador primero:
openclaw plugins install mcp-adapterLuego agregue a ~/.openclaw/openclaw.json:
{
"plugins": {
"entries": {
"mcp-adapter": {
"enabled": true,
"config": {
"servers": [
{
"name": "pubmed-search",
"transport": "stdio",
"command": "uvx",
"args": ["pubmed-search-mcp"],
"env": {
"NCBI_EMAIL": "your@email.com"
}
}
]
}
}
}
}
}Reinicie la puerta de enlace después de la configuración:
openclaw gateway restart
openclaw plugins list # Should show: mcp-adapter | loadedCline (cline_mcp_settings.json)
{
"mcpServers": {
"pubmed-search": {
"command": "uvx",
"args": ["pubmed-search-mcp"],
"env": {
"NCBI_EMAIL": "your@email.com",
"S2_API_KEY": "your_semantic_scholar_key",
"PUBMED_SEARCH_DISABLED_SOURCES": ""
},
"alwaysAllow": [],
"disabled": false
}
}
}Otros clientes MCP
Cualquier cliente compatible con MCP puede utilizar este servidor mediante transporte stdio:
# Command
uvx pubmed-search-mcp
# With environment variable
NCBI_EMAIL=your@email.com uvx pubmed-search-mcpNota:
NCBI_EMAILes requerido por la política de API de NCBI. Opcionalmente, establezcaNCBI_API_KEYpara límites de frecuencia más altos (10 solicitudes/s vs 3 solicitudes/s). 📖 Guías de integración detalladas: Consulte docs/INTEGRATIONS.md para todas las variables de entorno, configuración de Copilot Studio, implementación de Docker, configuración de proxy y solución de problemas.
🎯 Filosofía de diseño
Posicionamiento central: el middleware inteligente entre los agentes de IA y los motores de búsqueda académicos.
¿Por qué este servidor?
Otras herramientas le dan acceso directo a la API. Nosotros le brindamos traducción de vocabulario + enrutamiento inteligente + análisis de investigación:
Desafío | Nuestra solución |
El agente utiliza códigos ICD, PubMed necesita MeSH | ✅ Conversión automática ICD→MeSH |
Múltiples bases de datos, diferentes API | ✅ Búsqueda unificada punto único de entrada |
Las preguntas clínicas necesitan búsqueda estructurada | ✅ Transferencia PICO + canalización ( |
Errores tipográficos en términos médicos | ✅ Autocorrección ESpell |
Demasiados resultados de una sola fuente | ✅ Multifuente en paralelo con deduplicación |
Necesidad de rastrear la evolución de la investigación | ✅ Research Chronicle & Tree con detección de hitos, diagnósticos, ramificación de subtemas y revisiones versionadas |
El contexto de la cita no está claro | ✅ Árbol de citas hacia adelante/hacia atrás/red |
No se puede acceder al texto completo | ✅ Texto completo multifuente (XML de Europe PMC, ubicaciones OA de Unpaywall, acceso directo institucional/EZproxy, CORE y alternativas de descarga) |
Información de genes/fármacos dispersa en varias bases de datos | ✅ NCBI Extended (Gene, PubChem, ClinVar) |
Necesidad de preprints de vanguardia | ✅ Búsqueda de preprints (arXiv, medRxiv, bioRxiv) con filtrado de revisión por pares |
Exportar a gestores de referencias | ✅ Exportación con un clic (RIS/MEDLINE/CSL JSON oficiales; RIS/BibTeX/CSV/MEDLINE/JSON locales) |
Diferenciadores clave
Capa de traducción de vocabulario: el agente habla de forma natural y nosotros traducimos a la terminología de cada base de datos (MeSH, ICD-10, entidades extraídas por minería de texto).
Puerta de enlace de búsqueda unificada: una llamada a
unified_search(), envío consciente de capacidades a PubMed, Europe PMC, CORE, OpenAlex, Semantic Scholar y fuentes de preprints/comerciales habilitadas.Transferencia PICO + Pipeline: el agente extrae P/I/C/O,
parse_pico()valida esa transferencia estructurada, y el pipelinetemplate: picodel backend ejecuta búsquedas de precisión/recuperación conscientes de O.Cronología de investigación y árbol de linaje: detecta hitos con heurísticas basadas en políticas, identifica artículos emblemáticos mediante puntuación de múltiples señales, muestra diagnósticos, conserva revisiones versionadas que puedes comparar y visualiza la evolución de la investigación como árboles ramificados por subtema.
Análisis de red de citaciones: construye árboles de citas multinivel para mapear todo un panorama de investigación a partir de un solo artículo.
Ciclo de vida completo de la investigación: desde la búsqueda → descubrimiento → texto completo → análisis → exportación, todo en un solo servidor.
Diseño centrado en el agente: salida optimizada para la toma de decisiones de máquina, no para la lectura humana.
📡 APIs externas y fuentes de datos
Este servidor MCP se integra con múltiples bases de datos académicas y APIs:
Fuentes de datos principales
Fuente | Cobertura | Vocabulario | Conversión automática | Descripción |
NCBI PubMed | Más de 36M de artículos | MeSH | ✅ Nativa | Literatura biomédica primaria |
NCBI Entrez | Multi-BD | MeSH | ✅ Nativa | Gene, PubChem, ClinVar |
Europe PMC | Más de 33M | Minado de texto | ✅ Extracción | Acceso al XML de texto completo |
CORE | Más de 200M | Ninguno | ➡️ Texto libre | Agregador de acceso abierto |
Semantic Scholar | Grafo evolutivo + conjuntos de datos de operadores | Campos S2 / sintaxis masiva | ✅ Modos compilados por el broker | Relevancia, modo masivo acotado, modo por lotes, grafo de citas y plano de solo metadatos de publicación/diff; sin descarga de particiones |
OpenAlex | Grafo de investigación abierta en evolución | Temas / palabras clave | ✅ Palabra clave + semántica nativa acotada | Cursor, procedencia de costos, grafo de entidades y ruta declarada de snapshot del operador; todavía sin índice local |
NIH iCite | PubMed | N/A | N/A | Métricas de citación (RCR) |
🔑 Clave: ✅ = Soporte completo de vocabulario | ➡️ = Paso directo de consulta (sin vocabulario controlado)
Códigos ICD: Se detectan automáticamente y se convierten a MeSH antes de la búsqueda en PubMed
Variables de entorno
# Required
NCBI_EMAIL=your@email.com # Required by NCBI policy
# Optional - For higher rate limits
NCBI_API_KEY=your_ncbi_api_key # Get from: https://www.ncbi.nlm.nih.gov/account/settings/
CORE_API_KEY=your_core_api_key # Get from: https://core.ac.uk/services/api
CROSSREF_EMAIL=your@email.com # Optional override; defaults to server/NCBI email
UNPAYWALL_EMAIL=your@email.com # Optional override; defaults to server/NCBI email
S2_API_KEY=your_s2_api_key # Alias: SEMANTIC_SCHOLAR_API_KEY
OPENALEX_API_KEY=your_openalex_key # Raises the OpenAlex credit budget; actual grant is response-driven
PUBMED_SEARCH_DISABLED_SOURCES= # Example: semantic_scholar
# Optional - Network settings
HTTP_PROXY=http://proxy:8080 # HTTP proxy for API requests
HTTPS_PROXY=https://proxy:8080 # HTTPS proxy for API requests
# Optional - Institutional fulltext access
INSTITUTIONAL_DIRECT_FETCH=true # Try DOI publisher pages before CORE fallback
EZPROXY_ENABLED=false # Enable only after configuring EZPROXY_HOST + cookie
EZPROXY_HOST=ezproxy.example.edu
EZPROXY_COOKIE_FILE=/path/to/cookies.json
# Optional - Local note export
PUBMED_NOTES_DIR=/path/to/wiki/references # save_literature_notes target folder
PUBMED_WORKSPACE_DIR=/path/to/project # fallback: references/ under this workspace
PUBMED_DATA_DIR=~/.pubmed-search-mcp # fallback: references/ under this data dirCrossRef y Unpaywall reutilizan el correo electrónico de contacto del servidor en tiempo de ejecución (NCBI_EMAIL,
--email de la CLI, o el correo electrónico de git detectado) a menos que se configure un correo electrónico específico de la fuente.
OpenAlex acepta el uso anónimo ocasional y una clave API opcional; el
broker lee sus metadatos de crédito/tasa de respuesta en lugar de asumir una cuota permanente de «polite pool».
La exportación de notas locales resuelve los directorios en este orden: el argumento output_dir, PUBMED_NOTES_DIR, PUBMED_WORKSPACE_DIR/references, PUBMED_DATA_DIR/references y luego ~/.pubmed-search-mcp/references.
Esta selección de ruta/plantilla se aplica solo al modo local de confianza. Las notas de servicio autenticadas
siempre usan un formato integrado bajo el directorio aislado references/ del inquilino actual.
Para la compatibilidad con wikis de LLM, las exportaciones wiki y foam utilizan destinos de enlace estables basados en PMID, DOI, PMCID o identificadores alternativos; los títulos permanecen como alias/etiquetas de visualización, y la respuesta incluye wiki_validation para comprobaciones de wikilinks no resueltos.
🔄 Cómo funciona: la arquitectura de middleware
┌─────────────────────────────────────────────────────────────────────────────┐
│ AI AGENT │
│ │
│ "Find papers about I10 hypertension treatment in diabetic patients" │
│ │
└─────────────────────────────────┬───────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 🔄 PUBMED SEARCH MCP (MIDDLEWARE) │
│ ┌─────────────────────────────────────────────────────────────────────────┐│
│ │ 1️⃣ VOCABULARY TRANSLATION ││
│ │ • ICD-10 "I10" → MeSH "Hypertension" ││
│ │ • "diabetic" → MeSH "Diabetes Mellitus" ││
│ │ • ESpell: "hypertention" → "hypertension" ││
│ └─────────────────────────────────────────────────────────────────────────┘│
│ ┌─────────────────────────────────────────────────────────────────────────┐│
│ │ 2️⃣ INTELLIGENT ROUTING ││
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ││
│ │ │ PubMed │ │Europe PMC│ │ CORE │ │ OpenAlex │ ││
│ │ │ 36M+ │ │ 33M+ │ │ 200M+ │ │ 250M+ │ ││
│ │ │ (MeSH) │ │(fulltext)│ │ (OA) │ │(metadata)│ ││
│ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ ││
│ │ └──────────────┴──────────────┴──────────────┘ ││
│ │ ▼ ││
│ │ 3️⃣ RESULT AGGREGATION: Dedupe + Rank + Enrich ││
│ └─────────────────────────────────────────────────────────────────────────┘│
└─────────────────────────────────┬───────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ UNIFIED RESULTS │
│ • 150 unique papers (deduplicated from 4 sources) │
│ • Ranked by relevance + citation impact (RCR) │
│ • Full text links enriched from Europe PMC │
└─────────────────────────────────────────────────────────────────────────────┘🛠️ Descripción general de las herramientas MCP
Si quieres entender la superficie de herramientas como un sistema utilizable, no empieces memorizando 45 nombres de herramientas.
Comienza con la Guía de uso de herramientas: comprime las 45 herramientas actuales en 8 familias de capacidades, explica el límite inferior teórico y proporciona enrutamiento basado en la intención tanto para humanos como para agentes.
🔍 Inteligencia de búsqueda y consulta
┌─────────────────────────────────────────────────────────────────┐
│ SEARCH ENTRY POINT │
├─────────────────────────────────────────────────────────────────┤
│ │
│ unified_search() ← 🌟 Single entry for all sources │
│ │ │
│ ├── Quick search → Direct multi-source query │
│ ├── Native semantic → Bounded OpenAlex semantic mode │
│ ├── Systematic → Bounded provider bulk/cursor mode │
│ ├── PICO hints → Detects comparison, shows P/I/C/O │
│ └── ICD expansion → Auto ICD→MeSH conversion │
│ │
│ Sources: PubMed · Europe PMC · CORE · OpenAlex · S2 │
│ Auto: Deduplicate → Rank → Enrich full-text links │
│ │
├─────────────────────────────────────────────────────────────────┤
│ QUERY INTELLIGENCE │
│ │
│ generate_search_queries() → MeSH expansion + synonym discovery │
│ parse_pico() → Agent-provided PICO handoff │
│ analyze_search_query() → Query analysis without execution │
│ │
└─────────────────────────────────────────────────────────────────┘Una única entrada de búsqueda, tres políticas de recuperación
El descubrimiento de literatura genérica se expone deliberadamente a través de exactamente una herramienta MCP: unified_search. Las APIs específicas de cada proveedor siguen siendo capacidades internas del broker:
# Default relevance/keyword routing across enabled sources
unified_search(query="treatment resistance")
# OpenAlex native semantic search (provider maximum 50 results)
unified_search(
query="mechanisms of treatment resistance",
sources="openalex",
options="native_semantic",
)
# Deterministic/bounded retrieval: OpenAlex cursor and S2 bulk where selected
unified_search(
query="melanoma AND immunotherapy",
sources="pubmed,openalex,semantic_scholar",
options="systematic",
)native_semantic y systematic son mutuamente excluyentes y desactivan la expansión de búsqueda profunda multiestrategia. Las selecciones explícitas de fuentes fallan antes de una llamada de red cuando un modo de recuperación solicitado no es compatible; la selección automática de fuentes conserva solo los proveedores capaces. limit sigue siendo como máximo 100 por fuente, por lo que systematic significa ejecución determinista y acotada del proveedor—no una garantía de revisión sistemática exhaustiva. La salida estructurada y los artefactos registran retrieval_mode además de source_metadata por fuente (modo solicitado/proveedor, consulta canónica o compilada, disponibilidad de continuación, metadatos de costo/tasa y advertencias cuando estén disponibles).
El límite de las solicitudes públicas es de fallo cerrado. limit debe ser un entero del 1 al 100; los filters / options desconocidos o malformados, los años invertidos o fuera de rango, y los modos de clasificación o salida no compatibles devuelven un error de validación antes de la E/S del proveedor. En la política de búsqueda profunda predeterminada, limit es un presupuesto total por fuente dividido entre las estrategias de consulta de esa fuente—no limit resultados para cada estrategia. Las llamadas de estrategia utilizan concurrencia y tiempos de espera acotados globales/por fuente, y las fuentes exitosas siguen siendo utilizables cuando otra fuente agota el tiempo, es limitada por tasa o falla.
Europe PMC, Scopus y Web of Science siguen siendo solo de palabras clave en esta versión; las solicitudes sistemáticas explícitas para esas fuentes fallan antes de la E/S en lugar de etiquetar erróneamente una sola página como cobertura sistemática.
Consulta Contratos de fuentes, Semantic Scholar y OpenAlex para conocer los límites de los proveedores y los límites del plano de datos del operador.
🔬 Herramientas de descubrimiento (después de encontrar artículos clave)
Found important paper (PMID)
│
┌───────────────────────┼───────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ BACKWARD │ │ SIMILAR │ │ FORWARD │
│ ◀────── │ │ ≈≈≈≈≈≈ │ │ ──────▶ │
│ │ │ │ │ │
│ get_article │ │find_related │ │find_citing │
│ _references │ │ _articles │ │ _articles │
│ │ │ │ │ │
│ Foundation │ │ Similar │ │ Follow-up │
│ papers │ │ topic │ │ research │
└─────────────┘ └─────────────┘ └─────────────┘
fetch_article_details() → Detailed article metadata
get_citation_metrics() → iCite RCR, citation percentile
build_citation_tree() → Full network visualization (6 formats)
📚 Texto completo, extracción de figuras y exportación
Categoría | Herramientas |
Texto completo |
|
Figuras |
|
Texto completo con figuras |
|
Minería de texto |
|
Exportación |
|
🖼️ Exploración de acceso abierto con prioridad de figuras
Usa la ruta de acceso abierto de PMC cuando un agente necesite figuras de evidencia, no solo texto del artículo:
get_article_figures(identifier="PMC12086443")→ Etiquetas de figuras, leyendas, URL de imágenes y enlaces PDF/artículoget_fulltext(pmcid="PMC7096777", include_figures=True)→ Texto completo estructurado con figuras en líneaLa salida de figuras conserva el contexto del artículo, por lo que los agentes pueden conectar cada figura con las secciones donde se menciona
🧬 Bases de datos extendidas de NCBI
Herramienta | Descripción |
| Busca en la base de datos NCBI Gene |
| Detalles del gen por ID de NCBI Gene |
| Artículos de PubMed vinculados a un gen |
| Busca compuestos en PubChem |
| Detalles del compuesto por CID de PubChem |
| Artículos de PubMed vinculados a un compuesto |
| Busca variantes clínicas en ClinVar |
🕰️ Cronología de investigación y árbol de linaje
Herramienta | Descripción |
| Construye una cronología persistente y versionada con detección de hitos. Salida: summary, chronicle_map, timeline, tree, graph, evidence, milestones, mermaid, timeline_mermaid, mindmap, narrative, json |
| Carga, lista, compara revisiones, narra con citas, analiza la distribución de hitos o compara hasta cinco temas |
mermaid es la vista combinada canónica: un eje de años horizontal en el que cada
línea de investigación observada se ramifica en su artículo fechado más antiguo dentro del
alcance recuperado. Es una agrupación explicable, no una genealogía causal ni una
afirmación sobre el primer artículo real del campo. Los linajes prefieren descriptores MeSH y
palabras clave de autor compartidas por múltiples artículos; las señales de un solo artículo o insuficientes
activan una alternativa de etapa de investigación con advertencia. El orden de visualización del mismo año es
estable, pero no afirma precedencia cuando la precisión de publicación no puede probarlo.
timeline_mermaid conserva la vista de línea de tiempo plana anterior. Consulta el
contrato implementado en
docs/RESEARCH_CHRONICLE_REFACTOR_SPEC.md.
Chronicle Mermaid output is built from structured nodes and edges, with safe label escaping, cycle/orphan repair, collision-resistant IDs, and bounded graph size. It falls back from rich to safe to minimal syntax instead of failing the whole chronicle. mermaid_validation.json records every correction, fallback, and omitted visual item; chronicle.mmd remains pure Mermaid source.
Chronicle revisions are immutable and appended atomically. When session artifact persistence is enabled, artifact failure is surfaced explicitly while the saved Chronicle revision remains available.
Topic builds send year limits to PubMed before bounded retrieval, then preserve the first and last observed papers while filling the cap with landmarks and temporal spread. The audit records PubMed returned / available counts and warns when availability is unknown or any retrieval/selection cap makes the view non-exhaustive. PubMed errors or a scope with no article evidence do not publish an empty revision.
Explicit PMID input is strict (12345678 or PMID:12345678, positive ASCII digits, at most 20 digits); DOI or mixed text is rejected instead of being coerced. Records without a reliable publication date appear as Undated after dated entries and are excluded from the displayed year span. Entry IDs follow PMID/DOI evidence identity across date or classifier corrections, and topic continuity uses one Unicode/case/whitespace canonical key. Multi-signal papers keep one primary branch plus explicit cross-links; overlap of 20% or more is audited as a warning. In revision diffs, absence means not_observed_in_revision / removed_from_view, never conclusive retirement.
🏥 Acceso institucional y conversión de ICD
Herramienta | Descripción |
| Configurar el resolvedor de enlaces de la institución |
| Generar enlace de acceso OpenURL |
| Listar ajustes preestablecidos de resolvedor |
| Probar configuración de resolvedor |
| Diagnosticar rutas de entrega de DOI directo, EZproxy y OpenURL |
| Convertir entre códigos ICD y términos MeSH (bidireccional) |
| Detectar automáticamente códigos ICD en consultas y expandirlos a MeSH |
💾 Gestión de sesiones
Herramienta | Descripción |
| Obtener listas de PMID almacenadas en caché |
| Obtener artículo de la caché de sesión (sin costo de API) |
| Resumen del estado de la sesión |
| Fachada para PMIDs, artículos en caché, ejecuciones de búsqueda durables, argumentos de reproducción, historial y artefactos persistentes |
También hay recursos MCP dinámicos disponibles para agentes que puedan leer recursos directamente:
session://context— estado de la sesión activasession://last-search— metadatos de la búsqueda más recientesession://last-search/pmids— lista de PMID más reciente + formulario CSVsession://last-search/results— cargas útiles de artículos en caché para la búsqueda más reciente
Artefactos persistentes
Los artefactos de salida MCP persistentes se guardan para respuestas reutilizables de unified_search y get_fulltext cuando la persistencia de sesión está configurada. Las respuestas de las herramientas funcionan como fichas: incluyen suficientes recuentos, advertencias de fuente e indicios de artefactos para que un agente pueda responder de inmediato, mientras que la carga útil de evidencia completa permanece en archivos que pueden leerse repetidamente. El localizador compacto artifact incluye artifact_id, artifact_uri, primary_file, summary, inventario de archivos, read_order, estado de auditoría y pistas exactas de recuperación read_session(...). Establece PUBMED_ARTIFACT_INCLUDE_LOCAL_PATHS=true solo cuando un cliente MCP local también deba recibir local_path y manifest_path directamente.
Los clientes remotos que no pueden leer el sistema de archivos del servidor pueden recuperar el mismo contenido a través de la fachada de sesión:
read_session(action="list_artifacts")
read_session(action="artifact", artifact_id="...")
read_session(action="artifact", artifact_uri="artifact://...")
read_session(action="artifact", artifact_uri="artifact://...", artifact_file="audit.json")
read_session(action="artifact", artifact_uri="artifact://...", artifact_file="query_strategy.json")
read_session(action="artifact", artifact_uri="artifact://...", artifact_file="results.json", offset=0, max_chars=200000)
read_session(action="list_artifacts", include_local_paths=true)Ejecuciones de búsqueda recuperables
Cuando la gestión de sesiones está activa, cada invocación de unified_search recibe un ID de ejecución estable. Esto incluye búsquedas normales, fallos de validación/planificación y ejecución de pipeline en línea, saved:<name> o dry_run=true. Los resultados estructurados y los errores adjuntan la transferencia search_run; Markdown devuelve el mismo ID de ejecución como una nota de recuperación compacta. Los sobres normales de resultados de literatura exponen dos contratos de máquina separados:
search_statusdescribe el resultado de la recuperación acotada:state(completed,empty,partialofailed),bounded=true,exhaustive=false, recuento devuelto, fuentes intentadas/exitosas/fallidas/reintentables y listas de fuentes de continuación/completitud desconocida.search_runes la transferencia de recuperación:run_idestable, estado de la bitácora,recoverable, argumentos exactos de inspección/reproducción deread_sessiony el URI del artefacto cuando se haya confirmado uno.
La bitácora search-run/v1 con ámbito de tenant se publica antes de la E/S del proveedor o de una respuesta de validación terminal, y registra la solicitud saneada, el plan, los intentos físicos por fuente o por paso de pipeline, recuentos, fallos seguros, referencias de resultados y localizador de artefacto cuando corresponda. Alcanza un estado terminal completed, partial, failed o cancelled; una búsqueda válida de cero resultados es una ejecución completed cuyo search_status.state es empty. Al reiniciar, una entrada no terminada started / planned / running se recupera una vez como interrupted en lugar de desaparecer. Un pipeline guardado sin dry_run además conserva su historial de informe/ejecución de PipelineStore; eso es complementario a la bitácora de búsqueda a nivel de invocación, no un reemplazo.
La reproducción de pipeline conserva el argumento original en línea o saved:<name> junto con dry_run / stop_at. El texto de pipeline que contenga claves, tokens, cookies, contraseñas u otro material de credenciales se rechaza y se registra como ejecución fallida; las credenciales del proveedor pertenecen al entorno/configuración del servidor, nunca al YAML o JSON del pipeline.
read_session(action="search_runs")
read_session(action="search_runs", run_status="partial")
read_session(action="search_run", run_id="...")
read_session(action="replay_search", run_id="...")replay_search solo devuelve los kwargs originales de unified_search sin credenciales. Nunca ejecuta una llamada de red automáticamente; el agente o el usuario deben revisarlos y enviarlos explícitamente. Los valores de cursor/token del proveedor se conservan como procedencia opaca en source_metadata y query_strategy.json, pero aún no existe un parámetro público de reanudación de cursor, por lo que la reproducción inicia una nueva búsqueda acotada.
Si no se puede recuperar la escritura terminal de la bitácora, la respuesta informa search_run.status="history_unavailable", history_available=false, el estado terminal previsto y una advertencia. Omite deliberadamente las acciones de inspección/reproducción porque no se garantiza la recuperación duradera; el resultado de la búsqueda en sí puede seguir siendo utilizable.
Los artefactos de unified_search utilizan un sobre de investigación. Comience con audit.json para advertencias de recuento de fuentes y completitud, luego query_strategy.json para el plan exacto ejecutado, y finalmente results.json / results.toon para la lista completa de artículos. Esto mantiene pequeños los tokens de respuesta de MCP sin perder la trazabilidad académica.
Los artefactos se generan a partir del objeto de resultado ya calculado, por lo que leer un artefacto no vuelve a ejecutar búsquedas ni recuperación de texto completo.
Si se produce un fallo después de que un directorio de artefactos se publique atómicamente pero antes de que se actualice el índice de sesión, la recarga de sesión descubre solo manifiestos completos e indexados por suma de comprobación y vuelve a enlazar el artefacto huérfano a su ejecución de búsqueda mediante search_run_id (con una coincidencia de consulta conservadora para artefactos más antiguos). read_session oculta las rutas locales del sistema de archivos por defecto; local_path y manifest_path son rutas locales del servidor, no rutas de cliente portátiles. Los artefactos de get_fulltext pueden contener texto del cuerpo del artículo, incluido contenido de suscripción o acceso institucional. Almacénelos y compártalos de acuerdo con los términos del editor, la licencia y el acceso institucional.
Las respuestas grandes de get_fulltext se devuelven en línea como vista previa cuando hay un artefacto disponible; use el localizador de artefactos para recuperar el contenido completo guardado.
Cuando una fuente falla pero la búsqueda general puede continuar, las respuestas JSON pueden incluir source_errors; las respuestas en markdown muestran una línea Source warnings. Para HTTP 429 de Semantic Scholar, establezca S2_API_KEY / SEMANTIC_SCHOLAR_API_KEY, reintente más tarde o exclúyala temporalmente con sources="auto,-semantic_scholar" o PUBMED_SEARCH_DISABLED_SOURCES=semantic_scholar.
Gestión de pipelines
manage_pipeline es la fachada principal para el CRUD de pipelines, el historial y la programación. Las herramientas de pipeline más específicas siguen disponibles como envoltorios de compatibilidad.
Herramienta | Descripción |
| Fachada principal para acciones de guardar, listar, cargar, eliminar, historial y programación |
| Guardar una configuración de pipeline para reutilizar más tarde (YAML/JSON, validado automáticamente) |
| Listar pipelines guardados (filtrar por etiqueta/ámbito) |
| Cargar por nombre guardado; los llamadores locales de confianza también pueden cargar un archivo |
| Eliminar pipeline y su historial de ejecución |
| Ver historial de ejecución con análisis de diff de artículos |
| Crear, actualizar o eliminar programaciones recurrentes de pipelines |
Los llamadores de servicio autenticados usan pipelines con nombre en su almacén derivado del tenant; el acceso workspace y file: es solo local. El perfil de Compose del servicio no ejecuta programaciones sin un líder único diseñado por separado.
Tutoriales paso a paso:
👁️ Búsqueda de visión e imágenes
Herramienta | Descripción |
| Entregar una imagen subida, URL de imagen o URI de datos a la visión del agente para extraer términos de búsqueda |
| Buscar imágenes biomédicas en Open-i (radiografías, microscopía, fotos, diagramas) |
Use analyze_figure_for_search cuando el usuario proporcione una imagen y el agente deba interpretar su significado primero. La herramienta devuelve ImageContent de MCP más instrucciones para que el agente LLM extraiga términos biomédicos en inglés, y luego continúe con search_biomedical_images para imágenes similares de Open-i o unified_search para artículos relacionados.
📄 Búsqueda de preprints
Busque en los servidores de preprints arXiv, medRxiv y bioRxiv mediante los indicadores options de unified_search:
preprints: Busca en servidores de preprints y fusiona los preprints en el conjunto de resultados agregados principal conarticle_type=PREPRINT.all_types: Conserva contenido no revisado por pares ya devuelto por las fuentes académicas seleccionadas incluso sin un rastreo de servidores de preprints.
Combinaciones recomendadas:
optionsvacío: Solo resultados revisados por pares; los registros similares a preprints se filtran.options="preprints": Busca en arXiv, medRxiv y bioRxiv, y luego clasifica/elimina duplicados de esos preprints con los resultados principales.options="preprints, all_types": Mismo rastreo de servidores de preprints, además se conservan otros registros no revisados por pares de las fuentes seleccionadas.options="all_types": Sin rastreo de servidores de preprints, pero se conservan los elementos no revisados por pares de las fuentes buscadas.
Detección de preprints — los artículos se identifican como preprints mediante:
Tipo de artículo de la API de la fuente (OpenAlex, CrossRef, Semantic Scholar)
ID de arXiv presente sin ID de PubMed
Fuente conocida de servidor de preprints o nombre de revista
Prefijo DOI que coincide con servidores de preprints (p. ej.,
10.1101/→ bioRxiv/medRxiv,10.48550/→ arXiv)
🌳 Grafo de contexto de investigación
unified_search puede añadir una vista ligera de linaje de investigación construida a partir del conjunto de resultados clasificados respaldados por PMID:
Indicador de opción | Descripción |
| Añade una vista previa ligera del Grafo de Contexto de Investigación del conjunto clasificado actual respaldado por PMID a la salida Markdown e incluye |
Esto es útil cuando un agente necesita una ramificación temática rápida sin hacer una segunda llamada a build_research_chronicle.
🧪 Anexo de registro de ensayos clínicos
ClinicalTrials.gov nunca se consulta implícitamente. Añade options="trials" a una búsqueda de Markdown cuando un anexo de registro acotado sea útil. Permanece separado del plan de fuentes bibliográficas y de los recuentos de fuentes; el artefacto duradero registra su consulta física truncada y su resultado bajo adjunct_queries. Las búsquedas estructuradas JSON/TOON no ejecutan este anexo solo de visualización.
unified_search(query="remimazolam ICU sedation", options="trials")📊 Orientación de recuentos primero
unified_search también puede cargar por adelantado la cobertura de fuentes existente y las pistas de decisión para agentes que quieran ayuda de enrutamiento antes de leer la lista clasificada:
Indicador de opción | Descripción |
| Añade una tabla de recuento de fuentes, un resumen de cobertura y recomendaciones de siguiente herramienta a la respuesta |
Ejemplo:
unified_search(query="remimazolam ICU sedation", options="counts_first")Este modo es útil cuando el agente debe decidir si ampliar una fuente, inspeccionar el PMID principal, obtener el texto completo, extraer figuras o pasar a la exploración de la línea temporal.
⏱️ Informe de progreso de MCP
Cuando el cliente MCP proporciona un token de progreso, unified_search, build_research_chronicle, get_fulltext y get_text_mined_terms emiten actualizaciones de progreso para sus fases principales.
Esto reduce el tiempo de espera de «caja negra» para los agentes durante búsquedas más largas.
Las devoluciones de llamada de progreso son de mejor esfuerzo y el servidor no las cancela mientras una llamada de herramienta está activa, lo que evita mensajes Canceled: Canceled en el lado del host causados por la contrapresión de las notificaciones de progreso.
📋 Ejemplos de uso del agente
1️⃣ Búsqueda rápida (la más simple)
# Agent just asks naturally - middleware handles everything
unified_search(query="remimazolam ICU sedation", limit=20)
# Or with clinical codes - auto-converted to MeSH
unified_search(query="I10 treatment in E11.9 patients")
# ↑ ICD-10 ↑ ICD-10
# Hypertension Type 2 Diabetes2️⃣ Pregunta clínica PICO
Ruta simple — unified_search puede buscar directamente (sin descomposición PICO):
# unified_search searches as-is; detects "A vs B" pattern and shows PICO hints in metadata
unified_search(query="Is remimazolam better than propofol for ICU sedation?")
# → Multi-source keyword search + PICO hint metadata in output
# ⚠️ This does NOT auto-decompose PICO or expand MeSH!
# For structured PICO search, use the Agent workflow belowFlujo de trabajo del agente — PICO proporcionado por el agente + búsqueda de pipeline backend (recomendado para preguntas clínicas):
┌─────────────────────────────────────────────────────────────────────────┐
│ "Is remimazolam better than propofol for ICU sedation?" │
└─────────────────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ parse_pico() │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ P │ │ I │ │ C │ │ O │ │
│ │ ICU │ │remimaz- │ │propofol │ │sedation │ │
│ │patients │ │ olam │ │ │ │outcomes │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
└───────┼────────────┼────────────┼────────────┼──────────────────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────────────┐
│ generate_search_queries() × 4 (parallel) │
│ │
│ P → "Intensive Care Units"[MeSH] │
│ I → "remimazolam" [Supplementary Concept], "CNS 7056" │
│ C → "Propofol"[MeSH], "Diprivan" │
│ O → "Conscious Sedation"[MeSH], "Deep Sedation"[MeSH] │
└─────────────────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ Agent combines with Boolean logic │
│ │
│ (P) AND (I) AND (C) AND (O) ← High precision │
│ (P) AND (I OR C) AND (O) ← High recall │
└─────────────────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ unified_search() (auto multi-source + dedup) │
│ │
│ PubMed + Europe PMC + CORE + OpenAlex → Auto deduplicate & rank │
└─────────────────────────────────────────────────────────────────────────┘# Step 1: Agent extracts P/I/C/O, then validates the structured handoff
pico = parse_pico(
description="Is remimazolam better than propofol for ICU sedation?",
p="ICU patients requiring sedation",
i="remimazolam",
c="propofol",
o="sedation efficacy, delirium, hypotension"
)
# Returns validation plus a ready-to-run `template: pico` pipeline.
# Step 2: Get MeSH for each element (parallel!)
generate_search_queries(topic="ICU patients") # P
generate_search_queries(topic="remimazolam") # I
generate_search_queries(topic="propofol") # C
generate_search_queries(topic="sedation") # O
# Step 3: Either pass expanded fragments back as p_query/i_query/c_query/o_query
# or let the backend pipeline use the structured P/I/C/O labels.
# Step 4: Search (backend runs O-aware precision/recall searches, dedup, rank)
unified_search(
query="Is remimazolam better than propofol for ICU sedation?",
pipeline=pico["pipeline"]
)3️⃣ Explorar desde un artículo clave
# Found landmark paper PMID: 33475315
find_related_articles(pmid="33475315") # Similar methodology
find_citing_articles(pmid="33475315") # Who built on this?
get_article_references(pmid="33475315") # What's the foundation?
# Build complete research map
build_citation_tree(pmid="33475315", depth=2, output_format="mermaid")4️⃣ Investigación de genes/fármacos
# Research a gene
search_gene(query="BRCA1", organism="human")
get_gene_literature(gene_id="672", limit=20)
# Research a drug compound
search_compound(query="propofol")
get_compound_literature(cid="4943", limit=20)5️⃣ Exportar resultados
# Export last search results
prepare_export(pmids="last", format="ris") # → EndNote/Zotero
prepare_export(pmids="last", format="bibtex", source="local") # → LaTeX
prepare_export(pmids="last", format="csl") # → CSL JSON from the official NCBI Citation API
save_literature_notes(pmids="last") # → local wiki note + Foam-compatible wikilinks + CSL JSON
save_literature_notes(pmids="last", note_format="medpaper", output_dir="./references")
save_literature_notes(pmids="last", template_file="./reference-template.md")
# Retrieve full text for a selected paper from the last search
get_fulltext(pmid="12345678", extended_sources=True)6️⃣ Búsqueda de preprints
# Include preprints alongside peer-reviewed results
unified_search(query="COVID-19 vaccine efficacy", options="preprints")
# → Main aggregated results include labelled arXiv, medRxiv, and bioRxiv preprints
# Include preprints and retain non-peer-reviewed items in main results
unified_search(query="CRISPR gene therapy", options="preprints, all_types")
# → Preprint-server crawl + non-peer-reviewed items retained in main results
# Only peer-reviewed (default behavior)
unified_search("diabetes treatment")
# → Preprints from any source automatically filtered out
# Add a research context graph preview to the same search response
unified_search("remimazolam ICU sedation", options="context_graph")7️⃣ Pipeline (planes de búsqueda reutilizables)
# Save a template-based pipeline through the primary facade
manage_pipeline(
action="save",
name="icu_sedation_weekly",
config="template: pico\nparams:\n P: ICU patients\n I: remimazolam\n C: propofol\n O: delirium",
tags="anesthesia,sedation",
description="Weekly ICU sedation monitoring"
)
# Save a custom DAG pipeline
manage_pipeline(
action="save",
name="brca1_comprehensive",
config="""
steps:
- id: expand
action: expand
params: { topic: BRCA1 breast cancer }
- id: pubmed
action: search
params: { query: BRCA1, sources: pubmed, limit: 50 }
- id: expanded
action: search
inputs: [expand]
params: { strategy: mesh, sources: pubmed,openalex, limit: 50 }
- id: merged
action: merge
inputs: [pubmed, expanded]
params: { method: rrf }
- id: enriched
action: metrics
inputs: [merged]
output:
limit: 30
ranking: quality
"""
)
# Execute a saved pipeline
unified_search(pipeline="saved:icu_sedation_weekly")
# List & manage
manage_pipeline(action="list", tag="anesthesia")
manage_pipeline(action="load", source="brca1_comprehensive") # Review YAML
manage_pipeline(action="history", name="icu_sedation_weekly") # View past runs🔍 Comparación de modos de búsqueda
┌─────────────────────────────────────────────────────────────────────────┐
│ SEARCH MODE DECISION TREE │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ "What kind of search do I need?" │
│ │ │
│ ├── Know exactly what to search? │
│ │ └── unified_search(query="topic keywords") │
│ │ → Quick, auto-routing to best sources │
│ │ │
│ ├── Have a clinical question (A vs B)? │
│ │ └── Agent P/I/C/O → parse_pico() handoff │
│ │ → unified_search(template:pico) or expanded Boolean │
│ │ │
│ ├── Need comprehensive systematic coverage? │
│ │ └── generate_search_queries() → parallel search │
│ │ → MeSH expansion, multiple strategies, merge │
│ │ │
│ └── Exploring from a key paper? │
│ └── find_related/citing/references → build_citation_tree │
│ → Citation network, research context │
│ │
└─────────────────────────────────────────────────────────────────────────┘Modo | Punto de entrada | Mejor para | Funciones automáticas |
Rápido |
| Búsqueda rápida de temas | ICD→MeSH, multifuente, deduplicación |
PICO | Agente P/I/C/O -> | Preguntas clínicas | Validar transferencia -> búsqueda backend |
Sistemático |
| Semilla de revisión reproducible | MeSH/sinónimos más ejecución acotada por lotes/cursores; no es una afirmación de exhaustividad |
Semántico nativo |
| Similitud conceptual en el espacio de títulos/resúmenes | Validación de capacidad; modo semántico de OpenAlex, máx. 50 |
Exploración |
| Desde un artículo clave | Red de citas, relacionados |
🤖 Habilidades de Claude (flujos de trabajo de IA)
Guías de flujo de trabajo predefinidas en .claude/skills/, divididas en habilidades de uso (para usar el servidor MCP) y habilidades de desarrollo (para mantener el proyecto):
📚 Habilidades de uso (11) — Para agentes de IA que usan este servidor MCP
Habilidad | Descripción |
| Búsqueda básica con filtros |
| Expansión MeSH, exhaustiva |
| Descomposición de preguntas clínicas |
| Árbol de citas, artículos relacionados |
| Evolución de investigación persistente y versionada |
| Gen/PubChem/ClinVar |
| Texto completo de Europe PMC, CORE |
| Guía de exportación RIS/BibTeX/CSV/CSL |
| Búsqueda unificada entre bases de datos |
| Guía de referencia completa de herramientas |
| Guardar, cargar y reutilizar planes de búsqueda |
🔧 Habilidades de desarrollo (15) — Para contribuyentes del proyecto
Habilidad | Descripción |
| Actualización automática de CHANGELOG.md |
| Refactorización de la arquitectura DDD |
| Revisión de calidad y seguridad del código |
| Andamiaje DDD para nuevas funcionalidades |
| Sincronizar la documentación antes de los commits |
| Orquestación del flujo de trabajo previo al commit |
| Guardar el contexto en Memory Bank |
| Actualizar los archivos de Memory Bank |
| Extraer e inventariar activos PDF listos para citar |
| Inicializar nuevos proyectos |
| Sincronización multilingüe del README |
| Sincronizar el README con los cambios de código |
| Actualizar el estado de ROADMAP.md |
| Generar suites de pruebas |
| Mantener alineados el registro MCP y la documentación de herramientas generada |
📁 Ubicación:
.claude/skills/*/SKILL.md(específico de Claude Code y la fuente única de verdad para las habilidades del repositorio) No dupliques ni dividas las habilidades del repositorio en.github/skills/. Estas habilidades del repositorio tienen alcance de proyecto y deben permanecer bajo control de versiones. Las habilidades personales entre proyectos pertenecen a un directorio de usuario como~/.copilot/skills/o~/.claude/skills/, no a este repositorio.
🏗️ Arquitectura (DDD)
Este proyecto utiliza una arquitectura de Diseño Dirigido por el Dominio (DDD), con el conocimiento del dominio de la investigación bibliográfica como modelo central.
src/pubmed_search/
├── domain/ # Core business logic
│ └── entities/article.py # UnifiedArticle, Author, etc.
├── application/ # Use cases
│ ├── search/ # QueryAnalyzer, ResultAggregator
│ ├── export/ # Citation export (RIS, BibTeX...)
│ └── session/ # SessionManager
├── infrastructure/ # External systems
│ ├── ncbi/ # Entrez, iCite, Citation Exporter
│ ├── sources/ # Europe PMC, CORE, CrossRef...
│ └── http/ # HTTP clients
├── presentation/ # User interfaces
│ ├── mcp_server/ # MCP tools, prompts, resources
│ │ └── tools/ # discovery, strategy, pico, export...
│ └── api/ # Auxiliary HTTP API routes (not pubmed_search.api)
└── shared/ # Cross-cutting concerns
├── exceptions.py # Unified error handling
└── async_utils.py # Rate limiter, retry, circuit breakerMecanismos internos (transparentes para el agente)
Mecanismo | Descripción |
Sesión | Creación automática, cambio automático |
Caché | Almacenar en caché automáticamente los resultados de búsqueda, evitar llamadas API duplicadas |
Límite de peticiones | Cumplir automáticamente los límites de la API de NCBI (0.34s/0.1s) |
Consulta MeSH |
|
ESpell | Corrección ortográfica automática ( |
Análisis de consultas | Cada consulta sugerida muestra cómo la interpreta realmente PubMed |
Capa de traducción de vocabulario (característica clave)
Nuestro valor central: Somos el middleware inteligente entre el Agente y los Motores de Búsqueda, gestionando automáticamente la estandarización del vocabulario para que el Agente no necesite conocer la terminología de cada base de datos.
Las diferentes fuentes de datos utilizan diferentes sistemas de vocabulario controlado. Este servidor proporciona conversión automática:
API / Base de datos | Sistema de vocabulario | Conversión automática |
PubMed / NCBI | MeSH (Encabezados de Materia Médica) | ✅ Soporte completo mediante |
Códigos ICD | ICD-10-CM / ICD-9-CM | ✅ Detección automática y conversión a MeSH |
Europe PMC | Entidades extraídas por minería de texto (Gen, Enfermedad, Compuesto químico) | ✅ Extracción con |
OpenAlex | Temas / palabras clave (inferidos por el modelo) | ✅ Modo de palabras clave del intermediario; modo semántico nativo acotado cuando se selecciona |
Semantic Scholar | Campos S2 / sintaxis de consulta masiva | ✅ El intermediario elige el modo de relevancia o el modo masivo acotado; las anotaciones del proveedor mantienen la procedencia |
CORE | Ninguno | ❌ Solo texto libre |
CrossRef | Ninguno | ❌ Solo texto libre |
Conversión automática ICD → MeSH
Al buscar con códigos ICD (p. ej., I10 para hipertensión), unified_search() automáticamente:
Detecta patrones ICD-10/ICD-9 mediante
detect_and_expand_icd_codes()Busca los términos MeSH correspondientes en el mapeo interno (
ICD10_TO_MESH,ICD9_TO_MESH)Expande la consulta con sinónimos MeSH para una búsqueda exhaustiva
# Agent calls unified_search with clinical terminology
unified_search(query="I10 treatment outcomes")
# Server auto-expands to PubMed-compatible query
"(I10 OR Hypertension[MeSH]) treatment outcomes"📖 Documentación completa de la arquitectura: ARCHITECTURE.md
Expansión automática de MeSH + Análisis de consultas
Al llamar a generate_search_queries("remimazolam sedation"), internamente:
Corrección ESpell - corrige errores ortográficos
Consulta MeSH -
Entrez.esearch(db="mesh")para obtener el vocabulario estándarExtracción de sinónimos - obtiene sinónimos de los términos de entrada de MeSH (MeSH Entry Terms)
Análisis de consultas - analiza cómo interpreta PubMed cada consulta
{
"mesh_terms": [
{
"input": "remimazolam",
"preferred": "remimazolam [Supplementary Concept]",
"synonyms": ["CNS 7056", "ONO 2745"]
}
],
"all_synonyms": ["CNS 7056", "ONO 2745", ...],
"suggested_queries": [
{
"id": "q1_title",
"query": "(remimazolam sedation)[Title]",
"purpose": "Exact title match - highest precision",
"estimated_count": 8,
"pubmed_translation": "\"remimazolam sedation\"[Title]"
},
{
"id": "q3_and",
"query": "(remimazolam AND sedation)",
"purpose": "All keywords required",
"estimated_count": 561,
"pubmed_translation": "(\"remimazolam\"[Supplementary Concept] OR \"remimazolam\"[All Fields]) AND (\"sedate\"[All Fields] OR ...)"
}
]
}Valor del análisis de consultas: el agente cree que
remimazolam AND sedationsolo busca esas dos palabras, pero PubMed en realidad expande a Supplementary Concept + sinónimos, y los resultados pasan de 8 a 561. Esto ayuda al agente a entender la diferencia entre intención y búsqueda real.
🔒 Demostración HTTPS local e implementación del servicio
Los certificados autofirmados incluidos y el flujo de curl -k son una demostración TLS local,
no un perfil de seguridad de producción. Para un servicio compartido, use el archivo Compose
del servicio autenticado y un certificado de confianza como se describe en
DEPLOYMENT.md.
Prueba de humo HTTPS local
# Step 1: Generate SSL certificates
./scripts/generate-ssl-certs.sh
# Step 2: Start HTTPS service (Docker)
./scripts/start-https-docker.sh up
# Verify deployment
curl -k https://localhost/Endpoints HTTPS
Servicio | URL | Descripción |
MCP |
| Endpoint MCP de Streamable HTTP |
Health |
| Comprobación de salud |
Ready |
| Comprobación de preparación |
Info |
| Metadatos de transporte y endpoint en tiempo de ejecución |
Exports |
| Listado de exportaciones preparadas local; el modo servicio requiere autenticación Bearer y ámbito de tenant |
Configuración remota del cliente MCP
{
"mcpServers": {
"pubmed-search": {
"url": "https://localhost/mcp"
}
}
}🏢 Integración con Microsoft Copilot Studio
¡Integra PubMed Search MCP con Microsoft 365 Copilot (Word, Teams, Outlook)!
Inicio rápido
# Unpublished local schema/protocol smoke only; never tunnel local mode
pubmed-search-mcp-http --mode local --transport streamable-http \
--copilot-compatible --host 127.0.0.1 --port 8765
# Public Copilot endpoint: authenticated service mode is mandatory
export PUBMED_AUTH_TOKENS="copilot:$(openssl rand -hex 32)"
export NGROK_DOMAIN="your-assigned-domain.ngrok.dev"
./scripts/start-copilot-studio.sh --with-ngrokConfiguración de Copilot Studio
Campo | Valor |
Nombre del servidor |
|
URL del servidor |
|
Autenticación | Token Bearer para el modo servicio; |
📖 Documentación completa: copilot-studio/README.md
Use
pubmed-search-mcp-http --copilot-compatiblepara la semántica HTTP de Copilot empaquetada.run_server.pysigue siendo un envoltorio de desarrollo del árbol de fuentes; userun_copilot.pysolo para pruebas de humo de 12 herramientas con esquema primitivo y solo loopback. Esa superficie simplificada sigue llamando al ejecutor compartido a través deunified_search(query, limit, min_year, max_year, sources, options)y exponeread_sessionde esquema primitivo para la recuperación de ejecuciones de búsqueda, argumentos de reproducción y artefactos; no expone un alias de búsqueda genérica solo para PubMed. El script de túnel requiere unNGROK_DOMAINasignado, rechaza puertos de backend ocupados y publica solo después de que--mode servicepase las comprobaciones de preparación y de rechazo no autenticado.⚠️ Nota: el transporte SSE está en desuso desde agosto de 2025. Use
streamable-http.
📖 Más documentación:
Arquitectura → ARCHITECTURE.md
Tutorial de pipeline (inglés) → docs/PIPELINE_MODE_TUTORIAL.en.md
Tutorial de pipeline (zh-TW) → docs/PIPELINE_MODE_TUTORIAL.md
Guía de implementación → DEPLOYMENT.md
Copilot Studio → copilot-studio/README.md
🔐 Seguridad
Características de seguridad
Capa | Característica | Descripción |
HTTPS | Terminación TLS | Obligatorio para credenciales remotas; el perfil autofirmado incluido es solo local |
Autenticación Bearer | Principal estable | Obligatoria en el modo servicio y utilizada para la autorización de tenant |
Almacenamiento de tenant | Aislamiento del sistema de archivos | Las sesiones, artefactos, exportaciones, crónicas y pipelines se almacenan bajo el principal autenticado |
Política de equidad y límites | Concurrencia de tenant + presupuestos upstream compartidos | Evita que un llamador multiplique una cuota de API upstream |
Cabeceras de seguridad | Endurecimiento contra clickjacking/MIME | Las cabeceras del proxy inverso complementan la autenticación; no son autorización CSRF |
Gestión de secretos | Inyección de secretos en tiempo de ejecución | Las claves API y los tokens Bearer deben provenir de secretos/entorno de implementación y no deben incluirse en el control de versiones ni en los registros |
Consulte DEPLOYMENT.md para obtener instrucciones detalladas de implementación.
📤 Formatos de exportación
Exporte sus resultados de búsqueda en formatos compatibles con los principales gestores de referencias:
Formato | Fuente | Compatible con | Caso de uso |
RIS | oficial o local | EndNote, Zotero, Mendeley | Importación universal |
MEDLINE | oficial o local | Herramientas de PubMed | Archivado nativo estilo PubMed |
CSL JSON | oficial | Procesadores de citas | Estilo de citas programático |
BibTeX | local | LaTeX, Overleaf, JabRef | Escritura académica |
CSV | local | Excel, Google Sheets | Análisis de datos |
JSON | local | Acceso programático | Procesamiento personalizado |
Campos exportados
Núcleo: PMID, Título, Autores, Revista, Año, Volumen, Número, Páginas
Identificadores: DOI, ID PMC, ISSN
Contenido: Resumen (etiquetas HTML eliminadas)
Metadatos: Idioma, Tipo de publicación, Palabras clave
Acceso: URL del DOI, URL de PMC, disponibilidad de texto completo
Manejo de caracteres especiales
Las exportaciones BibTeX usan pylatexenc para una codificación LaTeX adecuada
Los caracteres nórdicos (ø, æ, å), las diéresis (ü, ö, ä) y los acentos se convierten correctamente
Ejemplo:
Søren Hansen→S{\o}ren Hansen
📚 Cita
GitHub mostrará Cite this repository desde CITATION.cff. Si utiliza PubMed Search MCP en investigaciones, secciones de métodos o informes técnicos internos, prefiera la cita generada por GitHub o reutilice los metadatos del repositorio directamente.
@software{pubmed_search_mcp,
title = {PubMed Search MCP},
author = {u9401066},
url = {https://github.com/u9401066/pubmed-search-mcp}
}📄 Licencia
Apache License 2.0 - consulte LICENSE
🔗 Enlaces
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
- AlicenseAqualityDmaintenanceMCP server enabling AI agents to search and retrieve scientific papers, citations, and author profiles from Crossref, OpenAlex, and Semantic Scholar with no API keys required.53MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that enables coding agents to search academic papers, ingest full-text PDFs, extract structured details, and manage citations in literature research workflows.23MIT
- FlicenseAqualityBmaintenanceAI-powered research assistant MCP server for searching academic papers and answering research questions with DOI citations.3
- FlicenseNot gradedqualityDmaintenanceAn advanced scholarly research MCP server that enables AI assistants to discover, fetch, process, and manage academic papers across multiple sources like arXiv, PubMed, and Semantic Scholar, with capabilities for summarization, citation analysis, and concept relationship extraction.1
Related MCP Connectors
Academic research MCP server for paper search, citation checks, graphs, and deep research.
Open scientific and engineering knowledge for AI agents: search, evidence, document publishing.
Read-only MCP over an agentic SLR workspace with per-claim citation verification
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/u9401066/pubmed-search-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server