podstow

Podstow Your personal listen-later podcast.

Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeCan modify data

What it can do

  • Submit Url: Send the URL of an article, blog post, or web page to the user's podstow feed. podstow scrapes the page, runs it through TTS, and publishes a new podcast episode. Each call decrements the
  • Submit Text: Publish a plain-text body (a summary, deep-research report, digest, etc.) to the user's podstow feed as a podcast episode. podstow runs it through TTS and the episode appears in their RSS
  • List Episodes: Return a paginated list of the user's most recent podstow episodes. Each item carries enough metadata to identify the episode, link to it, and request a transcript via `get_episode_tran

What data it sees

Do you need an account

No: the server works without sign-in

Podstow

Your personal listen-later podcast.

Podstow turns the things you mean to read into a private podcast you can actually listen to. Connect it to Claude, ChatGPT, or any MCP-aware assistant and it can send web articles — or text the assistant writes itself (summaries, deep-research reports, digests) — straight into your personal podcast feed. Podstow scrapes the page (or ingests the text), runs it through natural text-to-speech, and publishes an episode to a private RSS feed you subscribe to in Apple Podcasts, Overcast, Pocket Casts, or any podcast app.

Tools

  • submit_url — send a URL; Podstow scrapes it and publishes a narrated episode.
  • submit_text — send AI-written text (a summary, report, or digest); it's published as an episode, titled [AI] ….
  • list_episodes — browse your most recent episodes.
  • get_episode_transcript — pull the transcript for an episode.
  • get_account — tier, article usage, voice preferences, and feed URL.
  • show_subscribe_instructions — your feed URL plus per-app subscribe links and a QR code.

How it works

  1. Your assistant calls submit_url or submit_text.
  2. Podstow scrapes or ingests the content, synthesises audio, and adds an episode.
  3. It lands in your private RSS feed — listen anywhere, in the podcast app you already use.

Connecting

Add the remote server and authorise with your Podstow account:

  • Endpoint: https://mcp.podstow.app/ (streamable HTTP)
  • Auth: OAuth 2.1 — grant read-only (episodes:read) or read-write (episodes:create); revocable per app from your account page.

podstow.com · Privacy

Server tool list (6)

Raw names from tools/list. Only developers need these.

