<?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: Mark Turner</title>
    <description>The latest articles on DEV Community by Mark Turner (@mkturner74).</description>
    <link>https://dev.to/mkturner74</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3957328%2F4c030515-eaa4-4786-86f5-5e6d69437b78.png</url>
      <title>DEV Community: Mark Turner</title>
      <link>https://dev.to/mkturner74</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mkturner74"/>
    <language>en</language>
    <item>
      <title>Botverse officially launches tomorrow - 6/9/26!</title>
      <dc:creator>Mark Turner</dc:creator>
      <pubDate>Mon, 08 Jun 2026 20:35:13 +0000</pubDate>
      <link>https://dev.to/mkturner74/botverse-officially-launches-tomorrow-6926-46aa</link>
      <guid>https://dev.to/mkturner74/botverse-officially-launches-tomorrow-6926-46aa</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/mkturner74/add-video-transcoding-to-your-claude-agent-in-5-minutes-mcp-1i1l" class="crayons-story__hidden-navigation-link"&gt;Add video transcoding to your Claude agent in 5 minutes (MCP)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/mkturner74" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3957328%2F4c030515-eaa4-4786-86f5-5e6d69437b78.png" alt="mkturner74 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/mkturner74" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Mark Turner
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Mark Turner
                
              
              &lt;div id="story-author-preview-content-3851275" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/mkturner74" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3957328%2F4c030515-eaa4-4786-86f5-5e6d69437b78.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Mark Turner&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/mkturner74/add-video-transcoding-to-your-claude-agent-in-5-minutes-mcp-1i1l" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 8&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/mkturner74/add-video-transcoding-to-your-claude-agent-in-5-minutes-mcp-1i1l" id="article-link-3851275"&gt;
          Add video transcoding to your Claude agent in 5 minutes (MCP)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mcp"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mcp&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/tutorial"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;tutorial&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/video"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;video&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/mkturner74/add-video-transcoding-to-your-claude-agent-in-5-minutes-mcp-1i1l" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/mkturner74/add-video-transcoding-to-your-claude-agent-in-5-minutes-mcp-1i1l#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Add video transcoding to your Claude agent in 5 minutes (MCP)</title>
      <dc:creator>Mark Turner</dc:creator>
      <pubDate>Mon, 08 Jun 2026 19:40:57 +0000</pubDate>
      <link>https://dev.to/mkturner74/add-video-transcoding-to-your-claude-agent-in-5-minutes-mcp-1i1l</link>
      <guid>https://dev.to/mkturner74/add-video-transcoding-to-your-claude-agent-in-5-minutes-mcp-1i1l</guid>
      <description>&lt;h1&gt;
  
  
  Teach your Claude Agent to process Zoom recordings and extract audio in 5 minutes (MCP)
&lt;/h1&gt;

&lt;p&gt;As IT developers, we are constantly tasked with building internal tools to automate messy, repetitive workflows. With the rise of AI agents, it’s now incredibly easy to build a Claude-powered bot that manages tickets, audits logs, or summarizes text.&lt;/p&gt;

&lt;p&gt;But things fall apart the moment a user drops a massive 2GB raw Zoom recording, a Microsoft Teams &lt;code&gt;.webm&lt;/code&gt; export, or a screen-share video into the chat and asks the agent to "compress this for the wiki" or "extract the audio so we can transcribe it."&lt;/p&gt;

&lt;p&gt;Suddenly, your lightweight AI agent needs to be a media engineering wizard. Your options? Either force a local installation of FFmpeg (and deal with cross-platform binary dependencies breaking in production) or spend days configuring AWS MediaConvert pipelines, S3 buckets, IAM roles, and webhooks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spoiler alert: You shouldn't have to build cloud infrastructure just to downsample a corporate meeting recording.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thanks to Anthropic’s &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; and a developer-friendly platform called &lt;strong&gt;Botverse&lt;/strong&gt;, you can give your Claude Agent full video-transcoding and audio-extraction superpowers in exactly 5 minutes—without writing a single line of infrastructure code.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ The 5-Minute Setup
&lt;/h2&gt;

&lt;p&gt;To give your local Claude Desktop agent video-processing capabilities, you just need to connect the Botverse remote MCP server to your client.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sign up at &lt;a href="https://botverse.cloud" rel="noopener noreferrer"&gt;botverse.cloud&lt;/a&gt; and copy your API token from the dashboard.&lt;/li&gt;
&lt;li&gt;Open your Claude Desktop configuration file:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;macOS:&lt;/strong&gt; &lt;code&gt;~/Library/Application Support/Claude/claude_desktop_config.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; &lt;code&gt;%APPDATA%\Claude\claude_desktop_config.json&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the &lt;code&gt;botverse&lt;/code&gt; configuration block under the &lt;code&gt;mcpServers&lt;/code&gt; object:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"botverse"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"mcp-remote"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"https://botverse.cloud/mcp?token=YOUR_BOTVERSE_TOKEN"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;YOUR_BOTVERSE_TOKEN&lt;/code&gt; with your actual token, save the file, and restart Claude Desktop. That’s it. Claude now inherently understands how to manipulate video and audio files.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔄 The IT Developer Workflow Under the Hood
&lt;/h2&gt;

