Skip to main content
Glama

PubMed Search MCP

PyPI version Python 3.10+ License: Apache 2.0 MCP CI

Asistente profesional de investigación bibliográfica para agentes de IA - Mucho más que un simple envoltorio de API

PubMed Search MCP research workflow

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_KEY para usar una asignación de crédito autenticada; sin ella, las solicitudes usan el presupuesto anónimo actual de uso casual de OpenAlex. mailto son 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-mcp

Fachada 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 enabled

Use 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

uvx pubmed-search-mcp

Recomendado para un cliente de IA local; sin puerto MCP a la escucha

HTTP de loopback local

pubmed-search-mcp-http --mode local --host 127.0.0.1

Integración local de un solo usuario; las solicitudes MCP comparten el inquilino default duradero, y el puerto nunca debe publicarse

Servicio multiusuario

pubmed-search-mcp-http --mode service

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

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

Claude Code

claude mcp add pubmed-search -- uvx pubmed-search-mcp

O 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 settings para 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-adapter

Luego 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 | loaded

Cline (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-mcp

Nota: NCBI_EMAIL es requerido por la política de API de NCBI. Opcionalmente, establezca NCBI_API_KEY para 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 (parse_pico valida la P/I/C/O proporcionada por el agente y devuelve una canalización ejecutable template: pico)

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

  1. 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).

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

  3. Transferencia PICO + Pipeline: el agente extrae P/I/C/O, parse_pico() valida esa transferencia estructurada, y el pipeline template: pico del backend ejecuta búsquedas de precisión/recuperación conscientes de O.

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

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

  6. Ciclo de vida completo de la investigación: desde la búsqueda → descubrimiento → texto completo → análisis → exportación, todo en un solo servidor.

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

CrossRef 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

Flujo de trabajo de búsqueda e inteligencia de consultas

┌─────────────────────────────────────────────────────────────────┐
│                      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)

Flujo de trabajo de descubrimiento de artículos y citas

                        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

Flujo de trabajo de texto completo, figuras e imágenes biomédicas

Categoría

Herramientas

Texto completo

get_fulltext → XML de Europe PMC cuando hay un PMCID disponible; Unpaywall respaldado por DOI, acceso institucional directo/EZproxy, CORE y descargas alternativas cuando sea necesario

Figuras

get_article_figures → Extrae etiquetas de figuras, leyendas, URL de imágenes y enlaces PDF de artículos de acceso abierto de PMC

Texto completo con figuras

get_fulltext(include_figures=True) → Incrusta los metadatos de las figuras junto con el texto completo estructurado

Minería de texto

get_text_mined_terms → Extrae genes, enfermedades, sustancias químicas

Exportación

prepare_export → RIS/MEDLINE/CSL JSON oficial o RIS/BibTeX/CSV/MEDLINE/JSON local; save_literature_notes → notas locales compatibles con wiki/Foam/Markdown/estilo MedPaper además de CSL JSON a nivel de colecció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ículo

  • get_fulltext(pmcid="PMC7096777", include_figures=True) → Texto completo estructurado con figuras en línea

  • La 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

Flujo de trabajo de datos biomédicos extendidos de NCBI

Herramienta

Descripción

search_gene

Busca en la base de datos NCBI Gene

get_gene_details

Detalles del gen por ID de NCBI Gene

get_gene_literature

Artículos de PubMed vinculados a un gen

search_compound

Busca compuestos en PubChem

get_compound_details

Detalles del compuesto por CID de PubChem

get_compound_literature

Artículos de PubMed vinculados a un compuesto

search_clinvar

Busca variantes clínicas en ClinVar

🕰️ Cronología de investigación y árbol de linaje

Flujo de trabajo de evaluación y línea de tiempo

Herramienta

Descripción

build_research_chronicle

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

read_research_chronicle

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

Institutional access workflow

Herramienta

Descripción

configure_institutional_access

Configurar el resolvedor de enlaces de la institución

get_institutional_link

Generar enlace de acceso OpenURL

list_resolver_presets

Listar ajustes preestablecidos de resolvedor

test_institutional_access

Probar configuración de resolvedor

diagnose_institutional_access

Diagnosticar rutas de entrega de DOI directo, EZproxy y OpenURL

convert_icd_mesh

Convertir entre códigos ICD y términos MeSH (bidireccional)

unified_search

Detectar automáticamente códigos ICD en consultas y expandirlos a MeSH

💾 Gestión de sesiones

Session and pipeline workflow

Herramienta

Descripción

get_session_pmids

Obtener listas de PMID almacenadas en caché

get_cached_article

Obtener artículo de la caché de sesión (sin costo de API)

get_session_summary

Resumen del estado de la sesión

read_session

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 activa

  • session://last-search — metadatos de la búsqueda más reciente

  • session://last-search/pmids — lista de PMID más reciente + formulario CSV

  • session://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_status describe el resultado de la recuperación acotada: state (completed, empty, partial o failed), bounded=true, exhaustive=false, recuento devuelto, fuentes intentadas/exitosas/fallidas/reintentables y listas de fuentes de continuación/completitud desconocida.

  • search_run es la transferencia de recuperación: run_id estable, estado de la bitácora, recoverable, argumentos exactos de inspección/reproducción de read_session y 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

Session and pipeline workflow

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

manage_pipeline

Fachada principal para acciones de guardar, listar, cargar, eliminar, historial y programación

save_pipeline

Guardar una configuración de pipeline para reutilizar más tarde (YAML/JSON, validado automáticamente)

list_pipelines

Listar pipelines guardados (filtrar por etiqueta/ámbito)

load_pipeline

Cargar por nombre guardado; los llamadores locales de confianza también pueden cargar un archivo

