mcp-techtrend

Servidor MCP de múltiplas fontes: arXiv + PubMed + GitHub + HuggingFace + openFDA 510(k)/Recalls. Briefings em estilo jornalístico, ajuste por domínio, lançador Python seguro em sandbox.

Documentação

trends-mcp

mcp-techTrend MCP server

한국어 문서: README.ko.md

Um único servidor MCP que coleta dados de tendências acadêmicas + de código + regulatórias de dispositivos médicos de sete fontes e gera resumos em formato de jornal — com ajuste por domínio incorporado.

FonteFerramentasObservações
arXivarxiv_recent, arxiv_searchRound-robin por categoria para que categorias pequenas não sejam ofuscadas pelas grandes
PubMedpubmed_searchResumos completos via efetch.fcgi
HF Daily Paperspaperswithcode_trendingOrdenados por votos da comunidade (substitui a API PwC descontinuada)
GitHubgithub_trending, github_searchRaspagem da página de tendências + API de busca com filtro de data created:>
Hugging Facehuggingface_trendingModelos / datasets / spaces, em tendência ou recentes
openFDA 510(k)fda_510k_recentAutorizações de dispositivos
openFDA Recallsfda_recalls_recentEventos de recall com filtro de classe
(agregadores)trends_digest, trends_briefingChamadas paralelas de múltiplas fontes

trends_briefing é a ferramenta principal: invoque "weekly news" / "주간 뉴스" e receba um resumo em formato de jornal de todas as fontes ativadas, traduzido automaticamente para o idioma da conversa do usuário pelo LLM.


Por que isso existe

A maioria dos servidores MCP acadêmicos / de código / regulatórios é de fonte única. Este é multifonte e ciente do domínio: um pesquisador acompanhando IA de imagens médicas, um engenheiro de ML seguindo artigos de ML, um analista de segurança observando CVEs e repositórios em alta — todos configuram uma vez via python configure.py, e então trends_briefing se torna o "jornal de segunda-feira de manhã" para o domínio deles.

O que o torna útil:

  • Formato de jornal com dica de tradução — o LLM traduz automaticamente o texto da fonte (resumos de artigos, motivos de recall, etc.) para o idioma da sua conversa, preservando identificadores, URLs e valores de métricas verbatim.
  • Round-robin por categoria para arXiv — cs.HC (~50 artigos/sem) não é ofuscada por cs.LG (~1500/sem) quando ambas são acompanhadas juntas.
  • Cache TTL + coalescência de requisições concorrentes — chamadas repetidas e resumos paralelos não sobrecarregam as APIs upstream.
  • Nenhum token obrigatório. Todas as sete fontes funcionam anonimamente; tokens apenas elevam o teto do limite de taxa por fonte.
  • Launcher Python seguro para sandbox. Contorna o bloqueio claude_desktop_config.json env (que trunca valores com espaços em alguns builds de macOS) definindo variáveis de ambiente em Python antes de entregar ao servidor.

Instalação

git clone https://github.com/salwks/mcp-techTrend.git
cd mcp-techTrend
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt

Conecte ao Claude Desktop editando ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "trends": {
      "command": "/path/to/trends-mcp/.venv/bin/python",
      "args": ["/path/to/trends-mcp/run.py"]
    }
  }
}

⚠️ args aponta para run.py (o launcher), não trends_mcp.py. O launcher define variáveis de ambiente específicas do domínio antes de o servidor iniciar.

Reinicie o Claude Desktop. O servidor trends deve aparecer com as ferramentas listadas abaixo (a quantidade depende das suas fontes ativadas).


Configuração

Fonte única de verdade: run.py. Duas maneiras de editá-la:

A. TUI interativa — configure.py (recomendada)

python configure.py
═══ trends-mcp 설정 ═══
  [1] Active sources       (7/7 enabled)
  [2] arXiv categories     (4 entries · 13 papers/wk)
  [3] PubMed query
  [4] API tokens           (0/4 set)
  [5] Show current config
  [6] Save and restart
  [7] Quit without saving

Alterne fontes com números, defina pesos do arXiv com set 1 7, aplique predefinições com preset medical-imaging, salve com [6]. A ação de salvar faz backup em run.py.bak, grava o novo bloco SETTINGS (baseado em AST — nunca toca em código que não seja de configuração) e executa pkill -f trends_mcp para que o Claude Desktop reinicie o servidor com a nova configuração na próxima chamada.

