Spoken

io.github.spokenmdPublished by GitHub account spokenmdv0.4.3Updated Oct 24, 2026

Podcast transcripts as clean Markdown with real speaker names — via the Spoken API.

VerifiedStreamable HTTPWeb executableWeb Search & ScrapingKnowledge & MemoryMedia & Design

Overview

AI-generated overview

Spoken gives an assistant podcast search and clean, speaker-named Markdown transcripts, plus tools to follow shows and find new episodes.

What you can do
Search published podcast episodes by text query or by pasting a Spotify or YouTube URL, and list a show's full back catalog from a podcast id. Fetch an episode's transcript as Markdown with real speaker names and timestamps. Check the account's credit balance, email and recent usage. Manage followed shows: declare a follow, mute a show, and list what is currently followed. List new episodes on followed shows that have not been fetched yet, each with a transcript link.
When to use it
Use it when you want an assistant to pull podcast transcripts for summarizing, RAG pipelines or search without running your own speech-to-text, or to keep a knowledge base current by checking followed shows for new episodes.
Requirements
Either the hosted endpoint at spoken.md over Streamable HTTP, or the local npm package spoken-mcp run with npx (Node.js). An API key from spoken.md is supplied via the SPOKEN_API_KEY environment variable or an Authorization bearer header; without one, the demo key pt_demo allows full search but transcripts only for the demo episode. Network access to spoken.md.
Before you install
Transcript fetches cost credits: 1 credit on the first fetch of an episode, free on repeats, and errors are not charged. Credits are bought with real money through Stripe checkout and top-up. The API key is a billable secret; keep it out of shared configs. Follow and unfollow change the account's followed list. Transcript content comes from third-party podcasts.

Installation

In SourceWeft

  1. Open Spoken in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.spokenmd%2Fspoken/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "spoken": {
      "type": "http",
      "url": "https://spoken.md/mcp"
    }
  }
}

README

Spoken — podcast transcript API and MCP server, clean Markdown with real speaker names

Spoken is a transcript API that turns any published podcast into clean Markdown with real speaker names — not "Speaker 1." One API call returns named, timestamped text, ready for LLMs, RAG pipelines, summarizers, and search. This repo also ships spoken-mcp, an MCP server that gives Claude Desktop, Claude Code, Cursor and Cline the same transcripts as tools — see Use as an MCP server.

It's a transcript retrieval API, not a speech-to-text service: it works on already-published podcasts, so you skip uploading audio, running diarization, and mapping anonymous speaker labels by hand. For published shows that's typically 5–10× cheaper than running the audio through a transcription service.

  • 🎙️ Real speaker names, resolved automatically
  • 📄 Clean Markdown with timestamps, tuned for LLM context windows and RAG chunking
  • 🔎 Search by text query or paste a Spotify/YouTube URL
  • 💳 Pay-per-use credits — no subscription, failed calls never charged, repeat fetches free
  • 🤖 Agent-native — ships with an Agent Skill, agents.md, llms.txt, and an OpenAPI spec

Get a key at spoken.md — or try it free with the demo key pt_demo (search works fully; transcripts limited to the demo episode).

Quickstart

sh
# 1. Find an episode (by text, or paste a Spotify/YouTube URL)curl -s 'https://spoken.md/search?q=huberman+sleep' \  -H 'x-api-key: pt_demo'
# 2. Fetch the transcript as Markdowncurl -s 'https://spoken.md/transcripts/1000651996090' \  -H 'x-api-key: pt_demo'

The transcript comes back as Markdown with named speakers and timestamps:

md
**John Smith** (0:00)Welcome to the show. Today we're talking about...
**Jane Doe** (0:15)Thanks for having me.

Endpoints

Method & pathWhat it doesCredits
GET /search?q={query or URL}Find episodes; returns id, title, podcast, podcastId, date0
GET /podcasts/{podcastId}/episodesList a show's full back catalog; returns every episode's id, title, date0
GET /transcripts/{id}Return the Markdown transcript1 on first fetch, 0 on repeat
GET /balanceCurrent credit balance + usage history0
GET /followingThe shows this key keeps up with (inferred from fetches, or declared with PUT / dropped with DELETE /following/{podcastId})0
GET /newNew episodes on those shows that have not been fetched yet, each with a transcript URL; ?format=atom for a feed0
POST /buyNew-key checkout (Stripe)—
POST /top-up?key={key}Returning-customer top-up (Stripe)—

Auth is the x-api-key header. Responses include X-Credits-Remaining and X-Credits-Charged. See agents.md for the full error table and response shapes.

Examples

Use from Python

The spoken-md package wraps the API with no dependencies outside the standard library, and installs a spoken-md command.

sh
pip install spoken-md
python
from spoken_md import Spoken
spoken = Spoken()                                  # SPOKEN_API_KEY, or the demo keyepisode = spoken.search("huberman sleep")[0]print(spoken.transcript(episode.id))               # Markdown with real speaker names

archive(podcast_id, skip=...) walks a whole show and is resumable; errors are typed by status (PaymentRequired carries the top-up URL, NotFound means no transcript). See python/README.md.

Use as an MCP server

Spoken is a Model Context Protocol server two ways: hosted at https://spoken.md/mcp, and as spoken-mcp, the package in this repo, for clients that run a server locally (Claude Desktop, Cursor, Cline, …). Both provide the same eight tools:

