Skip to main content
Glama
salwks

mcp-techTrend

by salwks

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.

Source

Tools

Notes

arXiv

arxiv_recent, arxiv_search

Per-category round-robin so small categories aren't drowned by big ones

PubMed

pubmed_search

Full abstracts via efetch.fcgi

HF Daily Papers

paperswithcode_trending

Sorted by community upvotes (replaces sunset PwC API)

GitHub

github_trending, github_search

Trending page scrape + Search API with created:> date filter

Hugging Face

huggingface_trending

Models / datasets / spaces, trending or recent

openFDA 510(k)

fda_510k_recent

Device clearances

openFDA Recalls

fda_recalls_recent

Recall events with class filter

(aggregators)

trends_digest, trends_briefing

Multi-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.


Related MCP server: mcp-ai-news-server

Install

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

Connect to Claude Desktop by editing ~/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 points at run.py (the launcher), not trends_mcp.py. The launcher sets domain-specific env vars before the server starts.

Restart Claude Desktop. The trends server should appear with the tools listed below (count depends on your enabled sources).


Configuration

One source of truth: run.py. Two ways to edit it:

A. Interactive TUI β€” configure.py (recommended)

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

Toggle sources with numbers, set arXiv weights with set 1 7, apply presets with preset medical-imaging, save with [6]. The save action backs up to run.py.bak, writes the new SETTINGS block (AST-based β€” never touches non-config code), and runs pkill -f trends_mcp so Claude Desktop respawns the server with the new config on next call.

The TUI menu labels are in Korean; commands and presets are in English. i18n of the TUI itself is on the v0.2 roadmap.

Single-shot modes:

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

B. Direct edit β€” run.py SETTINGS block

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

Restart Claude Desktop after saving (or pkill -f trends_mcp).

C. From chat β€” trends_set_* tools

Same SETTINGS block, edited via MCP tool calls. The chat path and configure.py read & write the same run.py (single source of truth), so changes from either side are visible to the other.

Just say it in chat:

"νŠΈλ Œλ“œμ—μ„œ PubMed 쿼리λ₯Ό cardiology μͺ½μœΌλ‘œ λ°”κΏ”μ€˜" "github와 arxiv만 μΌœλ‘¬" "GitHub 토큰 λ“±λ‘ν• κ²Œ: ghp_..."

The host Claude picks the right trends_set_* tool and confirms what changed. After any change, restart Claude Desktop (or run pkill -f trends_mcp in a terminal) β€” the MCP server reads the SETTINGS block at spawn time.

Tool

Purpose

trends_get_config

Show current sources, categories, query, and which tokens are set (values never returned)

trends_set_enabled_sources(sources)

Enable a subset; ["*"] or ["all"] for all

trends_set_arxiv_categories(categories)

["cs.LG:5", "cs.HC:3"]-style list

trends_set_pubmed_query(query)

PubMed syntax (MeSH, [Title/Abstract] tags)

trends_set_token(provider, value)

provider ∈ {github, hf, ncbi, openfda}; empty value clears

Tokens: trends-mcp only does read operations, so create tokens with minimal scope β€” for GitHub, no scope at all (just authentication for rate limit). Don't put a repo-scoped PAT here; it'd be over-permission.

Presets

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

Common arXiv categories (full reference: ARXIV_CATEGORIES.md):

Code

Field

Weekly papers (approx)

cs.AI

Artificial Intelligence

500–800

cs.LG

Machine Learning

1,500–2,000 (largest)

cs.CV

Computer Vision

1,000–1,500

cs.CL

NLP

500–800

cs.HC

HCI / UX

50–100

cs.RO

Robotics

100–200

cs.CR

Security

~200

eess.IV

Image/Video Processing (medical imaging)

100–200

q-bio.QM

Quantitative biology

50–100

Source allowlist

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

Empty / "*" / "all" = enable everything. Disabled sources don't register their tools, so the chat tool list itself shrinks. trends_digest and trends_briefing remain registered and skip disabled sources gracefully.


Tools

Tool

Purpose

arxiv_recent

Recent papers in one category, by submission date

arxiv_search

Keyword / field-syntax search (ti:, au:, abs:, cat:)

pubmed_search

PubMed search (MeSH terms, field tags) β€” abstracts via efetch

paperswithcode_trending

HF Daily Papers, sorted by community upvotes

github_trending

Browse github.com/trending (HTML scrape)

github_search

GitHub Search API; days filters by created:

huggingface_trending

HF Hub models / datasets / spaces

fda_510k_recent

Recent FDA 510(k) clearances

fda_recalls_recent

Recent FDA medical-device recalls (class filter)

trends_digest

Multi-source bullet-list digest, given a topic

trends_briefing

Multi-source newspaper briefing; topic optional

trends_get_config

Show current settings (token values never returned)

trends_set_enabled_sources

Toggle which sources are active