Os rótulos do menu da TUI estão em coreano; comandos e predefinições estão em inglês. A i18n da própria TUI está no roadmap da v0.2.

Modos de execução única:

python configure.py --show       # print current config
python configure.py --restart    # pkill stale MCP processes

B. Edição direta — bloco SETTINGS de run.py

TRENDS_ENABLED_SOURCES = ""                          # "" = all
TRENDS_ARXIV_CATEGORIES = "cs.LG:5,cs.CV:3,cs.CL:3,cs.AI:2"
TRENDS_DEFAULT_PUBMED_QUERY = "(deep learning OR AI) AND (medical OR clinical)"
# GITHUB_TOKEN = "ghp_..."         # raises 60 → 5,000 req/h
# HF_TOKEN = "hf_..."
# NCBI_API_KEY = "..."             # raises 3 → 10 req/s for PubMed
# OPENFDA_API_KEY = "..."          # raises 240 → 120,000 req/day

Reinicie o Claude Desktop após salvar (ou pkill -f trends_mcp).

C. Pelo chat — ferramentas trends_set_*

Mesmo bloco SETTINGS, editado por chamadas de ferramentas MCP. O caminho do chat e configure.py leem e gravam o mesmo run.py (fonte única de verdade), então alterações de qualquer lado são visíveis para o outro.

Basta dizer no chat:

"트렌드에서 PubMed 쿼리를 cardiology 쪽으로 바꿔줘" "github와 arxiv만 켜둬" "GitHub 토큰 등록할게: ghp_..."

O Claude anfitrião escolhe a ferramenta trends_set_* certa e confirma o que mudou. Após qualquer alteração, reinicie o Claude Desktop (ou execute pkill -f trends_mcp em um terminal) — o servidor MCP lê o bloco SETTINGS no momento da inicialização.

FerramentaFinalidade
trends_get_configMostra fontes, categorias, consulta atuais e quais tokens estão definidos (valores nunca são retornados)
trends_set_enabled_sources(sources)Ativa um subconjunto; ["*"] ou ["all"] para todos
trends_set_arxiv_categories(categories)Lista no estilo ["cs.LG:5", "cs.HC:3"]
trends_set_pubmed_query(query)Sintaxe do PubMed (MeSH, tags [Title/Abstract])
trends_set_token(provider, value)provider ∈ {github, hf, ncbi, openfda}; valor vazio limpa

Tokens: o trends-mcp só faz operações de leitura, então crie tokens com escopo mínimo — para GitHub, nenhum escopo (apenas autenticação para limite de taxa). Não coloque um PAT com escopo repo aqui; seria permissão demais.

Predefinições

# AI/ML researcher (default)
TRENDS_ARXIV_CATEGORIES = "cs.LG:5,cs.CV:3,cs.CL:3,cs.AI:2"

# Medical imaging / clinical AI
TRENDS_ARXIV_CATEGORIES = "eess.IV:5,cs.CV:3,cs.HC:2,q-bio.QM:2"

# Robotics
TRENDS_ARXIV_CATEGORIES = "cs.RO:5,cs.AI:3,cs.LG:2,cs.CV:2"

# HCI / UX
TRENDS_ARXIV_CATEGORIES = "cs.HC:5,cs.CY:3,cs.AI:2,cs.SI:2"

# Security
TRENDS_ARXIV_CATEGORIES = "cs.CR:5,cs.LG:2,cs.NI:2"

# Computational biology
TRENDS_ARXIV_CATEGORIES = "q-bio.QM:4,q-bio.GN:3,q-bio.BM:3,stat.AP:2"

Categorias comuns do arXiv (referência completa: ARXIV_CATEGORIES.md):

CódigoÁreaArtigos semanais (aprox.)
cs.AIInteligência Artificial500–800
cs.LGAprendizado de Máquina1.500–2.000 (maior)
cs.CVVisão Computacional1.000–1.500
cs.CLPLN500–800
cs.HCIHC / UX50–100
cs.RORobótica100–200
cs.CRSegurança~200
eess.IVProcessamento de Imagem/Vídeo (imagens médicas)100–200
q-bio.QMBiologia quantitativa50–100

Lista de permissão de fontes

