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
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.
| Fuente | Herramientas | Notas |
|---|---|---|
| arXiv | arxiv_recent, arxiv_search | Rotación round-robin por categoría para que las categorías pequeñas no se vean superadas por las grandes |
| PubMed | pubmed_search | Resúmenes completos vía efetch.fcgi |
| HF Daily Papers | paperswithcode_trending | Ordenados por votos positivos de la comunidad (reemplaza la API de PwC retirada) |
| GitHub | github_trending, github_search | Extracción de la página de tendencias + API de búsqueda con filtro de fecha created:> |
| Hugging Face | huggingface_trending | Modelos / datasets / spaces, en tendencia o recientes |
| openFDA 510(k) | fda_510k_recent | Autorizaciones de dispositivos |
| openFDA Recalls | fda_recalls_recent | Eventos de retiro con filtro de clase |
| (agregadores) | trends_digest, trends_briefing | Llamadas 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 porcs.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.jsonenv(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"]
}
}
}
⚠️
argsapunta arun.py(el lanzador), no atrends_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.
| Herramienta | Propósito |
|---|---|
trends_get_config | Muestra 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
repoaquí; 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ódigo | Campo | Artículos semanales (aprox.) |
|---|---|---|
cs.AI | Inteligencia Artificial | 500–800 |
cs.LG | Aprendizaje Automático | 1,500–2,000 (la más grande) |
cs.CV | Visión por Computadora | 1,000–1,500 |
cs.CL | PLN | 500–800 |
cs.HC | HCI / UX | 50–100 |
cs.RO | Robótica | 100–200 |
cs.CR | Seguridad | ~200 |
eess.IV | Procesamiento de Imágenes/Vídeo (imágenes médicas) | 100–200 |
q-bio.QM | Biología cuantitativa | 50–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
| Herramienta | Propósito |
|---|---|
arxiv_recent | Artículos recientes en una categoría, por fecha de envío |
arxiv_search | Búsqueda por palabra clave / sintaxis de campo (ti:, au:, abs:, cat:) |
pubmed_search | Búsqueda en PubMed (términos MeSH, etiquetas de campo) — resúmenes vía efetch |
paperswithcode_trending | HF Daily Papers, ordenados por votos positivos de la comunidad |
github_trending | Navega por github.com/trending (extracción HTML) |
github_search | API de búsqueda de GitHub; days filtra por created: |
huggingface_trending | Modelos / datasets / spaces del Hub de HF |
fda_510k_recent | Autorizaciones recientes de FDA 510(k) |
fda_recalls_recent | Retiros recientes de dispositivos médicos de la FDA (filtro de clase) |
trends_digest | Resumen multifuente en lista de viñetas, dado un tema |
trends_briefing | Resumen multifuente con formato de periódico; tema opcional |
trends_get_config | Muestra la configuración actual (los valores de tokens nunca se devuelven) |
trends_set_enabled_sources | Alterna qué fuentes están activas |
trends_set_arxiv_categories | Establece categorías de arXiv + pesos por categoría |
trends_set_pubmed_query | Establece la consulta predeterminada de PubMed |
trends_set_token | Establece / 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_digest | trends_briefing | |
|---|---|---|
| Tema | obligatorio | opcional (modo "qué hay de nuevo") |
| Rango de fuentes | subconjunto configurable (predeterminado 4) | todas las fuentes habilitadas |
| Formato | resumen en lista de viñetas | formato de periódico agrupado |
| Caso de uso | inmersión profunda en un tema | resumen 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 TTL | Duración | Herramientas |
|---|---|---|
| Tendencias | 5 min | github_trending, paperswithcode_trending, huggingface_trending (orden de tendencias), github_search (con days) |
| Predeterminado | 10 min | arxiv_recent, arxiv_search, github_search, huggingface_trending (otros órdenes) |
| Estático | 1 hora | pubmed_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_searchcondays=7ysort=stars. - HF
trendingScoreno 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
classificationde openFDA a veces devuelveNoneincluso 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