Skip to main content
Glama
Red5d

Jupiter Broadcasting Podcast Data MCP Server

by Red5d

Podcasting 2.0 RSS Data MCP Server

A FastMCP server that parses Podcasting 2.0 RSS feeds and provides access to episode data through MCP tools.

Features

This MCP server provides four main tools:

  1. List Shows - Returns a list of available podcast shows

  2. Search Episodes - Search episodes by show, date range, hosts, or text content

  3. Get Episode - Retrieve detailed information about a specific episode

  4. Get Transcript - Fetch episode transcripts when available

Related MCP server: Lenny's Podcast MCP

Installation

This project uses the uv package manager for Python dependency management.

Prerequisites

  • Python 3.10 or higher

  • uv package manager

Install uv (if not already installed)

curl -LsSf https://astral.sh/uv/install.sh | sh

Clone and Setup

git clone <repository-url>
cd podcast_mcp
uv sync

Usage

Running the Server

To start the MCP server:

uv run podcast_mcp

Or alternatively:

uv run python -m podcast_mcp.server

MCP Tools

1. List Shows

Returns an array of available podcast show names.

{
  "tool": "list_shows",
  "arguments": {}
}

Returns: Array of show names (e.g., ["Linux Unplugged", "This Week in Bitcoin", ...])

2. Search Episodes

Search for episodes using various criteria. At least one parameter must be provided.

{
  "tool": "search_episodes",
  "arguments": {
    "show_name": "Linux Unplugged",
    "since_date": "2024-01-01",
    "before_date": "2024-12-31",
    "hosts": ["Chris Fisher", "Wes Payne"],
    "text_search": "kubernetes"
  }
}

Parameters:

  • show_name (optional): Filter by specific show

  • since_date (optional): Episodes published on or after this date (YYYY-MM-DD or ISO format)

  • before_date (optional): Episodes published before this date (YYYY-MM-DD or ISO format)

  • hosts (optional): Array of host names to filter by

  • text_search (optional): Search text in episode titles and descriptions

Returns: Array of episode objects with metadata

3. Get Episode

Retrieve detailed information about a specific episode.

{
  "tool": "get_episode",
  "arguments": {
    "show_name": "Linux Unplugged",
    "episode_number": "635"
  }
}

Parameters:

  • show_name (required): Name of the show

  • episode_number (required): Episode number

Returns: Episode object with full metadata including:

  • Title and description

  • Publication date

  • Host information

  • Audio file URLs

  • Transcript URL (if available)

  • Duration

  • Hosts

4. Get Transcript

Fetch the transcript content for an episode.

{
  "tool": "get_transcript",
  "arguments": {
    "show_name": "Linux Unplugged",
    "episode_number": "635"
  }
}

Parameters:

  • show_name (required): Name of the show

  • episode_number (required): Episode number

Returns: Object containing transcript text or error message

Configuration

Adding New Feeds

To add or modify RSS feeds, edit the FEEDS dictionary in podcast_mcp/server.py:

FEEDS = {
    "Show Name": "https://example.com/feed.rss",
    "Another Show": "https://example.com/another-feed.rss",
}

Podcast 2.0 Namespace Support

This server supports Podcast 2.0 namespace elements including:

  • <podcast:person> for host information

  • <podcast:transcript> for transcript URLs

  • Standard RSS elements for titles, descriptions, and enclosures

Development

Setting up Development Environment

# Install with development dependencies
uv sync --group dev

# Run tests
uv run pytest

# Format code
uv run black .
uv run isort .

# Type checking
uv run mypy .

Project Structure

podcast_mcp/
├── podcast_mcp/
│   ├── __init__.py
│   ├── server.py          # Main MCP server
│   └── rss_parser.py      # RSS feed parsing logic
├── tests/                 # Test files
├── pyproject.toml         # Project configuration
└── README.md

Error Handling

The server includes comprehensive error handling:

  • Invalid search parameters return error messages

  • Network failures when fetching feeds are logged

  • Missing episodes or transcripts return appropriate error responses

  • Malformed RSS feeds are handled gracefully

Dependencies

  • fastmcp: FastMCP framework for building MCP servers

  • lxml: High-performance XML parsing with full Podcast 2.0 namespace support

  • requests: HTTP client for fetching feeds and transcripts

License

