mcp-techtrend

Servidor MCP de múltiples fuentes: arXiv + PubMed + GitHub + HuggingFace + openFDA 510(k)/Retiradas. Resúmenes estilo periódico, ajuste por dominio, lanzador Python seguro en entorno aislado.

Documentación

trends-mcp

mcp-techTrend MCP server

Documentación en coreano: README.ko.md

Un único servidor MCP que obtiene datos de tendencias académicas + de código + regulatorias de dispositivos médicos de siete fuentes y genera resúmenes con formato de periódico, con ajustes específicos por dominio integrados.

FuenteHerramientasNotas
arXivarxiv_recent, arxiv_searchRotación round-robin por categoría para que las categorías pequeñas no se vean superadas por las grandes
PubMedpubmed_searchResúmenes completos vía efetch.fcgi
HF Daily Paperspaperswithcode_trendingOrdenados por votos positivos de la comunidad (reemplaza la API de PwC retirada)
GitHubgithub_trending, github_searchExtracción de la página de tendencias + API de búsqueda con filtro de fecha created:>
Hugging Facehuggingface_trendingModelos / datasets / spaces, en tendencia o recientes
openFDA 510(k)fda_510k_recentAutorizaciones de dispositivos
openFDA Recallsfda_recalls_recentEventos de retiro con filtro de clase
(agregadores)trends_digest, trends_briefingLlamadas paralelas a múltiples fuentes

trends_briefing es la herramienta principal: invoca "weekly news" / "주간 뉴스" y obtén un resumen con formato de periódico de todas las fuentes habilitadas, traducido automáticamente al idioma de conversación del usuario por el LLM.


Por qué existe esto

La mayoría de los servidores MCP académicos / de código / regulatorios son de una sola fuente. Este es multifuente y consciente del dominio: un investigador que sigue IA en imágenes médicas, un ingeniero de ML que sigue artículos de ML, un analista de seguridad que observa CVEs y repositorios en tendencia — todos configuran una vez vía python configure.py, y luego trends_briefing se convierte en el "periódico del lunes por la mañana" para su dominio.

Lo que lo hace útil:

  • Formato de periódico con sugerencia de traducción: el LLM traduce automáticamente el texto de la fuente (resúmenes de artículos, razones de retiro, etc.) al idioma de tu conversación mientras preserva identificadores, URLs y valores métricos textualmente.
  • Rotación round-robin por categoría para arXiv: cs.HC (~50 artículos/semana) no se ve superado por cs.LG (~1500/semana) cuando ambos se rastrean juntos.
  • Caché TTL + coalescencia de solicitudes concurrentes: las llamadas repetidas y los resúmenes paralelos no saturan las APIs ascendentes.
  • Sin tokens obligatorios. Las siete fuentes funcionan de forma anónima; los tokens solo elevan el límite de tasa por fuente.
  • Lanzador Python seguro para sandbox. Omite el bloqueo claude_desktop_config.json env (que trunca valores con espacios en algunas compilaciones de macOS) estableciendo variables de entorno en Python antes de entregar el control al servidor.

Instalación

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

Conéctate a 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 apunta a run.py (el lanzador), no a trends_mcp.py. El lanzador establece variables de entorno específicas del dominio antes de que el servidor se inicie.

Reinicia Claude Desktop. El servidor trends debería aparecer con las herramientas listadas abajo (la cantidad depende de tus fuentes habilitadas).


Configuración

Una única fuente de verdad: run.py. Dos formas de editarla:

A. TUI interactivo — configure.py (recomendado)

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

Alterna fuentes con números, establece pesos de arXiv con set 1 7, aplica ajustes preestablecidos con preset medical-imaging, guarda con [6]. La acción de guardar respalda en run.py.bak, escribe el nuevo bloque SETTINGS (basado en AST — nunca toca código que no sea de configuración) y ejecuta pkill -f trends_mcp para que Claude Desktop reinicie el servidor con la nueva configuración en la próxima llamada.

Las etiquetas del menú TUI están en coreano; los comandos y ajustes preestablecidos están en inglés. La i18n del propio TUI está en la hoja de ruta de v0.2.

Modos de un solo uso:

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

B. Edición directa — bloque 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

Reinicia Claude Desktop después de guardar (o pkill -f trends_mcp).

C. Desde el chat — herramientas trends_set_*

Mismo bloque SETTINGS, editado mediante llamadas a herramientas MCP. La ruta de chat y configure.py leen y escriben el mismo run.py (fuente única de verdad), por lo que los cambios desde cualquier lado son visibles para el otro.

Solo dilo en el chat:

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

El host Claude elige la herramienta trends_set_* correcta y confirma qué cambió. Después de cualquier cambio, reinicia Claude Desktop (o ejecuta pkill -f trends_mcp en una terminal) — el servidor MCP lee el bloque SETTINGS al momento de iniciarse.

HerramientaPropósito
trends_get_configMuestra fuentes, categorías, consulta y qué tokens están configurados (los valores nunca se devuelven)
trends_set_enabled_sources(sources)Habilita un subconjunto; ["*"] o ["all"] para todos
trends_set_arxiv_categories(categories)Lista estilo ["cs.LG:5", "cs.HC:3"]
trends_set_pubmed_query(query)Sintaxis de PubMed (MeSH, etiquetas [Title/Abstract])
trends_set_token(provider, value)provider ∈ {github, hf, ncbi, openfda}; valor vacío limpia

