Transistor MCP Server について
Transistor MCP Server は、ポッドキャスト運用のために LLM を Transistor.fm API に接続します。番組やエピソードの管理、分析、Webhook、購読者管理に対応します。
主な機能
- 01番組とエピソードの管理
- 02エピソードの作成と公開
- 03ダウンロード分析の確認
- 04Webhook と購読者の管理
- 05署名付き URL による音声アップロード
活用シーン
- 01番組やエピソードの実績確認
- 02ポッドキャストエピソードの作成・更新
- 03プライベートポッドキャストの購読者管理
- 04番組イベントの Webhook 登録
MCP 対応
番組・エピソード管理、分析、Webhook、購読者管理などの Transistor.fm API 操作を MCP ツールとして提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの 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 アカウントのすべての番組を、更新日順(新しい順)に一覧表示します。1 ページあたり 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
番組またはエピソードの計算済みダウンロード概要を取得します。合計ダウンロード数、1 日あたりの平均、前週比の推移、最多・最少の曜日を返します。
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
1 回のリクエストで複数の登録者を作成します。
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 リクエストには、(Transistor API リファレンス)に記載されているとおり、10 秒あたり 10 件のレート制限があります。
- 日付には ISO 形式の
yyyy-mm-dd(推奨)を指定できます。Transistor API のdd-mm-yyyy形式に自動変換されます。また、dd-mm-yyyy形式も使用できます。 - ページ番号は 0 から始まります。
- すべてのエンドポイントで次の機能を利用できます。
- スパースフィールドセット:
fields[resource_type][]を使用して、返すフィールドを指定します。 - 関連リソースの取り込み:
include[]を使用して、関連リソースを 1 回のリクエストで取得します。
- スパースフィールドセット:
- 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
}
});
対応範囲
このサーバーは、番組、エピソード、分析、ダウンロード概要、Webhook、プライベートポッドキャストの購読者管理(GET/POST/PATCH/DELETE /v1/subscribers)を含む、Transistor API のドキュメント化された全機能に対応しています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。