delete_pipeline

Eliminar pipeline y su historial de ejecución

get_pipeline_history

Ver historial de ejecución con análisis de diff de artículos

schedule_pipeline

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

Full text, figures, and biomedical image workflow

Herramienta

Descripción

analyze_figure_for_search

Entregar una imagen subida, URL de imagen o URI de datos a la visión del agente para extraer términos de búsqueda

search_biomedical_images

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 con article_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:

  • options vací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

context_graph

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 research_context en la salida JSON

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

counts_first

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 Diabetes

2️⃣ Pregunta clínica PICO

Flujo de trabajo de búsqueda clínica PICO

Ruta simpleunified_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 below

Flujo 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

unified_search()

Búsqueda rápida de temas

ICD→MeSH, multifuente, deduplicación

PICO

Agente P/I/C/O -> parse_pico()

Preguntas clínicas

Validar transferencia -> búsqueda backend template:pico

Sistemático

generate_search_queries()unified_search(options="systematic")

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

unified_search(options="native_semantic")

Similitud conceptual en el espacio de títulos/resúmenes

Validación de capacidad; modo semántico de OpenAlex, máx. 50

Exploración

find_*_articles()

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

pubmed-quick-search

Búsqueda básica con filtros

pubmed-systematic-search

Expansión MeSH, exhaustiva

pubmed-pico-search

Descomposición de preguntas clínicas

pubmed-paper-exploration

Árbol de citas, artículos relacionados

pubmed-research-chronicle

Evolución de investigación persistente y versionada

pubmed-gene-drug-research

Gen/PubChem/ClinVar

pubmed-fulltext-access

Texto completo de Europe PMC, CORE

pubmed-export-citations

Guía de exportación RIS/BibTeX/CSV/CSL

pubmed-multi-source-search

Búsqueda unificada entre bases de datos

pubmed-mcp-tools-reference

Guía de referencia completa de herramientas

pipeline-persistence

Guardar, cargar y reutilizar planes de búsqueda

🔧 Habilidades de desarrollo (15) — Para contribuyentes del proyecto

Habilidad

Descripción

changelog-updater

Actualización automática de CHANGELOG.md

code-refactor

Refactorización de la arquitectura DDD

code-reviewer

Revisión de calidad y seguridad del código

ddd-architect

Andamiaje DDD para nuevas funcionalidades

git-doc-updater

Sincronizar la documentación antes de los commits

git-precommit

Orquestación del flujo de trabajo previo al commit

memory-checkpoint

Guardar el contexto en Memory Bank

memory-updater

Actualizar los archivos de Memory Bank

pdf-asset-extractor

Extraer e inventariar activos PDF listos para citar

project-init

Inicializar nuevos proyectos

readme-i18n

Sincronización multilingüe del README

readme-updater

Sincronizar el README con los cambios de código

roadmap-updater

Actualizar el estado de ROADMAP.md

test-generator

Generar suites de pruebas

tool-sync

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 breaker

Mecanismos 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

generate_search_queries() consulta automáticamente la base de datos MeSH de NCBI

ESpell

Corrección ortográfica automática (remifentanylremifentanil)

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 expand_with_mesh()

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 get_text_mined_terms()

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:

  1. Detecta patrones ICD-10/ICD-9 mediante detect_and_expand_icd_codes()

  2. Busca los términos MeSH correspondientes en el mapeo interno (ICD10_TO_MESH, ICD9_TO_MESH)

  3. 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:

  1. Corrección ESpell - corrige errores ortográficos

  2. Consulta MeSH - Entrez.esearch(db="mesh") para obtener el vocabulario estándar

  3. Extracción de sinónimos - obtiene sinónimos de los términos de entrada de MeSH (MeSH Entry Terms)

  4. 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 sedation solo 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

https://localhost/mcp

Endpoint MCP de Streamable HTTP

Health

https://localhost/health

Comprobación de salud

Ready

https://localhost/ready

Comprobación de preparación

Info

https://localhost/info

Metadatos de transporte y endpoint en tiempo de ejecución

Exports

https://localhost/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-ngrok

Configuración de Copilot Studio

Campo

Valor

Nombre del servidor

PubMed Search

URL del servidor

https://your-server.com/mcp

Autenticación

Token Bearer para el modo servicio; None solo para una demo local no publicada

📖 Documentación completa: copilot-studio/README.md

Use pubmed-search-mcp-http --copilot-compatible para la semántica HTTP de Copilot empaquetada. run_server.py sigue siendo un envoltorio de desarrollo del árbol de fuentes; use run_copilot.py solo para pruebas de humo de 12 herramientas con esquema primitivo y solo loopback. Esa superficie simplificada sigue llamando al ejecutor compartido a través de unified_search(query, limit, min_year, max_year, sources, options) y expone read_session de 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 un NGROK_DOMAIN asignado, rechaza puertos de backend ocupados y publica solo después de que --mode service pase 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:


🔐 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

Flujo de trabajo de exportación y notas locales

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 HansenS{\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

Install Server
A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
2wRelease cycle
8Releases (12mo)
Commit activity
Issues opened vs closed

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

  • A
    license
    Not graded
    quality
    B
    maintenance
    An MCP server that enables coding agents to search academic papers, ingest full-text PDFs, extract structured details, and manage citations in literature research workflows.
    23
    MIT
  • F
    license
    A
    quality
    B
    maintenance
    AI-powered research assistant MCP server for searching academic papers and answering research questions with DOI citations.
    3
  • F
    license
    Not graded
    quality
    D
    maintenance
    An 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

View all related MCP servers

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

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/u9401066/pubmed-search-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server