<?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: Pramod Kumar</title>
    <description>The latest articles on DEV Community by Pramod Kumar (@pramodvoola).</description>
    <link>https://dev.to/pramodvoola</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%2F3760954%2Fae167f2b-7d0c-45e6-beba-cd31d468600a.jpeg</url>
      <title>DEV Community: Pramod Kumar</title>
      <link>https://dev.to/pramodvoola</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pramodvoola"/>
    <language>en</language>
    <item>
      <title>Introducing Agent VCR: Record, Replay, and Diff MCP Server Interactions</title>
      <dc:creator>Pramod Kumar</dc:creator>
      <pubDate>Mon, 09 Feb 2026 03:35:31 +0000</pubDate>
      <link>https://dev.to/pramodvoola/introducing-agent-vcr-record-replay-and-diff-mcp-server-interactions-2np0</link>
      <guid>https://dev.to/pramodvoola/introducing-agent-vcr-record-replay-and-diff-mcp-server-interactions-2np0</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;If you're building with &lt;a href="https://modelcontextprotocol.io" rel="noopener noreferrer"&gt;Model Context Protocol (MCP)&lt;/a&gt;, your tests probably depend on live servers. They're slow, flaky, and expensive. &lt;strong&gt;Agent VCR&lt;/strong&gt; records your MCP interactions once and replays them deterministically — like &lt;a href="https://github.com/vcr/vcr" rel="noopener noreferrer"&gt;VCR&lt;/a&gt; / &lt;a href="https://netflix.github.io/pollyjs/" rel="noopener noreferrer"&gt;Polly.JS&lt;/a&gt; but purpose-built for the MCP JSON-RPC protocol. Plus it diffs recordings to catch breaking changes before they ship.&lt;/p&gt;

&lt;p&gt;Available now: &lt;strong&gt;&lt;a href="https://pypi.org/project/agent-vcr/" rel="noopener noreferrer"&gt;PyPI&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://www.npmjs.com/package/@agent-vcr/core" rel="noopener noreferrer"&gt;npm&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://github.com/jarvis2021/agent-vcr" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Testing Gap in MCP
&lt;/h2&gt;

&lt;p&gt;The MCP ecosystem has exploded. The official SDK sees tens of millions of monthly downloads, there are thousands of community MCP servers, and every major AI lab is integrating MCP into their agent workflows.&lt;/p&gt;

&lt;p&gt;But here's the thing nobody talks about: &lt;strong&gt;testing MCP is still painful.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're building an MCP client — say, an AI agent that calls tools via MCP — your tests look something like this:&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="c1"&gt;# What most MCP tests look like today
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_my_agent&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="c1"&gt;# Start the REAL MCP server
&lt;/span&gt;    &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Popen&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;python&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;my_mcp_server.py&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="c1"&gt;# Connect to it
&lt;/span&gt;    &lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MCPClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:3000/sse&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# Call the tool
&lt;/span&gt;    &lt;span class="n"&gt;result&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="nf"&gt;call_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search&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;query&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;test&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="c1"&gt;# Assert something
&lt;/span&gt;    &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
    &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;kill&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works until it doesn't. The server goes down. The API behind the server rate-limits you. The response format changes. Your CI pipeline fails for reasons that have nothing to do with &lt;em&gt;your&lt;/em&gt; code.&lt;/p&gt;

&lt;p&gt;The HTTP testing world solved this years ago. VCR (Ruby), Polly.JS (JavaScript), and pytest-recording (Python) all record HTTP interactions and replay them. But MCP isn't HTTP — it's JSON-RPC 2.0 over stdio or SSE, with bidirectional communication, server-initiated notifications, and a specific protocol handshake. Generic HTTP mocking doesn't fit.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Agent VCR Does
&lt;/h2&gt;

