Podcast directory (p0dcasters.com)
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.
List every submission waiting for review at once, or only the given ids (from list_submissions). A feed already in the directory comes back as existing; one failure does not stop the rest. Returns counts listed / existing / failed and a result per id. Needs an OpenAccess bearer with scope submissions:review.
Only these submissions. Omit for all waiting.
A note for the review log.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http p0dcasters https://p0dcasters.com/api/mcp
List every submission waiting for review at once, or only the given ids (from list_submissions). A feed already in the directory comes back as existing; one failure does not stop the rest. Returns counts listed / existing / failed and a result per id. Needs an OpenAccess bearer with scope submissions:review.
| Argument | Type | Description |
|---|---|---|
| ids | array | Only these submissions. Omit for all waiting. |
| reason | string | A note for the review log. |
{
"type": "object",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Only these submissions. Omit for all waiting."
},
"reason": {
"type": "string",
"description": "A note for the review log."
}
}
}Every category and every language in the directory with its show count and page URL. The cheap first call before list_shows.
No arguments.
{
"type": "object",
"properties": {}
}Claim the profile behind a show as the person it is about. Needs an OpenAccess bearer with scopes openprofile:edit and email in the Authorization header; the claim goes through when the token's address is the feed's itunes:owner address, or when the show's site or feed description links to the profile URL. Nothing else is needed, and nobody reviews it.
| Argument | Type | Description |
|---|---|---|
| slug* | string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
}
}
}Shows, domains, episodes, how many published this week, how many were added by their publishers, and the OPML export URL for taking the whole thing in one request.
No arguments.
{
"type": "object",
"properties": {}
}The p0dcasters weekly email: when it goes out (Fridays 15:00 UTC unless reconfigured), the next send time, and the latest issue sent (week, subject, how many it went to). Read-only; subscribing is a setting on a signed-in account, not something this server does.
No arguments.
{
"type": "object",
"properties": {}
}The person or organisation behind a show as an OpenProfile.md (logicsrc.com/openprofile) with the Broadcast section (logicsrc.com/openbroadcast): name, kind, site, avatar, accounts, topics, and the show's feed, cadence, language and since when. Generated from the feed the publisher serves, enriched from rssamplifier.com, corrected by the person once they have claimed it. Returns the Markdown and the URL the file is served at. A booking platform matches a Broadcast section against a guest's Guest section.
| Argument | Type | Description |
|---|---|---|
| slug* | string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
}
}
}One show by slug: title, publisher, full description, episode count, cadence, language, categories, feed URL, site and page. Slugs come from search, list_shows and the page URL /podcast/<slug>. Episodes are a separate call, list_episodes, because they are read live from the publisher's feed.
| Argument | Type | Description |
|---|---|---|
| slug* | string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
}
}
}The episodes of one show, newest first, read live from the publisher's feed (cached half an hour): title, date, duration, description, audio URL. Feeds are slow, so this is the one call here that can take seconds. Also returns an M3U playlist URL for a player that takes one.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| limit | integer | Episodes to return. Default 20. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
},
"limit": {
"type": "integer",
"maximum": 300,
"minimum": 1,
"description": "Episodes to return. Default 20."
}
}
}Shows in one category (a single lowercase word such as history or comedy), one language (ISO 639-1 code) or on one domain, ranked by catalogue depth and longevity weighted by recency, the same order as the site's pages. Call browse first for the categories and languages that exist and how many shows each holds.
| Argument | Type | Description |
|---|---|---|
| host | string | A domain, e.g. example.org. |
| limit | integer | Default 30. |
| offset | integer | |
| category | string | |
| language | string | ISO 639-1, e.g. en, de, pt. |
{
"type": "object",
"properties": {
"host": {
"type": "string",
"description": "A domain, e.g. example.org."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Default 30."
},
"offset": {
"type": "integer",
"minimum": 0
},
"category": {
"type": "string"
},
"language": {
"type": "string",
"description": "ISO 639-1, e.g. en, de, pt."
}
}
}The submitted feeds waiting for a person to list or reject them. For reviewers: needs an OpenAccess bearer with scope submissions:review in the Authorization header.
No arguments.
{
"type": "object",
"properties": {}
}This week's issue of the weekly digest as it would be built now from the live directory: subject, plain text and, with html: true, the HTML. Shows new to the directory, the most followed this week, long-running shows that published, the busiest networks. Read-only, no recipients; the per-reader unsubscribe link is a placeholder. Rebuilt at most every 15 minutes.
| Argument | Type | Description |
|---|---|---|
| html | boolean | Include the HTML body too. Default false. |
{
"type": "object",
"properties": {
"html": {
"type": "boolean",
"description": "Include the HTML body too. Default false."
}
}
}Full-text search over the titles, descriptions, authors and domains of every podcast listed, on any host (own domain, hosting platform or network library). Returns shows, each with its slug, feed URL, page and playlist. Only shows with an episode inside the last 90 days are listed.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Shows to return. Default 30. |
| query* | string | What to search for. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Shows to return. Default 30."
},
"query": {
"type": "string",
"description": "What to search for."
}
}
}Submit one URL or a list of them to p0dcasters. A site URL works as well as a feed URL: the feed is discovered from the page. Anyone may submit; there is no account and no review queue. One URL resolves in the call and the answer carries its page; a list may be queued, and the answer says which. Rate limited per caller.
| Argument | Type | Description |
|---|---|---|
| urls* | array | Podcast or site URLs. One is fine. |
{
"type": "object",
"required": [
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 50,
"description": "Podcast or site URLs. One is fine."
}
}
}Edit the profile on its owner's behalf. Takes either the whole OpenProfile.md as `markdown`, or a partial overlay: `identity` (keys to set, null removes), `headline`, `sections` (body by section name, `none` removes), `public`. The server keeps the difference from the generated document, so a section left alone keeps following the feed. Needs an OpenAccess bearer (hub https://openaccess.logicsrc.com, scope openprofile:edit) in the request's Authorization header, for a profile the person has claimed; an unclaimed profile is refused with the claim step.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| public | boolean | |
| headline | string | |
| identity | object | Identity keys to set; a null value removes the key. |
| markdown | string | The whole file, as text. |
| sections | object | Section bodies by name (accounts, topics, broadcast, guest, ...); `none` removes. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
},
"public": {
"type": "boolean"
},
"headline": {
"type": "string"
},
"identity": {
"type": "object",
"description": "Identity keys to set; a null value removes the key."
},
"markdown": {
"type": "string",
"description": "The whole file, as text."
},
"sections": {
"type": "object",
"description": "Section bodies by name (accounts, topics, broadcast, guest, ...); `none` removes."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 11, 2026.