&lt;p&gt;Once connected, Claude automatically discovers the new media tools. When you ask Claude to handle a video file, it autonomously orchestrates a clean, 3-step asynchronous workflow:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;transcode_from_url&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Claude kicks off the process by sending the raw video URL (like a direct link to a cloud-stored meeting recording) straight to Botverse. You don't have to upload massive files into your LLM prompt context.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;For video compression:&lt;/strong&gt; You can tell Claude to convert a massive raw file to a web-friendly &lt;code&gt;720p MP4&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For data/text extraction:&lt;/strong&gt; You can instruct Claude to strip the video entirely and extract just the &lt;code&gt;MP3&lt;/code&gt; or &lt;code&gt;WAV&lt;/code&gt; audio—perfect for feeding into a transcription API like Whisper to generate meeting notes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;code&gt;get_job_status&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Media processing takes time. Instead of blocking the LLM or hitting a network timeout, Claude will intelligently poll this tool in the background to check on the job's progress while it cooks.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;code&gt;get_download_url&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;As soon as the job status marks itself complete, Claude calls this final tool to retrieve a secure, signed download URL for the newly generated asset.&lt;/p&gt;




&lt;h2&gt;
  
  
  📸 See It In Action
&lt;/h2&gt;

&lt;p&gt;Imagine an internal Slack or desktop bot where a developer or project manager needs to extract audio from a town hall meeting. You can type a natural language command:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Extract the audio from this raw recorded meeting link as an MP3 so I can run a transcript on it: &lt;a href="https://www.google.com/search?q=https://storage.company.internal/meeting_10823.webm" rel="noopener noreferrer"&gt;https://storage.company.internal/meeting_10823.webm&lt;/a&gt;"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude handles the tool coordination automatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Claude Desktop UI]
🤖 Calling tool: botverse.transcode_from_url... 
   ↳ Parameters: { url: "...", outputs: [{ format: "mp3" }] }
   ↳ Status: Job created (ID: job_dev_7812)

🤖 Calling tool: botverse.get_job_status (job_dev_7812)... 
   ↳ Status: Processing (Audio extraction in progress...)

🤖 Calling tool: botverse.get_job_status (job_dev_7812)... 
   ↳ Status: Completed

🤖 Calling tool: botverse.get_download_url (job_dev_7812)...
   ↳ Signed URL retrieved!

"I have successfully extracted the audio from your meeting recording. You can download the MP3 file here to pass to your transcription pipeline: [Download Meeting Audio](https://botverse.cloud/d/xyz123...)"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  💰 Predictable Pricing, Zero Idle Server Costs
&lt;/h2&gt;

&lt;p&gt;We all hate surprise cloud bills from idle infrastructure. Botverse uses a transparent, pay-as-you-go model that keeps costs entirely predictable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;$0.25 per job&lt;/strong&gt; (for standard source video files under 5 minutes).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;+$0.08 per minute&lt;/strong&gt; for overage on longer files (like 30-minute standups or hour-long webinars).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$2.50 minimum top-up&lt;/strong&gt; to fund your developer wallet and get started.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are no fixed monthly subscriptions, no base fees, and your credits never expire. You only pay when your agent is actively processing media.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Next Steps
&lt;/h2&gt;

&lt;p&gt;Stop wasting time writing boilerplate infrastructure code, debugging FFmpeg layers in Docker containers, or over-engineering cloud pipelines for simple internal tools. Let MCP do the heavy lifting.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Get Started:&lt;/strong&gt; Head over to &lt;a href="https://botverse.cloud" rel="noopener noreferrer"&gt;botverse.cloud&lt;/a&gt; to grab your API token.&lt;/li&gt;
&lt;li&gt;📚 &lt;strong&gt;Read the Docs:&lt;/strong&gt; Check out the &lt;a href="https://botverse.cloud" rel="noopener noreferrer"&gt;Botverse Documentation&lt;/a&gt; for more advanced parameters, document conversions, and agent automation blueprints.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>tutorial</category>
      <category>video</category>
    </item>
    <item>
      <title>I gave my AI agent a 2MB PDF. Here's what happened to my token count.</title>
      <dc:creator>Mark Turner</dc:creator>
      <pubDate>Thu, 28 May 2026 21:42:35 +0000</pubDate>
      <link>https://dev.to/mkturner74/i-gave-my-ai-agent-a-2mb-pdf-heres-what-happened-to-my-token-count-4dd1</link>
      <guid>https://dev.to/mkturner74/i-gave-my-ai-agent-a-2mb-pdf-heres-what-happened-to-my-token-count-4dd1</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Every token your agent spends on file I/O is wasted reasoning capacity.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I was building a document processing agent — the kind that reads incoming research reports, extracts key findings, and produces executive briefings. Nothing exotic. The kind of workflow thousands of teams are automating right now.&lt;/p&gt;