submit_urlSend the URL of an article, blog post, or web page to the user's podstow feed. podstow scrapes the page, runs it through TTS, and publishes a new podcast episode. Each call decrements the user's article quota. Response includes `structuredContent.subscribedInPodcastApp` — `true` once a podcast client has fetched the user's RSS feed at least once (i.e. the user has subscribed in their podcast app of choice), `false` otherwise. When `false` AND you are in an interactive session with the user, call `show_subscribe_instructions` to help them complete setup. Do not call it again once they are subscribed. The three URL fields on the response (`feedUrl`, `subscribeDeepLink`, `iosSubscribeLinks`) are the same ones `show_subscribe_instructions` renders — prefer surfacing them via that tool, not by reciting them in chat, so the onboarding card iframe renders alongside on hosts that support it. Retries: up to 3 attempts with exponential backoff starting at 500ms, capped at the response's `retryAfterMs` when present. Retry only when `data.class === "retriable"`. Surface fatal errors (`data.class === "fatal"`) to the user without retry; if `data.code === "quota_exceeded"`, show the `data.upgradeUrl`.
submit_textPublish a plain-text body (a summary, deep-research report, digest, etc.) to the user's podstow feed as a podcast episode. podstow runs it through TTS and the episode appears in their RSS feed; the title is prepended with `[AI] ` at render time. Keep submitted titles short. Always declare `lang` (BCP-47, e.g. `en`, `de`, `fr`) when known — short LLM-generated text is below the reliable-detection threshold for the server-side language detector. An invalid tag silently falls back to detection. Each call decrements the user's article quota. Response includes `structuredContent.subscribedInPodcastApp` — `true` once a podcast client has fetched the user's RSS feed at least once (i.e. the user has subscribed in their podcast app of choice), `false` otherwise. When `false` AND you are in an interactive session with the user, call `show_subscribe_instructions` to help them complete setup. Do not call it again once they are subscribed. The three URL fields on the response (`feedUrl`, `subscribeDeepLink`, `iosSubscribeLinks`) are the same ones `show_subscribe_instructions` renders — prefer surfacing them via that tool, not by reciting them in chat, so the onboarding card iframe renders alongside on hosts that support it. Retries: up to 3 attempts with exponential backoff starting at 500ms, capped at the response's `retryAfterMs` when present. Retry only when `data.class === "retriable"`. Surface fatal errors (`data.class === "fatal"`) to the user without retry; if `data.code === "quota_exceeded"`, show the `data.upgradeUrl`.
list_episodesReturn a paginated list of the user's most recent podstow episodes. Each item carries enough metadata to identify the episode, link to it, and request a transcript via `get_episode_transcript`. Pagination: pass `limit` (1–50, default 20) and an opaque `cursor` returned as `nextCursor` from the previous call. `nextCursor` is `null` when there are no more pages. V1 returns recent items only — full-history search is not supported; filter client-side. When to use: the user asks what they have saved, what is in their feed, what the most recent episodes are, or names a specific episode they want a transcript of. Do not use: as a sanity check before other operations, or to enumerate the feed unprompted. Read calls do not decrement the article quota. Retries: up to 3 attempts with exponential backoff starting at 500ms, capped at the response's `retryAfterMs` when present. Retry only when `data.class === "retriable"`. Surface fatal errors (`data.class === "fatal"`) to the user without retry; if `data.code === "quota_exceeded"`, show the `data.upgradeUrl`.
get_episode_transcriptGiven a `transcriptHandle` from `list_episodes`, return the transcript URL plus an inline preview suitable for use as immediate assistant context. The preview is the leading slice of the transcript (up to 8000 UTF-8 bytes). For longer text, fetch the full transcript from `transcriptUrl`. Read calls do not decrement the article quota. Retries: up to 3 attempts with exponential backoff starting at 500ms, capped at the response's `retryAfterMs` when present. Retry only when `data.class === "retriable"`. Surface fatal errors (`data.class === "fatal"`) to the user without retry; if `data.code === "quota_exceeded"`, show the `data.upgradeUrl`.
get_accountReturn the user's tier, current-period article usage and limit, period length and reset time, voice preferences, RSS feed URL, and podcast-app subscription state. When to use: the user explicitly asks about their account, plan, tier, quota, usage, voice settings, RSS feed URL, or whether their podcast app is wired up. Do not use: as a pre-flight check before `submit_url` / `submit_text` (those tools return quota and subscription state on every call), as a sanity check to "see what voice they have", or to detect whether the user has subscribed yet — the submit tools already carry `subscribedInPodcastApp` in their response. Calling this proactively just adds latency. Response includes `structuredContent.subscribedInPodcastApp` — `true` once a podcast client has fetched the user's RSS feed at least once (i.e. the user has subscribed in their podcast app of choice), `false` otherwise. When `false` AND you are in an interactive session with the user, call `show_subscribe_instructions` to help them complete setup. Do not call it again once they are subscribed. The three URL fields on the response (`feedUrl`, `subscribeDeepLink`, `iosSubscribeLinks`) are the same ones `show_subscribe_instructions` renders — prefer surfacing them via that tool, not by reciting them in chat, so the onboarding card iframe renders alongside on hosts that support it. Read calls do not decrement the article quota. Retries: up to 3 attempts with exponential backoff starting at 500ms, capped at the response's `retryAfterMs` when present. Retry only when `data.class === "retriable"`. Surface fatal errors (`data.class === "fatal"`) to the user without retry; if `data.code === "quota_exceeded"`, show the `data.upgradeUrl`.
show_subscribe_instructionsShow the user how to subscribe to their podstow RSS feed in a podcast app. Renders an interactive onboarding card (QR code, per-app deep links for Apple Podcasts, Overcast, Castro, Pocket Casts, and the Android default podcatcher, plus the canonical feed URL for paste-into-app) on hosts that speak the MCP Apps extension. On hosts that do not render the iframe the response carries just the feed URL (in `structuredContent` and an assistant-audience text block) so the model can hand it to the user. When to use: (1) any `submit_url` / `submit_text` / `get_account` response carries `subscribedInPodcastApp: false` AND you are in an interactive session with the user (most chat clients qualify); (2) the user explicitly asks how to subscribe, how to listen, where their feed is, or asks for the URL / app deep link again — this is not onboarding-only, repeat invocations are fine whenever the user asks. Do NOT use: (1) when `subscribedInPodcastApp: true` AND the user has not explicitly asked — the user already has a player pointed at the feed and offering the instructions again is noise; (2) repeatedly within a single session after the user has dismissed or moved on. Free: does not consume the article quota and does not require any OAuth scope.
podstow: connect to Claude, ChatGPT, Cursor · Connectors.fun