Distill
Enables text-to-speech synthesis for podcast generation using ElevenLabs' natural voices, requiring user-provided API key for audio production.
Enables audio processing for converting system TTS output to MP3 format when using the system TTS provider on macOS.
Utilizes Mozilla's Readability library for extracting clean text content from web articles by stripping navigation, ads, and footers.
Provides text-to-speech synthesis for podcast generation using OpenAI's TTS capabilities, requiring user-provided API key for audio production.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Distillmake a podcast from my saved articles about AI startups"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 installRelated MCP server: MCP Podcast Scraper
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.jsOr 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=~/DownloadsSee .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 |
| Interactive first-time configuration (interests, style, TTS, API key) |
| Fetch and queue an article |
| Show the current queue |
| Empty the queue (no podcast) |
| Generate a podcast from a single article |
| Generate a podcast from the queue, then clear |
| Add an interest |
| Remove an interest |
| 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 |
| Default recommendation. Requires |
| Most natural voices. Requires |
| Character-focused. Requires |
| macOS |
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
afplayplays 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 toolsWho 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 |
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
/mcpshows distill as failed — check the absolute path toindex.jsin your MCP config and thatnpm installran 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.distilland make sure its matching*_API_KEYis set.systemTTS fails with "requires ffmpeg or sox" —brew install ffmpeg.
This server cannot be deployed
Maintenance
Related MCP Connectors
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
The Listenetic MCP server is a remote, cloud-hosted server that enables AI assistants like ChatGPT and Claude to convert articles, documents, websites, and videos into high-quality AI-generated audio. It provides multi-format support for text and binary files, natural-sounding text-to-audio conversion using AI, and specialized processing for SSML, markup, markdown, and various media formats through three core tools: listentic_supported_mimetypes, listentic_add_content_text, and listentic_add_content_binary.
MCP server for RiverScript, an AI transcription platform - fetches transcripts shared via a link.
Augments MCP Server - A comprehensive framework documentation provider for Claude Code
Related MCP Servers
- AlicenseBqualityFmaintenanceAn MCP (Model Context Protocol) server that provides seamless integration between Fish Audio's Text-to-Speech API and LLMs like Claude, enabling natural language-driven speech synthesis.267 npm13MIT
- FlicenseAqualityDmaintenanceAn MCP server that scrapes and transcribes podcast episodes from YouTube or RSS feeds using Deepgram's Nova-2 model. It allows users to track podcasts for new episodes, manage transcripts, and generate personalized summaries through Claude.101-
- AlicenseAqualityDmaintenanceAn MCP server that indexes plain-text podcast transcripts stored in Dropbox and makes them searchable inside Claude Code.4MIT
- FlicenseAqualityDmaintenanceThis MCP server enables Claude to speak summaries, announcements, and explanations aloud using text-to-speech — right from your terminal.4-