Labsco
salwks logo

mcp-techtrend

β˜… 1

from salwks

Multi-source MCP server: arXiv + PubMed + GitHub + HuggingFace + openFDA 510(k)/Recalls. Newspaper-style briefings, per-domain tuning, sandbox-safe Python launcher.

πŸ”₯πŸ”₯πŸ”₯πŸ”₯βœ“ VerifiedFreeQuick setup

trends-mcp

mcp-techTrend MCP server

ν•œκ΅­μ–΄ λ¬Έμ„œ: 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.

SourceToolsNotes
arXivarxiv_recent, arxiv_searchPer-category round-robin so small categories aren't drowned by big ones
PubMedpubmed_searchFull abstracts via efetch.fcgi
HF Daily Paperspaperswithcode_trendingSorted by community upvotes (replaces sunset PwC API)
GitHubgithub_trending, github_searchTrending page scrape + Search API with created:> date filter
Hugging Facehuggingface_trendingModels / datasets / spaces, trending or recent
openFDA 510(k)fda_510k_recentDevice clearances
openFDA Recallsfda_recalls_recentRecall events with class filter
(aggregators)trends_digest, trends_briefingMulti-source parallel calls

trends_briefing is the headline tool: invoke "weekly news" / "μ£Όκ°„ λ‰΄μŠ€" and get a newspaper-formatted briefing across all enabled sources, automatically translated into the user's conversation language by the LLM.


Why this exists

Most academic / code / regulatory MCP servers are single-source. This one is multi-source and domain-aware: a researcher tracking medical-imaging AI, an ML engineer following ML papers, a security analyst watching CVEs and trending repos β€” all configure once via python configure.py, then trends_briefing becomes the "Monday morning newspaper" for their domain.

What makes it useful:

  • Newspaper format with translation hint β€” the LLM auto-translates source text (paper abstracts, recall reasons, etc.) to your conversation language while preserving identifiers, URLs, and metric values verbatim.
  • Per-category round-robin for arXiv β€” cs.HC (~50 papers/wk) doesn't get drowned by cs.LG (~1500/wk) when both are tracked together.
  • TTL cache + concurrent-request coalescing β€” repeat calls and parallel briefings don't hammer upstream APIs.
  • No required tokens. All seven sources work anonymously; tokens just raise the per-source rate limit ceiling.
  • Sandbox-safe Python launcher. Bypasses the claude_desktop_config.json env block (which truncates whitespace-containing values on some macOS builds) by setting environment variables in Python before handing off to the server.

Tools

ToolPurpose
arxiv_recentRecent papers in one category, by submission date
arxiv_searchKeyword / field-syntax search (ti:, au:, abs:, cat:)
pubmed_searchPubMed search (MeSH terms, field tags) β€” abstracts via efetch
paperswithcode_trendingHF Daily Papers, sorted by community upvotes
github_trendingBrowse github.com/trending (HTML scrape)
github_searchGitHub Search API; days filters by created:
huggingface_trendingHF Hub models / datasets / spaces
fda_510k_recentRecent FDA 510(k) clearances
fda_recalls_recentRecent FDA medical-device recalls (class filter)
trends_digestMulti-source bullet-list digest, given a topic
trends_briefingMulti-source newspaper briefing; topic optional
trends_get_configShow current settings (token values never returned)
trends_set_enabled_sourcesToggle which sources are active
trends_set_arxiv_categoriesSet arXiv categories + per-category weights
trends_set_pubmed_querySet the default PubMed query
trends_set_tokenSet / clear a rate-limit booster token

All search tools accept days=N for recent-N-days filtering. trends_briefing groups results into πŸŽ“ Research / πŸ’» Code & Models / πŸ₯ Regulatory sections. The five trends_*_config / trends_set_* tools are configuration mirrors of configure.py β€” see Configuration Β§ C.

trends_digesttrends_briefing
Topicrequiredoptional ("what's new" mode)
Source rangeconfigurable subset (default 4)all enabled sources
Formatbullet-list digestgrouped newspaper format
Use casetopic deep-diveregular weekly briefing

Caching

Per-process in-memory TTL cache wraps every HTTP response. Concurrent identical requests are coalesced via per-key asyncio.Lock β€” N parallel callers fire one upstream request.

TTL groupLengthTools
Trending5 mingithub_trending, paperswithcode_trending, huggingface_trending (trending sort), github_search (with days)
Default10 minarxiv_recent, arxiv_search, github_search, huggingface_trending (other sorts)
Static1 hourpubmed_search, fda_510k_recent, fda_recalls_recent

Up to 256 entries; oldest evicted when full. No way to disable β€” TTLs are short enough that staleness is bounded.


Roadmap (TODO)

  • v0.2: i18n for the TUI menu and briefing section headers
  • bioRxiv / medRxiv via RSS
  • Semantic Scholar (citation graph)
  • openFDA Adverse Events (MAUDE)
  • EU EUDAMED scraping
  • PMDA (Japan medical devices)
  • MFDS (Korea medical devices)
  • Mock-based test suite for CI