inspirehep-mcp
InspireHEP MCP Server: integra la literatura de física de altas energías con LLMs.
Documentación
Servidor MCP de InspireHEP
Un servidor MCP que integra la literatura de física de altas energías de InspireHEP con LLMs. Busca artículos, explora citas, recupera métricas de autores y genera referencias formateadas.
Instalación
# Using pip
pip install inspirehep-mcp
# Or run directly with uvx (no install needed)
uvx inspirehep-mcp
Instalar desde el código fuente
git clone https://github.com/MohamedElashri/inspirehep-mcp.git
cd inspirehep-mcp
uv sync
uv run inspirehep-mcp
Despliegue de endpoint remoto
El comando instalado sigue siendo un servidor stdio por defecto, por lo que las configuraciones de escritorio existentes continúan funcionando. Para ejecutarlo de forma nativa como un endpoint MCP remoto, selecciona el transporte Streamable HTTP:
INSPIREHEP_ALLOWED_HOSTS="mcp.example.org" \
INSPIREHEP_HTTP_RATE_LIMIT=60 \
inspirehep-mcp --transport streamable-http --host 0.0.0.0 --port 8000
El endpoint MCP es http://localhost:8000/mcp y la sonda de salud no autenticada es http://localhost:8000/health. PORT también se respeta cuando una plataforma de alojamiento lo inyecta. Coloca el servicio detrás de HTTPS para el despliegue en internet.
Docker
Las etiquetas de lanzamiento publican un contenedor en el Registro de Contenedores de GitHub. La imagen usa Streamable HTTP por defecto:
docker run --rm -p 8000:8000 \
ghcr.io/mohamedelashri/inspirehep-mcp:latest
Para un nombre de host público, agrégalo a la lista de permitidos del host:
docker run --rm -p 8000:8000 \
-e INSPIREHEP_ALLOWED_HOSTS="mcp.example.org" \
-e INSPIREHEP_HTTP_RATE_LIMIT=60 \
ghcr.io/mohamedelashri/inspirehep-mcp:latest
La imagen se ejecuta como un usuario no root, tiene una verificación de salud integrada y usa respuestas JSON sin estado, por lo que las réplicas no necesitan estado de sesión MCP compartido.
Docker Compose
El docker-compose.yml incluido puede compilar el checkout actual o ejecutar la imagen publicada:
# Local deployment
docker compose up --build -d
# Add the public hostname when deploying behind a domain
INSPIREHEP_ALLOWED_HOSTS="mcp.example.org" docker compose up -d
El servicio de Compose es de solo lectura, elimina las capacidades de Linux, habilita no-new-privileges y conserva la verificación de salud de la imagen.
Limitación de velocidad entrante
Las solicitudes Streamable HTTP se limitan por IP de cliente con un token bucket. El valor predeterminado es 60 solicitudes por minuto con una ráfaga de 20; /health está exento. Establece INSPIREHEP_HTTP_RATE_LIMIT=0 para deshabilitarlo.
Las solicitudes a /mcp están limitadas a 256 KiB. El servidor nativo también acepta como máximo 100 conexiones o tareas concurrentes, cierra las conexiones keep-alive inactivas después de 5 segundos y admite como máximo 32 fallos de caché pendientes de la API de INSPIRE. El trabajo ascendente excesivo falla rápidamente en lugar de acumularse en memoria.
Por defecto, el limitador usa la dirección del par directo e ignora los encabezados reenviados. Solo habilita INSPIREHEP_TRUST_PROXY_HEADERS cuando un proxy inverso de confianza sobrescribe X-Forwarded-For; de lo contrario, los clientes pueden elegir su propia identidad de limitación de velocidad. El limitador está en memoria y por proceso, por lo que los despliegues con múltiples réplicas también deben aplicar un límite compartido en el proxy o gateway.
[!IMPORTANTE] Las herramientas de solo lectura evitan el riesgo de mutación, pero un endpoint público aún puede usarse para consumir tu cómputo y la asignación de API ascendente. Este servidor no agrega autenticación. Usa un proxy inverso con autenticación si el endpoint no debe estar abierto a todos, y conserva un límite de velocidad en el borde para despliegues distribuidos. Mantén habilitada la protección contra el rebinding de DNS y establece
INSPIREHEP_ALLOWED_ORIGINSpara los clientes que envían un encabezado Origin.
Integración
Claude Desktop / Cursor
Agrega a tu configuración de cliente MCP:
{
"mcpServers": {
"inspirehep": {
"command": "uvx",
"args": ["inspirehep-mcp"]
}
}
}
Claude Code
Opción A: Usando la CLI
# Global scope (available across all projects)
claude mcp add --scope user inspirehep -- uvx inspirehep-mcp
# Project scope (shared via .mcp.json, checked into source control)
claude mcp add --scope project inspirehep -- uvx inspirehep-mcp
Opción B: Configuración manual
Para el ámbito global, agrega a ~/.claude.json:
{
"mcpServers": {
"inspirehep": {
"command": "uvx",
"args": ["inspirehep-mcp"]
}
}
}
Para el ámbito del proyecto, crea .mcp.json en la raíz de tu proyecto:
{
"mcpServers": {
"inspirehep": {
"command": "uvx",
"args": ["inspirehep-mcp"]
}
}
}
CLI de Antigravity
Abre el administrador interactivo de MCP con /mcp, o configura el servidor manualmente. Antigravity lee los servidores MCP globales desde ~/.gemini/config/mcp_config.json y los servidores locales del espacio de trabajo desde .agents/mcp_config.json:
{
"mcpServers": {
"inspirehep": {
"command": "uvx",
"args": ["inspirehep-mcp"]
}
}
}
Herramientas
| Herramienta | Descripción |
|---|---|
search_papers | Busca artículos por tema, autor, colaboración o texto libre |
get_paper_details | Obtén metadatos completos de un artículo por ID de Inspire, ID de arXiv o DOI |
get_author_papers | Recupera las publicaciones y métricas de citas de un autor |
get_citations | Explora el grafo de citas: quién cita un artículo, o qué cita |
search_by_collaboration | Encuentra publicaciones de ATLAS, CMS, LHCb, etc. |
get_paper_figures | Recupera figuras y URLs de descarga de un artículo |
get_references | Genera listas de referencias en BibTeX, LaTeX o JSON |
get_bibtex | Recupera la entrada de cita BibTeX por DOI, ID de arXiv o ID de Inspire |
Configuración
Todos los ajustes mediante variables de entorno (prefijo INSPIREHEP_):
| Variable | Predeterminado | Descripción |
|---|---|---|
INSPIREHEP_REQUESTS_PER_SECOND | 1.5 | Límite de velocidad de la API |
INSPIREHEP_UPSTREAM_MAX_PENDING | 32 | Máximo de fallos de caché admitidos de la API de INSPIRE |
INSPIREHEP_CACHE_TTL | 86400 | TTL de caché en segundos (24 h) |
INSPIREHEP_CACHE_MAX_SIZE | 512 | Máximo de entradas en caché |
INSPIREHEP_CACHE_PERSISTENT | false | Habilita la caché persistente SQLite |
INSPIREHEP_CACHE_DB_PATH | inspirehep_cache.db | Ruta del archivo de caché SQLite |
INSPIREHEP_API_TIMEOUT | 30 | Tiempo de espera de solicitud HTTP (segundos) |
INSPIREHEP_TRANSPORT | stdio | stdio o streamable-http |
INSPIREHEP_HOST | 127.0.0.1 | Dirección de enlace HTTP |
INSPIREHEP_PORT | 8000 | Puerto HTTP; recurre a PORT |
INSPIREHEP_HTTP_PATH | /mcp | Ruta del endpoint Streamable HTTP |
INSPIREHEP_HTTP_STATELESS | true | Deshabilita el estado de sesión MCP del lado del servidor |
INSPIREHEP_HTTP_JSON_RESPONSE | true | Prefiere respuestas JSON sobre flujos SSE |
INSPIREHEP_HTTP_RATE_LIMIT | 60 | Solicitudes entrantes por minuto por cliente; 0 deshabilita |
INSPIREHEP_HTTP_RATE_LIMIT_BURST | 20 | Máximo de solicitudes inmediatas por cliente |
INSPIREHEP_HTTP_RATE_LIMIT_MAX_CLIENTS | 10000 | Máximo de buckets de clientes en memoria |
INSPIREHEP_HTTP_MAX_BODY_SIZE | 262144 | Máximo de bytes del cuerpo de solicitud /mcp; 0 deshabilita |
INSPIREHEP_HTTP_MAX_CONCURRENCY | 100 | Máximo de conexiones o tareas HTTP concurrentes |
INSPIREHEP_HTTP_KEEP_ALIVE_TIMEOUT | 5 | Tiempo de espera de keep-alive HTTP inactivo en segundos |
INSPIREHEP_TRUST_PROXY_HEADERS | false | Confía en la primera dirección X-Forwarded-For |
INSPIREHEP_MAX_INPUT_LENGTH | 2048 | Máximo de caracteres de entrada de texto general |
INSPIREHEP_MAX_IDENTIFIER_LENGTH | 512 | Máximo de caracteres de entrada de identificador |
INSPIREHEP_MAX_RESPONSE_BYTES | 1048576 | Máximo de bytes de resultado de herramienta serializado |
INSPIREHEP_MAX_REFERENCES | 250 | Máximo de referencias devueltas por llamada de herramienta |
INSPIREHEP_MAX_FIGURES | 100 | Máximo de figuras devueltas por llamada de herramienta |
INSPIREHEP_ALLOWED_HOSTS | 127.0.0.1:*,localhost:* | Encabezados HTTP Host válidos separados por comas |
INSPIREHEP_ALLOWED_ORIGINS | vacío | Orígenes de navegador válidos separados por comas |
INSPIREHEP_DNS_REBINDING_PROTECTION | true | Valida los encabezados Host y Origin |
INSPIREHEP_LOG_LEVEL | INFO | Nivel de registro |
Desarrollo
# Run tests
uv run pytest tests/ -v
# Run with coverage
uv run pytest tests/ --cov=inspirehep_mcp --cov-report=term-missing
# Unit tests only (no network)
uv run pytest tests/test_utils.py tests/test_cache.py tests/test_errors.py \
tests/test_config.py tests/test_rate_limit.py tests/test_server.py \
tests/test_api_client_safety.py tests/test_tools_safety.py
LICENCIA
Este proyecto está licenciado bajo la Licencia AGPL-3.0: consulta el archivo LICENSE para más detalles.