关于 Transistor MCP Server
Transistor MCP Server 为播客创作者和账户运营者提供连接 Transistor.fm API 的工具,可管理节目与单集、分析数据、文字稿、上传、Webhook 和订阅者。这个社区服务器已不再积极维护。
主要功能
- 01列出并搜索节目和单集
- 02创建、更新和发布单集
- 03上传音频并管理文字稿
- 04获取节目和单集分析数据
- 05管理节目 Webhook
- 06管理私人播客订阅者
适用场景
- 01准备并发布播客单集
- 02查看节目或单集表现
- 03上传文字稿和音频文件
- 04管理私人播客订阅者列表
MCP 相关
向 MCP 客户端提供 Transistor.fm 节目、单集、分析、文字稿、Webhook、上传及订阅者操作工具。这个社区服务器使用 API 密钥,README 说明其已不再积极维护。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
23收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
重要
Transistor 现已推出官方 MCP 服务:mcp.transistor.fm。 这是远程服务(无需安装),使用 OAuth 而非 API 密钥进行身份验证,并由 Transistor 团队维护,作为其即将推出的 API v2 的基础。对大多数人来说,它是更好的选择——建议从这里开始。
官方服务推出后,这个社区服务不再积极维护。它仍可正常使用;如果你特别需要本地、基于 API 密钥的服务(例如在使用 OAuth 浏览器流程不方便的无头或自动化环境中),它依然实用。欢迎提交修复 Bug 的 PR;功能请求则更适合提交给官方服务。

