# Transistor MCP Server (npm · transistor-mcp)

Manage Transistor.fm podcasts: episodes, analytics, transcripts, and webhooks.

- Trust score: 75/100 (medium)
- Change this week: +29
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `transistor-mcp`: 75/100 (this document), [markdown](https://verifymcp.io/servers/conorbronsdon-transistor-mcp/transistor-mcp.md), [page](https://verifymcp.io/servers/conorbronsdon-transistor-mcp/transistor-mcp)

## Channel facts

- Registry: `npm`
- Package: `transistor-mcp`
- Version: `0.4.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 70/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known high-severity CVE affects @modelcontextprotocol/sdk 1.25.2, a direct dependency. A fixed version is available.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (105 of 106), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to conorbronsdon/Transistor-MCP).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 25 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 77/100
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 2032 tokens (~88/item across 23 items; 23 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add conorbronsdon-transistor-mcp -- npx -y transistor-mcp
```

### Codex

```bash
codex mcp add conorbronsdon-transistor-mcp -- npx -y transistor-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "conorbronsdon-transistor-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "transistor-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add conorbronsdon-transistor-mcp --command npx --arg -y --arg transistor-mcp
```

### Hermes

```yaml
mcp_servers:
  conorbronsdon-transistor-mcp:
    command: "npx"
    args: ["-y", "transistor-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "conorbronsdon-transistor-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "transistor-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 75, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 74, +35)

- [security regression] CVE-2026-25536 affects this package: high
- [security regression] GHSA-frvp-7c67-39w9 affects this package: high
- [security regression] Known CVEs: unverified → fail
- [security regression] Provenance: fail → unverified
- [security regression] Install scripts: pass → unverified
- [security improvement] CVE-2025-66414 no longer affects this package
- [security improvement] Malware scan: unverified → pass
- [security improvement] Provenance: fail → pass
- [security] The attested source repository moved: conorbronsdon/Transistor-MCP
- [functional regression] License: pass → unverified
- [functional regression] Maintenance: pass → unverified
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Stability: unverified → 0.23
- [functional improvement] MCP protocol: fail → pass
- [functional] Licence: MIT
- [functional] Package version: 0.2.0 → 0.4.0

### 2026-08-01 (score 39, −6)

- [security regression] Known CVEs: fail → unverified
- [functional regression] Dependency health: partial → unverified

### 2026-07-31 (score 45, +17)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 28, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-27 (score 46)

First indexed and scored.

## MCP tools (23)

### `get_authenticated_user` (~17 tokens)

Get details of the authenticated user account

### `authorize_upload` (~34 tokens)

Get a pre-signed URL for uploading an audio file

Input parameters:

- `filename` (string, required): Filename of the audio file to upload

### `list_shows` (~71 tokens)

List all shows in your Transistor.fm account

Input parameters:

- `page` (number): Page number for pagination
- `per` (number): Items per page (default 10, max 100)
- `private` (boolean): Filter for private shows
- `query` (string): Search query to filter shows

### `list_episodes` (~205 tokens)

List episodes for a specific show. Use 'fields' to request only specific attributes and reduce response size (e.g. {"episode": ["title", "number", "status", "season"]}). Use 'query' to search by title.

Input parameters:

- `fields` (object): Sparse fieldsets to reduce response size. Keys are resource types (e.g. 'episode'), values are arrays of field names (e.g. ['title', 'number', 'status', 'season', 'transcript_url'])
- `order` (string): Sort order: 'desc' (newest first, default) or 'asc' (oldest first)
- `page` (number): Page number for pagination
- `per` (number): Items per page (default 10, max 100)
- `query` (string): Search episodes by title
- `show_id` (string, required): ID of the show to list episodes for
- `status` (string): Filter episodes by status

### `create_episode` (~225 tokens)

Create a new episode

Input parameters:

- `alternate_url` (string): Override the default share URL
- `audio_url` (string, required): URL to the episode audio file
- `author` (string): Episode author name
- `description` (string): Episode description (supports HTML)
- `email_notifications` (boolean): Override show email notification setting
- `explicit` (boolean): Whether the episode contains explicit content
- `image_url` (string): URL to episode artwork
- `increment_number` (boolean): Auto-set next episode number
- `keywords` (string): Comma-separated list of keywords
- `number` (number): Episode number
- `season_number` (number): Season number
- `show_id` (string, required): ID of the show to create the episode in
- `status` (string): Episode status
- `summary` (string): Episode summary
- `title` (string, required): Episode title
- `transcript_text` (string): Plain text transcript for the episode
- `type` (string): Episode type
- `video_url` (string): YouTube or video URL

### `update_episode` (~215 tokens)

Update an existing episode

Input parameters:

- `alternate_url` (string): Override the default share URL
- `author` (string): Episode author name
- `description` (string): New episode description (supports HTML)
- `email_notifications` (boolean): Override show email notification setting
- `episode_id` (string, required): ID of the episode to update
- `episode_number` (number): New episode number (alias for number)
- `explicit` (boolean): Whether the episode contains explicit content
- `image_url` (string): URL to episode artwork
- `keywords` (string): Comma-separated list of keywords
- `number` (number): Episode number
- `season_number` (number): New season number
- `status` (string): New episode status
- `summary` (string): New episode summary
- `title` (string): New episode title
- `transcript_text` (string): Plain text transcript for the episode
- `type` (string): Episode type
- `video_url` (string): YouTube or video URL

### `get_analytics` (~108 tokens)

Get analytics for a show or episode. Defaults to last 14 days if no dates provided.

Input parameters:

- `end_date` (string): End date (accepts yyyy-mm-dd or dd-mm-yyyy) (optional)
- `episode_id` (string): ID of the episode to get analytics for (optional)
- `show_id` (string, required): ID of the show to get analytics for
- `start_date` (string): Start date (accepts yyyy-mm-dd or dd-mm-yyyy) (optional)

### `get_episode` (~47 tokens)

Get a single episode

Input parameters:

- `episode_id` (string, required): ID of the episode to get
- `fields` (object): Sparse fieldsets
- `include` (array): Include related resources

### `get_all_episode_analytics` (~93 tokens)

Get analytics for all episodes of a show. Defaults to last 7 days if no dates provided.

Input parameters:

- `end_date` (string): End date (accepts yyyy-mm-dd or dd-mm-yyyy) (optional)
- `show_id` (string, required): ID of the show to get analytics for
- `start_date` (string): Start date (accepts yyyy-mm-dd or dd-mm-yyyy) (optional)

### `list_webhooks` (~34 tokens)

List all webhooks for a show

Input parameters:

- `show_id` (string, required): ID of the show to list webhooks for

### `subscribe_webhook` (~61 tokens)

Subscribe to a webhook for a show

Input parameters:

- `event_name` (string, required): Event name (e.g., 'episode_created')
- `show_id` (string, required): ID of the show to subscribe to
- `url` (string, required): URL to receive webhook events

### `unsubscribe_webhook` (~30 tokens)

Unsubscribe from a webhook

Input parameters:

- `webhook_id` (string, required): ID of the webhook to unsubscribe from

### `get_download_summary` (~122 tokens)

Get a computed download summary for a show or episode. Returns total downloads, daily average, week-over-week trend, and best/worst days — no manual calculation needed.

Input parameters:

- `end_date` (string): End date (accepts yyyy-mm-dd or dd-mm-yyyy) (optional)
- `episode_id` (string): ID of a specific episode (optional, omit for show-level stats)
- `show_id` (string, required): ID of the show
- `start_date` (string): Start date (accepts yyyy-mm-dd or dd-mm-yyyy) (optional)

### `compare_episodes` (~106 tokens)

Compare download performance across 2 or more episodes. Returns side-by-side stats: total downloads, daily average, peak day, and days since publish for each episode.

Input parameters:

- `end_date` (string): End date (accepts yyyy-mm-dd or dd-mm-yyyy) (optional)
- `episode_ids` (array, required): Array of episode IDs to compare (minimum 2)
- `start_date` (string): Start date (accepts yyyy-mm-dd or dd-mm-yyyy) (optional)

### `publish_episode` (~106 tokens)

Publish, schedule, or unpublish an episode. Use this to change an episode's publish status separately from updating its metadata.

Input parameters:

- `episode_id` (string, required): ID of the episode
- `published_at` (string): Date/time to publish or schedule (in the podcast's time zone). Required when status is 'scheduled'.
- `status` (string, required): New status: 'published' to publish now, 'scheduled' to schedule for a future date, 'draft' to unpublish

### `get_show` (~29 tokens)

Get details of a single show by ID

Input parameters:

- `show_id` (string, required): ID of the show

### `update_show` (~180 tokens)

Update a show's metadata

Input parameters:

- `author` (string): Show author name
- `category` (string): Primary podcast category
- `copyright` (string): Copyright notice
- `description` (string): Show description
- `explicit` (boolean): Whether the show contains explicit content
- `image_url` (string): URL to show artwork
- `keywords` (string): Comma-separated keywords
- `language` (string): Show language (e.g. 'en')
- `owner_email` (string): Owner email address
- `secondary_category` (string): Secondary podcast category
- `show_id` (string, required): ID of the show to update
- `show_type` (string): Show type
- `time_zone` (string): Time zone for the show
- `title` (string): Show title
- `website` (string): Show website URL

### `list_subscribers` (~72 tokens)

List subscribers for a private podcast. Returns a paginated list.

Input parameters:

- `page` (number): Page number for pagination
- `per` (number): Items per page (default 10)
- `query` (string): Search query to filter subscribers
- `show_id` (string, required): ID of the private podcast

### `get_subscriber` (~28 tokens)

Get details of a single subscriber

Input parameters:

- `subscriber_id` (string, required): ID of the subscriber

### `create_subscriber` (~57 tokens)

Add a subscriber to a private podcast

Input parameters:

- `email` (string, required): Subscriber email address
- `show_id` (string, required): ID of the private podcast
- `skip_welcome_email` (boolean): Skip sending welcome email (default false)

### `create_subscribers_batch` (~62 tokens)

Add multiple subscribers to a private podcast at once

Input parameters:

- `emails` (array, required): Array of subscriber email addresses
- `show_id` (string, required): ID of the private podcast
- `skip_welcome_email` (boolean): Skip sending welcome emails (default false)

### `update_subscriber` (~40 tokens)

Update a subscriber's email address

Input parameters:

- `email` (string, required): New email address
- `subscriber_id` (string, required): ID of the subscriber to update

### `delete_subscriber` (~90 tokens)

Delete a subscriber by ID or by show_id + email. Provide either subscriber_id alone, or both show_id and email.

Input parameters:

- `email` (string): Email of the subscriber to delete (use with show_id instead of subscriber_id)
- `show_id` (string): ID of the show (use with email instead of subscriber_id)
- `subscriber_id` (string): ID of the subscriber to delete

## Diagnostics

Captured diagnostic sections: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/conorbronsdon-transistor-mcp/transistor-mcp#diagnostics

## Score history

- 2026-08-03: 75
- 2026-08-02: 74
- 2026-08-01: 39
- 2026-07-31: 45
- 2026-07-30: 28
- 2026-07-28: 46
- 2026-07-27: 46

## Links

- npm package: https://www.npmjs.com/package/transistor-mcp
- Socket report: https://socket.dev/npm/package/transistor-mcp
- Repository: https://github.com/conorbronsdon/Transistor-MCP
- Changelog RSS feed: https://verifymcp.io/servers/conorbronsdon-transistor-mcp/transistor-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/conorbronsdon-transistor-mcp/transistor-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/conorbronsdon-transistor-mcp/transistor-mcp
