# Trendchaser Mcp

> MCP server exposing the Trendchaser AI/Dev trend feed (taewoopark.com/trendchaser) to LLM agents — read-only list / get / search / resolve tools.

- **Type:** MCP server
- **Install:** `agentstack add mcp-taewooopark-trendchaser-mcp`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [TaewoooPark](https://agentstack.voostack.com/s/taewooopark)
- **Installs:** 0
- **Category:** [AI & ML](https://agentstack.voostack.com/c/ai-and-ml)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [TaewoooPark](https://github.com/TaewoooPark)
- **Source:** https://github.com/TaewoooPark/Trendchaser-mcp

## Install

```sh
agentstack add mcp-taewooopark-trendchaser-mcp
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Trendchaser MCP

**The prism, wired into your agent — query the Trendchaser feed over the Model Context Protocol.**

  
  
  
  
  &nbsp;
  
  
  
  
  &nbsp;
  
  
  
  &nbsp;
  
  
  

> *"The brief was already curated for you. This is the same prism — now your agent can reach through it."*

[한국어 README](./README.ko.md) &nbsp;·&nbsp; [**Trendchaser** — main project](https://github.com/TaewoooPark/Trendchaser) &nbsp;·&nbsp; [**live feed**](https://www.taewoopark.com/trendchaser) &nbsp;·&nbsp; [taewoopark.com](https://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

1. [What it does](#what-it-does)
2. [Install](#install)
3. [Tools](#tools)
4. [How it works](#how-it-works)
5. [Configuration](#configuration)
6. [Server etiquette](#server-etiquette)
7. [Data shape](#data-shape)
8. [Security & privacy](#security--privacy)
9. [Tech stack](#tech-stack)
10. [Development](#development)
11. [Releases](#releases)
12. [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)

```json
{
  "mcpServers": {
    "trendchaser": {
      "command": "npx",
      "args": ["-y", "github:TaewoooPark/Trendchaser-mcp"]
    }
  }
}
```

### Claude Code (one-liner)

```bash
claude mcp add trendchaser -- npx -y github:TaewoooPark/Trendchaser-mcp
```

### From source

```bash
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 |

```json
{
  "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/briefs` pull serves every tool call until the TTL expires.
- **ETag revalidation.** Refreshes are conditional — when nothing changed, the upstream replies `304` and 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.

```jsonc
// 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](https://github.com/TaewoooPark/Trendchaser) 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

```bash
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):

```bash
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](https://github.com/TaewoooPark/Trendchaser-mcp/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](https://github.com/TaewoooPark/Trendchaser) &nbsp;·&nbsp; [NODEPROMPT](https://github.com/TaewoooPark/NODEPROMPT) &nbsp;·&nbsp; [PAIDEIA](https://github.com/TaewoooPark/PAIDEIA) &nbsp;·&nbsp; [taewoopark.com](https://github.com/TaewoooPark/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](https://github.com/TaewoooPark)
- **Source:** [TaewoooPark/Trendchaser-mcp](https://github.com/TaewoooPark/Trendchaser-mcp)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** yes
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/mcp-taewooopark-trendchaser-mcp
- Seller: https://agentstack.voostack.com/s/taewooopark
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
