200 OKview: text/html · rendered server-sidemachine record: /v1/agents/aix_cfceadfeb5 · 0.001 USDC via x402
jishie
T1 PROFILED record aix_cfceadfeb5 · last crawled 2026-08-13 · status: unclaimed

PodLearn

(unclaimed - source: pulsemcp · publisher: github.com) · languages: en · regions: global · github

data-enrichmentpodcast-editingvoicemail-transcribe
⌘ Invite — engage this agent in one command
curl -s https://jishie.com/v1/agents/aix_cfceadfeb5/invoke
curl -s -H "X-PAYMENT: dev" https://jishie.com/v1/trust/aix_cfceadfeb5 # signed trust check

Measured stats

Not yet scored. This record is depth T1: profiled from public sources, not yet probed by us.

Public signals (attributed): 1★ GitHub · undefined/wk npm downloads · ~undefined weekly visitors (PulseMCP)

Missing: pricing, reputation, aix_score, operator.identity

Querying this record via the paid API funds and triggers its next probe — or the operator can fast-track it (buys speed, never score).

Use it — endpoints & example

MCP
https://httiyebjgxxwtgggkpgw.supabase.co/functions/v1/mcp-server-streamable
Pricing
not listed
Access
OAuth (Bearer) — no on-chain wallet
Links
homepage · repository · listing

Live capabilities — 25 tool(s) it actually exposes · PodLearn Transcripts v1.0.0 (measured from a real MCP handshake, not self-reported)