&lt;p&gt;Agent VCR sits between your MCP client and server as a transparent proxy. It records every JSON-RPC interaction — requests, responses, notifications, latencies — into a &lt;code&gt;.vcr&lt;/code&gt; cassette file. Then it replays them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Record (once)                    Replay (every test run)
─────────────                    ───────────────────────
Client ←→ Agent VCR ←→ Server   Client ←→ Agent VCR (mock)
              │                               │
              └──→ session.vcr ───────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Record
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;agent-vcr  &lt;span class="c"&gt;# or: npm install @agent-vcr/core&lt;/span&gt;

&lt;span class="c"&gt;# Record a stdio-based MCP server&lt;/span&gt;
agent-vcr record &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--transport&lt;/span&gt; stdio &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--server-command&lt;/span&gt; &lt;span class="s2"&gt;"python my_server.py"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-o&lt;/span&gt; golden.vcr

&lt;span class="c"&gt;# Record an SSE-based MCP server&lt;/span&gt;
agent-vcr record &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--transport&lt;/span&gt; sse &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--server-url&lt;/span&gt; http://localhost:3000/sse &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-o&lt;/span&gt; golden.vcr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Replay
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Replay as a mock stdio server&lt;/span&gt;
agent-vcr replay &lt;span class="nt"&gt;--file&lt;/span&gt; golden.vcr &lt;span class="nt"&gt;--transport&lt;/span&gt; stdio

&lt;span class="c"&gt;# Replay as a mock SSE server on port 3100&lt;/span&gt;
agent-vcr replay &lt;span class="nt"&gt;--file&lt;/span&gt; golden.vcr &lt;span class="nt"&gt;--transport&lt;/span&gt; sse &lt;span class="nt"&gt;--port&lt;/span&gt; 3100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your tests now talk to the replayer instead of the real server. Instant, deterministic, offline.&lt;/p&gt;

&lt;h3&gt;
  
  
  Diff
&lt;/h3&gt;

&lt;p&gt;This is where Agent VCR goes beyond simple record/replay. Suppose your team updates the MCP server. Did anything break?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agent-vcr diff v1.vcr v2.vcr &lt;span class="nt"&gt;--fail-on-breaking&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The diff engine compares every interaction between two recordings and classifies changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Added methods&lt;/strong&gt; — new capabilities, non-breaking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Removed methods&lt;/strong&gt; — breaking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modified responses&lt;/strong&gt; — the engine checks field-level compatibility: removed fields are breaking, type changes are breaking, added fields are safe&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error code changes&lt;/strong&gt; — switching error codes is breaking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency regressions&lt;/strong&gt; — optionally flag responses that got significantly slower&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This turns MCP server upgrades from "deploy and pray" into "diff and verify."&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Not Just Mock It Yourself?
&lt;/h2&gt;

&lt;p&gt;You could write manual mocks. Many teams do. But there are good reasons to use Agent VCR instead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Completeness.&lt;/strong&gt; A hand-rolled mock captures whatever you remembered to mock. Agent VCR records &lt;em&gt;everything&lt;/em&gt; — the initialize handshake, capability negotiation, all tool calls and responses, server notifications, error cases, and exact latencies. You get a complete picture of what the server actually does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maintenance.&lt;/strong&gt; When the server changes, hand-rolled mocks require manual updates. With Agent VCR, you re-record one cassette and all tests update automatically. If the new behavior is incompatible, the diff catches it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Distribution.&lt;/strong&gt; If you maintain an open-source MCP server, you can ship &lt;code&gt;.vcr&lt;/code&gt; cassettes alongside your server. Users can test their clients without ever installing or running your server. This is a distribution model that doesn't exist anywhere else in the MCP ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-language.&lt;/strong&gt; The &lt;code&gt;.vcr&lt;/code&gt; format is plain JSON. Record in Python, replay in TypeScript — or the reverse. Both implementations are first-class.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pytest Integration
&lt;/h2&gt;

