mcpField
T
Transistor MCP Server

Transistor MCP Server

本地服务
github.com/gxjansen媒体与设计119 周前更新

关于 Transistor MCP Server

Transistor MCP Server 将 LLM 连接到 Transistor.fm API,用于播客管理,涵盖节目与单集操作、数据分析、Webhook 和订阅者管理。

主要功能

  1. 01管理节目和单集
  2. 02创建并发布单集
  3. 03查看下载分析数据
  4. 04管理 Webhook 和订阅者
  5. 05使用签名 URL 上传音频

适用场景

  1. 01查看节目和单集表现
  2. 02创建或更新播客单集
  3. 03管理私人播客订阅者
  4. 04订阅节目事件 Webhook

MCP 相关

它将 Transistor.fm API 操作作为 MCP 工具提供,包括节目与单集管理、数据分析、Webhook 和订阅者管理。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Transistor MCP 服务

smithery 徽章

此 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)。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。