此 MCP 服务提供了与 Transistor.fm API 交互的工具,可用于管理播客和单集,以及查看分析数据。上方演示中显示的数据为示例数据,并非真实账户数据。
Fork 说明: 原始服务由 Guido X Jansen 开发(gxjansen/Transistor-MCP)。完整 API 对齐工作(涵盖所有文档所列参数、响应精简和搜索)、
get_download_summary和compare_episodes分析工具、ISO 日期处理以及文字稿支持均在此贡献,现已合并至上游。本仓库是打包并发布到 npm 的版本(transistor-mcp)。MIT 许可证和原始版权信息均保留在 LICENSE 中。
关于
由 Conor Bronsdon 为 Chain of Thought 播客制作工作流开发。在官方服务推出之前,它用于创建单集、上传文字稿和获取分析数据。Conor 主持 Chain of Thought,这是一档探讨 AI 基础设施以及从业者如何实际构建相关系统的节目。更多面向创作者的工具请见 ai-tools-for-creators。可在 X 上通过 @ConorBronsdon 找到 Conor。
配套工具:
- substack-mcp:阅读文章并管理 Substack 草稿
- podcastindex-mcp:搜索 Podcast Index 并追踪嘉宾亮相情况
- op3-mcp:查看 OP3 的下载量、听众地域分布和使用的应用
- apple-podcasts-mcp:获取 Apple Podcasts Connect 中的播放量、关注者和单集收听数据
- gsc-mcp:在 Google Search Console 中查询搜索表现、关键词和站点地图
- podcast-benchmark:仅使用公开数据,将节目与同类节目进行对比
配置
更倾向于使用官方服务? 无需安装。通过以下方式将其添加到 Claude Code:
claude mcp add --transport http transistor https://mcp.transistor.fm
然后运行 /mcp 登录 Transistor。其他支持通过 OAuth 连接远程服务的 MCP 客户端,可以直接指向 https://mcp.transistor.fm。
若要改为运行此社区服务,请使用 Transistor API 密钥将其添加到 MCP 设置配置文件中:
{
"mcpServers": {
"transistor": {
"command": "npx",
"args": ["-y", "transistor-mcp"],
"env": {
"TRANSISTOR_API_KEY": "your-api-key-here"
}
}
}
}
或者从本地克隆版本运行(先执行 npm install && npm run build):
{
"mcpServers": {
"transistor": {
"command": "node",
"args": ["path/to/Transistor-MCP/build/index.js"],
"env": {
"TRANSISTOR_API_KEY": "your-api-key-here"
}
}
}
}
可用工具
get_authenticated_user
获取已验证用户账户的详细信息。
{
// No parameters needed
}
authorize_upload
获取用于上传音频文件的预签名 URL。使用本工具后,再通过本地音频文件创建单集。
{
"filename": string // Required: Name of the audio file to upload
}
响应包括:
- upload_url:用于上传文件的预签名 S3 URL
- content_type:上传时使用的内容类型(例如,“audio/mpeg”)
- expires_in:上传 URL 过期前的秒数
- audio_url:创建单集时使用的最终 URL
list_shows
列出 Transistor.fm 账户中的所有节目,按更新时间排序(最新的排在前面)。返回分页列表,每页 10 项。
{
"page": number, // Optional, defaults to 0 (first page)
"per": number, // Optional, defaults to 10 items per page
"private": boolean, // Optional: filter for private shows
"query": string // Optional: search query
}
注意:所有参数均为可选项。不带参数调用此端点将返回第一页节目。
list_episodes
列出指定节目的单集。
{
"show_id": string, // Required
"page": number, // Optional, defaults to 0
"per": number, // Optional, defaults to 10
"query": string, // Optional: search query
"status": string, // Optional: "published", "draft", or "scheduled"
"order": string // Optional: "desc" (newest first) or "asc" (oldest first), defaults to "desc"
}
get_episode
获取指定单集的详细信息。
{
"episode_id": string, // Required
"include": string[], // Optional: array of related resources to include
"fields": { // Optional: sparse fieldsets
"episode": string[], // Fields to include for episode
"show": string[] // Fields to include for show
}
}
get_analytics
获取某个节目或指定单集的分析数据。如果未提供日期,默认查询最近 14 天的数据。
{
"show_id": string, // Required
"episode_id": string, // Optional: include for episode-specific analytics
"start_date": string, // Optional: format "dd-mm-yyyy", required if end_date is provided
"end_date": string // Optional: format "dd-mm-yyyy", required if start_date is provided
}
create_episode
创建新单集。
{
"show_id": string, // Required
"title": string, // Required
"audio_url": string, // Required
"summary": string, // Optional
"description": string, // Optional: may contain HTML
"transcript_text": string, // Optional: full episode transcript
"author": string, // Optional
"explicit": boolean, // Optional
"image_url": string, // Optional: episode artwork
"keywords": string, // Optional: comma-separated list
"number": number, // Optional: episode number
"season_number": number, // Optional
"type": string, // Optional: "full", "trailer", or "bonus"
"alternate_url": string, // Optional: override share_url
"video_url": string, // Optional: YouTube URL
"email_notifications": boolean, // Optional: override show setting
"increment_number": boolean // Optional: auto-set next episode number
}
update_episode
更新已有单集。
{
"episode_id": string, // Required
"title": string, // Optional
"summary": string, // Optional
"description": string, // Optional: may contain HTML
"transcript_text": string, // Optional: full episode transcript
"author": string, // Optional
"explicit": boolean, // Optional
"image_url": string, // Optional: episode artwork
"keywords": string, // Optional: comma-separated list
"number": number, // Optional: episode number
"season_number": number, // Optional
"type": string, // Optional: "full", "trailer", or "bonus"
"alternate_url": string, // Optional: override share_url
"video_url": string, // Optional: YouTube URL
"email_notifications": boolean // Optional: override show setting
}
get_all_episode_analytics
获取某个节目所有单集的分析数据。如果未提供日期,默认查询最近 7 天的数据。
{
"show_id": string, // Required
"start_date": string, // Optional: format "dd-mm-yyyy", required if end_date is provided
"end_date": string // Optional: format "dd-mm-yyyy", required if start_date is provided
}
list_webhooks
列出某个节目的所有 Webhook。
{
"show_id": string // Required
}
subscribe_webhook
订阅某个节目的 Webhook。
{
"event_name": string, // Required: e.g., "episode_created"
"show_id": string, // Required
"url": string // Required: URL to receive webhook events
}
unsubscribe_webhook
取消订阅 Webhook。
{
"webhook_id": string // Required
}
Typed errors
针对 Transistor.fm API 的工具调用失败时,会通过 isError: true 返回针对具体状态、便于理解的消息,而非通用的 Axios 错误。在内部,TransistorApiClient 会在单个响应拦截器中,将所有 HTTP 失败情况——身份验证(401/403)、速率限制(429)、验证错误(400)、未找到(404)和服务器错误(5xx)——映射为特定类型的错误类(参见 src/errors.ts)。因此,你看到的消息始终会说明失败类型;对于身份验证错误,还会指出 TRANSISTOR_API_KEY 环境变量。
重要说明
- API 请求的速率限制为每 10 秒 10 次(如 (https://developers.transistor.fm/#:~:text=API%20requests%20are%20rate%2Dlimited,to%20use%20the%20API%20again.)[Transistor API reference] 中所述)
- 日期必须采用“dd-mm-yyyy”格式
- 页码从 0 开始
- 所有端点均支持:
- 稀疏字段集:使用
fields[resource_type][]指定要返回的字段 - 包含关联资源:使用
include[]在单个请求中获取关联资源
- 稀疏字段集:使用
- include 数组采用
["resource_name"]格式 - fields 对象用于指定每种资源类型要返回的字段
- 所有工具均以 JSONAPI 格式返回数据,并包含正确的关联关系和元数据
使用示例
列出节目:
// List first page of shows (default behavior)
const result = await use_mcp_tool({
server_name: "transistor",
tool_name: "list_shows",
arguments: {}
});
// List shows with pagination and filtering
const resultWithParams = await use_mcp_tool({
server_name: "transistor",
tool_name: "list_shows",
arguments: {
page: 1,
per: 20,
private: true,
query: "podcast"
}
});
获取单集详情:
const result = await use_mcp_tool({
server_name: "transistor",
tool_name: "get_episode",
arguments: {
episode_id: "123456",
include: ["show"],
fields: {
episode: ["title", "summary", "description"],
show: ["title"]
}
}
});
获取节目分析数据:
// Get analytics for the last 14 days (default behavior)
const result = await use_mcp_tool({
server_name: "transistor",
tool_name: "get_analytics",
arguments: {
show_id: "123456"
}
});
// Get analytics for a specific date range
const resultWithDates = await use_mcp_tool({
server_name: "transistor",
tool_name: "get_analytics",
arguments: {
show_id: "123456",
start_date: "01-01-2024",
end_date: "31-01-2024"
}
});
// Get analytics for a specific episode
const episodeAnalytics = await use_mcp_tool({
server_name: "transistor",
tool_name: "get_analytics",
arguments: {
show_id: "123456",
episode_id: "789012",
start_date: "01-01-2024",
end_date: "31-01-2024"
}
});
更新单集:
const result = await use_mcp_tool({
server_name: "transistor",
tool_name: "update_episode",
arguments: {
episode_id: "123456",
title: "Updated Episode Title",
summary: "New episode summary",
description: "New detailed description",
season_number: 2,
episode_number: 5
}
});
获取所有单集的分析数据:
// Get analytics for all episodes for the last 7 days (default behavior)
const result = await use_mcp_tool({
server_name: "transistor",
tool_name: "get_all_episode_analytics",
arguments: {
show_id: "123456"
}
});
// Get analytics for all episodes for a specific date range
const resultWithDates = await use_mcp_tool({
server_name: "transistor",
tool_name: "get_all_episode_analytics",
arguments: {
show_id: "123456",
start_date: "01-01-2024",
end_date: "31-01-2024"
}
});
管理 Webhook:
// List webhooks
const webhooks = await use_mcp_tool({
server_name: "transistor",
tool_name: "list_webhooks",
arguments: {
show_id: "123456"
}
});
// Subscribe to webhook
const subscription = await use_mcp_tool({
server_name: "transistor",
tool_name: "subscribe_webhook",
arguments: {
event_name: "episode_created",
show_id: "123456",
url: "https://your-webhook-endpoint.com/hook"
}
});
// Unsubscribe from webhook
const unsubscribe = await use_mcp_tool({
server_name: "transistor",
tool_name: "unsubscribe_webhook",
arguments: {
webhook_id: "webhook123"
}
});
获取已验证用户:
const result = await use_mcp_tool({
server_name: "transistor",
tool_name: "get_authenticated_user",
arguments: {}
});
授权上传音频文件:
// First, get a pre-signed upload URL
const auth = await use_mcp_tool({
server_name: "transistor",
tool_name: "authorize_upload",
arguments: {
filename: "my-episode.mp3"
}
});
// Then use the returned upload_url to upload your file via PUT request
// Finally, use the returned audio_url when creating your episode:
const episode = await use_mcp_tool({
server_name: "transistor",
tool_name: "create_episode",
arguments: {
show_id: "123456",
title: "My New Episode",
audio_url: auth.data.attributes.audio_url
}
});
publish_episode
发布、安排发布或取消发布单集。
{
"episode_id": string, // Required
"status": string, // Required: "published", "scheduled", or "draft"
"published_at": string // Optional: date/time in the podcast's time zone (required for "scheduled")
}
get_show
获取单个节目的详细信息。
{
"show_id": string // Required
}
update_show
更新节目的元数据。
{
"show_id": string, // Required
"author": string, // Optional
"category": string, // Optional: primary podcast category
"copyright": string, // Optional
"description": string, // Optional
"explicit": boolean, // Optional
"image_url": string, // Optional: show artwork URL
"keywords": string, // Optional: comma-separated
"language": string, // Optional: e.g. "en"
"owner_email": string, // Optional
"secondary_category": string, // Optional
"show_type": string, // Optional: "episodic" or "serial"
"title": string, // Optional
"time_zone": string, // Optional
"website": string // Optional
}
list_subscribers
列出私人播客的订阅者。
{
"show_id": string, // Required
"page": number, // Optional
"per": number, // Optional
"query": string // Optional: search filter
}
get_subscriber
获取单个订阅者的详细信息。
{
"subscriber_id": string // Required
}
create_subscriber
向私人播客添加订阅者。
{
"show_id": string, // Required
"email": string, // Required
"skip_welcome_email": boolean // Optional (default false)
}
create_subscribers_batch
一次添加多个订阅者。
{
"show_id": string, // Required
"emails": string[], // Required: array of email addresses
"skip_welcome_email": boolean // Optional (default false)
}
update_subscriber
更新订阅者的电子邮件地址。
{
"subscriber_id": string, // Required
"email": string // Required: new email address
}
delete_subscriber
按 ID 或节目 + 电子邮件删除订阅者。
{
"subscriber_id": string, // Optional: delete by subscriber ID
"show_id": string, // Optional: use with email instead of subscriber_id
"email": string // Optional: use with show_id instead of subscriber_id
}
参与贡献
由于官方 Transistor MCP现已推出,此服务目前处于维护模式。仍欢迎提交错误报告和修复错误的 PR:请创建 issue,并注明工具名称以及你尝试发出的请求;或者 fork 此仓库,运行 npm install && npm run build,然后提交 PR,说明变更内容及原因。新功能请求最好提交给官方服务,Transistor 正在积极开发该服务。
免责声明
本账号表达的所有观点、意见和声明仅代表我个人,并以个人身份发布。这些内容不代表 Modular 的观点、立场或政策,也不应被解读为代表 Modular。本账号与 Modular 没有任何关联,也未获得 Modular 的授权或认可。
许可证
MIT。本项目 fork 自 gxjansen/Transistor-MCP;LICENSE 中保留了 Guido X Jansen 的原始版权声明。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。