trends_set_arxiv_categories

Set arXiv categories + per-category weights

trends_set_pubmed_query

Set the default PubMed query

trends_set_token

Set / 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_digest

trends_briefing

Topic

required

optional ("what's new" mode)

Source range

configurable subset (default 4)

all enabled sources

Format

bullet-list digest

grouped newspaper format

Use case

topic deep-dive

regular 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 group

Length

Tools

Trending

5 min

github_trending, paperswithcode_trending, huggingface_trending (trending sort), github_search (with days)

Default

10 min

arxiv_recent, arxiv_search, github_search, huggingface_trending (other sorts)

Static

1 hour

pubmed_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.


Known limitations

  • GitHub Trending is HTML scraping β€” no official API exists. Layout changes can break it. Stable trending substitute: github_search with days=7 and sort=stars.

  • HF trendingScore is undocumented. API surface may change.

  • HF Daily Papers covers ~50 curated papers/day, not all of arXiv. It's a "what was talked about" feed, not exhaustive.

  • arXiv has no native trending β€” we approximate via category-balanced recent-submissions feeds.

  • openFDA classification field sometimes returns None even on recently classified recalls (upstream data lag). Search index lags too.


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


License

MIT

Available Tools

16 tools
arxiv_recentA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryYes
daysNo
max_resultsNo
response_formatNomarkdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true, destructiveHint=false, and openWorldHint=true. The description adds behavioral context by stating the sorting order ('newest first') and that 'days filters by published date', which goes beyond the annotations. There is no contradiction between the description and annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: two sentences plus a helpful list of common categories. The first sentence clearly states the primary function, and the list adds value without superfluous text. Every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 4 parameters, 1 required, and an output schema (present but not shown), the description covers the main use case but omits details on result format, pagination, or rate limits. The lack of parameter explanations for most parameters reduces completeness, but the overall scope is clear for a simple read-only tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description only explains the 'days' parameter, noting it filters by 'published' date. It provides common category examples but does not explain the meaning or constraints of 'category', 'max_results', or 'response_format'. With 0% schema description coverage, the description fails to compensate for the lack of parameter documentation in the schema, leaving three out of four parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Fetch recent arXiv papers in a category, sorted by submission date (newest first).' This provides a specific verb ('fetch'), resource ('recent arXiv papers'), and scope ('in a category'), differentiating it from the sibling tool 'arxiv_search' which focuses on specific search queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for browsing recent papers by category, but lacks explicit guidance on when to use this tool versus alternatives like 'arxiv_search'. It does not specify any conditions or exclusions, and does not mention that for specific keyword queries the user should use 'arxiv_search' instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fda_510k_recentA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
daysNo
max_resultsNo
response_formatNomarkdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint, idempotentHint), the description discloses that a date filter is always applied and explains the token-exact matching behavior, which is critical for correct query construction. This adds valuable behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, immediately stating the purpose and then a critical usage detail. Every sentence provides value, and it is front-loaded with the tool's function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the existence of an output schema and the tool's simplicity, the description adequately covers the essential behavior (date filter, string matching). It does not need to detail return format, but could mention pagination or result limits for completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description partially compensates by explaining the 'query' parameter's wildcard usage and implying the 'days' parameter via the date filter. However, 'max_results' and 'response_format' are not mentioned, leaving gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it provides recent FDA 510(k) clearances via openFDA, specifying the verb (list) and resource (clearances). While the name itself is informative, it does not explicitly distinguish from sibling fda_recalls_recent, but the content is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a crucial usage tip about token-exact matching and wildcard syntax for partial name searches. However, it does not provide guidance on when to prefer this tool over siblings or mention any prerequisites or context for using the date filter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fda_recalls_recentA
Read-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*).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
daysNo
class_levelNo
max_resultsNo
response_formatNomarkdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful context beyond annotations, such as that it queries openFDA and the specifics of token-exact matching with wildcard syntax. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, efficient and front-loaded. The first sentence states purpose and optional filter, the second provides a critical usage note. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters, no schema descriptions, and an output schema, the description covers only the general purpose and one filter. It omits details for query (free text), days, max_results, and response_format, making it incomplete for full usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description only explains one parameter (class_level) and briefly mentions query syntax. The parameters query, days, max_results, and response_format are not described, leaving significant gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves recent FDA medical device recalls via openFDA, with optional filtering by class. This distinguishes it from sibling tools like fda_510k_recent and arxiv_recent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the class filter and provides a note on openFDA query syntax with wildcards, but does not explicitly state when not to use the tool or compare it to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.4/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A 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.
    29
    Apache 2.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    Local 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.
  • A
    license
    Not graded
    quality
    C
    maintenance
    An 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

Appeared in Searches

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/salwks/mcp-techTrend'

If you have feedback or need assistance with the MCP directory API, please join our Discord server