Searches podcasts and YouTube, transcribes episodes, and generates AI lessons from the content.
Do not connect
A critical issue was found. Do not connect this server as-is.
Scanned 1 month ago Due for re-check
A server can change after it's graded. Re-run the automated scan to refresh this report.
This grade is deterministic and reproducible: the same server surface always yields the same grade under a given algorithm version. It is a real automated assessment computed by the MCPGrade engine from what the probe actually observed — not a fabricated or opinion score. It is not a manual human pentest, so it can miss context-specific risks.
Every signal below was measured directly by the automated probe. The grade is derived only from evidence like this — nothing is assumed.
The PodLearn Transcripts MCP server exposes 25 tools, focused primarily on web and AI capabilities. Its published description reads: "Searches podcasts and YouTube, transcribes episodes, and generates AI lessons from the content". It communicates over Streamable HTTP using the 2025-06-18 protocol revision, and does not require authorization to connect. MCPGrade currently rates PodLearn Transcripts F — a critical issue was found and the server should not be connected as-is. Its most notable findings include "Cross-tool shadowing" and "Cross-tool shadowing". This report is a deterministic, reproducible automated assessment: the same observed surface always yields the same grade under a given algorithm version, and it is refreshed as new scans arrive and free to read — but it is not a substitute for a manual human security review. Always re-check PodLearn Transcripts's advertised tools, transport security, and authorization posture before connecting an autonomous agent or sharing sensitive context with it.
Add PodLearn Transcripts to an MCP client using the endpoint below. Review the grade and findings above before granting an autonomous agent access.
MCP endpoint
https://httiyebjgxxwtgggkpgw.supabase.co/functions/v1/mcp-server-streamableStreamable HTTP transport. This is the MCP endpoint, not a website — paste it into your MCP client server list rather than a browser.
Captured passively during the read-only scan. Click any value to find servers that match it.
The tools this server advertises via tools/list — names, purposes, and the parameters each accepts, exactly as enumerated read-only.
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 us
List podcasts already in the PodLearn library, optionally filtered by category. Returns most-recently-added first. For discovery beyond the library use search_podcasts.
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).
Sorted worst-first. Each finding shows its severity, what it means, its OWASP MCP Top-10 mapping, and a recommended fix — the check id links to the exact methodology row that produced it.
tool: list_podcasts
A tool description tries to alter the model’s use of another tool.
the library use search_podcasts.RecommendationDescriptions must describe only their own tool.
tool: get_podcast_details
A tool description tries to alter the model’s use of another tool.
source=local in search_podcasts results).RecommendationDescriptions must describe only their own tool.
tool: search_episodes
A tool description tries to alter the model’s use of another tool.
t ingested, use list_feed_episodes instead. `status: "transcribed"` filters to reaRecommendationDescriptions must describe only their own tool.
tool: list_feed_episodes
A tool description tries to alter the model’s use of another tool.
to ingest: call transcribe_url(audio_url, title, feed_id, podcast_name) — passRecommendationDescriptions must describe only their own tool.
tool: list_episodes
A tool description tries to alter the model’s use of another tool.
podcast_id (use search_podcasts first if you only have a name). For cross-podcaRecommendationDescriptions must describe only their own tool.
tool: get_episode_details
A tool description tries to alter the model’s use of another tool.
tomatically) or transcribe_url(audio_url, title, feed_id, podcast_name) for aRecommendationDescriptions must describe only their own tool.
tool: transcribe_url
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
parameter "audio_url"RecommendationRemove side-channel parameters; constrain tool inputs.
tool: transcribe_url
Tools that execute commands / write files / make arbitrary requests are exposed without annotations or guards.
e an EXTERNAL / arbitrary audio URL — a URL the user pasted, or audio not reachable throughRecommendationAnnotate destructive tools and require human approval.
tool: transcribe_url
A tool description tries to alter the model’s use of another tool.
instead of appearing as unidentified "External audio". Returns the new epRecommendationDescriptions must describe only their own tool.
tool: transcribe_feed
A tool description tries to alter the model’s use of another tool.
`feed_id` from search_podcasts / list_feed_episodes. Already-transcribed episoRecommendationDescriptions must describe only their own tool.
tool: start_transcription
A tool description tries to alter the model’s use of another tool.
he library, use transcribe_url. COSTS 1 CREDIT (or subscription quota).RecommendationDescriptions must describe only their own tool.
tool: get_transcription
A tool description tries to alter the model’s use of another tool.
mestamp) prefer search_transcription.RecommendationDescriptions must describe only their own tool.
tool: search_transcription
A tool description tries to alter the model’s use of another tool.
ad of get_transcription when the user asked about a specific topic — serveRecommendationDescriptions must describe only their own tool.
tool: get_lesson_content
A tool description tries to alter the model’s use of another tool.
a NEW one call generate_lesson.RecommendationDescriptions must describe only their own tool.
tool: remove_saved_item
A tool description tries to alter the model’s use of another tool.
m_id comes from get_saved_items.RecommendationDescriptions must describe only their own tool.
tool: generate_linkedin_post
A tool description tries to alter the model’s use of another tool.
t — chain after generate_lesson if needed.RecommendationDescriptions must describe only their own tool.
tool: search_youtube
A tool description tries to alter the model’s use of another tool.
especially when search_podcasts / search_episodes find nothing (much long-formRecommendationDescriptions must describe only their own tool.
tool: (server instructions)
A tool description tries to alter the model’s use of another tool.
_transcription, transcribe_url, generate_lesson) confirm cost with the user beRecommendationDescriptions must describe only their own tool.
The server accepts tool enumeration (and likely invocation) with no authentication.
RecommendationRequire OAuth 2.1 authorization for any server exposing non-public tools.
tool: remove_saved_item
The server advertises open-world / broadly-scoped capabilities.
annotations.destructiveHint = trueRecommendationScope tools to the minimum needed.
The server exposes one or more ui:// (MCP Apps) resources whose HTML/JS renders inside the host client — a client-side injection / data-exposure surface most scanners ignore. Flagged for review, not damning on its own.
1 ui:// resource(s); e.g. ui://podlearn/episode-pickerRecommendationReview each ui:// resource’s markup and scripts; treat host-rendered UI as untrusted, sandbox it, and never expose secrets or conversation context to it.
Vantaj uptime monitoring via MCP — manage monitors, heartbeats, incidents, and status pages.
Unified gateway to Algeria's TKAWEN ecosystem: commerce, certification, and AI tools.
Provides access to the Cohereon Doctrine AI safety framework with governance components, tiered access, and agent onboarding.
Agentic rails for complex workflows with receipts, fees, and MCP tool access.
Structural TC39 spec lookup for ECMA-262 and ECMA-402 in AI agents, SHA-pinned and offline-first.
Structural TC39 spec lookup for ECMA-262 and ECMA-402 in AI agents, SHA-pinned and offline-first.
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_episod
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 inges
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 Podca
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(episo
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 (i
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. Al
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 l
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
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 fa
Fetch timestamped transcript segments. Use when the user wants timestamps — "jump to where they discuss X", chapter boundaries, durations of specific parts.
List the calling user's saved AI-generated lessons.
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.
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 subs
Get the caller's subscription plan + active/expired status + period end.
Get the caller's remaining transcription credits.
Get the caller's episode-access usage stats — how many episodes they've transcribed/read this billing period.
List the caller's saved/bookmarked episodes and lessons.
Bookmark an episode or lesson for the caller.
Permanently remove a saved/bookmarked episode or lesson from the caller's collection. The saved_item_id comes from get_saved_items.
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 — cha
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 n
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 returne