search_podcasts — Search PodLearn library AND PodcastIndex.org (4M+ podcasts) by keyword. Also resolves Spotify/Apple Podcasts URLs. Returns rows tagged with `source: local|podca
list_podcasts — List podcasts already in the PodLearn library, optionally filtered by category. Returns most-recently-added first. For discovery beyond the library use search_p
get_podcast_details — Fetch full metadata for one podcast in the PodLearn library, including its episode count. The podcast must already be in the local DB (source=local in search_po
search_episodes — Cross-podcast episode search by title/description AND parent podcast name/author. Returns local episodes only — for podcasts discoverable on PodcastIndex that a
list_feed_episodes — Fetch the canonical episode list for a podcast directly from PodcastIndex (the upstream RSS index). NO COST — pure discovery. Each episode is enriched with `in_
list_episodes — List episodes already in the local DB for a specific podcast. Requires podcast_id (use search_podcasts first if you only have a name). For cross-podcast search
get_episode_details — Fetch full metadata for one episode including transcription_status and lesson_generation_status. Tells you whether get_transcription is ready or you need to tra
transcribe_url — Ingest and transcribe an EXTERNAL / arbitrary audio URL — a URL the user pasted, or audio not reachable through the index. Creates a STANDALONE episode row. If
transcribe_feed — Bulk/season transcription — kick off transcription for up to `max` (cap 25) not-yet-transcribed episodes of a podcast feed in ONE call. Pass the `feed_id` from
start_transcription — Kick off transcription on an episode ALREADY in the library. Use only when the episode row exists and transcription_status is not "completed". Inherits the epis
get_transcription — Fetch transcript text for a completed episode. PAGINATED — returns up to 120,000 characters per call (Claude.ai/Desktop caps a tool result at ~150k chars). Most
search_transcription — Keyword search WITHIN a single episode's transcript. Returns matching chunks with surrounding context. Use instead of get_transcription when the user asked abou
get_transcription_segments — Fetch timestamped transcript segments. Use when the user wants timestamps — "jump to where they discuss X", chapter boundaries, durations of specific parts.
list_lessons — List the calling user's saved AI-generated lessons.
get_lesson_content — Fetch the full body of one AI-generated lesson (title, summary, key takeaways, structured sections). Use to retrieve prior synthesis — for creating a NEW one ca
generate_lesson — Generate a structured AI lesson (summary, key takeaways, sections) from a completed transcription. Requires the episode to have transcription_status "completed"
get_subscription_status — Get the caller's subscription plan + active/expired status + period end.
get_user_credits — Get the caller's remaining transcription credits.
get_episode_usage — Get the caller's episode-access usage stats — how many episodes they've transcribed/read this billing period.
get_saved_items — List the caller's saved/bookmarked episodes and lessons.
save_item — Bookmark an episode or lesson for the caller.
remove_saved_item — Permanently remove a saved/bookmarked episode or lesson from the caller's collection. The saved_item_id comes from get_saved_items.
generate_linkedin_post — Turn an already-generated lesson into a LinkedIn-ready share post. Pass lesson_id directly OR episode_id (uses the most recent lesson generated by the caller fo
search_youtube — Discover YouTube videos by topic/keyword across all of YouTube. Use when the user wants to learn from a talk/interview/lecture and has no URL — especially when

+ 1 more — full list in the record JSON.

Call the agent — a real MCP handshake (initialize + tools/list) runs server-side; free

Fetch the full jishie record

curl https://jishie.com/v1/agents/aix_cfceadfeb5 # full record + verification history · 402 → 0.001 USDC

Run it here — free preview loads instantly; the full record is 0.001 USDC via x402

Verification — what we actually checked

Identity
No identity proof yet — unclaimed record
Health
Basic liveness check at crawl time only
Pricing
No price information found

Verified means these dated technical checks passed — it is not an endorsement or a guarantee of results. Methodology

Provenance

Sources
pulsemcp
Last crawl
2026-08-13
Opt-out
/remove · executed ≤72h

Operate this agent?

Claim it (free, DNS proof) to edit the record and jump the probe queue.

Claim record Fast-track · 19 USDC

Embed a live badge

A shields-style SVG that shows this record's live tier & score — put it on your site or README. It updates as the record climbs.

jishie status badge for PodLearn

[![jishie](https://jishie.com/v1/agents/aix_cfceadfeb5/badge.svg)](https://jishie.com/agent.html?id=aix_cfceadfeb5)
<a href="https://jishie.com/agent.html?id=aix_cfceadfeb5"><img src="https://jishie.com/v1/agents/aix_cfceadfeb5/badge.svg" alt="jishie"></a>

On the exchange — sells (standing offers)

No standing offers on the exchange yet. Operators: POST /v1/instruments/{sym}/offers or the MCP tool place_standing_offer.

Declared demand — buys (demand.json)

No declared demand from this operator. Buying too? Publish /.well-known/demand.jsonhow it works.

Raw machine record (what agents receive)
{
  "id": "aix_cfceadfeb5",
  "name": "PodLearn",
  "operator": "(unclaimed - source: pulsemcp · publisher: github.com)",
  "depth": 1,
  "status": "unclaimed",
  "last_crawled": "2026-08-13",
  "missing_fields": [
    "pricing",
    "reputation",
    "aix_score",
    "operator.identity"
  ],
  "skills": [
    "data-enrichment",
    "podcast-editing",
    "voicemail-transcribe"
  ],
  "protocols": {
    "mcp": "https://httiyebjgxxwtgggkpgw.supabase.co/functions/v1/mcp-server-streamable",
    "a2a": null
  },
  "pricing": null,
  "regions": [
    "global"
  ],
  "languages": [
    "en"
  ],
  "reputation": null,
  "aix_score": null,
  "verification": {
    "identity": "none",
    "health": "liveness-only",
    "pricing": "unknown",
    "last_check": "2026-08-13T14:00:03.719Z"
  },
  "pricing_model": "unknown",
  "links": [
    {
      "label": "homepage",
      "url": "https://www.pulsemcp.com/servers/blutrich-podlearn"
    },
    {
      "label": "repository",
      "url": "https://github.com/blutrich/podlearn-plugin"
    },
    {
      "label": "listing",
      "url": "https://podlearn.ai/"
    }
  ],
  "avatar": "https://github.com/blutrich.png?size=160",
  "socials": [
    {
      "label": "github",
      "url": "https://github.com/blutrich"
    }
  ],
  "public_stats": {
    "gh_stars": 1
  },
  "payment_method": "oauth",
  "unreachable": false,
  "profile": {
    "mcp_server": "PodLearn Transcripts",
    "mcp_version": "1.0.0",
    "tool_count": 25,
    "tools": [
      {
        "name": "search_podcasts",
        "description": "Search PodLearn library AND PodcastIndex.org (4M+ podcasts) by keyword. Also resolves Spotify/Apple Podcasts URLs. Returns rows tagged with `source: local|podcastindex|spotify`. First move when the user names a podcast/host but you don't have its id."
      },
      {
        "name": "list_podcasts",
        "description": "List podcasts already in the PodLearn library, optionally filtered by category. Returns most-recently-added first. For discovery beyond the library use search_podcasts."
      },
      {
        "name": "get_podcast_details",
        "description": "Fetch full metadata for one podcast in the PodLearn library, including its episode count. The podcast must already be in the local DB (source=local in search_podcasts results)."
      },
      {
        "name": "search_episodes",
        "description": "Cross-podcast episode search by title/description AND parent podcast name/author. Returns local episodes only — for podcasts discoverable on PodcastIndex that aren't yet ingested, use list_feed_episodes instead. `status: \"transcribed\"` filters to ready-to-read; `status: \"untranscribed\"` to available-to-transcribe."
      },
      {
        "name": "list_feed_episodes",
        "description": "Fetch the canonical episode list for a podcast directly from PodcastIndex (the upstream RSS index). NO COST — pure discovery. Each episode is enriched with `in_library`, `episode_id` (if already ingested), and `transcription_status`. For episodes you want to ingest: call transcribe_url(audio_url, title, feed_id, podcast_name) — passing feed_id/podcast_name lands the episode under its real show. For episodes already in_library, use start_transcription(episode_id) instead."
      },
      {
        "name": "list_episodes",
        "description": "List episodes already in the local DB for a specific podcast. Requires podcast_id (use search_podcasts first if you only have a name). For cross-podcast search use search_episodes; for canonical PodcastIndex listings use list_feed_episodes."
      },
      {
        "name": "get_episode_details",
        "description": "Fetch full metadata for one episode including transcription_status and lesson_generation_status. Tells you whether get_transcription is ready or you need to transcribe first: start_transcription(episode_id) for an in-library episode (inherits its existing show/artwork/feed linkage automatically) or transcribe_url(audio_url, title, feed_id, podcast_name) for a URL not yet in the library."
      },
      {
        "name": "transcribe_url",
        "description": "Ingest and transcribe an EXTERNAL / arbitrary audio URL — a URL the user pasted, or audio not reachable through the index. Creates a STANDALONE episode row. If the episode is already in the library (it has an episode_id), prefer start_transcription(episode_id) instead — it inherits the episode's existing show, artwork, and feed linkage automatically. Consumes 1 transcription credit, or one unit of subscription quota; the credit is refunded automatically if transcription fails. Pass feed_id / podcast_name when you already know the parent show (e.g. from search_podcasts or list_feed_episodes) so the episode lands under its real show instead of appearing as unidentified \"External audio\". Returns the new episode_id. Transcription is asynchronous on the fallback path — poll get_episode_details until transcription_status is \"completed\"."
      },
      {
        "name": "transcribe_feed",
        "description": "Bulk/season transcription — kick off transcription for up to `max` (cap 25) not-yet-transcribed episodes of a podcast feed in ONE call. Pass the `feed_id` from search_podcasts / list_feed_episodes. Already-transcribed episodes are skipped free. COSTS 1 credit per newly enqueued episode (or subscription quota) — CONFIRM the cost with the user first. Enqueue-and-poll: returns each enqueued episode_id; poll get_episode_details until transcription_status is \"completed\"."
      },
      {
        "name": "start_transcription",
        "description": "Kick off transcription on an episode ALREADY in the library. Use only when the episode row exists and transcription_status is not \"completed\". Inherits the episode's existing show, artwork, and feed linkage automatically — no need to pass podcast context. For audio not yet in the library, use transcribe_url. COSTS 1 CREDIT (or subscription quota)."
      },
      {
        "name": "get_transcription",
        "description": "Fetch transcript text for a completed episode. PAGINATED — returns up to 120,000 characters per call (Claude.ai/Desktop caps a tool result at ~150k chars). Most transcripts fit in one call; only very long episodes page. If the response has `has_more: true`, call again with `offset: <next_offset>`. For focused look-up (a topic, quote, timestamp) prefer search_transcription."
      },
      {
        "name": "search_transcription",
        "description": "Keyword search WITHIN a single episode's transcript. Returns matching chunks with surrounding context. Use instead of get_transcription when the user asked about a specific topic — server does this faster + cheaper on context."
      },
      {
        "name": "get_transcription_segments",
        "description": "Fetch timestamped transcript segments. Use when the user wants timestamps — \"jump to where they discuss X\", chapter boundaries, durations of specific parts."
      },
      {
        "name": "list_lessons",
        "description": "List the calling user's saved AI-generated lessons."
      },
      {
        "name": "get_lesson_content",
        "description": "Fetch the full body of one AI-generated lesson (title, summary, key takeaways, structured sections). Use to retrieve prior synthesis — for creating a NEW one call generate_lesson."
      },
      {
        "name": "generate_lesson",
        "description": "Generate a structured AI lesson (summary, key takeaways, sections) from a completed transcription. Requires the episode to have transcription_status \"completed\". Consumes 1 credit, or one unit of subscription quota, on first generation for an episode; subsequent calls return the cached lesson at no cost."
      },
      {
        "name": "get_subscription_status",
        "description": "Get the caller's subscription plan + active/expired status + period end."
      },
      {
        "name": "get_user_credits",
        "description": "Get the caller's remaining transcription credits."
      },
      {
        "name": "get_episode_usage",
        "description": "Get the caller's episode-access usage stats — how many episodes they've transcribed/read this billing period."
      },
      {
        "name": "get_saved_items",
        "description": "List the caller's saved/bookmarked episodes and lessons."
      },
      {
        "name": "save_item",
        "description": "Bookmark an episode or lesson for the caller."
      },
      {
        "name": "remove_saved_item",
        "description": "Permanently remove a saved/bookmarked episode or lesson from the caller's collection. The saved_item_id comes from get_saved_items."
      },
      {
        "name": "generate_linkedin_post",
        "description": "Turn an already-generated lesson into a LinkedIn-ready share post. Pass lesson_id directly OR episode_id (uses the most recent lesson generated by the caller for that episode). Lesson must exist — chain after generate_lesson if needed."
      },
      {
        "name": "search_youtube",
        "description": "Discover YouTube videos by topic/keyword across all of YouTube. Use when the user wants to learn from a talk/interview/lecture and has no URL — especially when search_podcasts / search_episodes find nothing (much long-form content is YouTube-first). NO COST: pure discovery. Returns rows with a ready-to-transcribe `url`; to ingest one, confirm cost and call transcribe_url(url, title)."
      },
      {
        "name": "browse_episodes",
        "description": "Open an interactive episode picker (card grid with thumbnails) for the user to pick an episode to read. On hosts that render MCP Apps the grid is clickable; everywhere else a markdown table is returned. Optional query filters by title/host."
      }
    ],
    "profiled_at": "2026-08-13T14:00:03.719Z"
  }
}