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 · 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
- Install
- Tools
- How it works
- Configuration
- Server etiquette
- Data shape
- Security & privacy
- Tech stack
- Development
- Releases
- 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 <date>-<slot>--<n> (1-based). It doubles as a public deep link: https://www.taewoopark.com/trendchaser#<anchor>.
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>-<slot>"
"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
No comments yet
Be the first to share your take.