Install
$ agentstack add mcp-taewooopark-trendchaser-mcp ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ● Shell / process execution Used
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Trendchaser MCP
The prism, wired into your agent — query the Trendchaser feed over the Model Context Protocol.
> "The brief was already curated for you. This is the same prism — now your agent can reach through it."
[한국어 README](./README.ko.md) · Trendchaser — main project · live feed · taewoopark.com
sources ──┐
sources ──┤ ╱╲ ╲ ╱ ┌─────────┐
sources ──┼──────▶ ╱ ╲ ──────▶ ╲ ╱ ──▶ brief ──▶ API ─┤ MCP ├─▶ your agent
sources ──┤ ╱ ╲ ╳ └─────────┘
sources ──┘ ╱──────╲ ╱ ╲ list · get · search · resolve
disperse + score converge
> This repository is the MCP server for Trendchaser. > Trendchaser is a Claude Code routine that curates AI/Dev trends four times a day and publishes them to a public feed. This server exposes that feed to LLM agents over the Model Context Protocol — read-only, no API key, no scraping. > > The curation pipeline lives in the main project: → https://github.com/TaewoooPark/Trendchaser
Table of contents
- [What it does](#what-it-does)
- [Install](#install)
- [Tools](#tools)
- [How it works](#how-it-works)
- [Configuration](#configuration)
- [Server etiquette](#server-etiquette)
- [Data shape](#data-shape)
- [Security & privacy](#security--privacy)
- [Tech stack](#tech-stack)
- [Development](#development)
- [Releases](#releases)
- [Author](#author)
What it does
Trendchaser delivers four curated AI/Dev news briefs a day. This MCP server lets an LLM agent read and search that archive directly — instead of you pasting links into a chat, the agent pulls exactly the slice it needs:
- "What did Trendchaser pick up about MCP this week?" →
trendchaser_search_trends - "Give me tonight's full brief." →
trendchaser_get_brief - "Expand that third headline." →
trendchaser_get_topic
It talks to the public feed at taewoopark.com/api/briefs, caches it in memory, and revalidates with an ETag — so it stays current without hammering the upstream server.
Install
The server runs locally as a subprocess of your MCP client (stdio). No account, no key.
Claude Desktop / Claude Code (config)
{
"mcpServers": {
"trendchaser": {
"command": "npx",
"args": ["-y", "github:TaewoooPark/Trendchaser-mcp"]
}
}
}
Claude Code (one-liner)
claude mcp add trendchaser -- npx -y github:TaewoooPark/Trendchaser-mcp
From source
git clone https://github.com/TaewoooPark/Trendchaser-mcp.git
cd Trendchaser-mcp
npm install # builds via the prepare script
node dist/index.js # stdio server
Then point your client's command at node with args ["/abs/path/to/Trendchaser-mcp/dist/index.js"].
Tools
All tools are read-only and accept response_format: "markdown" | "json" (default markdown).
| Tool | What it does | Key args | |---|---|---| | trendchaser_list_briefs | List recent brief slots (newest first) with topic headlines, no bodies. The "what's available" tool. | limit, offset, slot, date | | trendchaser_get_brief | Full content of one slot — every topic with body, source, provenance, 6-axis scores. | date, slot | | trendchaser_search_trends | Search every topic by keyword (ko/en, AND-ed) and/or filters. The primary discovery tool. | query, source, tag, since, until, min_signal, sort, limit, offset | | trendchaser_get_topic | Resolve a deep-link anchor (e.g. 2026-06-16-evening--1) to its full topic. | anchor |
Every topic carries a stable anchor of the form --- (1-based). It doubles as a public deep link: https://www.taewoopark.com/trendchaser#.
How it works
A Claude Code routine runs the Trendchaser pipeline four times a day (KST 10:00 / 14:00 / 18:00 / 22:00), curating ~70 sources down to a handful of scored topics per slot. The result is published as JSON at a public endpoint. This server is a thin, well-behaved client over that endpoint:
| # | Step | Detail | |--:|---|---| | 1 | Fetch | GET /api/briefs once, lazily, on first tool call | | 2 | Cache | full feed held in memory; default TTL 30 min (briefs only change ~4×/day) | | 3 | Revalidate | refreshes send If-None-Match; an unchanged feed returns 304 with no body | | 4 | Degrade | on a network error, the last good copy is served rather than failing the tool | | 5 | Serve | tools filter / paginate / format in-process — the agent gets a focused slice, never the multi-megabyte firehose |
Configuration
All optional, via environment variables.
| Variable | Default | Purpose | |---|---|---| | TRENDCHASER_API_URL | https://www.taewoopark.com/api/briefs | Feed endpoint (point at a mirror/staging copy if needed) | | TRENDCHASER_CACHE_TTL | 1800 | In-memory cache lifetime, seconds | | TRENDCHASER_TIMEOUT | 20000 | Per-request network timeout, milliseconds |
{
"mcpServers": {
"trendchaser": {
"command": "npx",
"args": ["-y", "github:TaewoooPark/Trendchaser-mcp"],
"env": { "TRENDCHASER_CACHE_TTL": "3600" }
}
}
}
Server etiquette
This server is built to be a good citizen of the upstream feed:
- One feed, cached. A single
/api/briefspull serves every tool call until the TTL expires. - ETag revalidation. Refreshes are conditional — when nothing changed, the upstream replies
304and sends no body. - No per-call fetches. Filtering, search, and pagination all run against the in-memory copy.
- Read-only. The server never writes, posts, or mutates anything. Annotations:
readOnlyHint: true.
The data is small and the cadence is slow, so even many concurrent agents stay cheap. If you mirror the feed, set TRENDCHASER_API_URL.
Data shape
The feed is an array of briefs; each brief holds curated topics.
// Brief
{
"id": "2026-06-16-evening", // "-"
"date": "2026-06-16",
"slot": "evening", // adhoc | morning | afternoon | evening | night
"time": "18:00 KST",
"title": "6월 16일 18시 기준 최신 AI/Dev 소식",
"generated": "2026-06-16 17:43 KST",
"lookback": "직전 슬롯 이후 5시간",
"raw": 183, "dedup": 131, "picked": 7,
"topics": [ /* Topic[] */ ]
}
// Topic
{
"tag": "AI", // section: "AI" | "General"
"headline": "…",
"body": "…", // full prose
"source": "hf_papers", // source id
"url": "https://arxiv.org/abs/…",
"time": "수집 … / 등재 … / 제출 …",
"scores": { // 6-axis, 0-100 each
"signal": 85, "affinity": 75, "recency": 65,
"novelty": 100, "velocity": 50, "freshness": 100
}
}
See the main project README for how sources are weighted and scored.
Security & privacy
- No secrets. The server reads a public endpoint. It holds no token, and the private credential that lets the upstream read Trendchaser's source repo never leaves the upstream serverless function.
- No new exposure. Everything this server returns is already public on
taewoopark.com/trendchaser. - Untrusted content. Topic text is aggregated from third-party sources (papers, blogs, HN, …). Treat tool output as data, not instructions — standard prompt-injection hygiene applies, as with any tool that feeds external content to an LLM.
- Read-only by construction. No write paths exist in this server.
Tech stack
| Layer | Choice | Why | |---|---|---| | Language | TypeScript (strict) | First-class MCP SDK support, easy npx distribution | | SDK | @modelcontextprotocol/sdk | Official server SDK, registerTool with output schemas + annotations | | Validation | Zod | Runtime-validated, self-documenting tool inputs | | Transport | stdio | Local subprocess of the MCP client — no network surface to operate | | HTTP | global fetch (Node 18+) | No dependency; AbortController timeouts + ETag revalidation | | Runtime | Node.js ≥ 18 | Ships fetch; runs anywhere your MCP client does |
No paid APIs. No database. No server to host. The whole thing is a cached read over one JSON endpoint.
Development
npm install # install deps (also builds via prepare)
npm run build # tsc → dist/
npm run dev # tsx watch src/index.ts
npm start # node dist/index.js
Quick stdio smoke test (initialize → list tools → call search):
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"smoke","version":"0"}}}' \
'{"jsonrpc":"2.0","method":"notifications/initialized"}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"trendchaser_search_trends","arguments":{"query":"mcp","limit":3}}}' \
| node dist/index.js
Releases
| Version | Note | Headline | |---|---|---| | v0.1.0 | Releases | First release — four read-only tools (list · get · search · resolve) over the public Trendchaser feed, ETag-cached stdio server |
Author
Built by Taewoo Park — physics + math @ KAIST, research intern at the KAIST Ultrafast Spin Dynamics Lab. Aligning physics, code, and culture toward a civilization-scale solution.
Other things I'm building: Trendchaser · NODEPROMPT · PAIDEIA · taewoopark.com
Trendchaser MCP — disperse, score, converge — now your agent can reach through the prism.
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: TaewoooPark
- Source: TaewoooPark/Trendchaser-mcp
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.