<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Xin Wu</title>
    <description>The latest articles on DEV Community by Xin Wu (@saitowu).</description>
    <link>https://dev.to/saitowu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F92194%2F2adf17e8-9b9a-4ff7-9c58-bb75d6e9ac99.png</url>
      <title>DEV Community: Xin Wu</title>
      <link>https://dev.to/saitowu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/saitowu"/>
    <language>en</language>
    <item>
      <title>Giving your AI agent access to a podcast library, via MCP</title>
      <dc:creator>Xin Wu</dc:creator>
      <pubDate>Mon, 19 Oct 2026 14:45:08 +0000</pubDate>
      <link>https://dev.to/saitowu/giving-your-ai-agent-access-to-a-podcast-library-via-mcp-19lm</link>
      <guid>https://dev.to/saitowu/giving-your-ai-agent-access-to-a-podcast-library-via-mcp-19lm</guid>
      <description>&lt;p&gt;I listen to a lot of podcasts. The problem was never finding episodes, it was using them afterwards: a 90-minute conversation contains maybe four ideas worth keeping, and by the next week I can remember the idea but not the episode, the timestamp, or the guest's name.&lt;/p&gt;

&lt;p&gt;Notes apps did not solve this. I would write "the bit about pricing floors" and six months later have no way back to the source.&lt;/p&gt;

&lt;p&gt;This post is about the architecture that finally worked: treat the podcast library as a queryable store, and expose it to an LLM through the Model Context Protocol so the agent can search it the way it searches a codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why transcripts alone are not enough
&lt;/h2&gt;

&lt;p&gt;The obvious move is transcription. That gives you text, but raw transcripts are hostile to retrieval:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;90 minutes of speech is roughly 13,000 words, most of it filler.&lt;/li&gt;
&lt;li&gt;Speaker turns are unlabeled unless you diarize.&lt;/li&gt;
&lt;li&gt;A question asked at minute 12 is answered at minute 40, so the useful span does not sit in one chunk.&lt;/li&gt;
&lt;li&gt;Names and numbers are transcribed inconsistently, which breaks keyword search.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the pipeline needs a structure layer before retrieval: summary, key points, and a topic map, all anchored to timestamps. Then retrieval can operate on structure and fall back to transcript spans.&lt;/p&gt;

&lt;h2&gt;
  
  
  What MCP changes
&lt;/h2&gt;

&lt;p&gt;Without MCP, every client integration is bespoke: one plugin for ChatGPT, one for Cursor, one for a CLI. With MCP, the server exposes tools once and any MCP-capable client can call them.&lt;/p&gt;

&lt;p&gt;The tool surface I ended up with is small on purpose:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Input&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_episodes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;query, optional date range&lt;/td&gt;
&lt;td&gt;episode IDs with matched spans and timestamps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_episode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;episode ID&lt;/td&gt;
&lt;td&gt;summary, key points, chapter map&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_transcript&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;episode ID, optional time window&lt;/td&gt;
&lt;td&gt;verbatim text for that window&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_recent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;limit&lt;/td&gt;
&lt;td&gt;latest imported episodes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The important constraint is that &lt;code&gt;search_episodes&lt;/code&gt; returns &lt;em&gt;spans with timestamps&lt;/em&gt;, not whole documents. An agent that receives 13,000 words will summarize the middle and lose the point. An agent that receives six 200-word spans with timestamps can answer precisely and cite.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting it
&lt;/h2&gt;

&lt;p&gt;If you want to try the shape of this without building it, &lt;a href="https://podwise.ai" rel="noopener noreferrer"&gt;Podwise&lt;/a&gt; runs a hosted MCP server at &lt;code&gt;https://mcp.podwise.ai/mcp&lt;/code&gt; that exposes a library you have imported there: Apple Podcasts, Spotify, YouTube, RSS and private feeds, with summaries, transcripts, mind maps and search across everything. One OAuth sign-in from Claude, ChatGPT or Cursor and the tools appear. There is a CLI as well (&lt;code&gt;brew install hardhackerlabs/podwise-tap/podwise&lt;/code&gt;) if you prefer scripted imports.&lt;/p&gt;

&lt;p&gt;The client side is unremarkable: point the client at the server, complete OAuth, and the four tools above show up in the tool list.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually works in practice
&lt;/h2&gt;

&lt;p&gt;Three query patterns earned their place:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;"Where did someone argue X?"&lt;/strong&gt; — span search across the library, returns timestamps, no hallucination risk because the answer is quoted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Summarize everything this guest said about Y across three appearances."&lt;/strong&gt; — cross-episode aggregation, which is where a plain transcript search tool falls over.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"What did I listen to last month that mentioned Z?"&lt;/strong&gt; — recency filter plus search, useful for writing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What does not work well yet: questions that require understanding audio the transcript missed (heavy accents, crosstalk), and anything that needs the visual context of a video podcast.&lt;/p&gt;

&lt;h2&gt;
  
  
  The design takeaway
&lt;/h2&gt;

&lt;p&gt;If you are building anything that ingests long-form audio, the ordering matters: &lt;strong&gt;structure first, retrieval second, agent third&lt;/strong&gt;. Agents are good at reasoning over six precise spans and bad at reasoning over a dumped transcript. Most of the engineering effort belongs in the structure layer, not the prompt.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>podcast</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