Tokens: trends-mcp solo realiza operaciones de lectura, así que crea tokens con alcance mínimo — para GitHub, sin alcance alguno (solo autenticación para el límite de tasa). No pongas un PAT con alcance repo aquí; sería un permiso excesivo.

Ajustes preestablecidos

# 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"

Categorías comunes de arXiv (referencia completa: ARXIV_CATEGORIES.md):

CódigoCampoArtículos semanales (aprox.)
cs.AIInteligencia Artificial500–800
cs.LGAprendizaje Automático1,500–2,000 (la más grande)
cs.CVVisión por Computadora1,000–1,500
cs.CLPLN500–800
cs.HCHCI / UX50–100
cs.RORobótica100–200
cs.CRSeguridad~200
eess.IVProcesamiento de Imágenes/Vídeo (imágenes médicas)100–200
q-bio.QMBiología cuantitativa50–100

Lista de fuentes permitidas

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

Vacío / "*" / "all" = habilita todo. Las fuentes deshabilitadas no registran sus herramientas, por lo que la lista de herramientas del chat se reduce. trends_digest y trends_briefing permanecen registradas y omiten las fuentes deshabilitadas correctamente.


Herramientas

HerramientaPropósito
arxiv_recentArtículos recientes en una categoría, por fecha de envío
arxiv_searchBúsqueda por palabra clave / sintaxis de campo (ti:, au:, abs:, cat:)
pubmed_searchBúsqueda en PubMed (términos MeSH, etiquetas de campo) — resúmenes vía efetch
paperswithcode_trendingHF Daily Papers, ordenados por votos positivos de la comunidad
github_trendingNavega por github.com/trending (extracción HTML)
github_searchAPI de búsqueda de GitHub; days filtra por created:
huggingface_trendingModelos / datasets / spaces del Hub de HF
fda_510k_recentAutorizaciones recientes de FDA 510(k)
fda_recalls_recentRetiros recientes de dispositivos médicos de la FDA (filtro de clase)
trends_digestResumen multifuente en lista de viñetas, dado un tema
trends_briefingResumen multifuente con formato de periódico; tema opcional
trends_get_configMuestra la configuración actual (los valores de tokens nunca se devuelven)
trends_set_enabled_sourcesAlterna qué fuentes están activas
trends_set_arxiv_categoriesEstablece categorías de arXiv + pesos por categoría
trends_set_pubmed_queryEstablece la consulta predeterminada de PubMed
trends_set_tokenEstablece / limpia un token potenciador de límite de tasa

Todas las herramientas de búsqueda aceptan days=N para filtrar por últimos N días. trends_briefing agrupa resultados en secciones 🎓 Investigación / 💻 Código y Modelos / 🏥 Regulatorio. Las cinco herramientas trends_*_config / trends_set_* son espejos de configuración de configure.py — consulta Configuración § C.

trends_digest vs trends_briefing

trends_digesttrends_briefing
Temaobligatorioopcional (modo "qué hay de nuevo")
Rango de fuentessubconjunto configurable (predeterminado 4)todas las fuentes habilitadas
Formatoresumen en lista de viñetasformato de periódico agrupado
Caso de usoinmersión profunda en un temaresumen semanal regular

Caché

Una caché TTL en memoria por proceso envuelve cada respuesta HTTP. Las solicitudes idénticas concurrentes se combinan vía asyncio.Lock por clave — N llamadas paralelas disparan una sola solicitud ascendente.

Grupo TTLDuraciónHerramientas
Tendencias5 mingithub_trending, paperswithcode_trending, huggingface_trending (orden de tendencias), github_search (con days)
Predeterminado10 minarxiv_recent, arxiv_search, github_search, huggingface_trending (otros órdenes)
Estático1 horapubmed_search, fda_510k_recent, fda_recalls_recent

Hasta 256 entradas; la más antigua se expulsa cuando está llena. No hay forma de deshabilitarla — los TTL son lo suficientemente cortos como para que la obsolescencia esté acotada.


Limitaciones conocidas

  • GitHub Trending es extracción HTML — no existe una API oficial. Los cambios de diseño pueden romperla. Sustituto estable de tendencias: github_search con days=7 y sort=stars.
  • HF trendingScore no está documentado. La superficie de la API puede cambiar.
  • HF Daily Papers cubre ~50 artículos seleccionados por día, no todo arXiv. Es un feed de "de qué se habló", no exhaustivo.
  • arXiv no tiene tendencias nativas — lo aproximamos mediante feeds de envíos recientes equilibrados por categoría.
  • El campo classification de openFDA a veces devuelve None incluso en retiros clasificados recientemente (retraso de datos ascendente). El índice de búsqueda también se retrasa.

Hoja de ruta (TODO)

  • v0.2: i18n para el menú TUI y los encabezados de sección del resumen
  • bioRxiv / medRxiv vía RSS
  • Semantic Scholar (grafo de citas)
  • openFDA Adverse Events (MAUDE)
  • Extracción de EUDAMED (UE)
  • PMDA (dispositivos médicos de Japón)
  • MFDS (dispositivos médicos de Corea)
  • Suite de pruebas basada en mocks para CI

Licencia

MIT