An MCP server that provides tools to discover and retrieve podcast episodes transcripts.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Return the most recent transcript-ready episodes across the full podcast catalog.
Sort order for results. `relevance` ranks full-text searches first and falls back to newest-first when no query is provided.
Maximum number of episodes to return. Must be between 1 and 50.
Zero-based episode offset for pagination. Use the `next_cursor` returned by a prior search/listing call to fetch the next page of results.
Inclusive lower publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime.
Inclusive upper publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime.
Return the most recent transcript-ready episodes across the full podcast catalog.
| Argument | Type | Description |
|---|---|---|
| sort | string | Sort order for results. `relevance` ranks full-text searches first and falls back to newest-first when no query is provided. |
| limit | integer | Maximum number of episodes to return. Must be between 1 and 50. |
| cursor | integer | Zero-based episode offset for pagination. Use the `next_cursor` returned by a prior search/listing call to fetch the next page of results. |
| published_after | any | Inclusive lower publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime. |
| published_before | any | Inclusive upper publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime. |
{
"type": "object",
"properties": {
"sort": {
"enum": [
"relevance",
"published_desc",
"published_asc"
],
"type": "string",
"default": "published_desc",
"description": "Sort order for results. `relevance` ranks full-text searches first and falls back to newest-first when no query is provided."
},
"limit": {
"type": "integer",
"default": 5,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of episodes to return. Must be between 1 and 50."
},
"cursor": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "Zero-based episode offset for pagination. Use the `next_cursor` returned by a prior search/listing call to fetch the next page of results."
},
"published_after": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Inclusive lower publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime."
},
"published_before": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Inclusive upper publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime."
}
},
"additionalProperties": false
}Fetch a bounded transcript chunk for a specific episode using its show and episode GUIDs. Use `next_cursor` to continue reading.
| Argument | Type | Description |
|---|---|---|
| cursor | integer | Zero-based character offset into the transcript. Use the `next_cursor` returned by a prior get_transcript call to fetch the next chunk. |
| max_chars | integer | Target maximum number of transcript characters to return. Chunks prefer natural boundaries and may be slightly shorter. Must be between 100 and 20000. |
| show_guid* | string | Podcast show GUID returned by `search_episodes` or `get_latest_episodes`. |
| episode_guid* | string | Episode GUID returned by `search_episodes` or `get_latest_episodes`. |
{
"type": "object",
"required": [
"show_guid",
"episode_guid"
],
"properties": {
"cursor": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "Zero-based character offset into the transcript. Use the `next_cursor` returned by a prior get_transcript call to fetch the next chunk."
},
"max_chars": {
"type": "integer",
"default": 12000,
"maximum": 20000,
"minimum": 100,
"description": "Target maximum number of transcript characters to return. Chunks prefer natural boundaries and may be slightly shorter. Must be between 100 and 20000."
},
"show_guid": {
"type": "string",
"minLength": 1,
"description": "Podcast show GUID returned by `search_episodes` or `get_latest_episodes`."
},
"episode_guid": {
"type": "string",
"minLength": 1,
"description": "Episode GUID returned by `search_episodes` or `get_latest_episodes`."
}
},
"additionalProperties": false
}Send structured feedback about bugs, missing data, unclear behavior, or feature requests.
| Argument | Type | Description |
|---|---|---|
| feedback* | string | Feedback for the server team. Include the problem, missing capability, or suggested improvement without sensitive user data. |
{
"type": "object",
"required": [
"feedback"
],
"properties": {
"feedback": {
"type": "string",
"minLength": 1,
"description": "Feedback for the server team. Include the problem, missing capability, or suggested improvement without sensitive user data."
}
},
"additionalProperties": false
}Search indexed podcast episodes by keyword or show name and return the show/episode GUIDs needed for transcript retrieval.
| Argument | Type | Description |
|---|---|---|
| sort | string | Sort order for results. `relevance` ranks full-text searches first and falls back to newest-first when no query is provided. |
| limit | integer | Maximum number of episodes to return. Must be between 1 and 50. |
| query | string | Optional search keywords matched against indexed episode content. Use people, topics, companies, or phrases. |
| cursor | integer | Zero-based episode offset for pagination. Use the `next_cursor` returned by a prior search/listing call to fetch the next page of results. |
| podcast_name | string | Optional podcast title or internal label to narrow results to a specific show. |
| published_after | any | Inclusive lower publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime. |
| published_before | any | Inclusive upper publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime. |
| published_within_hours |
Semantic topic search across the podcast catalog. Unlike `search_episodes` (which does lexical/keyword matching), this tool understands meaning: a query for 'AI safety' will match episodes about 'AI alignment', 'AGI risk', or 'frontier model evaluation' even if they don't contain the exact phrase. Returns ranked episodes with the matched topic phrases so you can explain *why* each result is relevant before fetching the transcript. Best for conceptual or thematic queries — use `search_episodes` instead when the user is looking for a specific person, product, or verbatim phrase.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of episodes to return. Must be between 1 and 50. |
| topic* | string | Semantic topic to find episodes about. Free-form phrasing welcome — the server embeds this string and finds episodes whose extracted topic phrases are closest in meaning. Good examples: 'AI safety', 'EU AI Act regulation', 'GPU supply constraints', 'Theo Epstein on roster construction'. Distinct from `search_episodes`, which performs lexical keyword matching. |
| cursor | integer | Zero-based episode offset for pagination. Use the `next_cursor` returned by a prior search/listing call to fetch the next page of results. |
| show_guid | string | Optional canonical show GUID (as returned by `search_episodes` or `get_latest_episodes` in the `show_guid` field) to restrict topic search to a single podcast. Leave empty to search across all shows. |
| published_after |
| any |
| Filter episodes published in the past X hours. Maximum 168 hours (1 week). |
{
"type": "object",
"properties": {
"sort": {
"enum": [
"relevance",
"published_desc",
"published_asc"
],
"type": "string",
"default": "relevance",
"description": "Sort order for results. `relevance` ranks full-text searches first and falls back to newest-first when no query is provided."
},
"limit": {
"type": "integer",
"default": 5,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of episodes to return. Must be between 1 and 50."
},
"query": {
"type": "string",
"default": "",
"description": "Optional search keywords matched against indexed episode content. Use people, topics, companies, or phrases."
},
"cursor": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "Zero-based episode offset for pagination. Use the `next_cursor` returned by a prior search/listing call to fetch the next page of results."
},
"podcast_name": {
"type": "string",
"default": "",
"description": "Optional podcast title or internal label to narrow results to a specific show."
},
"published_after": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Inclusive lower publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime."
},
"published_before": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Inclusive upper publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime."
},
"published_within_hours": {
"anyOf": [
{
"type": "integer",
"maximum": 168,
"minimum": 1
},
{
"type": "null"
}
],
"default": null,
"description": "Filter episodes published in the past X hours. Maximum 168 hours (1 week)."
}
},
"additionalProperties": false
}| any |
| Inclusive lower publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime. |
| published_before | any | Inclusive upper publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime. |
{
"type": "object",
"required": [
"topic"
],
"properties": {
"limit": {
"type": "integer",
"default": 5,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of episodes to return. Must be between 1 and 50."
},
"topic": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "Semantic topic to find episodes about. Free-form phrasing welcome — the server embeds this string and finds episodes whose extracted topic phrases are closest in meaning. Good examples: 'AI safety', 'EU AI Act regulation', 'GPU supply constraints', 'Theo Epstein on roster construction'. Distinct from `search_episodes`, which performs lexical keyword matching."
},
"cursor": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "Zero-based episode offset for pagination. Use the `next_cursor` returned by a prior search/listing call to fetch the next page of results."
},
"show_guid": {
"type": "string",
"default": "",
"description": "Optional canonical show GUID (as returned by `search_episodes` or `get_latest_episodes` in the `show_guid` field) to restrict topic search to a single podcast. Leave empty to search across all shows."
},
"published_after": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Inclusive lower publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime."
},
"published_before": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Inclusive upper publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime."
}
},
"additionalProperties": false
}