inspirehep-mcp
Integre a literatura de física de altas energias com LLMs.
Documentação
Servidor MCP InspireHEP
Um servidor MCP que integra a literatura de física de altas energias do InspireHEP com LLMs. Pesquise artigos, explore citações, obtenha métricas de autores e gere referências formatadas.
Instalação
# Using pip
pip install inspirehep-mcp
# Or run directly with uvx (no install needed)
uvx inspirehep-mcp
Instalar a partir do código-fonte
git clone https://github.com/MohamedElashri/inspirehep-mcp.git
cd inspirehep-mcp
uv sync
uv run inspirehep-mcp
Implantação de endpoint remoto
O comando instalado permanece um servidor stdio por padrão, portanto as configurações existentes de desktop continuam funcionando. Para executá-lo nativamente como um endpoint MCP remoto, selecione o 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
O endpoint MCP é http://localhost:8000/mcp e a sonda de saúde não autenticada
é http://localhost:8000/health. PORT também é respeitado quando uma plataforma
de hospedagem o injeta. Coloque o serviço atrás de HTTPS para implantação na internet.
Docker
As tags de versão publicam um contêiner no GitHub Container Registry. A imagem usa Streamable HTTP por padrão:
docker run --rm -p 8000:8000 \
ghcr.io/mohamedelashri/inspirehep-mcp:latest
Para um nome de host público, adicione-o à lista de permissões de 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
A imagem é executada como um usuário não root, possui uma verificação de saúde integrada e usa respostas JSON sem estado, para que réplicas não precisem de estado de sessão MCP compartilhado.
Docker Compose
O docker-compose.yml incluído pode compilar o checkout
atual ou executar a imagem 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
O serviço Compose é somente leitura, remove capacidades Linux, ativa
no-new-privileges e mantém a verificação de saúde da imagem.
Limitação de taxa de entrada
As solicitações Streamable HTTP são limitadas por IP do cliente com um token bucket. O
padrão é 60 solicitações por minuto com uma rajada de 20; /health está isento. Defina
INSPIREHEP_HTTP_RATE_LIMIT=0 para desativá-lo.
As solicitações para /mcp são limitadas a 256 KiB. O servidor nativo também aceita no
máximo 100 conexões ou tarefas concorrentes, fecha conexões keep-alive ociosas
após 5 segundos e admite no máximo 32 falhas de cache pendentes da API INSPIRE. O excesso
de trabalho upstream falha rapidamente em vez de se acumular na memória.
Por padrão, o limitador usa o endereço do peer direto e ignora cabeçalhos
encaminhados. Ative INSPIREHEP_TRUST_PROXY_HEADERS somente quando um proxy reverso
confiável sobrescrever X-Forwarded-For; caso contrário, os clientes podem escolher sua própria
identidade de limitação de taxa. O limitador está na memória e é por processo, portanto, implantações
com múltiplas réplicas também devem aplicar um limite compartilhado no proxy ou gateway.
[!IMPORTANT] As ferramentas somente leitura evitam risco de mutação, mas um endpoint público ainda pode ser usado para consumir seu poder de processamento e a cota da API upstream. Este servidor não adiciona autenticação. Use um proxy reverso com autenticação se o endpoint não deve estar aberto a todos, e mantenha um limite de taxa na borda para implantações distribuídas. Mantenha a proteção contra rebinding de DNS ativada e defina
INSPIREHEP_ALLOWED_ORIGINSpara clientes que enviam um cabeçalho Origin.
Integração
Claude Desktop / Cursor
Adicione à configuração do seu cliente MCP:
{
"mcpServers": {
"inspirehep": {
"command": "uvx",
"args": ["inspirehep-mcp"]
}
}
}
Claude Code
Opção A: Usando a 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
Opção B: Configuração manual
Para escopo global, adicione a ~/.claude.json:
{
"mcpServers": {
"inspirehep": {
"command": "uvx",
"args": ["inspirehep-mcp"]
}
}
}
Para escopo do projeto, crie .mcp.json na raiz do seu projeto:
{
"mcpServers": {
"inspirehep": {
"command": "uvx",
"args": ["inspirehep-mcp"]
}
}
}
CLI Antigravity
Abra o gerenciador MCP interativo com /mcp, ou configure o servidor manualmente.
O Antigravity lê servidores MCP globais de ~/.gemini/config/mcp_config.json
e servidores locais do workspace de .agents/mcp_config.json:
{
"mcpServers": {
"inspirehep": {
"command": "uvx",
"args": ["inspirehep-mcp"]
}
}
}
Ferramentas
| Ferramenta | Descrição |
|---|---|
search_papers | Pesquisar artigos por tópico, autor, colaboração ou texto livre |
get_paper_details | Obter metadados completos de um artigo por ID Inspire, ID arXiv ou DOI |
get_author_papers | Recuperar publicações e métricas de citação de um autor |
get_citations | Explorar o grafo de citações — quem cita um artigo, ou o que ele cita |
search_by_collaboration | Encontrar publicações de ATLAS, CMS, LHCb, etc. |
get_paper_figures | Recuperar figuras e URLs de download de um artigo |
get_references | Gerar listas de referências em BibTeX, LaTeX ou JSON |
get_bibtex | Recuperar entrada de citação BibTeX por DOI, ID arXiv ou ID Inspire |
Configuração
Todas as configurações via variáveis de ambiente (prefixo INSPIREHEP_):
| Variável | Padrão | Descrição |
|---|---|---|
INSPIREHEP_REQUESTS_PER_SECOND | 1.5 | Limite de taxa da API |
INSPIREHEP_UPSTREAM_MAX_PENDING | 32 | Máximo de falhas de cache admitidas da API INSPIRE |
INSPIREHEP_CACHE_TTL | 86400 | TTL do cache em segundos (24h) |
INSPIREHEP_CACHE_MAX_SIZE | 512 | Máximo de entradas em cache |
INSPIREHEP_CACHE_PERSISTENT | false | Ativar cache persistente SQLite |
INSPIREHEP_CACHE_DB_PATH | inspirehep_cache.db | Caminho do arquivo de cache SQLite |
INSPIREHEP_API_TIMEOUT | 30 | Tempo limite de solicitação HTTP (segundos) |
INSPIREHEP_TRANSPORT | stdio | stdio ou streamable-http |
INSPIREHEP_HOST | 127.0.0.1 | Endereço de bind HTTP |
INSPIREHEP_PORT | 8000 | Porta HTTP; usa fallback para PORT |
INSPIREHEP_HTTP_PATH | /mcp | Caminho do endpoint Streamable HTTP |
INSPIREHEP_HTTP_STATELESS | true | Desativar estado de sessão MCP no servidor |
INSPIREHEP_HTTP_JSON_RESPONSE | true | Preferir respostas JSON em vez de streams SSE |
INSPIREHEP_HTTP_RATE_LIMIT | 60 | Solicitações de entrada por minuto por cliente; 0 desativa |
INSPIREHEP_HTTP_RATE_LIMIT_BURST | 20 | Máximo de solicitações imediatas por cliente |
INSPIREHEP_HTTP_RATE_LIMIT_MAX_CLIENTS | 10000 | Máximo de buckets de clientes na memória |
INSPIREHEP_HTTP_MAX_BODY_SIZE | 262144 | Máximo de bytes do corpo de solicitação /mcp; 0 desativa |
INSPIREHEP_HTTP_MAX_CONCURRENCY | 100 | Máximo de conexões ou tarefas HTTP concorrentes |
INSPIREHEP_HTTP_KEEP_ALIVE_TIMEOUT | 5 | Tempo limite de keep-alive HTTP ocioso em segundos |
INSPIREHEP_TRUST_PROXY_HEADERS | false | Confiar no primeiro endereço X-Forwarded-For |
INSPIREHEP_MAX_INPUT_LENGTH | 2048 | Máximo de caracteres de entrada de texto geral |
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 ferramenta serializado |
INSPIREHEP_MAX_REFERENCES | 250 | Máximo de referências retornadas por chamada de ferramenta |
INSPIREHEP_MAX_FIGURES | 100 | Máximo de figuras retornadas por chamada de ferramenta |
INSPIREHEP_ALLOWED_HOSTS | 127.0.0.1:*,localhost:* | Cabeçalhos HTTP Host válidos separados por vírgula |
INSPIREHEP_ALLOWED_ORIGINS | vazio | Origens de navegador válidas separadas por vírgula |
INSPIREHEP_DNS_REBINDING_PROTECTION | true | Validar cabeçalhos Host e Origin |
INSPIREHEP_LOG_LEVEL | INFO | Nível de registro de log |
Desenvolvimento
# 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
LICENÇA
Este projeto é licenciado sob a Licença AGPL-3.0 — consulte o arquivo LICENSE para obter detalhes.