MIT License - see LICENSE file for details.

Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Add tests for new functionality

  5. Run the test suite and linting

  6. Submit a pull request

Support

For issues and questions, please open an issue on the GitHub repository.

Available Tools

4 tools
get_episodeB

Get detailed information about a specific episode.

Args: show_name: Name of the show episode_number: Episode number

Returns: Episode data including title, description, hosts, enclosures, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
show_nameYes
episode_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves information (implying read-only behavior) but lacks details on permissions, rate limits, error handling, or data freshness. The mention of returns like 'title, description, hosts, enclosures, etc.' hints at output structure but is vague, failing to fully compensate for the absence of annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and appropriately sized, with a clear purpose statement followed by sections for Args and Returns. Each sentence adds value, though the 'Returns' section could be more specific (e.g., listing exact fields instead of 'etc.'). It avoids redundancy and is front-loaded with the core functionality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (2 required parameters, no nested objects) and the presence of an output schema (which handles return values), the description is reasonably complete. It covers purpose, parameters, and return types, though it lacks behavioral details like error cases or usage guidelines, which are minor gaps in this context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must add meaning beyond the schema. It lists parameters ('show_name', 'episode_number') and briefly explains their roles, but doesn't provide format details (e.g., episode number as string vs. integer) or examples. This partially compensates for the schema gap but leaves ambiguity, aligning with the baseline for moderate compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Get detailed information') and resource ('about a specific episode'). It distinguishes this from siblings like 'list_shows' (which lists shows) and 'search_episodes' (which searches across episodes), though it doesn't explicitly contrast with 'get_transcript' (which might retrieve transcript data for an episode).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'search_episodes' or 'get_transcript'. It mentions retrieving 'detailed information' but doesn't specify scenarios where this is preferred over other tools, leaving the agent to infer usage from context alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_transcriptC

Get the transcript for a specific episode.

Args: show_name: Name of the show episode_number: Episode number

Returns: Dictionary containing the transcript text or error message.

ParametersJSON Schema
NameRequiredDescriptionDefault
show_nameYes
episode_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that the tool returns a 'Dictionary containing the transcript text or error message,' which gives some insight into output behavior, but it does not cover critical aspects like authentication needs, rate limits, error conditions beyond generic messages, or whether it's a read-only operation. For a tool with zero annotation coverage, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, with the purpose stated first, followed by structured sections for Args and Returns. Each sentence earns its place, but the Args section could be more integrated into the flow. Overall, it is efficient with minimal waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (2 required parameters) and the presence of an output schema (which handles return values), the description is somewhat complete. It covers the basic purpose and parameters, but gaps remain in usage guidelines and behavioral transparency. With no annotations and incomplete parameter details, it is adequate but has clear room for improvement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must compensate. It lists the parameters (show_name, episode_number) and their roles, adding meaning beyond the bare schema. However, it does not provide details on format (e.g., episode_number as string vs. integer), constraints, or examples. With 2 parameters and some semantic clarification, it meets the baseline but lacks depth.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get the transcript for a specific episode.' It specifies the verb ('Get') and resource ('transcript'), but does not explicitly differentiate from sibling tools like get_episode or search_episodes, which might also retrieve episode-related data. This makes it clear but not fully sibling-distinctive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention sibling tools like get_episode or list_shows, nor does it specify contexts or exclusions for usage. This lack of comparative guidance leaves the agent without clear direction for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_showsB

List all available podcast shows.

Returns: List of show names available for searching and episode retrieval.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions the return is a 'List of show names' and hints at usage for 'searching and episode retrieval,' but doesn't disclose behavioral traits like whether it's paginated, rate-limited, or requires authentication. For a tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized with two sentences: one states the purpose, and the other explains the return value and usage. It's front-loaded with the main action, and every sentence adds value without waste. However, it could be slightly more structured by separating usage guidance more clearly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 0 parameters, 100% schema coverage, and an output schema exists, the description is adequate but incomplete. It explains the purpose and return usage, but with no annotations, it should do more to cover behavioral aspects like performance or constraints. The output schema reduces the need to explain return values, but overall completeness is minimal viable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema description coverage is 100%, so the baseline is high. The description adds value by clarifying the output's purpose ('available for searching and episode retrieval'), which goes beyond the empty schema. This compensates well for the lack of parameters, but doesn't reach a 5 as it could detail output format more.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'List all available podcast shows' specifies the verb (list) and resource (podcast shows). It distinguishes from siblings like get_episode or get_transcript by focusing on shows rather than episodes or transcripts. However, it doesn't explicitly differentiate from search_episodes, which might also involve shows, keeping it from a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating 'available for searching and episode retrieval,' suggesting this tool is for initial discovery before using other tools. However, it lacks explicit guidance on when to use this vs. alternatives like search_episodes, and no exclusions or prerequisites are mentioned, making it only adequate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_episodesA

Search for episodes based on various criteria. At least one search parameter must be provided.

Args: show_name: Name of the specific show to search in (required) since_date: Only return episodes published on or after this date (YYYY-MM-DD or ISO format) before_date: Only return episodes published before this date (YYYY-MM-DD or ISO format) hosts: List of host names to filter by text_search: Search text to match against episode titles and descriptions page: Page number (1-indexed, default: 1) per_page: Number of results per page (default: 5)

Returns: Dictionary containing episodes, pagination info (total, page, per_page, total_pages).

ParametersJSON Schema
NameRequiredDescriptionDefault
show_nameYes
since_dateNo
before_dateNo
hostsNo
text_searchNo
pageNo
per_pageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that at least one search parameter is required and describes the return format, but lacks details on permissions, rate limits, error handling, or whether this is a read-only operation. For a search tool with 7 parameters, this leaves significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear opening sentence, followed by organized 'Args' and 'Returns' sections. It's appropriately sized for a tool with 7 parameters, though the 'At least one search parameter must be provided' note could be integrated more smoothly into the parameter descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (7 parameters, no annotations, but with an output schema), the description is largely complete. It covers all parameters in detail and describes the return format, though it could benefit from more behavioral context (e.g., read-only nature, error cases). The output schema reduces the need to fully explain returns, but some operational guidance is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must fully compensate. It provides detailed semantics for all 7 parameters, including required status, formats (e.g., YYYY-MM-DD or ISO for dates), defaults (page: 1, per_page: 5), and usage context (e.g., 'search text to match against episode titles and descriptions'). This adds substantial value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Search for episodes based on various criteria.' It specifies the resource (episodes) and action (search), though it doesn't explicitly differentiate from sibling tools like 'get_episode' or 'list_shows' beyond the search functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides some usage context: 'At least one search parameter must be provided' and implies usage for filtered searches. However, it doesn't explicitly state when to use this tool versus alternatives like 'get_episode' (for single episodes) or 'list_shows' (for shows rather than episodes), leaving the agent to infer distinctions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.5/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: get_episode retrieves metadata for a specific episode, get_transcript fetches the transcript text, list_shows enumerates available shows, and search_episodes performs filtered searches. There is no overlap in functionality, making tool selection straightforward for an agent.

Naming Consistency5/5

All tools follow a consistent verb_noun naming pattern (get_episode, get_transcript, list_shows, search_episodes). The verbs are appropriate and descriptive, and the snake_case style is uniformly applied throughout the tool set.

Tool Count4/5

With 4 tools, the server is well-scoped for podcast data retrieval, covering key operations like listing shows, searching episodes, and fetching episode details and transcripts. However, it might benefit from additional tools for broader podcast management (e.g., update or delete operations), but the count is reasonable for the stated purpose.

Completeness4/5

The tool set provides comprehensive read-only access to podcast data, including listing shows, searching episodes, and retrieving episode metadata and transcripts. Minor gaps exist, such as the lack of create, update, or delete operations, but for a data retrieval server, the coverage is solid and allows agents to perform essential queries without dead ends.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with blog RSS/Atom feeds to list posts, fetch content, get recent posts, retrieve blog metadata, and perform full-text search across post content. Supports any blog with an RSS/Atom feed through natural language queries.
  • F
    license
    A
    quality
    D
    maintenance
    Enables searching and retrieving transcripts from over 280 episodes of Lenny's Podcast to access expert product and growth insights. It allows users to query by topic, list available episodes, and fetch full interview transcripts directly through Claude.
    3
    35
  • F
    license
    Not graded
    quality
    C
    maintenance
    Connects AI assistants to Pocket Casts accounts for browsing subscriptions, reading episode details, and retrieving transcripts with automatic transcription via AssemblyAI when no native transcript exists.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Red5d/podcast_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server