mcpField
T
Transistor MCP Server

Transistor MCP Server

ローカル
github.com/conorbronsdonメディア・デザイン110 週間前に更新

Transistor MCP Server について

Transistor MCP Serverは、ポッドキャスト制作者やアカウント運用担当者向けに、Transistor.fm APIを操作するツールを提供します。番組・エピソード管理、分析、文字起こし、アップロード、Webhook、購読者の操作に対応し、コミュニティ版は現在積極的に保守されていません。

主な機能

  1. 01番組とエピソードの一覧・検索
  2. 02エピソードの作成・更新・公開
  3. 03音声のアップロードと文字起こし管理
  4. 04番組・エピソードの分析情報を取得
  5. 05番組のWebhookを管理
  6. 06非公開ポッドキャストの購読者を管理

活用シーン

  1. 01ポッドキャストのエピソードを準備・公開
  2. 02番組やエピソードの実績を確認
  3. 03文字起こしと音声ファイルをアップロード
  4. 04非公開ポッドキャストの購読者リストを管理

MCP 対応

Transistor.fmの番組、エピソード、分析、文字起こし、Webhook、アップロード、購読者の操作ツールをMCPクライアントに公開します。このコミュニティ版はAPIキーを使用し、READMEでは積極的な保守を終了したと記載されています。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"conorbronsdon-transistor": {
"command": "npx",
"args": [
"-y",
"transistor-mcp"
],
"env": {
"TRANSISTOR_API_KEY": "<TRANSISTOR_API_KEY>"
}
}
}
}
起動コマンドnpx -y transistor-mcp
設定が必要な環境変数
TRANSISTOR_API_KEYシークレットTransistor.fm API key from https://dashboard.transistor.fm/account

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmtransistor-mcp0.4.0

ツール

23

掲載時のツール一覧 · 2 週間前に更新

このツールにパラメーターはありません。

詳細

Transistor MCP サーバー

Transistor.fm API 用の MCP サーバーです。AI エージェントから、ポッドキャスト、エピソード、分析、トランスクリプト、Webhook を管理できます。

License: MIT Language: TypeScript MCP Podcast X


重要

Transistor は公式 MCP サーバーを公開しました:mcp.transistor.fm。 リモートサーバー(インストール不要)で、API キーではなく OAuth で認証し、今後の API v2 の基盤として Transistor チームが保守しています。ほとんどの方にとってはこちらが適しています。まずはこちらをご利用ください。

公式サーバーの提供開始に伴い、このコミュニティサーバーは積極的な保守を終了しました。引き続き動作し、ローカルで API キーを使うサーバーを特に必要とする場合(たとえば、OAuth のブラウザーフローが使いにくいヘッドレス環境や自動化環境)には引き続き役立ちます。バグ修正の PR は歓迎します。機能のリクエストは公式サーバーにお寄せください。

デモ:get_episode ツール呼び出しと応答

この MCP サーバーは、Transistor.fm API を操作するツールを提供し、ポッドキャストやエピソードの管理、分析情報の確認ができます。上のデモに表示されているデータはサンプルであり、実際のアカウントの値ではありません。

フォークに関するお知らせ: 元のサーバーはGuido X Jansen(gxjansen/Transistor-MCP)によって構築されました。API 全体との互換性を実現するための対応(ドキュメントに記載されたすべてのパラメーター、応答のトリミング、検索)、get_download_summary および compare_episodes 分析ツール、ISO 日付の処理、トランスクリプト対応は、こちらで貢献され、すでに上流にマージされています。このリポジトリはパッケージ化され、npm で公開されたビルド(transistor-mcp)です。MIT ライセンスと元の著作権表示はLICENSEに保持されています。

Transistor-MCP MCP server

概要

Conor Bronsdon が、Chain of Thought ポッドキャストの制作ワークフロー用に構築しました。公式サーバーが公開されるまでは、エピソードの作成、トランスクリプトのアップロード、分析データの取得に使用されていました。Conor は、AI インフラストラクチャと、実務者が実際にそれをどのように構築しているかを扱う番組 Chain of Thought のホストです。クリエイター向けのその他のツールはai-tools-for-creatorsをご覧ください。X では@ConorBronsdonをフォローしてください。

関連ツール:

  • 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 アカウント内のすべての番組を、更新日順(新しいものから)に一覧表示します。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
}
型付きエラー

Transistor.fm API へのツール呼び出しが失敗した場合、一般的な Axios エラーではなく、isError: true を介して、ステータスに応じた人間が読みやすいメッセージを返します。内部では、TransistorApiClient が単一のレスポンスインターセプター(src/errors.ts を参照)で、認証エラー(401/403)、レート制限(429)、バリデーションエラー(400)、未検出(404)、サーバーエラー(5xx)など、すべての HTTP エラーを型付きエラークラスにマッピングします。そのため、表示されるメッセージには常にエラーの種類が示され、認証エラーの場合は 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[] を使って、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
  }
});
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 を作成するか、リポジトリをフォークして npm install && npm run build を実行し、変更内容とその理由を説明した PR を作成してください。新機能のリクエストは、Transistor が積極的に開発している公式サーバーにお寄せください。


免責事項

このアカウントで表明されるすべての見解、意見、声明は、私個人のものであり、個人としての立場で述べています。これらは Modular の見解、立場、方針を反映するものではなく、そのように解釈されるべきでもありません。このアカウントは、いかなる形でも Modular と提携、承認、または公認されていません。

ライセンス

MIT。このリポジトリは gxjansen/Transistor-MCP のフォークです。Guido X Jansen による元の著作権表示は LICENSE に保持されています。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。