关于 Transistor MCP Server
Transistor MCP Server 将 LLM 连接到 Transistor.fm API,用于播客管理,涵盖节目与单集操作、数据分析、Webhook 和订阅者管理。
主要功能
- 01管理节目和单集
- 02创建并发布单集
- 03查看下载分析数据
- 04管理 Webhook 和订阅者
- 05使用签名 URL 上传音频
适用场景
- 01查看节目和单集表现
- 02创建或更新播客单集
- 03管理私人播客订阅者
- 04订阅节目事件 Webhook
MCP 相关
它将 Transistor.fm API 操作作为 MCP 工具提供,包括节目与单集管理、数据分析、Webhook 和订阅者管理。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Transistor MCP 服务
此 MCP 服务提供了与 Transistor.fm API 交互的工具,可用于管理播客和单集,以及查看分析数据。
配置
使用 Transistor API 密钥,将服务添加到 MCP 设置配置文件中:
{
"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
}
get_show
按 ID 获取节目。
show_id: string // Required
update_show
更新节目。
show_id: string // Required
author: string // Optional
category: string // Optional
copyright: string // Optional
description: string // Optional
explicit: boolean // Optional
image_url: string // Optional
keywords: string // Optional
language: string // Optional
owner_email: string // Optional
secondary_category: string // Optional
show_type: "episodic" | "serial" // Optional
title: string // Optional
time_zone: string // Optional
website: string // Optional
publish_episode
发布或安排单集的发布时间,但不更改其元数据。
episode_id: string // Required
status: "published" | "scheduled" | "draft" // Required
published_at: string // Optional
get_download_summary
获取节目或单集的下载汇总数据,包括总下载量、日均下载量、环比周趋势以及下载量最高和最低的日期。
show_id: string // Required
episode_id: string // Optional
start_date: string // Optional
end_date: string // Optional
compare_episodes
比较多个单集的下载表现,并按总下载量排序。
episode_ids: string[] // Required - array of episode IDs
start_date: string // Optional
end_date: string // Optional
list_subscribers
列出某个节目的订阅者。
show_id: string // Required
page: number // Optional
per: number // Optional
query: string // Optional
get_subscriber
按 ID 获取订阅者。
subscriber_id: string // Required
create_subscriber
创建订阅者。
show_id: string // Required
email: string // Required
skip_welcome_email: boolean // Optional
create_subscribers_batch
在单个请求中创建多个订阅者。
show_id: string // Required
emails: string[] // Required
skip_welcome_email: boolean // Optional
update_subscriber
更新订阅者的电子邮件地址。
subscriber_id: string // Required
email: string // Required
delete_subscriber
删除订阅者。请提供 subscriber_id,或同时提供 show_id 和 email。
subscriber_id: string // Optional - either this, or both show_id + email
show_id: string // Optional - required with email when no subscriber_id
email: string // Optional - required with show_id when no subscriber_id
重要说明
- API 请求的速率限制为每 10 秒 10 次(遵循 (https://developers.transistor.fm/#:~:text=API%20requests%20are%20rate%2Dlimited,to%20use%20the%20API%20again.)[Transistor API 参考文档]中的规定)
- 日期接受 ISO
yyyy-mm-dd格式(推荐),并会自动转换为 Transistor API 的dd-mm-yyyy格式;也接受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
}
});
覆盖范围
此服务现已涵盖 Transistor API 文档中的全部功能,包括节目、剧集、分析数据、下载摘要、Webhook 和私有播客订阅者管理(GET/POST/PATCH/DELETE /v1/subscribers)。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。