---
slug: "transistor-mcp-server"
source_type: "readme"
source_url: "https://cdn.jsdelivr.net/gh/gxjansen/transistor-mcp@main/README.md"
repo: "https://github.com/gxjansen/transistor-mcp"
source_file: "README.md"
branch: "main"
---
# Transistor MCP Server
[![smithery badge](https://smithery.ai/badge/@gxjansen/Transistor-MCP)](https://smithery.ai/server/@gxjansen/Transistor-MCP)

This MCP server provides tools to interact with the [Transistor.fm](https://transistor.fm/) API, allowing you to manage podcasts, episodes, and view analytics.

## Configuration

Add the server to your MCP settings configuration file with your Transistor API key:

```json
{
  "mcpServers": {
    "transistor": {
      "command": "node",
      "args": ["path/to/Transistor-MCP/build/index.js"],
      "env": {
        "TRANSISTOR_API_KEY": "your-api-key-here"
      }
    }
  }
}
```

## Available Tools

### get_authenticated_user
Get details of the authenticated user account.

```json
{
  // No parameters needed
}
```

### authorize_upload
Get a pre-signed URL for uploading an audio file. Use this before creating an episode with a local audio file.

```json
{
  "filename": string  // Required: Name of the audio file to upload
}
```

Response includes:
- upload_url: Pre-signed S3 URL for uploading the file
- content_type: Content type to use when uploading (e.g., "audio/mpeg")
- expires_in: Time in seconds until the upload URL expires
- audio_url: Final URL to use when creating the episode

### list_shows
List all shows in your Transistor.fm account, ordered by updated date (newest first). Returns a paginated list with 10 items per page.

```json
{
  "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
}
```

Note: All parameters are optional. Calling this endpoint without parameters will return the first page of shows.

### list_episodes
List episodes for a specific show.

```json
{
  "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
Get detailed information about a specific episode.

```json
{
  "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
Get analytics for a show or specific episode. Defaults to the last 14 days if no dates are provided.

```json
{
  "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
Create a new episode.

```json
{
  "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
Update an existing episode.

```json
{
  "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
Get analytics for all episodes of a show. Defaults to the last 7 days if no dates are provided.

```json
{
  "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
List all webhooks for a show.

```json
{
  "show_id": string            // Required
}
```

### subscribe_webhook
Subscribe to a webhook for a show.

```json
{
  "event_name": string,        // Required: e.g., "episode_created"
  "show_id": string,          // Required
  "url": string              // Required: URL to receive webhook events
}
```

### unsubscribe_webhook
Unsubscribe from a webhook.

```json
{
  "webhook_id": string        // Required
}
```

### get_show
Get a show by ID.
```json
show_id: string   // Required
```

### update_show
Update a show.
```json
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
Publish or schedule an episode without otherwise editing its metadata.
```json
episode_id: string   // Required
status: "published" | "scheduled" | "draft"   // Required
published_at: string   // Optional
```

### get_download_summary
Get a computed download summary for a show or episode. Returns total downloads, daily average, week-over-week trend, and best/worst day.
```json
show_id: string   // Required
episode_id: string   // Optional
start_date: string   // Optional
end_date: string   // Optional
```

### compare_episodes
Compare download performance across multiple episodes, sorted by total downloads.
```json
episode_ids: string[]   // Required - array of episode IDs
start_date: string   // Optional
end_date: string   // Optional
```

### list_subscribers
List subscribers for a show.
```json
show_id: string   // Required
page: number   // Optional
per: number   // Optional
query: string   // Optional
```

### get_subscriber
Get a subscriber by ID.
```json
subscriber_id: string   // Required
```

### create_subscriber
Create a subscriber.
```json
show_id: string   // Required
email: string   // Required
skip_welcome_email: boolean   // Optional
```

### create_subscribers_batch
Create multiple subscribers in a single request.
```json
show_id: string   // Required
emails: string[]   // Required
skip_welcome_email: boolean   // Optional
```

### update_subscriber
Update a subscriber's email.
```json
subscriber_id: string   // Required
email: string   // Required
```

### delete_subscriber
Delete a subscriber. Provide either `subscriber_id`, OR both `show_id` and `email`.
```json
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
```

## Important Notes

- API requests are rate-limited to 10 requests per 10 seconds (as prescribed by the (https://developers.transistor.fm/#:~:text=API%20requests%20are%20rate%2Dlimited,to%20use%20the%20API%20again.)[Transistor API reference])
- Dates accept ISO `yyyy-mm-dd` (recommended) and are converted to the Transistor API's `dd-mm-yyyy` automatically; `dd-mm-yyyy` is also accepted
- Page numbers start at 0
- All endpoints support:
  - Sparse fieldsets: Specify which fields to return using `fields[resource_type][]`
  - Including related resources: Use `include[]` to fetch related resources in a single request
- Include arrays use the format `["resource_name"]`
- Fields objects specify which fields to return for each resource type
- All tools return data in JSONAPI format with proper relationships and metadata

## Example Usage

List shows:
```typescript
// 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"
  }
});
```

Get episode details:
```typescript
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 show analytics:
```typescript
// 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"
  }
});
```

Update episode:
```typescript
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 all episode analytics:
```typescript
// 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"
  }
});
```

Manage webhooks:
```typescript
// 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"
  }
});
```

Get authenticated user:
```typescript
const result = await use_mcp_tool({
  server_name: "transistor",
  tool_name: "get_authenticated_user",
  arguments: {}
});
```

Authorize audio file upload:
```typescript
// 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
  }
});
```

## Coverage

This server now covers the full documented Transistor API surface, including shows,
episodes, analytics, download summaries, webhooks, and private-podcast subscriber
management (`GET/POST/PATCH/DELETE /v1/subscribers`).
