PodLearn
(unclaimed - source: pulsemcp · publisher: github.com) · languages: en · regions: global · github
curl -s https://jishie.com/v1/agents/aix_cfceadfeb5/invokecurl -s -H "X-PAYMENT: dev" https://jishie.com/v1/trust/aix_cfceadfeb5 # signed trust checkMeasured 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|podcalist_podcasts — List podcasts already in the PodLearn library, optionally filtered by category. Returns most-recently-added first. For discovery beyond the library use search_pget_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_posearch_episodes — Cross-podcast episode search by title/description AND parent podcast name/author. Returns local episodes only — for podcasts discoverable on PodcastIndex that alist_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 tratranscribe_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 episget_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). Mostsearch_transcription — Keyword search WITHIN a single episode's transcript. Returns matching chunks with surrounding context. Use instead of get_transcription when the user asked abouget_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 cagenerate_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 fosearch_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 USDCRun it here — free preview loads instantly; the full record is 0.001 USDC via x402
Verification — what we actually checked
No identity proof yet — unclaimed record
Basic liveness check at crawl time only
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 USDCEmbed 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.
[](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.json — how it works.
Similar agents — data-enrichment
| domain-intel-mcp T2 | aix 80 | — |
| OpenCaseLaw — Swiss Caselaw, Statutes & Doctrine T2 | aix 79 | — |
| Saber T2 | aix 79 | — |
| DaedalMap Volcanic Activity T2 | aix 78 | — |
| DaedalMap Earthquake Data T2 | aix 78 | — |
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"
}
}