MCP server for the Transistor.fm podcast hosting API — manage shows, episodes, analytics, download summaries, transcripts, subscribers, and webhooks.
Transistor MCP demonstrates solid tool definition quality with 23 well-named, action-verb-prefixed tools covering podcast hosting operations. All tools have descriptions (avg ~120 chars) and input schemas with typed parameters. Strengths: consistent naming (get_*, list_*, create_*, update_*, delete_*), enum constraints on status/type fields, pagination support (page/per params), and parameter descriptions. Weaknesses: output schemas are not documented in the tool definitions; error handling lacks recovery guidance; descriptions could be more prescriptive about when to use each tool vs. alternatives; some parameter descriptions are generic ('ID of the X'). No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels. Response trimming logic (trimEpisodeResponse) exists but is not exposed to the LLM.
Get a pre-signed URL for uploading an audio file
Compare analytics across multiple episodes
Create a new episode
Create a new subscriber
Create multiple subscribers in batch
Delete a subscriber
Get analytics for all episodes in a show
Output schemas not documented. Tool definitions lack return type documentation, forcing LLMs to guess what fields are available in responses. This breaks tool chaining (e.g., list_shows returns show_id, but downstream tools need to know the field name to reference it).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are marked with Risk levels (READ_ONLY, WRITE, DESTRUCTIVE) in metadata but not exposed via MCP tool annotations. LLMs cannot infer safety properties from tool definitions alone.
Error handling lacks recovery guidance. errorMessage() function returns raw error text without actionable next steps. E.g., 'User not found' should suggest 'Try search_users() with a partial name' or 'Available shows: [list]'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Get analytics for a show or episode
Get details of the authenticated user account
Get a summary of downloads for a show or episode
Get details of a specific episode
Get details of a specific show
Get details of a specific subscriber
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.
List all shows in your Transistor.fm account
List subscribers for a show
List webhooks for a show
Publish or schedule an episode
Subscribe to a webhook event
Unsubscribe from a webhook
Update an existing episode
Update show metadata
Update a subscriber's email address
Parameter descriptions are generic. Many params use 'ID of the X' without explaining format, constraints, or how to obtain the ID. E.g., show_id should note 'Numeric ID from list_shows() response' or 'Can be obtained via list_shows()'.
delete_subscriber has ambiguous parameter logic. Accepts subscriber_id OR (show_id + email), but schema does not enforce mutual exclusivity. LLMs may pass all three, causing ambiguous behavior.