&lt;p&gt;For Python teams, Agent VCR ships as a pytest plugin:&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="nd"&gt;@pytest.mark.vcr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cassettes/golden.vcr&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_tools_list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vcr_replayer&lt;/span&gt;&lt;span class="p"&gt;):&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;vcr_replayer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;handle_request&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;jsonrpc&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;2.0&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;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;method&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;tools/list&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;params&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="k"&gt;assert&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result&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;tools&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For TypeScript, there are Jest and Vitest integrations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;withVCR&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@agent-vcr/core/vitest&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tools list returns expected tools&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;withVCR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;golden.vcr&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;replayer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;replayer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;handleRequest&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;jsonrpc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2.0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tools/list&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;params&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="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toBeGreaterThan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&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;h2&gt;
  
  
  Features at a Glance
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Core:&lt;/strong&gt; Record, replay, and diff MCP JSON-RPC 2.0 interactions over stdio and SSE transports.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Matching strategies:&lt;/strong&gt; Exact, method-only, method+params, subset (partial parameter matching), and sequential — choose the right tradeoff between strictness and flexibility for your tests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Latency simulation:&lt;/strong&gt; Replay recorded latencies to test timeout handling and performance-sensitive code paths.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notification replay:&lt;/strong&gt; MCP servers send notifications (progress updates, resource changes). Agent VCR captures and replays these alongside responses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-MCP indexing:&lt;/strong&gt; Tag recordings with session/endpoint/agent IDs, index hundreds of cassettes, search across them, and batch-diff entire test suites.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CLI tools:&lt;/strong&gt; &lt;code&gt;record&lt;/code&gt;, &lt;code&gt;replay&lt;/code&gt;, &lt;code&gt;diff&lt;/code&gt;, &lt;code&gt;inspect&lt;/code&gt;, &lt;code&gt;validate&lt;/code&gt;, &lt;code&gt;merge&lt;/code&gt;, &lt;code&gt;stats&lt;/code&gt;, &lt;code&gt;index&lt;/code&gt;, &lt;code&gt;search&lt;/code&gt;, &lt;code&gt;diff-batch&lt;/code&gt; — everything you need from the command line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-language:&lt;/strong&gt; Python and TypeScript share the same &lt;code&gt;.vcr&lt;/code&gt; format. 250+ tests in Python, 72 in TypeScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Should Use This
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MCP server authors&lt;/strong&gt; — ship cassettes alongside your server so downstream clients can test without running it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI agent teams&lt;/strong&gt; — stop your CI from depending on live MCP servers. Record golden cassettes, replay in milliseconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enterprise platform teams&lt;/strong&gt; — gate MCP server deployments on automated compatibility checks. Diff before you ship.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anyone paying for API calls behind MCP servers&lt;/strong&gt; — record once, never burn quota in tests again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Python&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;agent-vcr

&lt;span class="c"&gt;# TypeScript&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; @agent-vcr/core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then follow the &lt;a href="https://github.com/jarvis2021/agent-vcr/blob/main/docs/tutorial.md" rel="noopener noreferrer"&gt;tutorial&lt;/a&gt; or dive into the &lt;a href="https://github.com/jarvis2021/agent-vcr" rel="noopener noreferrer"&gt;README&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/jarvis2021/agent-vcr" rel="noopener noreferrer"&gt;github.com/jarvis2021/agent-vcr&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;LinkedIn: &lt;a href="https://www.linkedin.com/in/pramod03/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/pramod03/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;PyPI: &lt;a href="https://pypi.org/project/agent-vcr/" rel="noopener noreferrer"&gt;pypi.org/project/agent-vcr&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;npm: &lt;a href="https://www.npmjs.com/package/@agent-vcr/core" rel="noopener noreferrer"&gt;npmjs.com/package/@agent-vcr/core&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Tutorial: &lt;a href="https://github.com/jarvis2021/agent-vcr/blob/main/docs/tutorial.md" rel="noopener noreferrer"&gt;docs/tutorial.md&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Agent VCR is MIT-licensed and open for contributions.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>opensource</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