ToolDescription
search_podcastsFind episodes by text or a pasted Spotify/YouTube URL
list_episodesList a show's entire back-catalog from a podcast_id
get_transcriptFetch an episode's transcript as Markdown with real speaker names
get_balanceCheck remaining credits
list_followingThe shows this key is kept current on, inferred from fetches or declared
follow_podcastDeclare a follow for a show (or clear a mute)
unfollow_podcastMute a show so it leaves the list and fetches do not re-add it
list_new_episodesNew episodes on followed shows that have not been fetched yet, with transcript links

Keeping a knowledge base current is list_new_episodes on a schedule and get_transcript on what it lists: each fetch raises that show's floor.

Hosted

Nothing to install. Point a client that connects to a URL at https://spoken.md/mcp (Streamable HTTP):

sh
claude mcp add --transport http spoken https://spoken.md/mcp

The client asks you to sign in the first time a tool needs your key. To skip that, send the key as a header yourself: Authorization: Bearer pt_your_key.

A client that can only sign in with OAuth, such as ChatGPT in developer mode, is sent to a page where you paste your key once. Steps for each app: spoken.md/mcp-server. With no key at all, searching, listing a show and the demo episode work.

Local

Add it to your MCP client config (e.g. Claude Desktop's claude_desktop_config.json):

json
{  "mcpServers": {    "spoken": {      "command": "npx",      "args": ["-y", "spoken-mcp"],      "env": { "SPOKEN_API_KEY": "pt_your_key" }    }  }}

SPOKEN_API_KEY defaults to pt_demo (search works fully; transcripts limited to the demo episode). Get a real key at spoken.md.

Run from source instead:

sh
npm install && npm run buildSPOKEN_API_KEY=pt_your_key node dist/index.js

Use with AI agents

Spoken is designed to be called by agents. Point your agent at the Agent Skill (also served at https://spoken.md/.well-known/skills/spoken-md/SKILL.md), or hand it agents.md. The OpenAPI spec makes it easy to wrap as a tool for any function-calling or MCP-compatible client (Claude, GPT, Cursor).

Pricing

Pay-per-use credits, no subscription. New keys: 100 for $15, 500 for $50, 2,000 for $160. Machine-readable at spoken.md/pricing.md.

Links


Spoken is built and maintained at spoken.md.

Source: README.md at commit 079853d

Tools

8

search_podcasts

Search podcasts

Search published podcast episodes by text query, or paste an episode URL (Spotify, YouTube, etc.). Returns matching episodes with their id, title, podcast, podcast_id, and date. Use the id with get_transcript, or the podcast_id with list_episodes to get the show's whole back-catalog. Does not consume credits.

Parametersqueryrequired

get_transcript

Get transcript

Fetch a podcast episode's transcript as clean Markdown with real speaker names and timestamps. Pass an episode id from search_podcasts. Costs 1 credit on the first fetch of an episode; repeat fetches are free and errors are never charged.

Parametersepisode_idrequired

list_episodes

List a show's episodes

List a podcast's entire back-catalog (every episode, newest first). Pass a podcast_id from a search_podcasts result. Returns each episode's id, title, and date — fetch any with get_transcript. Use this to transcribe a whole show. Does not consume credits itself; transcribing the returned episodes costs 1 credit each (repeat fetches are free), so make sure the key has enough credits before looping.

Parameterspodcast_idrequired

get_balance

Get credit balance

Check the current Spoken credit balance, account email, and recent usage for the configured API key. Does not consume credits.

Takes no parameters.

list_following

List followed shows

The shows this key is kept current on. Every charged fetch makes its show a follow: the five most-fetched shows from the last 180 days are followed automatically (source 'fetch'), and up to 25 more can be declared with follow_podcast (source 'explicit'). Muted shows are listed separately. Use list_new_episodes to see what is new on them. Does not consume credits; the demo key has nothing to follow with.

Takes no parameters.

follow_podcast

Follow a show

Declare a follow for a show, or clear a mute. Pass a podcast_id from search_podcasts. A declared follow stays until unfollow_podcast, regardless of fetch activity, and does not use one of the five automatic slots. For a show never fetched, what counts as new starts from its newest episode now. Does not consume credits.

Parameterspodcast_idrequired

unfollow_podcast

Stop following a show

Mute a show: it leaves the followed list and later fetches do not re-add it. follow_podcast reverses it. Pass a podcast_id from list_following. Does not consume credits.

Parameterspodcast_idrequired

list_new_episodes

List new episodes on followed shows

What is new on the shows this key follows: for each show, the episodes released in the last 90 days that are newer than the newest one already fetched from it (up to 10 per show), each with a transcript_url. Episodes with no transcript are left out. Fetch any with get_transcript (1 credit each on first fetch); a fetch raises that show's floor, so the next call lists only what came after. Refreshed hourly, so a show followed moments ago may be empty until its first poll. Does not consume credits.

Takes no parameters.

Version history

5
  1. v0.4.3LatestOct 6, 2026
  2. v0.4.1Oct 4, 2026
  3. v0.4.0Oct 4, 2026
  4. v0.3.0Sep 24, 2026
  5. v0.2.2Sep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts