A FastMCP server that parses Podcast 2.0 RSS feeds from Jupiter Broadcasting shows and provides access to episode data through MCP tools.
This MCP server provides four main tools:
- List Shows - Returns a list of available podcast shows
- Search Episodes - Search episodes by show, date range, hosts, or text content
- Get Episode - Retrieve detailed information about a specific episode
- Get Transcript - Fetch episode transcripts when available
This project uses the uv
package manager for Python dependency management.
- Python 3.10 or higher
- uv package manager
curl -LsSf https://astral.sh/uv/install.sh | sh
git clone <repository-url>
cd jupiterbroadcasting_mcp
uv sync
To start the MCP server:
uv run jupiterbroadcasting-mcp
Or alternatively:
uv run python -m jupiterbroadcasting_mcp.server
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", ...]
)
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 showsince_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 bytext_search
(optional): Search text in episode titles and descriptions
Returns: Array of episode objects with metadata
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 showepisode_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
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 showepisode_number
(required): Episode number
Returns: Object containing transcript text or error message
To add or modify RSS feeds, edit the JB_FEEDS
dictionary in jupiterbroadcasting_mcp/server.py
:
JB_FEEDS = {
"Show Name": "https://example.com/feed.rss",
"Another Show": "https://example.com/another-feed.rss",
}
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
# 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 .
jupiterbroadcasting_mcp/
├── jupiterbroadcasting_mcp/
│ ├── __init__.py
│ ├── server.py # Main MCP server
│ └── rss_parser.py # RSS feed parsing logic
├── tests/ # Test files
├── pyproject.toml # Project configuration
└── README.md
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
- 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
MIT License - see LICENSE file for details.
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Run the test suite and linting
- Submit a pull request
For issues and questions, please open an issue on the GitHub repository.