TRENDS_ENABLED_SOURCES = "arxiv,github,huggingface,paperswithcode"
# → fda_510k, fda_recalls, pubmed tools won't appear in the tool list at all

Vazio / "*" / "all" = ativa tudo. Fontes desativadas não registram suas ferramentas, então a própria lista de ferramentas do chat diminui. trends_digest e trends_briefing permanecem registradas e ignoram fontes desativadas com elegância.


Ferramentas

FerramentaFinalidade
arxiv_recentArtigos recentes em uma categoria, por data de submissão
arxiv_searchBusca por palavra-chave / sintaxe de campo (ti:, au:, abs:, cat:)
pubmed_searchBusca no PubMed (termos MeSH, tags de campo) — resumos via efetch
paperswithcode_trendingHF Daily Papers, ordenados por votos da comunidade
github_trendingNavega em github.com/trending (raspagem de HTML)
github_searchAPI de busca do GitHub; days filtra por created:
huggingface_trendingModelos / datasets / spaces do HF Hub
fda_510k_recentAutorizações recentes da FDA 510(k)
fda_recalls_recentRecalls recentes de dispositivos médicos da FDA (filtro de classe)
trends_digestResumo em lista de marcadores de múltiplas fontes, dado um tópico
trends_briefingResumo em formato de jornal de múltiplas fontes; tópico opcional
trends_get_configMostra configurações atuais (valores de token nunca são retornados)
trends_set_enabled_sourcesAlterna quais fontes estão ativas
trends_set_arxiv_categoriesDefine categorias do arXiv + pesos por categoria
trends_set_pubmed_queryDefine a consulta padrão do PubMed
trends_set_tokenDefine / limpa um token de aumento de limite de taxa

Todas as ferramentas de busca aceitam days=N para filtragem de últimos N dias. trends_briefing agrupa resultados em seções 🎓 Pesquisa / 💻 Código & Modelos / 🏥 Regulatório. As cinco ferramentas trends_*_config / trends_set_* são espelhos de configuração de configure.py — veja Configuração § C.

trends_digest vs trends_briefing

trends_digesttrends_briefing
Tópicoobrigatórioopcional (modo "o que há de novo")
Alcance de fontessubconjunto configurável (padrão 4)todas as fontes ativadas
Formatoresumo em lista de marcadoresformato de jornal agrupado
Caso de usomergulho profundo em tópicoresumo semanal regular

Cache

Cache TTL em memória por processo envolve cada resposta HTTP. Requisições idênticas concorrentes são coalescidas via asyncio.Lock por chave — N chamadores paralelos disparam uma requisição upstream.

Grupo TTLDuraçãoFerramentas
Tendências5 mingithub_trending, paperswithcode_trending, huggingface_trending (ordenação por tendência), github_search (com days)
Padrão10 minarxiv_recent, arxiv_search, github_search, huggingface_trending (outras ordenações)
Estático1 horapubmed_search, fda_510k_recent, fda_recalls_recent

Até 256 entradas; as mais antigas são removidas quando cheio. Não há como desativar — os TTLs são curtos o suficiente para que a obsolescência seja limitada.


Limitações conhecidas

  • GitHub Trending é raspagem de HTML — não existe API oficial. Mudanças de layout podem quebrá-lo. Substituto estável de tendências: github_search com days=7 e sort=stars.
  • HF trendingScore não é documentado. A superfície da API pode mudar.
  • HF Daily Papers cobre ~50 artigos curados/dia, não todo o arXiv. É um feed de "o que foi comentado", não exaustivo.
  • arXiv não tem tendências nativas — aproximamos via feeds de submissões recentes balanceados por categoria.
  • O campo classification do openFDA às vezes retorna None mesmo em recalls classificados recentemente (atraso de dados upstream). O índice de busca também atrasa.

Roadmap (TODO)

  • v0.2: i18n para o menu da TUI e cabeçalhos de seção do resumo
  • bioRxiv / medRxiv via RSS
  • Semantic Scholar (grafo de citações)
  • openFDA Eventos Adversos (MAUDE)
  • Raspagem do EUDAMED da UE
  • PMDA (dispositivos médicos do Japão)
  • MFDS (dispositivos médicos da Coreia)
  • Suíte de testes baseada em mocks para CI

Licença

MIT