&lt;p&gt;The PDF I was testing with was 2MB. Dense text. A typical industry research report.&lt;/p&gt;

&lt;p&gt;When I measured the token cost of processing it inline, the number was &lt;strong&gt;97,354 input tokens&lt;/strong&gt; — just to get the text into Claude's context. At &lt;code&gt;claude-sonnet-4-6&lt;/code&gt; pricing, that's $0.29 per document. For a pipeline that processes 500 reports a month, you're looking at $150/month before your agent writes a single word of output.&lt;/p&gt;

&lt;p&gt;That's the problem nobody talks about in the AI agent space. Everyone optimises prompt engineering and output tokens. The silent cost is input: the files, the content, the raw data you're shoving into context before the agent can do anything useful.&lt;/p&gt;




&lt;h2&gt;
  
  
  How the token count explodes
&lt;/h2&gt;

&lt;p&gt;When you pass a document to an agent inline, one of two things happens:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option A — Base64 encoding.&lt;/strong&gt; You read the binary file, encode it, embed it in the prompt. A 2MB PDF in base64 is ~2.7MB of text. At roughly 3.5 characters per token, that's &lt;strong&gt;~770,000 tokens&lt;/strong&gt; before your agent has read a single word. This is catastrophic. Don't do this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option B — Text extraction.&lt;/strong&gt; You extract the raw text content first (via &lt;code&gt;pdftotext&lt;/code&gt;, PyMuPDF, or equivalent), then pass the text to the agent. Better — but a 2MB PDF with dense content still yields &lt;strong&gt;~97,000 tokens&lt;/strong&gt; of extracted text. You've paid for every word, every header, every footnote.&lt;/p&gt;

&lt;p&gt;Either way, the document content dominates your context window, crowds out your system prompt, and you're burning money on file I/O instead of reasoning.&lt;/p&gt;




&lt;h2&gt;
  
  
  The alternative: specialist services via MCP
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://modelcontextprotocol.io" rel="noopener noreferrer"&gt;Model Context Protocol (MCP)&lt;/a&gt; is Anthropic's open standard for connecting AI agents to external tools and services. The key insight is simple: your agent doesn't need to &lt;em&gt;contain&lt;/em&gt; the computation — it needs to &lt;em&gt;orchestrate&lt;/em&gt; it.&lt;/p&gt;

&lt;p&gt;File conversion is a perfect example. Converting a PDF to clean markdown is deterministic, CPU-bound work. It doesn't require LLM reasoning. Running it inside your agent's context window is like using a screwdriver to hammer a nail — you can, sort of, but why would you?&lt;/p&gt;

&lt;p&gt;Here's what the same 2MB PDF workflow looks like when the agent delegates to a specialist service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent token cost to process the 2MB PDF:
  ├── convert_from_url call:    ~300 tokens
  ├── get_job_status poll:      ~200 tokens  
  ├── get_download_url call:    ~200 tokens
  └── Total MCP overhead:    ~8,000 tokens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;8,000 tokens vs 97,354 tokens. A 12× reduction.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The converted markdown (clean, structured, without PDF encoding artifacts) is stored externally. The agent gets back a URL. For many workflows — convert, store, route, email — the agent never needs to read the full content at all. For workflows that do need to reason over the content, the clean markdown is 40-50% smaller than the raw extracted text.&lt;/p&gt;

&lt;p&gt;The cost difference: &lt;strong&gt;$0.029 vs $0.29&lt;/strong&gt;. Ten times cheaper per document.&lt;/p&gt;




&lt;h2&gt;
  
  
  A concrete example
&lt;/h2&gt;

&lt;p&gt;Say your agent handles incoming vendor contracts. The workflow: receive a PDF, convert to a canonical format, extract key dates and obligations, store the result, notify procurement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inline approach:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Anthropic&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;vendor_contract.pdf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;pdf_b64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b64encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# This burns ~770,000 tokens just loading the file
&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-sonnet-4-6&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4096&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Extract key dates, parties, and obligations from this contract.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;document&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;base64&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;media_type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/pdf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pdf_b64&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cost: ~$2.31 in input tokens for a 2MB contract, before any output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP approach (with Botverse):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Set up the MCP server once in your Claude Desktop config or agent runtime:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"botverse"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://botverse.cloud/mcp?token=YOUR_TOKEN"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then your agent prompt becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You have access to the Botverse MCP tools.

A new vendor contract has arrived at:
https://contracts.yourcompany.com/incoming/vendor_contract_2026.pdf

1. Convert it to markdown using convert_from_url
2. Once converted, retrieve the content and extract:
   - Contract parties (names and roles)
   - Effective date and term
   - Payment obligations with amounts and dates
   - Key termination conditions
3. Format the output as structured JSON
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What happens:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;Tool call: convert_from_url(url, "md")
&lt;/span&gt;&lt;span class="gp"&gt;  → job_id: "job_abc123", estimated_cost: $&lt;/span&gt;0.05
&lt;span class="go"&gt;
Tool call: get_job_status("job_abc123")  
  → status: "complete"

Tool call: get_download_url("job_abc123")
  → download_url: "https://cdn.botverse.cloud/..."
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent fetches the clean markdown (~35,000 tokens for the same contract), extracts the structured data, and produces the output. Total input tokens: ~37,000. Total cost including the $0.05 Botverse job: &lt;strong&gt;~$0.16 vs $2.31&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;For a pipeline processing 500 contracts a month: &lt;strong&gt;$80 vs $1,155&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  When the agent doesn't need to read the file at all
&lt;/h2&gt;

&lt;p&gt;The pattern gets even more powerful when the agent's job is &lt;em&gt;transformation&lt;/em&gt;, not &lt;em&gt;comprehension&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Consider: "Convert all this week's board meeting notes from DOCX to PDF and upload them to the board portal."&lt;/p&gt;

&lt;p&gt;The agent doesn't need to read the content. It needs to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Get a list of DOCX files (from Drive, S3, wherever)&lt;/li&gt;
&lt;li&gt;For each: call &lt;code&gt;convert_from_url(url, "pdf")&lt;/code&gt;, get the output URL&lt;/li&gt;
&lt;li&gt;Upload each PDF to the board portal&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Total agent token cost per document: ~1,500 tokens (three MCP calls). The files can be arbitrarily large — 100MB, 1GB — the token cost doesn't change.&lt;/p&gt;

&lt;p&gt;This is the correct architecture for file-processing agents. The agent reasons. Specialist services compute.&lt;/p&gt;




&lt;h2&gt;
  
  
  The underlying principle
&lt;/h2&gt;

&lt;p&gt;There's an argument that LLM context windows are getting so large that this doesn't matter anymore. Gemini 2.0 Pro has 2M tokens. Claude has 200K. Just throw everything in.&lt;/p&gt;

&lt;p&gt;This argument has two problems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost.&lt;/strong&gt; Large context windows are expensive. 97,354 input tokens at &lt;code&gt;claude-sonnet-4-6&lt;/code&gt; is $0.29. At &lt;code&gt;claude-opus-4-7&lt;/code&gt; it's over $1.00. If your agent processes high volumes, you're paying a huge premium for compute you don't need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance.&lt;/strong&gt; LLMs degrade at extracting specific information from large, noisy contexts. The "lost in the middle" problem is well-documented — models struggle to attend to relevant content buried in long inputs. A clean, well-structured markdown document is easier for a model to reason about than raw extracted PDF text with page numbers, headers, and encoding artifacts embedded throughout.&lt;/p&gt;

&lt;p&gt;The right mental model: &lt;strong&gt;every token your agent spends on file I/O is reasoning capacity it can't spend on your actual problem.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;p&gt;Botverse is an MCP-native cloud API for file processing — video transcoding and document conversion, built for AI agents.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sign up at &lt;a href="https://botverse.cloud" rel="noopener noreferrer"&gt;botverse.cloud&lt;/a&gt; — $2.50 minimum top-up, no monthly fees&lt;/li&gt;
&lt;li&gt;Document conversion: $0.05/job (md, html, docx, pdf, rst, txt, xlsx)&lt;/li&gt;
&lt;li&gt;Video transcoding: $0.25/job base (mp4, webm, ProRes, mp3, gif)&lt;/li&gt;
&lt;li&gt;Add the MCP server in Claude Desktop in 30 seconds: Smithery search "Botverse"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The benchmark numbers in this article came from processing a 2MB research PDF in both modes using &lt;code&gt;claude-sonnet-4-6&lt;/code&gt;. &lt;a href="https://botverse.cloud/benchmark" rel="noopener noreferrer"&gt;https://botverse.cloud/benchmark&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have a different approach to token-efficient file processing? I'd love to hear it in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>agents</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
