Brought to you by Talk Python Courses and Six Feet Up consulting

Python Bytes MCP Server

Model Context Protocol access to 9 years of Python news


What this is

Python Bytes runs a public, read-only MCP server. Point Claude, Claude Code, Cursor, or any other MCP-capable assistant at it and it can search the archive, pull up a specific episode's show notes and links, read full transcripts, and check when the next live stream is.

There is no account, no API key, and no rate limit. Everything served here is the same public podcast data already on the website. The server is read-only: nothing an assistant does through it can change anything.

Add it to your assistant

Most clients read a JSON config file. Add the Python Bytes entry to yours and restart the client:

{
  "mcpServers": {
    "python-bytes": {
      "url": "https://pythonbytes.fm/api/mcp"
    }
  }
}

On macOS, Claude Desktop keeps that file at ~/Library/Application Support/Claude/claude_desktop_config.json. For Claude Code, run claude mcp add --transport http python-bytes https://pythonbytes.fm/api/mcp instead. Client setup moves around, so check your client's own docs if the path above does not match what you see.

No MCP support in your tool? Every episode is also available as plain Markdown by adding .md to its URL, and /llms.txt describes the whole site for assistants that only fetch URLs.

Server details

Server name python-bytes-mcp
Version 1.1.0
Endpoint https://pythonbytes.fm/api/mcp
Discovery https://pythonbytes.fm/.well-known/mcp.json
Protocol JSON-RPC 2.0 over HTTP POST
Authentication None. Public, read-only data.

Available tools

The server exposes 12 tools. Your assistant discovers them automatically, so this list is here for humans deciding whether it is worth adding.

search_episodes

Search Python Bytes podcast episodes by keyword. Returns matching episodes with title, summary, and URL. Multiple words are combined with AND, so more words narrow the results. Note that hyphenated terms like "scikit-learn" are treated as two separate words.

Parameter Type Required Description
query string Yes Search query (keywords to find in episode titles and show notes)
limit integer No Maximum number of results to return

search_transcripts

Search the spoken content of Python Bytes episodes by keyword. Use this when you want what the hosts actually said rather than what the show notes list. Returns the matching episodes with links to the episode page and its WebVTT transcript.

Parameter Type Required Description
query string Yes Search query (keywords to find in episode transcripts)
limit integer No Maximum number of results to return

get_episode

Get full details for a specific Python Bytes episode by its show number. Returns the title, published date, duration, audio and video links, the topics covered, and the complete show notes.

Parameter Type Required Description
show_id integer Yes The episode show number (e.g., 400 for episode #400)

get_episodes

Get a list of every published Python Bytes episode with its show number and title. Useful for browsing the archive before looking up a specific episode. This is a large response; prefer search_episodes or get_recent_episodes when you can.

No parameters.

get_recent_episodes

Get the most recently published Python Bytes episodes, newest first. Use this to answer questions about what is new in Python.

Parameter Type Required Description
limit integer No Number of recent episodes to return

get_episode_topics

Get the individual news items covered in a Python Bytes episode. Each episode covers several numbered topics, one per host, and each topic links out to the package, article, or project being discussed. Returns each topic with its presenter, position in the show, and outbound links.

Parameter Type Required Description
show_id integer Yes The episode show number

get_transcript_for_episode

Get the full plain-text transcript for a Python Bytes episode. Transcripts are long, so expect a substantial number of tokens.

Parameter Type Required Description
show_id integer Yes The episode show number

get_transcript_vtt

Get the transcript for a Python Bytes episode in WebVTT format. WebVTT includes a timestamp for each segment, useful for subtitles or for linking to a specific moment in the audio. Transcripts are long, so expect a substantial number of tokens.

Parameter Type Required Description
show_id integer Yes The episode show number

get_next_livestream

Get the next scheduled Python Bytes live stream, or the one currently in progress. Python Bytes records live on YouTube most Mondays. Returns the title, start time, and watch URL.

No parameters.

search_courses

Search Talk Python Training courses, chapters, and lectures by keyword. Talk Python Training is the course platform run by Python Bytes co-host Michael Kennedy. Optionally search within a specific course by providing a course_id.

Parameter Type Required Description
query string Yes Search query (keywords to find in course, chapter, and lecture titles)
course_id integer No Optional: search within a specific course only (provide the course ID)

get_courses

Get a list of all available Talk Python Training courses. Returns course titles, descriptions, URLs, tags, prices, and publication dates. Use this to browse the catalog before searching for specific content.

No parameters.

get_course_details

Get full details for a Talk Python Training course by ID, including its chapter and lecture structure with durations.

Parameter Type Required Description
course_id integer Yes The course ID (get one from get_courses or search_courses)

Calling it directly

The endpoint is plain JSON-RPC 2.0 over HTTP POST, so you do not need an MCP client to use it. Start with the handshake:

curl -X POST https://pythonbytes.fm/api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize",
       "params":{"clientInfo":{"name":"my-client","version":"1.0"}}}'

List what is available:

curl -X POST https://pythonbytes.fm/api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'

Then call a tool:

curl -X POST https://pythonbytes.fm/api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call",
       "params":{"name":"search_episodes","arguments":{"query":"uv","limit":5}}}'

Text or JSON

Tools return human-readable Markdown by default, which is what you want when a language model is going to read the result. Add ?format=json to the endpoint URL and every tool returns structured data instead:

curl -X POST "https://pythonbytes.fm/api/mcp?format=json" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":4,"method":"tools/call",
       "params":{"name":"get_episode_topics","arguments":{"show_id":400}}}'

Either way the payload arrives in the MCP content block, so with ?format=json the text field holds a JSON-encoded string you parse yourself. List tools return an array and single-item lookups return an object.

A note on transcripts

get_transcript_for_episode and get_transcript_vtt return the entire transcript in one block. A single Python Bytes transcript runs to roughly 15,000 tokens, so pull one deliberately rather than in a loop. If you are looking for a specific moment, search_transcripts will narrow it down first.

Questions

Something broken, or a tool you wish existed? Email contact@pythonbytes.fm. Talk Python runs its own MCP server too, with the podcast archive and the full course catalog.