Spoken

io.github.spokenmd由 GitHub 账号 spokenmd 发布v0.4.3更新于 Oct 24, 2026

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

已验证Streamable HTTP可网页运行网页搜索与抓取知识与记忆媒体与设计

概览

AI 生成的概览

Spoken 让助手搜索播客,并获取带真实说话人姓名的整洁 Markdown 转录稿,还能关注节目、发现新单集。

可以做什么
按文本查询或粘贴 Spotify、YouTube 链接搜索已发布的播客单集,并用 podcast id 列出某节目的全部往期单集。以 Markdown 获取单集转录稿,含真实说话人姓名和时间戳。查看账户的积分余额、邮箱和近期用量。管理关注的节目:声明关注、静音某节目,以及列出当前关注的节目。列出已关注节目中尚未获取的新单集,每条附转录稿链接。
适用场景
当你想让助手获取播客转录稿用于摘要、RAG 流程或搜索,而不必自行运行语音转文字服务时使用;也适合定期检查已关注节目的新单集,以保持知识库更新。
运行要求
可使用 spoken.md 上基于 Streamable HTTP 的托管端点,或用 npx 运行本地 npm 包 spoken-mcp(需要 Node.js)。来自 spoken.md 的 API 密钥通过 SPOKEN_API_KEY 环境变量或 Authorization Bearer 请求头提供;不提供时默认使用演示密钥 pt_demo,搜索完全可用,但转录稿仅限演示单集。需要能访问 spoken.md 的网络。
安装前请注意
获取转录稿会消耗积分:单集首次获取扣 1 积分,重复获取免费,出错不扣费。积分需通过 Stripe 结账和充值用真钱购买。API 密钥是可计费的机密,勿放入共享配置。关注和取消关注会更改账户的关注列表。转录稿内容来自第三方播客。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Spoken,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.spokenmd%2Fspoken/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "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.

来源:README.md,提交 079853d

工具

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.

输入参数query必填

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.

输入参数episode_id必填

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.

输入参数podcast_id必填

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.

无需输入参数。

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.

无需输入参数。

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.

输入参数podcast_id必填

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.

输入参数podcast_id必填

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.

无需输入参数。

版本历史

5
  1. v0.4.3最新Oct 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

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分