Skip to main content
Glama
fabianofilho

radar-papers-mcp

by fabianofilho

radar-papers-mcp

Servidor MCP que monitora PubMed e medRxiv por tópicos de pesquisa configuráveis e resume os papers com um LLM local. Guarda o resultado numa base local, deduplicado por DOI.

Sobre o que esta ferramenta faz e não faz

  • O resumo sai do abstract, não do texto completo. Ele serve para triagem: decidir se vale abrir o paper. Não substitui a leitura.

  • O resumo é gerado por LLM e pode errar. Confira os números no abstract original — o link vem em toda resposta.

  • A cobertura depende das suas queries. O que não casa com a query configurada simplesmente não aparece; ausência de resultado não significa ausência de literatura.

Requisitos

O quê

Versão

Para quê

Python

3.12+

runtime

uv

recente

dependências e venv

Um LLM local com API OpenAI-compatible

resumo dos papers

Chave da NCBI (opcional)

eleva o rate limit de 3 para 10 req/s

Related MCP server: kavi-research-assistant-mcp

Instalação

git clone https://github.com/fabianofilho/radar-papers-mcp.git
cd radar-papers-mcp
uv sync
cp .env.example .env

Configuração

Variável

Padrão

Observação

QWEN_ENDPOINT

http://127.0.0.1:8080/v1

llama.cpp. Ollama: :11434/v1. LM Studio: :1234/v1

QWEN_MODEL

local-model

llama.cpp e LM Studio aceitam qualquer nome

PUBMED_API_KEY

vazio

chave gratuita da NCBI

DUCKDB_PATH

./data/papers.duckdb

base local

TOPICOS_PATH

./config/topicos.yaml

tópicos monitorados

SYNC_HORA_LOCAL

04:10

horário fixo do sync agendado

Os tópicos ficam em config/topicos.yaml. Cada um tem duas configurações, porque as fontes funcionam de forma diferente:

topicos:
  - nome: multicalibração
    pubmed: multicalibration[All Fields]   # sintaxe das E-utilities
    medrxiv:                                # palavras simples, filtradas localmente
      - multicalibration
      - multi-calibration
uv run papers-cli topicos
uv run papers-cli sync --dias 30
uv run papers-cli buscar "multicalibração"
uv run papers-cli resumir "10.1016/j.exemplo.2026.100217"

Ligando ao Claude Code

claude mcp add radar-papers --scope user \
  -e DUCKDB_PATH=/caminho/para/radar-papers-mcp/data/papers.duckdb \
  -e TOPICOS_PATH=/caminho/para/radar-papers-mcp/config/topicos.yaml \
  -e QWEN_ENDPOINT=http://127.0.0.1:8080/v1 \
  -e QWEN_MODEL=local-model \
  -- uv --directory /caminho/para/radar-papers-mcp run radar-papers-mcp

Uso

buscar_papers_novos(topico="", dias=7)

Papers do período na base local, com a chave para usar no resumo e o link original.

resumir_paper(paper_id: str)

{
  "titulo": "Mortality risk ranking after medical emergency team review…",
  "url": "https://pubmed.ncbi.nlm.nih.gov/42761253/",
  "origem": "llm",
  "resumo": {
    "problema": "Validação externa e redesenvolvimento de modelos preditivos de mortalidade após revisão da equipe de emergência.",
    "metodo": "Coorte multicêntrica em quatro hospitais, 1.937 adultos.",
    "achado_principal": "O modelo original discriminou bem (AUC 0,80) mas com estimativas variáveis entre hospitais; o novo modelo chegou a AUC 0,84 com menos variáveis.",
    "relevancia": "Mostra que a discriminação pode ser robusta mesmo quando a calibração absoluta varia entre instituições."
  }
}

Esse é um retorno real. O resumo fica cacheado: o mesmo paper não é resumido duas vezes.

As duas fontes

Fonte

API

Limite

PubMed

E-utilities (esearch + efetch)

3 req/s sem chave, 10 com chave

medRxiv

api.medrxiv.org/details

sem busca por termo; paginado de 100 em 100

O rate limit da NCBI é aplicado de verdade — a primeira tentativa de teste deste projeto recebeu {"error": "API rate limit exceeded"}. O fetcher espaça as requisições conforme a chave configurada.

O medRxiv não aceita busca por termo: a API é consultada uma vez por janela e o filtro por tópico é local, sobre título e abstract.

Deduplicação por DOI

O mesmo paper casa com mais de um tópico, e um preprint do medRxiv pode sair depois num periódico indexado no PubMed com o mesmo DOI. A chave é o DOI (ou o id da fonte quando não há DOI), e um paper já conhecido ganha o novo tópico na lista em vez de virar uma segunda linha.

Limitações conhecidas

Sem abstract, não há resumo. Um paper sem abstract devolve erro explícito em vez de um resumo gerado a partir do título. Resumir texto vazio produz exatamente o tipo de invenção plausível que torna a ferramenta inútil para pesquisa.

A janela do medRxiv custa caro. Uma janela larga traz milhares de preprints que serão descartados no filtro local. O padrão é limitado a 5 páginas (500 preprints) por execução.

A query do PubMed é sua responsabilidade. Uma query mal formada devolve zero sem erro. Teste no PubMed antes de colocar no YAML — na prática, buscas muito específicas devolvem pouquíssimo (multicalibration retorna ~14 resultados em toda a base).

O resumo não é verificado contra o abstract. Diferente do projeto de protocolos, aqui não há conferência de citação literal: o campo achado_principal pode conter um número que o modelo interpretou errado.

Só PubMed e medRxiv. Sem arXiv, bioRxiv, Scopus ou Web of Science.

Privacidade

  • Sai da máquina: requisições ao PubMed (NCBI) e ao medRxiv. Se você configurar uma chave da NCBI, ela vai junto nas requisições — é o funcionamento normal da API.

  • Não sai: seus tópicos de pesquisa ficam no arquivo local; as queries vão às APIs como qualquer busca.

  • O abstract vai para o seu LLM no resumo.

  • Sem telemetria, sem analytics.

Contribuindo

Veja CONTRIBUTING.md. PubMed e medRxiv são serviços públicos: não rode sincronização em loop nem contorne o limitador de taxa.

Licença e atribuição

MIT — este projeto é agregação de literatura e metadados abertos, sem contato com regulação, conduta clínica ou dado de paciente.

Construído no contexto do IA.med.

Available Tools

2 tools
buscar_papers_novosA

Papers novos do PubMed e do medRxiv sobre os tópicos monitorados.

Consulta a base local, que é sincronizada de madrugada. Cada resultado traz a chave para usar em resumir_paper e o link original.

Args: topico: filtra por um tópico configurado; vazio devolve todos. dias: tamanho da janela, em dias, a contar de hoje.

ParametersJSON Schema
NameRequiredDescriptionDefault
diasNo
topicoNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
diasYes
avisoNo
totalYes
topicoYes
resultadosYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the disclosure burden. It mentions that the local database is synced early morning, indicating potential staleness, and that results include a key and link. However, it does not disclose result limits, pagination, or whether the operation is read-only, which is a meaningful gap for a tool with no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a compact paragraph followed by a clean argument list. The main purpose is front-loaded, and each sentence adds value—no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a simple search with two parameters and an output schema exists (though not shown). The description covers the workflow with resumir_paper and the source, but it omits details like result count, sorting, or pagination. Given the output schema likely handles return structure, this is a minor gap, so a 4 is appropriate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description fully compensates. It clearly explains 'topico' as a filter (empty returns all) and 'dias' as a window in days from today. This adds meaning beyond the bare schema, which only shows types and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves new papers from PubMed and medRxiv on monitored topics, and specifies that each result includes a key for resumir_paper and the original link. This is a specific verb–resource combination (implicit 'search' for papers) and distinguishes from the sibling tool by the workflow it feeds.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for finding new papers and that the returned key is meant for resumir_paper, establishing a clear usage context. It does not explicitly state when not to use it, but with only one sibling (a summarizer), the division of labor is obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resumir_paperA

Resumo estruturado de um paper: problema, método, achado e relevância.

O resumo vem do abstract, não do texto completo, e é gerado pelo LLM local. Fica cacheado: o mesmo paper não é resumido duas vezes. Papers sem abstract devolvem erro claro em vez de um resumo inventado.

Args: paper_id: a chave devolvida por buscar_papers_novos (o DOI, em geral).

ParametersJSON Schema
NameRequiredDescriptionDefault
paper_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYes
avisoNo
chaveYes
origemYesllm, cache ou indisponivel
resumoNo
tituloYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even with no annotations, the description discloses key behaviors: the summary is based only on the abstract, it is generated by a local LLM, results are cached so the same paper is not summarized twice, and papers without an abstract yield a clear error rather than an invented summary. This gives the agent a reliable model of the tool's side effects and edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three dense sentences plus a one-line parameter note. Every sentence earns its place: output structure, input source, caching behavior, error handling, and parameter provenance. There is no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with an output schema present, the description covers what is produced, where the input comes from, how the tool behaves, and what happens in the failure case. The presence of an output schema means the description does not need to detail the return shape, and nothing else needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only lists paper_id as a string with no description, so schema description coverage is 0%. The description compensates by explaining that paper_id is the key returned by buscar_papers_novos and is generally a DOI, which provides essential provenance and format semantics beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Resumo estruturado de um paper: problema, método, achado e relevância', which names the resource (a paper) and the specific structured output. This clearly distinguishes the tool from the sibling buscar_papers_novos, which is about finding new papers rather than summarizing one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The Args section states that paper_id is 'a chave devolvida por buscar_papers_novos', which tells an agent this tool should be invoked on results from the sibling search tool. It does not explicitly state when not to use it, but the single-sibling context and clear input provenance make the usage situation clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.1.0
    • First observedbuscar_papers_novos
    • First observedresumir_paper

TDQS

A4.4/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: one discovers new papers, the other summarizes a specific paper. There is no overlap or ambiguity about which tool to use.

Naming Consistency5/5

Both tool names follow the same verb_noun pattern in Portuguese: buscar_papers_novos and resumir_paper. This is highly predictable and consistent.

Tool Count3/5

With only two tools, the server feels minimal but not unreasonable for its narrow scope. It covers a simple search-and-summarize workflow, though it is borderline thin.

Completeness4/5

The core workflows are covered: discovering papers and summarizing them. A minor gap is the lack of a way to list configured topics used by the search filter, but the server's stated purpose is otherwise satisfied.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    MCP server pulling academic publications (arXiv, PubMed, HF Daily Papers), trending code (GitHub, HF Hub), and medical-device regulatory data (FDA 510(k), recalls) into newspaper-style briefings. Per-category round-robin, weighted configuration, sandbox-safe Python launcher.
    16
    5
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables local research workflows (paper discovery, relevance scoring, digests) and homelab monitoring (Prometheus, logs) through an MCP server, using local LLM inference via Ollama with no cloud dependencies.
    -