mcp-techTrend
trends-mcp
Documentación en coreano: README.ko.md
A single MCP server that pulls academic + code + medical-device-regulatory trend data from seven sources and renders newspaper-style briefings — with per-domain tuning baked in.
Fuente | Herramientas | Notas |
arXiv |
| Round-robin por categoría para que las categorías pequeñas no sean eclipsadas por las grandes |
PubMed |
| Resúmenes completos vía |
HF Daily Papers |
| Ordenado por votos de la comunidad (reemplaza la API de PwC que dejó de funcionar) |
GitHub |
| Scraping de la página de tendencias + API de búsqueda con filtro de fecha |
Hugging Face |
| Modelos / datasets / spaces, en tendencia o recientes |
openFDA 510(k) |
| Autorizaciones de dispositivos |
openFDA Recalls |
| Eventos de retirada con filtro de clase |
(agregadores) |
| 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 rastrea IA de 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, 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 fuente (resúmenes de artículos, razones de retiradas, etc.) al idioma de tu conversación mientras preserva identificadores, URLs y valores métricos literalmente.
Round-robin por categoría para arXiv —
cs.HC(~50 artículos/sem) no se ve eclipsado porcs.LG(~1500/sem) cuando ambos se rastrean juntos.Caché TTL + coalescencia de solicitudes concurrentes — las llamadas repetidas y los resúmenes paralelos no saturan las APIs upstream.
No se requieren tokens. Las siete fuentes funcionan de forma anónima; los tokens solo aumentan el límite de tasa por fuente.
Lanzador de Python seguro en sandbox. Evita el bloque
envdeclaude_desktop_config.json(que trunca valores con espacios en algunas compilaciones de macOS) configurando variables de entorno en Python antes de pasarlas al servidor.
Related MCP server: mcp-ai-news-server
Instalación
git clone https://github.com/salwks/mcp-techTrend.git
cd mcp-techTrend
python3 -m venv .venv
.venv/bin/pip install -r requirements.txtConé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 se inicie el servidor.
Reinicia Claude Desktop. El servidor trends debería aparecer con 11 herramientas.
Configuración
Una única fuente de verdad: run.py. Dos formas de editarlo:
A. TUI interactiva — 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 savingAlterna fuentes con números, establece pesos de arXiv con set 1 7, aplica preajustes
con preset medical-imaging, guarda con [6]. La acción de guardar crea una copia de seguridad 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 siguiente llamada.
Las etiquetas del menú TUI están en coreano; los comandos y preajustes están en inglés. La internacionalización (i18n) de la propia TUI está en la hoja de ruta de la v0.2.
Modos de disparo único:
python configure.py --show # print current config
python configure.py --restart # pkill stale MCP processesB. 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/dayReinicia Claude Desktop después de guardar (o pkill -f trends_mcp).
Preajustes
# 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) |
| Inteligencia Artificial | 500–800 |
| Aprendizaje Automático | 1,500–2,000 (el más grande) |
| Visión por Computador | 1,000–1,500 |
| PLN | 500–800 |
| HCI / UX | 50–100 |
| Robótica | 100–200 |
| Seguridad | ~200 |
| Procesamiento de Imagen/Video (imágenes médicas) | 100–200 |
| Biología cuantitativa | 50–100 |
Lista de permitidos de fuentes
TRENDS_ENABLED_SOURCES = "arxiv,github,huggingface,paperswithcode"
# → fda_510k, fda_recalls, pubmed tools won't appear in the tool list at allVacío / "*" / "all" = habilitar todo. Las fuentes deshabilitadas no registran
sus herramientas, por lo que la lista de herramientas de chat se reduce. trends_digest y
trends_briefing permanecen registrados y omiten las fuentes deshabilitadas correctamente.
Herramientas
Herramienta | Propósito |
| Artículos recientes en una categoría, por fecha de envío |
| Búsqueda por palabra clave / sintaxis de campo ( |
| Búsqueda en PubMed (términos MeSH, etiquetas de campo) — resúmenes vía efetch |
| HF Daily Papers, ordenado por votos de la comunidad |
| Explorar github.com/trending (scraping HTML) |
| API de búsqueda de GitHub; |
| Modelos / datasets / spaces de HF Hub |
| Autorizaciones recientes de la FDA 510(k) |
| Retiradas recientes de dispositivos médicos de la FDA (filtro de clase) |
| Resumen en lista de viñetas multifuente, dado un tema |
| Resumen de periódico multifuente; tema opcional |
Todas las herramientas de búsqueda aceptan days=N para filtrar por los últimos N días. trends_briefing
agrupa los resultados en secciones de 🎓 Investigación / 💻 Código y Modelos / 🏥 Regulatorio.
trends_digest vs trends_briefing
|
| |
Tema | requerido | 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é
La caché TTL en memoria por proceso envuelve cada respuesta HTTP. Las solicitudes concurrentes
identes se fusionan mediante asyncio.Lock por clave — N llamadores paralelos disparan una solicitud upstream.
Grupo TTL | Duración | Herramientas |
Tendencias | 5 min |
|
Predeterminado | 10 min |
|
Estático | 1 hora |
|
Hasta 256 entradas; las más antiguas se eliminan cuando está lleno. No hay forma de deshabilitar — los TTL son lo suficientemente cortos como para que la obsolescencia esté limitada.
Limitaciones conocidas
GitHub Trending es scraping HTML — no existe una API oficial. Los cambios de diseño pueden romperlo. Sustituto de tendencias estable:
github_searchcondays=7ysort=stars.trendingScorede HF no está documentado. La superficie de la API puede cambiar.HF Daily Papers cubre ~50 artículos seleccionados al día, no todo arXiv. Es un feed de "de qué se habló", no exhaustivo.
arXiv no tiene tendencias nativas — las aproximamos mediante feeds de envíos recientes equilibrados por categoría.
El campo
classificationde openFDA a veces devuelveNoneincluso en retiradas clasificadas recientemente (retraso de datos upstream). El índice de búsqueda también tiene retraso.
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)
Eventos adversos de openFDA (MAUDE)
Scraping de EUDAMED de la UE
PMDA (dispositivos médicos de Japón)
MFDS (dispositivos médicos de Corea)
Suite de pruebas basada en mocks para CI
Licencia
Available Tools
16 toolsarxiv_recentARead-only
Fetch recent arXiv papers in a category, sorted by submission date (newest first). days filters by published date.
Common categories: cs.AI (general AI), cs.LG (machine learning), cs.CV (computer vision), cs.CL (NLP), cs.HC (HCI / UX), cs.RO (robotics), cs.NE (neural networks), stat.ML (statistical ML), eess.IV (image/video processing — medical imaging lives here), eess.SP (signal processing), q-bio.QM (quantitative biology).
Inputs: category (required), days, max_results, response_format. Returns: result
arxiv_searchARead-onlyIdempotent
Search arXiv. Plain keywords work (auto-prefixed all:); for advanced queries use arXiv field syntax: ti: (title), au: (author), abs: (abstract), cat: (category, e.g. cat:eess.IV). days cuts off results older than N days (published field). When days is set, results are sorted by submission date instead of relevance.
Inputs: query (required), days, max_results, sort_by, +1 more. Returns: result
fda_510k_recentARead-onlyIdempotent
Recent FDA 510(k) clearances via openFDA. Date filter is always applied. openFDA uses token-exact matching on string fields — for partial name matches use wildcards (e.g. device_name:mammo* not device_name:mammography).
Inputs: query, days, max_results, response_format. Returns: result
fda_recalls_recentARead-onlyIdempotent
Recent FDA medical device recalls via openFDA. Optionally filter by class (1=most serious, 3=least). Note: openFDA query syntax uses token-exact matching on string fields — for partial matches use wildcards (e.g. product_description:mammog*).
Inputs: query, days, class_level, max_results, +1 more. Returns: result
github_searchARead-onlyIdempotent
Search GitHub repositories by keyword via the official Search API. USE THIS WHEN: user has a specific topic ('medical imaging 리포', 'mammography GitHub'). days filters by repository created_at (treats it as 'repos created in the last N days') — pair with sort=stars for a stable trending-substitute. USE github_trending INSTEAD WHEN: no specific topic, just browsing.
Inputs: query (required), language, days, sort, +2 more. Returns: result
github_trendingARead-only
Browse github.com/trending — the public 'what's hot now' feed. USE THIS WHEN: user wants to browse trending repos with no specific topic in mind ('파이썬 트렌딩 보여줘', 'GitHub 핫한 거'). USE github_search INSTEAD WHEN: user has a specific topic/keyword. Note: this is HTML scraping (no official API), so layout changes can break it.
Inputs: language, since, max_results, response_format. Returns: result
huggingface_trendingARead-only
Browse Hugging Face Hub. kind selects models / datasets / spaces (default models). sort: trending / downloads / likes / recent. days filters by lastModified — CAUTION: this catches old entries with recent edits, not just newly published ones. For 'truly new' discovery prefer sort='recent' + days=N.
Inputs: kind, sort, query, tag, +3 more. Returns: result
paperswithcode_trendingARead-only
Daily curated AI papers feed (now backed by Hugging Face's daily_papers — Papers with Code API was sunset after the 2024 HF acquisition). Empty query returns the newest curated papers. Search is client-side filtering over the daily-papers stream.
Inputs: query, days, sort_by, max_results, +1 more. Returns: result
pubmed_searchARead-onlyIdempotent
Search PubMed for biomedical publications. Plain keywords work; for advanced queries use MeSH and field tags: mammography[MeSH], smith[Author], 2025[PDat]. Combine with AND/OR. days filters by publication date (PDat field).
Inputs: query (required), days, max_results, response_format. Returns: result
trends_briefingARead-only
Newspaper-style weekly briefing across all enabled sources. Topic is optional — without it, each source shows its 'what's new' feed. Use this when the user asks for '주간 뉴스' / '주간 트렌드' / 'weekly news' / 'briefing' style output.
PRESENTATION RULES — follow strictly:
PRESERVE STRUCTURE EXACTLY. The output is already organized into three groups (🎓 연구 동향 / 💻 코드 / 모델 / 🏥 규제 / 의료기기) and seven distinct source sections (arXiv, PubMed, Papers with Code, GitHub, Hugging Face, FDA 510(k), FDA Recalls). Do NOT merge sections (e.g. don't combine arXiv + PubMed into one 'papers' list). Do NOT reorder sections or items within a section. Do NOT change emoji or section headers.
TRANSLATE INLINE TEXT ONLY. Translate paper titles, abstracts, descriptions, and recall reasons into the user's current conversation language. Keep section headers, group titles, emoji, and metadata labels in their original form.
PRESERVE VERBATIM: proper nouns, author names, journal names, repository names (e.g. 'mattpocock/skills'), arXiv IDs, PMIDs, k_numbers, URLs, dates, and metric values (stars, downloads, etc.).
NO SUMMARIZATION at the briefing level. Render every item the tool returned. The user wants the full feed, not your synthesis.
ITEM-LEVEL DEPTH. For each paper, repo, model, or recall, preserve enough of the upstream abstract/description to convey what's new and why it matters — typically 2–4 sentences (around 150–300 chars of translated content per item). Do NOT collapse to a single headline-length sentence; the user wants to grasp each item without clicking through. Carry the problem → method → result/contribution structure when present in the source abstract.
Inputs: days, per_source_limit, topic, arxiv_categories, +1 more. Returns: result
trends_digestARead-only
One-shot multi-source digest for a topic. Calls sources in parallel; partial failures don't break the report.
PRESENTATION RULES — follow strictly:
PRESERVE SECTION STRUCTURE. The output has separate per-source sections (📌 arXiv, 📌 PubMed, 📌 GitHub, etc.). Do NOT merge them.
TRANSLATE INLINE TEXT into the user's conversation language; keep section headers and emoji as-is.
PRESERVE VERBATIM: proper nouns, IDs (PMID, k_number, arXiv IDs), URLs, repository names, metric values.
Render every item — no summarization at the digest level.
Inputs: topic (required), sources, per_source_limit, days. Returns: result
trends_get_configARead-onlyIdempotent
Show current trends-mcp configuration: enabled sources, arXiv categories, PubMed default query, and which optional rate-limit tokens are set. Token VALUES are never returned (only whether they are configured). Use this to confirm state before or after a trends_set_* call.
Inputs: no named parameters. Returns: object
trends_set_arxiv_categoriesAIdempotent
Set the default arXiv categories used by trends_briefing. Pass a list of entries; each entry is 'code' (e.g. 'cs.HC') or 'code:weight' (e.g. 'cs.HC:5'). Weight = papers per briefing per category (default 3). Example: ['cs.LG:5', 'cs.CV:3', 'cs.CL:2']. See ARXIV_CATEGORIES.md for the full list of valid codes.
Inputs: categories (required). Returns: result
trends_set_enabled_sourcesAIdempotent
Set which sources are enabled. Pass a list like ['arxiv', 'github']. Valid: arxiv, github, huggingface, paperswithcode, pubmed, fda_510k, fda_recalls. Pass ['*'] or ['all'] to enable all. Disabled sources' tools won't appear in the tool list at all (requires restart to take effect).
Inputs: sources (required). Returns: result
trends_set_pubmed_queryAIdempotent
Set the default PubMed query used by trends_briefing when no topic is provided. Use PubMed syntax: MeSH terms, [Title/Abstract] tags, AND/OR/NOT. [Title/Abstract] tags keep matches precise. Example: '(deep learning) AND (radiology[Title/Abstract])'.
Inputs: query (required). Returns: result
trends_set_tokenAIdempotent
Set or clear an optional rate-limit booster token. trends-mcp ONLY needs read access — when creating these tokens use the MINIMAL scope:
github: NO scope at all (just authentication for rate limit). Do NOT use a token with 'repo' scope here.
hf: read access only.
ncbi / openfda: API keys (no scope concept). Pass empty string for value to remove a token. Provider must be one of: github, hf, ncbi, openfda.
Inputs: provider (required), value (required). Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 16 tools
Each tool targets a distinct source or operation (e.g., arXiv search vs. recent, FDA 510k vs. recalls, GitHub search vs. trending). Even config tools are clearly separated. No ambiguity between tools.
All tools follow a consistent pattern: source_action (e.g., arxiv_recent, github_search) for data tools, and trends_verb for configuration tools. Lowercase with underscores throughout.
16 tools is well-scoped for a multi-source trend aggregation server. Each tool covers a specific need across multiple sources and configuration, without bloat.
The tool set covers all necessary operations for the domain: retrieval (recent, search, trending) per source, aggregation (briefing, digest), and full configuration (sources, categories, tokens). No obvious gaps.
Maintenance
Related MCP Connectors
Managed cloud RSS and Atom feed reader with a remote Model Context Protocol (MCP) endpoint. Zero server setup required — enables AI agents like Claude to instantly subscribe to feeds, search full-text articles, extract readable content, and access curated AI editions ("Your Newspaper") over secure streamable HTTP.
One MCP server for all web data. Scrape, search, crawl, and AI research in one install.
RSS & Atom feed manager with full-text search, AI curation, and remote MCP endpoint.
Unified 15-tool SEO, SERP, clean Markdown & GEO (LLM citation Share-of-Voice) MCP server.
Related MCP Servers
- AlicenseAqualityDmaintenanceA personalized news briefing MCP server that filters information from RSS, Reddit, and Hacker News based on user-defined interests and preferences. It also includes stock monitoring and alerting features.29Apache 2.0
- AlicenseNot gradedqualityDmaintenanceMCP server that fetches and filters AI-related news from 20+ RSS feeds with scheduled notifications and email digests.1MIT
- FlicenseNot gradedqualityDmaintenanceLocal MCP server that ingests and normalizes recent AI, tech, and research news from multiple sources, exposing tools for media agents to query and retrieve article content on demand.-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that fetches, dedupes, and scores women's-health & FemTech research and industry news, designed to feed GitHub Agentic Workflows and an auto-updating Astro + RSS site.MIT