Distill

Distill

A Claude Code MCP server that converts saved articles into AI-generated conversational podcasts tailored to user interests. It operates locally, fetching articles, generating dialogue scripts using Claude's LLM, and synthesizing audio through various TTS providers.

Category
访问服务器

README

Distill

A Claude Code MCP server that turns saved articles into AI-generated podcasts, tailored to your interests.

Save articles throughout the day. Generate a two-host conversational podcast on demand. MP3 lands in ~/Downloads, a sound plays, queue clears. Everything is local.

Install

git clone <this repo> ~/code/distill
cd ~/code/distill
npm install

Register with Claude Code

Add Distill as an MCP server. The simplest way — from the directory where you want to keep your queue (your "reading project"):

claude mcp add distill -- node /absolute/path/to/distill/index.js

Or manually add to your ~/.claude.json / project .mcp.json:

{
  "mcpServers": {
    "distill": {
      "command": "node",
      "args": ["/absolute/path/to/distill/index.js"]
    }
  }
}

Distill reads and writes files in the current working directory where Claude Code launched, so your queue and transcripts live alongside whatever project you're in. If you want a single global queue, set DISTILL_PROJECT_ROOT:

{
  "mcpServers": {
    "distill": {
      "command": "node",
      "args": ["/absolute/path/to/distill/index.js"],
      "env": { "DISTILL_PROJECT_ROOT": "/Users/you/distill-home" }
    }
  }
}

Restart Claude Code. Confirm with /mcp — you should see distill connected.

Configure

Easy mode: run /distill:setup inside Claude Code. It will walk you through interests, show style, TTS provider, and API key one question at a time.

Manual mode: on first run Distill writes a default .distill file in the project root. Edit it directly:

INTERESTS=entrepreneurship, cybersecurity, AI, startups
SHOW_STYLE=The Briefing
TTS_PROVIDER=openai
OPENAI_API_KEY=sk-...
OUTPUT_DIR=~/Downloads

See .distill.example for a full annotated example.

Note on filesystem layout

The spec describes .distill as both a file and a directory. Since that's not possible, Distill uses:

  • .distill — config file (dotenv format)
  • .distill-data/ — data directory (queue.json, transcripts/)

Slash commands

Claude Code exposes MCP prompts with the prefix /mcp__<server>__<prompt>, so all Distill commands start with /mcp__distill__:

Command What it does
/mcp__distill__setup Interactive first-time configuration (interests, style, TTS, API key)
/mcp__distill__save <url> Fetch and queue an article
/mcp__distill__queue-list Show the current queue
/mcp__distill__queue-clear Empty the queue (no podcast)
/mcp__distill__podcast <url> Generate a podcast from a single article
/mcp__distill__digest Generate a podcast from the queue, then clear
/mcp__distill__interests-add <tag> Add an interest
/mcp__distill__interests-remove <tag> Remove an interest
/mcp__distill__interests-list Show current interests

Tip: you can usually type the first few letters (e.g. /distill-pod) and let autocomplete fill the rest.

All commands also work as natural language:

"Save this to my podcast queue: https://…" "Make a Deep Dive from my queue" "Skip my usual interests, focus on the technical angle"

Show styles

Style Host dynamic Vibe
The Briefing Anchor + correspondent Clean, newscast
The Debate Skeptic vs optimist Punchy, opinionated
The Deep Dive Expert + curious learner Educational
The Watercooler Two colleagues chatting Casual

Override per session: "Make it a Debate style".

TTS providers

Provider Notes
openai Default recommendation. Requires OPENAI_API_KEY.
elevenlabs Most natural voices. Requires ELEVENLABS_API_KEY.
inworld Character-focused. Requires INWORLD_API_KEY.
system macOS say. Free, robotic. Requires ffmpeg (or sox) to produce MP3: brew install ffmpeg.

How it works

  • Article fetch: @mozilla/readability + jsdom — strips nav/ads/footers and returns clean text.
  • Script generation: the MCP prompt tells Claude Code's own LLM to read the queue, load the show style, and write the dialogue script inline. No separate Claude API key needed.
  • TTS: per-turn synthesis (one API call per dialogue turn, so each host gets its own voice), then concatenated into a single MP3.
  • Transcript: plain-text copy saved to .distill-data/transcripts/ for debugging.
  • Notification: macOS afplay plays a short system sound when the MP3 is ready.

Architecture & costs

Distill is a local, stdio-based MCP server. Everything runs on the user's machine. There is no hosted backend.

 ┌───────────────┐   stdio    ┌───────────────┐    HTTPS     ┌──────────┐
 │ Claude Code   │◀──────────▶│ distill MCP   │────────────▶│ TTS API  │
 │ (your LLM)    │            │ (node process)│              │ (yours)  │
 └───────────────┘            └───────────────┘              └──────────┘
        │                            │
        │                            ▼
        │                   .distill  / .distill-data/
        ▼
  writes script,
  calls tools

Who pays for what:

Cost Paid by
LLM that writes the dialogue The user — it runs inside their Claude Code session, on their Claude subscription / API billing
TTS audio generation The user — they put their own OPENAI_API_KEY / ELEVENLABS_API_KEY / INWORLD_API_KEY in .distill
Hosting Nobody — stdio MCP servers don't need a server

This means anyone forking or installing Distill just clones the repo and points Claude Code at it. No account, no signup, nothing to deploy.

Scope

  • Claude Code only — not a standalone CLI
  • English only
  • macOS assumed for system sound
  • No JS-rendered or paywalled article support
  • No scheduling — generate on demand

Troubleshooting

  • /mcp shows distill as failed — check the absolute path to index.js in your MCP config and that npm install ran in the distill dir.
  • "Could not extract readable content" — the page is probably paywalled or JS-rendered. No retry in v1.
  • TTS fails with "missing API key" — uncomment exactly one TTS_PROVIDER= line in .distill and make sure its matching *_API_KEY is set.
  • system TTS fails with "requires ffmpeg or sox"brew install ffmpeg.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选