<?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: Rupa Tiwari</title>
    <description>The latest articles on DEV Community by Rupa Tiwari (@rupa_tiwari_dd308948d710f).</description>
    <link>https://dev.to/rupa_tiwari_dd308948d710f</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%2F3785046%2Fc76f5af2-6cfc-4e91-9f5d-7064cb5ec772.png</url>
      <title>DEV Community: Rupa Tiwari</title>
      <link>https://dev.to/rupa_tiwari_dd308948d710f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rupa_tiwari_dd308948d710f"/>
    <language>en</language>
    <item>
      <title>Agent Skills vs MCP vs Function Calling vs A2A: When to Use Each</title>
      <dc:creator>Rupa Tiwari</dc:creator>
      <pubDate>Wed, 02 Sep 2026 11:47:01 +0000</pubDate>
      <link>https://dev.to/rupa_tiwari_dd308948d710f/agent-skills-vs-mcp-vs-function-calling-vs-a2a-when-to-use-each-1p99</link>
      <guid>https://dev.to/rupa_tiwari_dd308948d710f/agent-skills-vs-mcp-vs-function-calling-vs-a2a-when-to-use-each-1p99</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;📖 TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent Skills&lt;/strong&gt; teach an agent &lt;em&gt;how&lt;/em&gt; to do something. A folder with a &lt;code&gt;SKILL.md&lt;/code&gt; file. No server, no auth, no runtime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP&lt;/strong&gt; gives an agent &lt;em&gt;access&lt;/em&gt; to something. A live JSON-RPC server exposing tools, resources and prompts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Function calling&lt;/strong&gt; is the model-level primitive underneath both. Provider-specific JSON schemas, no discovery, no transport.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A2A&lt;/strong&gt; connects one agent to &lt;em&gt;another agent&lt;/em&gt;. A horizontal link, where MCP is the vertical one.&lt;/li&gt;
&lt;li&gt;Rule of thumb: &lt;strong&gt;knowledge → Skill. Connectivity → MCP. One provider, one app → function calling. Cross-agent delegation → A2A.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;They compose. The MCP working group is now standardising &lt;strong&gt;Skills over MCP&lt;/strong&gt;, which merges the top two.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every week someone asks me whether Agent Skills replace MCP. The question is wrong, and picking the wrong one is expensive.&lt;/p&gt;

&lt;p&gt;Wrap procedural knowledge in an MCP server and you burn context on every session. Wrap live database access in a Skill and it simply cannot reach the database.&lt;/p&gt;

&lt;p&gt;I have shipped both. &lt;strong&gt;Agent Skills vs MCP is not a versus at all&lt;/strong&gt; — they sit at different layers, alongside function calling and A2A.&lt;/p&gt;

&lt;p&gt;This post gives you the one-sentence distinction for each, a decision table you can paste into a design doc, and the five mistakes I keep seeing.&lt;/p&gt;

&lt;p&gt;I also cover &lt;em&gt;Skills over MCP&lt;/em&gt;, the MCP working group effort that merges the two standards. It changed how I plan agent architecture in 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four Layers, Not Four Choices
&lt;/h2&gt;

&lt;p&gt;Here is the whole argument in one table. Each row answers a different question, which is why teams end up shipping all four.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Answers&lt;/th&gt;
&lt;th&gt;Shape&lt;/th&gt;
&lt;th&gt;Runtime?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent Skills&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;How do I do this task?&lt;/td&gt;
&lt;td&gt;Folder with &lt;code&gt;SKILL.md&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MCP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;What can I reach?&lt;/td&gt;
&lt;td&gt;JSON-RPC client/server&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function calling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;How does the model ask?&lt;/td&gt;
&lt;td&gt;JSON schema in the API call&lt;/td&gt;
&lt;td&gt;Your code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;A2A&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Who else can do this?&lt;/td&gt;
&lt;td&gt;Agent-to-agent HTTP protocol&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Function calling is the floor.&lt;/strong&gt; MCP standardises what sits on top of it. Skills sit above MCP as instructions. A2A sits beside all three.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Are Agent Skills?
&lt;/h2&gt;

&lt;p&gt;An &lt;em&gt;Agent Skill&lt;/em&gt; is a folder containing a &lt;code&gt;SKILL.md&lt;/code&gt; file. That is the entire required surface area.&lt;/p&gt;

&lt;p&gt;Anthropic shipped Skills in Claude in October 2025 and &lt;strong&gt;released the format as an open standard on 18 December 2025&lt;/strong&gt; at &lt;a href="https://agentskills.io/" rel="noopener noreferrer"&gt;agentskills.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The frontmatter needs exactly two fields. Everything else is optional.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-skill/
├── SKILL.md          # required: metadata + instructions
├── scripts/          # optional: executable code
├── references/       # optional: docs loaded on demand
└── assets/           # optional: templates, schemas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;incident-postmortem&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Write a blameless postmortem from an incident timeline.&lt;/span&gt;
  &lt;span class="s"&gt;Use when the user mentions an outage, incident review, or RCA.&lt;/span&gt;
&lt;span class="na"&gt;license&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Apache-2.0&lt;/span&gt;
&lt;span class="na"&gt;allowed-tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Bash(git:*) Read&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gu"&gt;## Steps&lt;/span&gt;
&lt;span class="p"&gt;1.&lt;/span&gt; Pull the incident timeline from the linked doc.
&lt;span class="p"&gt;2.&lt;/span&gt; Separate trigger, contributing factors and detection gap.
&lt;span class="p"&gt;3.&lt;/span&gt; Never name individuals. Name systems and processes.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The rules are tight. &lt;strong&gt;&lt;code&gt;name&lt;/code&gt; is max 64 characters&lt;/strong&gt;, lowercase alphanumerics and single hyphens, and must match the directory name.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;description&lt;/code&gt; is max 1024 characters and does the real work. It is the only thing the agent sees until the skill fires.&lt;/p&gt;

&lt;p&gt;Optional fields are &lt;code&gt;license&lt;/code&gt;, &lt;code&gt;compatibility&lt;/code&gt;, &lt;code&gt;metadata&lt;/code&gt;, and the experimental &lt;code&gt;allowed-tools&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Progressive disclosure is the whole trick
&lt;/h3&gt;

&lt;p&gt;Skills load in three stages, and this is why they are cheap.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Discovery&lt;/strong&gt; — only &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;description&lt;/code&gt; load at startup, roughly 100 tokens per skill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Activation&lt;/strong&gt; — the full &lt;code&gt;SKILL.md&lt;/code&gt; body loads when a task matches. Keep it under 5,000 tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution&lt;/strong&gt; — bundled scripts and reference files load only if the instructions reach for them.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;You can install fifty skills and pay almost nothing until one fires.&lt;/strong&gt; Try that with fifty MCP servers and your context window is gone before the first message.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Portability check:&lt;/strong&gt; the same &lt;code&gt;SKILL.md&lt;/code&gt; folder is read by Claude Code, ChatGPT and Codex, Cursor, GitHub Copilot, VS Code, Gemini CLI, JetBrains Junie, AWS Kiro, Block Goose and OpenCode. Write once, run in any of them.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What Is MCP?
&lt;/h2&gt;

&lt;p&gt;The &lt;em&gt;Model Context Protocol&lt;/em&gt; is a live client-server protocol. It gives an agent access to systems it does not already have.&lt;/p&gt;

&lt;p&gt;MCP uses &lt;strong&gt;JSON-RPC 2.0 between hosts, clients and servers&lt;/strong&gt;. Servers expose three primitives: tools, resources and prompts.&lt;/p&gt;

&lt;p&gt;The current revision is &lt;strong&gt;2026-07-28&lt;/strong&gt;, which moved the base protocol to stateless, self-contained requests with per-request capability negotiation.&lt;/p&gt;

&lt;p&gt;That matters for deployment. Stateless servers scale horizontally without sticky sessions, which the older session-bound transport required.&lt;/p&gt;

&lt;p&gt;The critical property: &lt;strong&gt;an MCP server does something.&lt;/strong&gt; It queries Postgres, hits the Stripe API, reads a file. A Skill cannot do any of that on its own.&lt;/p&gt;

&lt;h3&gt;
  
  
  The context cost nobody warns you about
&lt;/h3&gt;

&lt;p&gt;Most MCP clients load &lt;strong&gt;every connected server's full tool list into the system prompt at session start&lt;/strong&gt;. Names, descriptions and complete input schemas.&lt;/p&gt;

&lt;p&gt;Connect eight servers with fifteen tools each and you have spent a serious chunk of the context window before the user types anything.&lt;/p&gt;

&lt;p&gt;This is the single strongest practical argument for Skills. It is also why tool description quality is worth obsessing over.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Not sure how much context your MCP server is costing?&lt;/strong&gt; Connect it in the browser, see every tool schema the model receives, and watch a real model decide which one to call.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/mcp-test-server" rel="noopener noreferrer"&gt;Test any MCP server free →&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/mcp-token-counter" rel="noopener noreferrer"&gt;Count your tool-schema tokens →&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Is Function Calling?
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Function calling&lt;/em&gt; is a model capability, not a protocol. You pass JSON schemas in the API request and the model returns a structured call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You still write every piece of plumbing.&lt;/strong&gt; Execution, auth, retries, error shaping, and a new adapter for each provider you support.&lt;/p&gt;

&lt;p&gt;There is no discovery. The model cannot ask what tools exist — you hand it the list on every request.&lt;/p&gt;

&lt;p&gt;Function calling is the right choice when &lt;strong&gt;one app talks to one provider and owns all its tools&lt;/strong&gt;. Adding MCP there is pure overhead.&lt;/p&gt;

&lt;p&gt;It is the wrong choice the moment a second client needs the same tools.&lt;/p&gt;

&lt;p&gt;Worth remembering: &lt;strong&gt;MCP does not replace function calling.&lt;/strong&gt; Under the hood an MCP client still converts tools into function-calling schemas for the model.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is A2A?
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;A2A&lt;/em&gt; (Agent2Agent) connects agents to other agents. Google announced it in April 2025 and donated it to the Linux Foundation that June.&lt;/p&gt;

&lt;p&gt;An agent publishes an &lt;strong&gt;Agent Card&lt;/strong&gt; at a well-known URL describing its skills, endpoint and auth. Other agents read it to decide whether to delegate.&lt;/p&gt;

&lt;p&gt;Note the collision: A2A uses the word "skills" for advertised agent capabilities. &lt;strong&gt;Those are not Agent Skills as in &lt;code&gt;SKILL.md&lt;/code&gt;.&lt;/strong&gt; Different concept, same word.&lt;/p&gt;

&lt;p&gt;The axis is what separates them. &lt;strong&gt;MCP is vertical, agent down to tools. A2A is horizontal, agent across to agents.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent Skills vs MCP: The Real Difference
&lt;/h2&gt;

&lt;p&gt;Strip everything else away and it comes down to one line.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;MCP gives an agent a capability it did not have. A Skill gives an agent judgment it did not have.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ask one question about your use case: &lt;strong&gt;does the agent need to reach a system it cannot currently reach?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes means MCP. The agent has no path to your warehouse, your ticketing system, your internal API.&lt;/p&gt;

&lt;p&gt;No means a Skill. The agent already has the tools — it just does not know your process, your naming conventions, your review checklist.&lt;/p&gt;

&lt;h3&gt;
  
  
  Four differences that show up in production
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Context cost.&lt;/strong&gt; Skills load metadata first, body on demand. MCP tool schemas load in full, up front, whether used or not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Operations.&lt;/strong&gt; A Skill is Markdown in git. An MCP server is running software with uptime, tokens, versioning and a protocol to track.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Failure mode.&lt;/strong&gt; A bad Skill produces bad output you can read and fix. A broken MCP server produces timeouts, 401s and &lt;code&gt;-32602&lt;/code&gt; errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security surface.&lt;/strong&gt; A Skill runs bundled scripts with your agent's permissions. An MCP server is an external system that can return prompt-injection payloads in tool results.&lt;/p&gt;

&lt;p&gt;Neither is safe by default. &lt;strong&gt;Both need review before you point an autonomous agent at them.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ Skills are executable, not documentation.&lt;/strong&gt; A skill can bundle scripts and declare &lt;code&gt;allowed-tools&lt;/code&gt; to pre-approve them. Installing a skill from a public marketplace is closer to installing an npm package than reading a README. Audit it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Side-by-Side Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Agent Skills&lt;/th&gt;
&lt;th&gt;MCP&lt;/th&gt;
&lt;th&gt;Function calling&lt;/th&gt;
&lt;th&gt;A2A&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Provides&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Procedural knowledge&lt;/td&gt;
&lt;td&gt;Live system access&lt;/td&gt;
&lt;td&gt;Structured intent&lt;/td&gt;
&lt;td&gt;Delegation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Artifact&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;SKILL.md&lt;/code&gt; folder&lt;/td&gt;
&lt;td&gt;Server process&lt;/td&gt;
&lt;td&gt;JSON schema&lt;/td&gt;
&lt;td&gt;Agent Card + endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Context cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~100 tokens idle&lt;/td&gt;
&lt;td&gt;Full schemas, always&lt;/td&gt;
&lt;td&gt;Full schemas, always&lt;/td&gt;
&lt;td&gt;Card only, on discovery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Needs hosting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Your app&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cross-vendor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes, 40+ clients&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No, per provider&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Governance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Open spec, agentskills.io&lt;/td&gt;
&lt;td&gt;Linux Foundation&lt;/td&gt;
&lt;td&gt;Each model vendor&lt;/td&gt;
&lt;td&gt;Linux Foundation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Repeatable workflows&lt;/td&gt;
&lt;td&gt;Shared integrations&lt;/td&gt;
&lt;td&gt;Single-app tools&lt;/td&gt;
&lt;td&gt;Multi-agent systems&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When to Use Each
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Build an Agent Skill when…
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The task is &lt;strong&gt;process and judgment&lt;/strong&gt;, not access — a code review checklist, a brand style guide, a postmortem format.&lt;/li&gt;
&lt;li&gt;You keep pasting the same instructions into chat.&lt;/li&gt;
&lt;li&gt;The agent already has the tools and just applies them wrongly.&lt;/li&gt;
&lt;li&gt;You want the same behaviour across Claude Code, Codex and Cursor without maintaining three configs.&lt;/li&gt;
&lt;li&gt;The knowledge changes often and non-engineers should be able to edit it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Build an MCP server when…
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The agent needs &lt;strong&gt;live data or a real side effect&lt;/strong&gt; — a query, a write, a deploy.&lt;/li&gt;
&lt;li&gt;Access requires credentials the agent must not see in plaintext.&lt;/li&gt;
&lt;li&gt;Multiple clients or teams need the same integration.&lt;/li&gt;
&lt;li&gt;You need an audit trail of every call.&lt;/li&gt;
&lt;li&gt;You are exposing your product to customers' agents.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Use plain function calling when…
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;One app, one model provider, three or four tools you fully own.&lt;/li&gt;
&lt;li&gt;Nothing external will ever consume those tools.&lt;/li&gt;
&lt;li&gt;You want the smallest possible dependency footprint.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Reach for A2A when…
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Independent agents, owned by &lt;strong&gt;different teams or vendors&lt;/strong&gt;, must hand work to each other.&lt;/li&gt;
&lt;li&gt;The remote side should stay a black box, exposing outcomes rather than tools.&lt;/li&gt;
&lt;li&gt;Tasks are long-running and need their own status lifecycle.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Skills over MCP: The Two Standards Are Converging
&lt;/h2&gt;

&lt;p&gt;Here is what most comparison posts miss. &lt;strong&gt;MCP is absorbing skills as a first-class concept.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;Skills over MCP&lt;/em&gt; effort started as an interest group in February 2026 and became a full working group on 16 April 2026.&lt;/p&gt;

&lt;p&gt;It is co-led by maintainers from Nordstrom and Anthropic, with participants from Google, GitHub, AWS, Databricks, Bloomberg and Saxo Bank.&lt;/p&gt;

&lt;p&gt;The current direction is &lt;strong&gt;&lt;a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2640" rel="noopener noreferrer"&gt;SEP-2640&lt;/a&gt;, a Skills Extension built on MCP's existing Resources primitive&lt;/strong&gt;, on the Extensions Track rather than the core spec.&lt;/p&gt;

&lt;p&gt;The practical result: an MCP server will be able to ship &lt;strong&gt;both the tools and the instructions for using them&lt;/strong&gt;, discovered through one connection.&lt;/p&gt;

&lt;p&gt;That is a real shift. Today you install a Postgres MCP server and separately write a Skill explaining your schema conventions.&lt;/p&gt;

&lt;p&gt;Under the extension, the server hands over both. &lt;strong&gt;Progressive disclosure, currently a Skills-only property, comes to MCP.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is still in review, so do not build on it yet. But it settles the strategic question — &lt;strong&gt;Skills and MCP were never going to be rivals&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;MCP already has precedent for this pattern. Tasks and MCP Apps landed the same way, as opt-in extensions negotiated at initialization.&lt;/p&gt;

&lt;h2&gt;
  
  
  One Real Stack, All Four
&lt;/h2&gt;

&lt;p&gt;Take a support-triage agent I would actually build. Every layer earns its place.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;MCP&lt;/strong&gt; connects it to Linear, Sentry and Postgres. That is how it reads the ticket, the stack trace and the affected rows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An Agent Skill&lt;/strong&gt; holds your triage policy — severity ladder, escalation thresholds, the exact template your team expects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Function calling&lt;/strong&gt; happens invisibly underneath, when the model emits the structured call your MCP client executes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A2A&lt;/strong&gt; delegates anything billing-related to the finance team's agent, which owns credentials you should never hold.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Remove the Skill and the agent files sloppy, inconsistent tickets. &lt;strong&gt;Remove MCP and it cannot see the incident at all.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That asymmetry is the answer to the whole debate. They fail differently because they do different jobs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five Expensive Mistakes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Wrapping documentation in an MCP server.&lt;/strong&gt; If the tool just returns static text, it should have been a Skill. You are paying schema tokens for a Markdown file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Expecting a Skill to fetch live data.&lt;/strong&gt; A Skill has no network of its own. It can only tell the agent to use tools the agent already has.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Writing vague descriptions.&lt;/strong&gt; The &lt;code&gt;description&lt;/code&gt; field is the entire retrieval signal. "Helps with PDFs" will never fire; naming the trigger conditions will.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Connecting every MCP server you find.&lt;/strong&gt; Tool schemas compound. Eight servers of marginal value can crowd out the two that matter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Shipping either one untested.&lt;/strong&gt; Teams test the model and skip the tool layer. Then a renamed parameter breaks production silently.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Test the MCP Layer
&lt;/h2&gt;

&lt;p&gt;Skills are easy to review — they are Markdown, you read them. &lt;strong&gt;The MCP layer is where things break quietly.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I use MCP Playground for this. Paste a server URL, see every tool and schema the model would receive, then let a real model try to call them.&lt;/p&gt;

&lt;p&gt;That last part matters. A server that passes &lt;code&gt;tools/list&lt;/code&gt; can still confuse a model into never calling the right tool. Only a live model run reveals that.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Skills are Markdown. Your MCP server is production software.&lt;/strong&gt; Test it against Claude, GPT and Gemini in the browser — no install, no config file, no local setup.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/mcp-test-server" rel="noopener noreferrer"&gt;Test any MCP server free →&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;Chat with your server in Agent Studio →&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Decision, In One Paragraph
&lt;/h2&gt;

&lt;p&gt;Ask whether the gap is knowledge or access. &lt;strong&gt;Knowledge gaps are Skills. Access gaps are MCP servers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Keep function calling for single-app tools you own outright, and reach for A2A only when a separate team's agent owns the work.&lt;/p&gt;

&lt;p&gt;Then test the layer that can actually fail at runtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Do Agent Skills replace MCP?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Skills package procedural knowledge as a &lt;code&gt;SKILL.md&lt;/code&gt; folder with no runtime; MCP is a live client-server protocol that gives an agent access to external systems. A skill cannot query a database or call an API on its own. Most production agents use both, and the Skills over MCP working group is standardising a Skills Extension so one server can deliver tools and instructions together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which is cheaper on context, a Skill or an MCP server?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A skill, by a wide margin, when idle. Skills use progressive disclosure: only the name and description load at startup, roughly 100 tokens each, and the full body loads only when the task matches. Most MCP clients load every connected server's complete tool schemas into the system prompt at session start, whether or not those tools are ever used.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are Agent Skills Claude-only?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Anthropic released the format as an open standard on 18 December 2025 at agentskills.io. The same &lt;code&gt;SKILL.md&lt;/code&gt; folder is read by Claude and Claude Code, ChatGPT and Codex, Cursor, GitHub Copilot, VS Code, Gemini CLI, JetBrains Junie, AWS Kiro, Block Goose and roughly forty other clients listed on the official showcase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is MCP just function calling with extra steps?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No, though MCP sits on top of function calling. Function calling is a model capability: you pass JSON schemas per request and write all the execution, auth and error handling yourself, per provider. MCP standardises discovery, transport, auth and execution so one server works with any MCP client. An MCP client still converts tools into function-calling schemas before sending them to the model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are the required fields in a SKILL.md file?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Two: &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;description&lt;/code&gt;. The name is max 64 characters, lowercase letters, numbers and single hyphens, and must match the parent directory name. The description is max 1024 characters and should state both what the skill does and when to use it. Optional fields are &lt;code&gt;license&lt;/code&gt;, &lt;code&gt;compatibility&lt;/code&gt;, &lt;code&gt;metadata&lt;/code&gt; and the experimental &lt;code&gt;allowed-tools&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are the "skills" in an A2A Agent Card the same as Agent Skills?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No, and the naming collision causes real confusion. A2A skills are capability advertisements inside an Agent Card, telling other agents what a remote agent can do. Agent Skills are &lt;code&gt;SKILL.md&lt;/code&gt; folders of instructions loaded into a single agent's context. Different specs, different purposes, same English word.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I test a Skill and an MCP server the same way?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not really. A skill is Markdown, so review is reading it and running the agent against sample tasks. An MCP server is running software with a wire protocol, so it needs connection, handshake, tool schema and error testing against a real model. A browser tester such as MCP Playground covers the second case without any local setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related Guides
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/what-is-model-context-protocol" rel="noopener noreferrer"&gt;What Is the Model Context Protocol (MCP)? A Developer's Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/mcp-vs-function-calling-vs-api-comparison" rel="noopener noreferrer"&gt;MCP vs Function Calling vs REST APIs: When to Use Each&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/mcp-vs-a2a-agent2agent-protocol" rel="noopener noreferrer"&gt;MCP vs A2A: Model Context Protocol vs Agent2Agent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/ai-agent-mcp-explained" rel="noopener noreferrer"&gt;AI Agent + MCP Explained: What Every Developer Needs to Know&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/what-is-mcp-agent-tool-calling" rel="noopener noreferrer"&gt;What Is an MCP Agent? Tool Calling Explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/migrate-mcp-server-2026-07-28-stateless" rel="noopener noreferrer"&gt;Migrating to the 2026-07-28 Stateless MCP Spec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/what-is-an-mcp-eval" rel="noopener noreferrer"&gt;What Is an MCP Eval, and Why You Need One&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://agentskills.io/specification" rel="noopener noreferrer"&gt;Official: Agent Skills Specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/agentskills/agentskills" rel="noopener noreferrer"&gt;Agent Skills spec and reference library on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.claude.com/docs/en/skills" rel="noopener noreferrer"&gt;Claude Code: Extend Claude with skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/skills/" rel="noopener noreferrer"&gt;OpenAI Codex: Skills documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://modelcontextprotocol.io/specification/latest" rel="noopener noreferrer"&gt;Official: MCP Specification (2026-07-28)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://modelcontextprotocol.io/community/working-groups/skills-over-mcp" rel="noopener noreferrer"&gt;MCP: Skills over MCP Working Group charter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2640" rel="noopener noreferrer"&gt;SEP-2640: Skills Extension proposal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://a2a-protocol.org/" rel="noopener noreferrer"&gt;Official: A2A Protocol Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://mcpplaygroundonline.com/blog/agent-skills-vs-mcp" rel="noopener noreferrer"&gt;MCP Playground&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>agents</category>
      <category>llm</category>
    </item>
    <item>
      <title>What Is an MCP Eval? Why Your Server Passes Every Test and Still Fails</title>
      <dc:creator>Rupa Tiwari</dc:creator>
      <pubDate>Mon, 17 Aug 2026 12:10:05 +0000</pubDate>
      <link>https://dev.to/rupa_tiwari_dd308948d710f/what-is-an-mcp-eval-why-your-server-passes-every-test-and-still-fails-41gf</link>
      <guid>https://dev.to/rupa_tiwari_dd308948d710f/what-is-an-mcp-eval-why-your-server-passes-every-test-and-still-fails-41gf</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;📖 TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;An MCP eval is a realistic task a model must complete using only your server's tools&lt;/strong&gt; not an assertion about one call.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A test asks "did the call work?". An eval asks "could an agent get the right answer?"&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The signature failure is an answer that is wrong even though every call returned 200.&lt;/strong&gt; No inspector catches it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;There are four useful outcomes&lt;/strong&gt;: pass, wrong answer, too many calls, and untestable. The last one is not a failure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evals are not deterministic&lt;/strong&gt;, and pretending otherwise is how you get a number you cannot trust.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Call count degrades before pass rate does&lt;/strong&gt;, which makes it the earlier warning signal.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;You built an MCP server. The handshake works, every tool returns valid JSON, your integration tests are green. Then someone connects it to Claude and it is useless.&lt;/p&gt;

&lt;p&gt;That gap has a name now. &lt;strong&gt;An MCP eval is what closes it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The distinction is simple once you see it. Your test suite proves the protocol works. It says nothing about whether a model can use what you built.&lt;/p&gt;

&lt;p&gt;Those are genuinely different questions, and only one of them is the reason your server exists.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://modelcontextprotocol.io/" rel="noopener noreferrer"&gt;MCP specification&lt;/a&gt; has nothing to say about the second one, and it should not — conformance is not usability. The &lt;a href="https://blog.modelcontextprotocol.io/posts/2026-07-28/" rel="noopener noreferrer"&gt;2026-07-28 release&lt;/a&gt; tightened the protocol considerably and did not change this at all.&lt;/p&gt;

&lt;p&gt;I have spent the last few months building an eval engine for arbitrary MCP servers. This post covers what an eval is, the four outcomes worth distinguishing, why the results are non-deterministic, and when you should bother.&lt;/p&gt;

&lt;h2&gt;
  
  
  What an MCP Eval Actually Is
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;An MCP eval is a task, phrased the way a user would ask it, that a model has to complete using only your server's tools.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not an assertion. Not a mocked conversation. A question, and a score for whether the model got there.&lt;/p&gt;

&lt;p&gt;A test looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;callTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;list_issues&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;open&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An eval looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Task:        "Which open issue in the billing project has been
              waiting longest, and who is it assigned to?"
Budget:      4 tool calls
Expectation: names a specific issue and an assignee
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nothing in the eval names a tool. &lt;strong&gt;Choosing the tool is the thing being tested.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The model gets your tool list, your descriptions and your schemas, and has to work out the rest. That is exactly what happens in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP Eval vs Testing vs Inspecting
&lt;/h2&gt;

&lt;p&gt;These three get used interchangeably and they measure different things.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Answers&lt;/th&gt;
&lt;th&gt;Misses&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inspecting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Does the handshake succeed? Do tools list?&lt;/td&gt;
&lt;td&gt;Everything about usability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Testing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Does this call, with these args, return what I expect?&lt;/td&gt;
&lt;td&gt;Whether a model would ever make that call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Evaluating&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Can an agent reach the right answer from my descriptions?&lt;/td&gt;
&lt;td&gt;Determinism, exhaustive coverage&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The key structural point: &lt;strong&gt;when you write a test, you have already made the choice the model has to make.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You picked the tool. You picked the arguments. You skipped the only step that can fail in the way that matters.&lt;/p&gt;

&lt;p&gt;All three are worth having. &lt;a href="https://mcpplaygroundonline.com/blog/how-to-test-mcp-servers-step-by-step" rel="noopener noreferrer"&gt;Testing catches protocol and correctness bugs&lt;/a&gt;, and it is faster and cheaper than an eval. Evals catch a class of defect testing structurally cannot reach.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Failure That Has No Red Log Line
&lt;/h2&gt;

&lt;p&gt;Here is the scenario that made me build this.&lt;/p&gt;

&lt;p&gt;A docs server exposes &lt;code&gt;search&lt;/code&gt; and &lt;code&gt;get_page&lt;/code&gt;. A user asks which regions a product supports.&lt;/p&gt;

&lt;p&gt;The agent calls &lt;code&gt;search("regions")&lt;/code&gt;. It gets back five ranked results. It calls &lt;code&gt;get_page&lt;/code&gt; on the first one. That page mentions two regions in an example snippet.&lt;/p&gt;

&lt;p&gt;The agent answers: "It supports us-east and eu-west."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every call succeeded.&lt;/strong&gt; Valid JSON, no errors, no timeouts. Your logs are clean and your dashboard is green.&lt;/p&gt;

&lt;p&gt;The real answer was eleven regions, listed on a page the search ranked fourth.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;This is the defect evals exist to find&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A wrong answer produced entirely from successful calls. There is no error to catch, no exception to log, no status code to alert on. &lt;strong&gt;The only way to detect it is to check the answer.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nothing in your stack is lying. The protocol worked perfectly. The server was just hard to use, and the model did what it could.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Four Outcomes and What Each One Means
&lt;/h2&gt;

&lt;p&gt;A binary pass/fail throws away most of the signal. Four outcomes are worth distinguishing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pass
&lt;/h3&gt;

&lt;p&gt;The agent answered, stayed within its call budget, and the answer was correct. &lt;strong&gt;This is the only outcome that requires judging content&lt;/strong&gt;, which means it is the only one a model decides.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wrong Answer
&lt;/h3&gt;

&lt;p&gt;The agent produced an answer and it was not right. Either it could not find the information, or your tools gave it something misleading.&lt;/p&gt;

&lt;p&gt;This is the outcome from the scenario above, and it is the most valuable one an eval produces.&lt;/p&gt;

&lt;h3&gt;
  
  
  Too Many Calls
&lt;/h3&gt;

&lt;p&gt;The agent got there, but it took eight calls when the budget was four. &lt;strong&gt;This is the tool-description signal&lt;/strong&gt;, and it is the one to watch over time.&lt;/p&gt;

&lt;p&gt;The agent was guessing. It tried a tool, got something unhelpful, tried another. Every one of those calls cost you latency, tokens and — if your API is metered — money.&lt;/p&gt;

&lt;p&gt;Call count degrades before pass rate does. A task that passed in two calls last month and passes in six today is a regression, even though the number in the pass column did not move.&lt;/p&gt;

&lt;p&gt;I covered the root cause of this in &lt;a href="https://mcpplaygroundonline.com/blog/mcp-tool-description-quality" rel="noopener noreferrer"&gt;why 97% of MCP tool descriptions are broken&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Untestable
&lt;/h3&gt;

&lt;p&gt;Something outside your server broke. The connection dropped, the driver model rate-limited, the harness fell over.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is not a failure and it must never be counted as one.&lt;/strong&gt; It gets its own bucket for a reason I will come to.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;See a finished eval run&lt;/strong&gt; — tools detected, tasks written against them, a model made to complete each one, and a report showing where it went wrong. No sign-up: &lt;a href="https://mcpplaygroundonline.com/mcp-evals" rel="noopener noreferrer"&gt;Walk through MCP Evals →&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why "Untestable" Deserves Its Own Outcome
&lt;/h2&gt;

&lt;p&gt;This is the design decision I would defend hardest, and it took me a while to get right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A failure only means something if you know the input was valid.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Say an eval calls &lt;code&gt;get_issue("PROJ-4821")&lt;/code&gt; and gets a 404. Is that a defect in your server?&lt;/p&gt;

&lt;p&gt;It depends entirely on where that ID came from.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;If &lt;code&gt;list_issues&lt;/code&gt; returned it a second earlier&lt;/strong&gt;, the ID demonstrably exists and your server cannot fetch it. That is a confirmed defect, with both calls as evidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If a model invented it&lt;/strong&gt;, a 404 proves nothing. The issue probably just does not exist.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same error code, opposite meaning. &lt;strong&gt;The only thing that separates them is provenance.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is why a serious eval engine harvests real values from your server before planning anything that needs them. Failures on harvested values are defects. Failures on invented values are untestable.&lt;/p&gt;

&lt;p&gt;Collapsing those two into "fail" gives you a report full of noise that developers correctly learn to ignore.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evals Are Not Deterministic — and That Is Fine
&lt;/h2&gt;

&lt;p&gt;Models write the tasks. A model drives the tools. A model grades the answer. &lt;strong&gt;Run the same suite twice and you can get different numbers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;People find this disqualifying. I think that reaction comes from expecting an eval to be a test, which it is not.&lt;/p&gt;

&lt;p&gt;The research benchmarks live with the same constraint. &lt;a href="https://arxiv.org/abs/2602.00933" rel="noopener noreferrer"&gt;MCP-Atlas&lt;/a&gt; grades 1,000 tasks across 36 real servers using a rubric-driven judge, and &lt;a href="https://openreview.net/forum?id=fe8mzHwMxN" rel="noopener noreferrer"&gt;MCP-Bench&lt;/a&gt; pairs rule-based checks with LLM scoring for exactly this reason. &lt;strong&gt;Nobody has found a way to make this deterministic&lt;/strong&gt;, because the thing being measured is not.&lt;/p&gt;

&lt;p&gt;An eval is &lt;em&gt;evidence about how an agent behaves against your server&lt;/em&gt;. It is not a pass/fail certificate, and any tool that presents it as one is overselling.&lt;/p&gt;

&lt;p&gt;Two rules make non-determinism workable:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reproduce before you act.&lt;/strong&gt; A single failure is a lead, not a finding. Run it again. A defect that reproduces is real; one that does not is variance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read the transcript, not the score.&lt;/strong&gt; The number tells you where to look. The transcript — which tools were called, with what arguments, what came back — tells you whether the verdict was fair.&lt;/p&gt;

&lt;p&gt;There is a third rule I only arrived at by getting it wrong: &lt;strong&gt;the grader must fail open.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the judge model errors out or returns nothing for an item, that item stays passing. A missing verdict is not evidence of a defect. Failing closed would let an unrelated API hiccup invent bugs in your server.&lt;/p&gt;

&lt;h2&gt;
  
  
  When You Need Evals, and When You Do Not
&lt;/h2&gt;

&lt;p&gt;Evals cost model calls. They are slower and pricier than tests. Some servers do not need them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Worth it when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More than about 8 tools&lt;/li&gt;
&lt;li&gt;Two or more tools that do similar things&lt;/li&gt;
&lt;li&gt;You are about to rewrite descriptions&lt;/li&gt;
&lt;li&gt;You ship to users you cannot observe&lt;/li&gt;
&lt;li&gt;You support multiple client models&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Probably not yet when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Two or three unambiguous tools&lt;/li&gt;
&lt;li&gt;Internal server, one known caller&lt;/li&gt;
&lt;li&gt;Still fixing protocol-level bugs&lt;/li&gt;
&lt;li&gt;No tool annotations declared yet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one matters more than it looks. &lt;strong&gt;Fix your annotations before you run evals&lt;/strong&gt;, or safe tooling will skip most of your tools. The &lt;a href="https://github.com/modelcontextprotocol/modelcontextprotocol" rel="noopener noreferrer"&gt;spec repository&lt;/a&gt; documents all three hints, and they take minutes to add.&lt;/p&gt;

&lt;p&gt;An eval calls tools with arguments designed to succeed. An unannotated &lt;code&gt;delete_record&lt;/code&gt; would really delete a record, so anything responsible has to treat unannotated tools as destructive.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Run Your First One
&lt;/h2&gt;

&lt;p&gt;Start smaller than you think.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick your three most-used tools.&lt;/strong&gt; Write three tasks a real user would ask, in their words, with no tool names in them.&lt;/p&gt;

&lt;p&gt;Connect a model to your server and give it each task. &lt;a href="https://mcpplaygroundonline.com/blog/testing-mcp-servers-with-real-ai-models" rel="noopener noreferrer"&gt;Any of the models available in the browser&lt;/a&gt; will do for a first pass — you do not need a harness to learn something.&lt;/p&gt;

&lt;p&gt;Watch three things: did it answer, was the answer right, and how many calls did it take.&lt;/p&gt;

&lt;p&gt;You will almost always find one of two things. A tool the model never reaches for, or a pair it keeps confusing. Both are description problems, and both are fixable in an afternoon.&lt;/p&gt;

&lt;p&gt;Once that loop is useful, make it repeatable so a description change gets checked instead of hoped about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is an MCP eval?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An MCP eval is a task a model has to complete using only your MCP server's tools. Rather than checking that a tool returns HTTP 200, it checks whether an agent can work out which tool to call from your names and descriptions, and whether the answer it produces is correct.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is this different from testing with an MCP client?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A client tells you the protocol works — the handshake succeeds, the schema validates, the call returns. An eval tells you the server is usable: that a model given your tools can reach the right answer without burning calls guessing. The most common failure it finds is an answer that is wrong even though every call succeeded.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are MCP eval results deterministic?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Models write, drive and grade the evals, so the same suite can come out differently on a second run. Results are evidence about how an agent behaves against your server, not a fixed pass/fail certificate. Reproduce a failure before acting on it, and read the transcript rather than the score.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do MCP evals replace my test suite?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Tests are faster, cheaper and deterministic, and they catch protocol and correctness bugs an eval would waste money rediscovering. Evals catch a different class of defect that tests structurally cannot reach. Run both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does an untestable eval outcome mean?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It means something outside your server broke — the connection dropped, the driver model rate-limited, or the harness failed. It is not a failure and must not be counted as one. Separating untestable from failed is what keeps an eval report free of noise developers learn to ignore.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which eval outcome should I watch most closely over time?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Call count. A task that passed in two calls last month and passes in six today is a regression even though the pass column did not move. Call count degrades before pass rate does, which makes it the earliest signal that tool descriptions have drifted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why do missing tool annotations matter for MCP evals?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A functional eval calls tools with arguments designed to succeed, so an unannotated destructive tool would really run. Safe tooling has to treat an unannotated tool as destructive and skip it. Declaring &lt;code&gt;readOnlyHint&lt;/code&gt;, &lt;code&gt;idempotentHint&lt;/code&gt; and &lt;code&gt;destructiveHint&lt;/code&gt; buys back that test coverage.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Short Version
&lt;/h2&gt;

&lt;p&gt;A test proves your server responds. &lt;strong&gt;An eval proves it can be used.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The gap between those is where the expensive failures live — wrong answers assembled from successful calls, and agents burning four extra calls because two of your tools read alike.&lt;/p&gt;

&lt;p&gt;Start with three tasks and three tools. Watch the call count as closely as the pass rate. Reproduce before you act.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Try it on a real server.&lt;/strong&gt; Connect any MCP server in the browser and give a real model a task. No install, no config file.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/mcp-test-server" rel="noopener noreferrer"&gt;Test any MCP server free →&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/mcp-evals" rel="noopener noreferrer"&gt;See MCP Evals →&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Related Guides
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/what-is-model-context-protocol" rel="noopener noreferrer"&gt;What Is the Model Context Protocol (MCP)? A Developer's Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/what-is-mcp-agent-tool-calling" rel="noopener noreferrer"&gt;What Is an MCP Agent? Tool Calling Explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/how-to-test-mcp-servers-step-by-step" rel="noopener noreferrer"&gt;How to Test MCP Servers Step by Step&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/best-ai-model-for-mcp-tool-calling" rel="noopener noreferrer"&gt;Which Model Is Best at MCP Tool Calling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/how-to-test-ai-agent-with-mcp" rel="noopener noreferrer"&gt;Testing an AI Agent Without Burning Tokens&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/mcp-tool-description-quality" rel="noopener noreferrer"&gt;Why 97% of MCP Tool Descriptions Are Broken&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://modelcontextprotocol.io/specification" rel="noopener noreferrer"&gt;Official: MCP Specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.modelcontextprotocol.io/posts/2026-07-28/" rel="noopener noreferrer"&gt;Official: MCP 2026-07-28 Release Notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/modelcontextprotocol/modelcontextprotocol" rel="noopener noreferrer"&gt;MCP Specification Repository (tool annotations)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2602.00933" rel="noopener noreferrer"&gt;MCP-Atlas: Grading Tool Use Across Real Servers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openreview.net/forum?id=fe8mzHwMxN" rel="noopener noreferrer"&gt;MCP-Bench on OpenReview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://mcpplaygroundonline.com/blog/what-is-an-mcp-eval" rel="noopener noreferrer"&gt;MCP Playground&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>testing</category>
      <category>llm</category>
    </item>
    <item>
      <title>Meta's Muse Models and MCP: What the Benchmarks Actually Say</title>
      <dc:creator>Rupa Tiwari</dc:creator>
      <pubDate>Tue, 11 Aug 2026 15:22:54 +0000</pubDate>
      <link>https://dev.to/rupa_tiwari_dd308948d710f/metas-muse-models-and-mcp-what-the-benchmarks-actually-say-17fg</link>
      <guid>https://dev.to/rupa_tiwari_dd308948d710f/metas-muse-models-and-mcp-what-the-benchmarks-actually-say-17fg</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;📖 TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Muse Spark 1.1 ranks #1 on Scale AI's MCP-Atlas leaderboard at 88.1%&lt;/strong&gt; — ahead of Claude Opus 5 (85.8%) and Claude Fable 5 (83.3%).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Muse Glimmer 30B is Apache 2.0 and runs locally&lt;/strong&gt; — under 20GB at 4-bit, so it fits a 24GB machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Glimmer is distilled from Spark&lt;/strong&gt; via logit distillation. Teacher and student, not two sizes of one model.&lt;/li&gt;
&lt;li&gt;Meta reports &lt;strong&gt;75.5 on MCP-Atlas for Glimmer&lt;/strong&gt; vs 62.5 (Qwen3.6-27B) and 54.2 (Gemma4-31B) — a vendor figure, not a leaderboard entry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Glimmer loses badly at terminal and desktop control.&lt;/strong&gt; Qwen wins TerminalBench 2.1 60.7 to 51.7 and OSWorld-Verified 75.6 to 65.9.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Neither model's tool-calling wire format is documented.&lt;/strong&gt; Through OpenRouter both are OpenAI-shaped function callers.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Meta shipped two models a week apart in August 2026, and the relationship between them is the story. Muse Spark 1.2 is closed, API-only, with a million-token context. Muse Glimmer 30B is Apache 2.0, open-weights, and distilled from Spark — it runs on a single consumer GPU.&lt;/p&gt;

&lt;p&gt;If you build on MCP, the student is the more interesting release. Here is why, and where the marketing stops matching the data.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP-Atlas is a real benchmark, and Muse tops it
&lt;/h2&gt;

&lt;p&gt;Most launches give you MMLU and a coding score. Neither predicts whether a model will drive your MCP server without mangling arguments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP-Atlas&lt;/strong&gt; is different. It is Scale AI's benchmark, built specifically for Model Context Protocol tool use: &lt;strong&gt;1,000 tasks across 36 real MCP servers and 220 tools&lt;/strong&gt;, three to six tool calls per task. The model has to discover the right tool from a limited set, call it with correct parameters, handle errors, coordinate across servers, and synthesise an answer.&lt;/p&gt;

&lt;p&gt;On Scale's public leaderboard:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Pass rate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Muse Spark 1.1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;88.1%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;claude-opus-5 (xhigh)&lt;/td&gt;
&lt;td&gt;85.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;gemini-3.5-flash (high)&lt;/td&gt;
&lt;td&gt;83.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Claude Fable 5&lt;/td&gt;
&lt;td&gt;83.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;kimi-k3 (max)&lt;/td&gt;
&lt;td&gt;82.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;claude-opus-4-8 (max)&lt;/td&gt;
&lt;td&gt;82.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two caveats, both load-bearing. The leaderboard was last updated &lt;strong&gt;April 2026&lt;/strong&gt;, so the ranked entry is &lt;strong&gt;Spark 1.1, not 1.2&lt;/strong&gt;. And Glimmer, which launched in August, is not on it at all. This is evidence the Muse line is strong at MCP work — not a verified score for the build you are calling today.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Meta reports for Glimmer
&lt;/h2&gt;

&lt;p&gt;Glimmer's numbers are from Meta's own launch table, so read them as a vendor comparison. Conditions matter: &lt;strong&gt;Glimmer at High Reasoning, the rivals in Thinking Mode.&lt;/strong&gt; All best-effort configurations, not defaults.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Muse Glimmer-30B&lt;/th&gt;
&lt;th&gt;Qwen3.6-27B&lt;/th&gt;
&lt;th&gt;Gemma4-31B&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MCP Atlas&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;75.5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;62.5&lt;/td&gt;
&lt;td&gt;54.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DeepSearch QA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;74.6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;71.1&lt;/td&gt;
&lt;td&gt;61.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;τ²-Banking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;23.5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;16.7&lt;/td&gt;
&lt;td&gt;15.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GAIA2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;43.3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;40.0&lt;/td&gt;
&lt;td&gt;36.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SWE-Bench Pro&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;51.2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;50.2&lt;/td&gt;
&lt;td&gt;36.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SWE-Bench Verified&lt;/td&gt;
&lt;td&gt;76.0&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;77.2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;66.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TerminalBench 2.1&lt;/td&gt;
&lt;td&gt;51.7&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;60.7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;43.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OSWorld-Verified&lt;/td&gt;
&lt;td&gt;65.9&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;75.6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;58.5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pattern is sharper than "Glimmer wins."&lt;/p&gt;

&lt;p&gt;Glimmer's advantage is &lt;strong&gt;protocol-shaped agentic work&lt;/strong&gt; — discovering tools, invoking schemas correctly across a long workflow, recovering from failures. On MCP-Atlas the gap over Qwen is 13 points; on τ²-Banking it is a rout.&lt;/p&gt;

&lt;p&gt;But Qwen3.6-27B takes SWE-Bench Verified, TerminalBench 2.1 and OSWorld-Verified, and those last two are not close. The honest reading: &lt;strong&gt;Glimmer is tuned for calling tools through a protocol, not for driving a terminal or a desktop.&lt;/strong&gt; Strong MCP results do not transfer to computer use.&lt;/p&gt;

&lt;h2&gt;
  
  
  The number nobody puts in a headline
&lt;/h2&gt;

&lt;p&gt;Meta also publishes safety results. On &lt;strong&gt;Siren AgentDojo&lt;/strong&gt;, a prompt-injection benchmark, Glimmer records a &lt;strong&gt;28.4% attack success rate&lt;/strong&gt; at 94.2 utility. Gemma4-31B is better at 25.6%; Qwen3.6-27B is worse at 40.3%.&lt;/p&gt;

&lt;p&gt;Lower is better, and none of these are comfortable. &lt;strong&gt;Roughly one in four injection attempts lands against the best of the three.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your MCP server returns content that originated outside your control — search results, file contents, third-party API responses — that content reaches the model, and these are the empirical odds it can steer it. Model choice moves the margin. It does not remove the problem. The controls that matter stay on your side of the boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Glimmer's architecture
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;dense causal transformer&lt;/strong&gt; — not MoE — at ~29.6B parameters including a 1.8B ViT-G/14 perception encoder. 52 layers, hidden dim 6,656, SwiGLU at 19,968 intermediate width.&lt;/p&gt;

&lt;p&gt;Two choices stand out if you plan to run it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GQA at 16:1&lt;/strong&gt; — 32 query heads against 2 KV heads. Aggressive, and it is what keeps the KV cache small enough for long agentic sessions on consumer memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A repeating [Local, Local, Local, Global] attention pattern&lt;/strong&gt; with a 2,048-token sliding window. Three cheap local layers per global one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Context is &lt;strong&gt;131,072 tokens by default, extendable to 262,144&lt;/strong&gt;. Sampling defaults are temperature 1.0, top_p 0.95, top_k 64 — carrying over a temperature 0.2 habit from another vendor is a real source of "it did worse for me."&lt;/p&gt;

&lt;p&gt;Full precision needs 55GB+. Quantized to ~4-bit it drops under 20GB, leaving headroom for KV cache and the perception encoder in a 24–32GB envelope. Meta reports "minimal to no degradation on agentic tasks" from that compression.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DFlash speculative decoding&lt;/strong&gt; ships with it: a lightweight drafter proposes token blocks, the main model verifies in parallel. Output quality is identical by construction; measured speedup is 3.1x on an RTX 5090, 1.8x on an M5 Max, 1.5x on an M4 Max.&lt;/p&gt;

&lt;p&gt;Runtimes at launch: Ollama, LM Studio, llama.cpp, MLX, ExecuTorch, vLLM, SGLang.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one claim worth testing yourself
&lt;/h2&gt;

&lt;p&gt;Meta describes three training phases — logit distillation from Spark in pre-training, extended-context agent data with reasoning traces in mid-training, then SFT blended with on-policy distillation and RL.&lt;/p&gt;

&lt;p&gt;Buried in that is the most falsifiable claim in the launch materials:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"When a tool call fails or returns an unexpected result, the model is trained to diagnose the error and retry rather than halt."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the behaviour separating a model you can leave running from one that needs a human every time an endpoint hiccups. And it takes one run to check: point the model at a server that deliberately returns errors, and watch whether it reads the error and adjusts its arguments, or apologises and stops.&lt;/p&gt;

&lt;h2&gt;
  
  
  Muse Spark 1.2, briefly
&lt;/h2&gt;

&lt;p&gt;Closed weights, API-only. &lt;strong&gt;1,048,576-token context&lt;/strong&gt;, ~131,072 output. Accepts text, images, video, audio and PDF.&lt;/p&gt;

&lt;p&gt;For agent builders: &lt;strong&gt;structured output, parallel function calling, configurable reasoning effort&lt;/strong&gt;, and explicit multi-agent support in either role — primary planner or parallel subagent. It leans on planning, goal conditioning and context compaction to hold direction through long tasks.&lt;/p&gt;

&lt;p&gt;Pricing is &lt;strong&gt;$1.25 / $4.25 per million&lt;/strong&gt; tokens. Note the cost shape: with most models, cost tracks how much work the model does. With a 1M-context model, cost tracks &lt;strong&gt;how much context you chose to send&lt;/strong&gt; — a 200k-token prompt is $0.25 before it writes a word. Compaction is a feature for a reason.&lt;/p&gt;

&lt;h2&gt;
  
  
  What nobody has published
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Meta has not documented the tool-calling wire format for either model.&lt;/strong&gt; The model card and developer pages assert reliable tool use and precise schema invocation, but no serialization is specified. The reference runtimes simply expose an OpenAI-compatible surface.&lt;/p&gt;

&lt;p&gt;So: routed through a provider, both models behave as &lt;strong&gt;OpenAI-shaped function callers&lt;/strong&gt;, the same path every non-Anthropic model takes. Any claim you read about how Muse specifically handles deeply nested arguments is currently &lt;strong&gt;untested rather than documented&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Which makes your own server the only authority that counts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which one
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Glimmer&lt;/strong&gt; when you want a model you can self-host, when tool calls must stay on your hardware, or when you are checking whether an open 30B is good enough to replace a frontier model on your tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spark 1.2&lt;/strong&gt; when the task genuinely needs the context or parallel function calling — whole-repository work, long debugging sessions, multi-agent orchestration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The distillation relationship is the mental model: Glimmer inherits Spark's agentic behaviour in a package you can run at home; Spark keeps the scale, context and modalities that will not fit on a laptop.&lt;/p&gt;




&lt;p&gt;You can run both Muse models against your own MCP server in the browser — no install, no Meta account: &lt;strong&gt;&lt;a href="https://mcpplaygroundonline.com/test-mcp-with/meta" rel="noopener noreferrer"&gt;Test your MCP server with Meta Muse&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Full writeup with the complete benchmark tables: &lt;strong&gt;&lt;a href="https://mcpplaygroundonline.com/blog/test-mcp-server-with-meta-muse-models" rel="noopener noreferrer"&gt;Muse Spark 1.2 and Muse Glimmer 30B for MCP&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources:&lt;/strong&gt; &lt;a href="https://research.meta.ai/blog/introducing-muse-glimmer-open-agentic-model" rel="noopener noreferrer"&gt;Meta AI Research — Introducing Muse Glimmer&lt;/a&gt; · &lt;a href="https://labs.scale.com/leaderboard/mcp_atlas" rel="noopener noreferrer"&gt;Scale AI MCP-Atlas leaderboard&lt;/a&gt; · &lt;a href="https://huggingface.co/meta-models/Muse-Glimmer-30B" rel="noopener noreferrer"&gt;Muse Glimmer on Hugging Face&lt;/a&gt; · &lt;a href="https://openrouter.ai/meta/muse-spark-1.2" rel="noopener noreferrer"&gt;Muse Spark 1.2 on OpenRouter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>llm</category>
      <category>opensource</category>
    </item>
    <item>
      <title>MCP Went Stateless: Migrating to the 2026-07-28 Spec (and Proving It Works)</title>
      <dc:creator>Rupa Tiwari</dc:creator>
      <pubDate>Thu, 30 Jul 2026 18:06:09 +0000</pubDate>
      <link>https://dev.to/rupa_tiwari_dd308948d710f/mcp-went-stateless-migrating-to-the-2026-07-28-spec-and-proving-it-works-174</link>
      <guid>https://dev.to/rupa_tiwari_dd308948d710f/mcp-went-stateless-migrating-to-the-2026-07-28-spec-and-proving-it-works-174</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;📖 TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;2026-07-28&lt;/strong&gt; spec shipped &lt;strong&gt;final on July 28, 2026&lt;/strong&gt; (RC locked May 21). It is the biggest revision since MCP launched.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sessions are gone.&lt;/strong&gt; No &lt;code&gt;initialize&lt;/code&gt;, no &lt;code&gt;Mcp-Session-Id&lt;/code&gt;. Every request is self-contained.&lt;/li&gt;
&lt;li&gt;TypeScript ships as &lt;strong&gt;two new packages&lt;/strong&gt; — &lt;code&gt;@modelcontextprotocol/client@2&lt;/code&gt; and &lt;code&gt;@modelcontextprotocol/server@2&lt;/code&gt;. The old &lt;code&gt;@modelcontextprotocol/sdk&lt;/code&gt; line lives on at &lt;code&gt;1.x&lt;/code&gt; for 2025-era servers.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;server/discover&lt;/code&gt; is a &lt;strong&gt;MUST&lt;/strong&gt;. &lt;code&gt;Mcp-Method&lt;/code&gt; / &lt;code&gt;Mcp-Name&lt;/code&gt; headers are required on Streamable HTTP POSTs.&lt;/li&gt;
&lt;li&gt;Roots, Sampling, Logging, and HTTP+SSE are &lt;strong&gt;deprecated&lt;/strong&gt; with a 12-month clock.&lt;/li&gt;
&lt;li&gt;The new #1 security bug: &lt;strong&gt;an unsigned &lt;code&gt;requestState&lt;/code&gt;&lt;/strong&gt; blob. It round-trips through the client, which makes it attacker-controlled input.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;I spent last week migrating a platform that talks to &lt;em&gt;other people's&lt;/em&gt; MCP servers in both revisions. This is the writeup I wanted before I started.&lt;/p&gt;

&lt;p&gt;Not a spec summary — a diff, a build order, and the two things that broke in ways the changelog does not warn you about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stop thinking "version bump." Start thinking "era."
&lt;/h2&gt;

&lt;p&gt;This is the mental model shift that makes everything else click.&lt;/p&gt;

&lt;p&gt;Older MCP negotiated a version string during a handshake. The 2026 SDK does not model revisions as a flat list anymore. It models &lt;strong&gt;two eras&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Era&lt;/th&gt;
&lt;th&gt;Revisions&lt;/th&gt;
&lt;th&gt;How the version travels&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;legacy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2024-10-07 … 2025-11-25&lt;/td&gt;
&lt;td&gt;Negotiated via &lt;code&gt;initialize&lt;/code&gt;, carries &lt;code&gt;Mcp-Session-Id&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;modern&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2026-07-28 and later&lt;/td&gt;
&lt;td&gt;Rides in &lt;code&gt;_meta&lt;/code&gt; on &lt;strong&gt;every&lt;/strong&gt; request; &lt;code&gt;server/discover&lt;/code&gt; advertises capabilities up front&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are not points on one line. They are &lt;strong&gt;two different wire protocols&lt;/strong&gt; that happen to share JSON-RPC.&lt;/p&gt;

&lt;p&gt;Once you internalize that, the migration stops looking like "add a feature" and starts looking like "support a second protocol."&lt;/p&gt;

&lt;h2&gt;
  
  
  The wire diff: what a request actually looks like now
&lt;/h2&gt;

&lt;p&gt;Forget SDK APIs for a second. Here is the part that matters, because it is what your gateway, your load balancer, and your security scanner all see.&lt;/p&gt;

&lt;h3&gt;
  
  
  Before (2025-11-25, stateful)
&lt;/h3&gt;

&lt;p&gt;Two round trips minimum, and a session header you have to carry forever:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="nf"&gt;POST&lt;/span&gt; &lt;span class="nn"&gt;/mcp&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;span class="na"&gt;Content-Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application/json&lt;/span&gt;

&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"jsonrpc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&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="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"initialize"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"protocolVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"2025-11-25"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"clientInfo"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"my-client"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"capabilities"&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="err"&gt;→&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;OK&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="err"&gt;Mcp-Session-Id:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="err"&gt;f&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="err"&gt;c&lt;/span&gt;&lt;span class="mi"&gt;1e7&lt;/span&gt;&lt;span class="err"&gt;a-...&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="err"&gt;←&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;now&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;sticky-route&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;every&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;later&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;request&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;here&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="nf"&gt;POST&lt;/span&gt; &lt;span class="nn"&gt;/mcp&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;span class="na"&gt;Mcp-Session-Id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;9f2c1e7a-...&lt;/span&gt;
&lt;span class="na"&gt;Content-Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application/json&lt;/span&gt;

&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"jsonrpc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"tools/call"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"get_user"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"arguments"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"123"&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;h3&gt;
  
  
  After (2026-07-28, stateless)
&lt;/h3&gt;

&lt;p&gt;One round trip. No handshake. Everything the server needs is in the envelope:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="nf"&gt;POST&lt;/span&gt; &lt;span class="nn"&gt;/mcp&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;span class="na"&gt;Content-Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application/json&lt;/span&gt;
&lt;span class="na"&gt;Mcp-Method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;tools/call&lt;/span&gt;
&lt;span class="na"&gt;Mcp-Name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;get_user&lt;/span&gt;

&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"jsonrpc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&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="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"tools/call"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"get_user"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"arguments"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"123"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"_meta"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"io.modelcontextprotocol/protocolVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"2026-07-28"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"io.modelcontextprotocol/clientInfo"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"my-client"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"io.modelcontextprotocol/clientCapabilities"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"elicitation"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"form"&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;&lt;strong&gt;Three things to notice.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Mcp-Method&lt;/code&gt; and &lt;code&gt;Mcp-Name&lt;/code&gt; are headers now (SEP-2243). A gateway can route on them without parsing the body — that is the whole point.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;_meta&lt;/code&gt; keys are &lt;strong&gt;fully qualified&lt;/strong&gt;: &lt;code&gt;io.modelcontextprotocol/protocolVersion&lt;/code&gt;, not &lt;code&gt;protocolVersion&lt;/code&gt;. Getting this wrong is a silent no-op, not an error.&lt;/p&gt;

&lt;p&gt;And the session ID is simply absent. Any instance in your cluster can serve this request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The payoff:&lt;/strong&gt; a remote server that needed sticky sessions and a shared session store can now sit behind a plain round-robin load balancer. That is the real reason this change happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install: two packages, not one upgrade
&lt;/h2&gt;

&lt;p&gt;This surprised me and it is good news. v2 did not replace the SDK — it shipped &lt;strong&gt;alongside&lt;/strong&gt; it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&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;"@modelcontextprotocol/sdk"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;"^1.30.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// legacy line, still maintained&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@modelcontextprotocol/client"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^2.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// new: stateless + auto-fallback&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@modelcontextprotocol/server"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^2.0.0"&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// new: for building 2026-spec servers&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;All three coexist in one &lt;code&gt;package.json&lt;/code&gt;. No fork, no vendoring, no version pinning games.&lt;/p&gt;

&lt;p&gt;There is a codemod for the mechanical parts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @modelcontextprotocol/codemod@beta v1-to-v2 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It handles the renames — &lt;code&gt;.tool()&lt;/code&gt; becomes &lt;code&gt;registerTool&lt;/code&gt;, imports move to the new packages. What it cannot do is decide your &lt;strong&gt;statefulness strategy&lt;/strong&gt;, which is the actual work.&lt;/p&gt;

&lt;p&gt;Tool schemas in v2 use &lt;a href="https://standardschema.dev/" rel="noopener noreferrer"&gt;Standard Schema&lt;/a&gt;, so Zod v4, Valibot, and ArkType all work instead of Zod-only.&lt;/p&gt;

&lt;h2&gt;
  
  
  The server checklist: seven concrete changes
&lt;/h2&gt;

&lt;p&gt;This is the list I actually worked through. Ordered by how much it breaks if you skip it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Implement &lt;code&gt;server/discover&lt;/code&gt;.&lt;/strong&gt; It is a MUST in the new spec. It replaces the handshake as the way a client learns your capabilities and supported versions. No &lt;code&gt;server/discover&lt;/code&gt;, no modern-era client.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Stamp &lt;code&gt;resultType: "complete"&lt;/code&gt; on every result.&lt;/strong&gt; Cheap, mandatory, easy to forget.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Add &lt;code&gt;ttlMs&lt;/code&gt; and &lt;code&gt;cacheScope&lt;/code&gt;&lt;/strong&gt; to &lt;code&gt;tools/list&lt;/code&gt;, &lt;code&gt;prompts/list&lt;/code&gt;, &lt;code&gt;resources/list&lt;/code&gt;, &lt;code&gt;resources/read&lt;/code&gt;, and &lt;code&gt;resources/templates/list&lt;/code&gt;. Clients now cache tool lists like HTTP responses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Order &lt;code&gt;tools/list&lt;/code&gt; deterministically.&lt;/strong&gt; A SHOULD, not a MUST — but unstable ordering defeats client-side caching, so it is effectively required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Swap the HTTP GET stream and &lt;code&gt;resources/subscribe&lt;/code&gt; for &lt;code&gt;subscriptions/listen&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Drop &lt;code&gt;ping&lt;/code&gt;, &lt;code&gt;logging/setLevel&lt;/code&gt;, and &lt;code&gt;notifications/roots/list_changed&lt;/code&gt;&lt;/strong&gt; from your modern-era handler.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Fix your error codes.&lt;/strong&gt; More on that next, because it is the sneakiest one.&lt;/p&gt;

&lt;p&gt;One trap worth calling out: if your v1 server sets &lt;code&gt;sessionIdGenerator: undefined&lt;/code&gt; and you have a comment nearby that says "stateless mode," &lt;strong&gt;that is not this&lt;/strong&gt;. That is v1's stateless-&lt;em&gt;session&lt;/em&gt; mode. It still performs the &lt;code&gt;initialize&lt;/code&gt; handshake. It is not 2026-compliant. I had exactly this comment in my own codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Error codes: grep for these today
&lt;/h2&gt;

&lt;p&gt;The spec partitioned the JSON-RPC server-error range. &lt;code&gt;-32000&lt;/code&gt;…&lt;code&gt;-32019&lt;/code&gt; stays implementation-defined; &lt;code&gt;-32020&lt;/code&gt;…&lt;code&gt;-32099&lt;/code&gt; is now reserved for the spec.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-32020&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;HeaderMismatch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Mcp-Method&lt;/code&gt; disagrees with the body&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-32021&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MissingRequiredClientCapability&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;You asked for something the client never advertised&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-32022&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;UnsupportedProtocolVersion&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Version in &lt;code&gt;_meta&lt;/code&gt; is not supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-32602&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resource not found&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Changed&lt;/strong&gt; — was &lt;code&gt;-32002&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That last row is the one that will bite you quietly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# run this in your client codebase right now&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-rn&lt;/span&gt; &lt;span class="s2"&gt;"32002"&lt;/span&gt; src/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A hardcoded &lt;code&gt;-32002&lt;/code&gt; check does not throw when the code changes. It just &lt;strong&gt;stops matching&lt;/strong&gt;, and your "resource not found" branch silently becomes your generic-error branch.&lt;/p&gt;

&lt;p&gt;Practical advice: accept both codes when validating, emit the era-appropriate one. The v2 SDK still ships &lt;code&gt;-32002&lt;/code&gt; in &lt;code&gt;ProtocolErrorCode&lt;/code&gt; for legacy compatibility, so both are live in the wild.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deprecations: the 12-month clock started
&lt;/h2&gt;

&lt;p&gt;The spec added a formal lifecycle — Active → Deprecated → Removed — with a minimum 12-month window. Nothing here disappears before &lt;strong&gt;July 2027&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Roots&lt;/strong&gt; → pass scope explicitly via tool parameters, resource URIs, or config.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sampling&lt;/strong&gt; → call the LLM API directly from your server. Fewer round trips anyway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logging&lt;/strong&gt; → stderr or OpenTelemetry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTP+SSE transport&lt;/strong&gt; → Streamable HTTP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;includeContext: "thisServer" | "allServers"&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OAuth Dynamic Client Registration&lt;/strong&gt; → Client ID Metadata Documents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not add &lt;em&gt;new&lt;/em&gt; usage of any of these. And audit your docs and UI — mine were still advertising two of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two gotchas that cost me a day
&lt;/h2&gt;

&lt;p&gt;Here is the part you will not find in the changelog.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gotcha 1: &lt;code&gt;LATEST_PROTOCOL_VERSION&lt;/code&gt; is &lt;code&gt;2025-11-25&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Yes, in &lt;code&gt;@modelcontextprotocol/client@2&lt;/code&gt;. I assumed it was a packaging mistake. It is not.&lt;/p&gt;

&lt;p&gt;That constant means "the newest &lt;strong&gt;legacy-era&lt;/strong&gt; version, used for the fallback handshake." It is not the newest revision overall. If you write &lt;code&gt;protocolVersion: LATEST_PROTOCOL_VERSION&lt;/code&gt; expecting &lt;code&gt;2026-07-28&lt;/code&gt;, you have quietly pinned yourself to the old era.&lt;/p&gt;

&lt;p&gt;The era model explains it. Once you stop reading revisions as one ordered list, the naming makes sense.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gotcha 2: auto-fallback is not a free lunch
&lt;/h3&gt;

&lt;p&gt;The v2 client advertises automatic fallback: point it at a 2025-era server and it detects, falls back to &lt;code&gt;initialize&lt;/code&gt;, and connects. Mostly true, and it deletes a lot of detection code you would otherwise write.&lt;/p&gt;

&lt;p&gt;Then I shipped it as the single client for everything and broke auth-gated servers.&lt;/p&gt;

&lt;p&gt;The failure: v2's &lt;code&gt;auto&lt;/code&gt; mode treats a &lt;strong&gt;failed &lt;code&gt;server/discover&lt;/code&gt; probe as fatal&lt;/strong&gt;. A 2025-era gateway that answers unknown methods with &lt;code&gt;401&lt;/code&gt; becomes unreachable — even though the &lt;code&gt;initialize&lt;/code&gt; that would have followed uses the same credentials and succeeds fine.&lt;/p&gt;

&lt;p&gt;Second, related discovery: v2's &lt;code&gt;legacy&lt;/code&gt; mode is &lt;strong&gt;not bug-for-bug identical&lt;/strong&gt; to the v1 SDK against non-conforming servers. So "just pin to 2025-11-25 on the new client" is also not the old flow.&lt;/p&gt;

&lt;p&gt;What actually works is keeping the generations apart behind one facade:&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="c1"&gt;// dispatcher — one facade, two clients underneath&lt;/span&gt;
&lt;span class="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;preference&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;legacy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;connectV1&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;            &lt;span class="c1"&gt;// exact pre-2026 flow, untouched&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;modern&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;connectV2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2026-07-28&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// fail loudly, no fallback&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;auto&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;                                       &lt;span class="c1"&gt;// default&lt;/span&gt;
  &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;   &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;connectV2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="p"&gt;}&lt;/span&gt;          &lt;span class="c1"&gt;// try stateless first&lt;/span&gt;
    &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;connectV1&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="p"&gt;}&lt;/span&gt;          &lt;span class="c1"&gt;// on ANY failure, fall back to v1&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The rule I would tattoo on this migration:&lt;/strong&gt; never route your existing working path through the new client. Add the new generation &lt;em&gt;beside&lt;/em&gt; the old one, dispatch between them, and let &lt;code&gt;auto&lt;/code&gt; fall back to the flow you already trust.&lt;/p&gt;

&lt;p&gt;One more sharp edge inside that facade: &lt;code&gt;callTool&lt;/code&gt;'s second argument is a &lt;strong&gt;result schema&lt;/strong&gt; in v1 and &lt;strong&gt;request options&lt;/strong&gt; in v2. Same method name, different meaning. Forward options only on the modern path.&lt;/p&gt;

&lt;h2&gt;
  
  
  The new surface you actually want
&lt;/h2&gt;

&lt;p&gt;Migration is not only removal. Three additions are worth adopting deliberately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MRTR (Multi Round-Trip Requests).&lt;/strong&gt; A server can return an &lt;code&gt;InputRequiredResult&lt;/code&gt; mid-tool-call. The client gathers answers, echoes back the &lt;code&gt;requestState&lt;/code&gt;, and re-issues the original request. This is how a tool asks a clarifying question without failing.&lt;/p&gt;

&lt;p&gt;If your agent loop does not implement it, a fully compliant server just looks broken to you.&lt;/p&gt;

&lt;p&gt;The design question MRTR forces: &lt;strong&gt;who answers the question?&lt;/strong&gt; An auto-approve policy that fills in defaults defeats the point — the server asked because it needed a decision. In &lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;Agent Studio&lt;/a&gt; I wired the answers to come from the model itself: the tool schema carries &lt;code&gt;_mcpInputResponses&lt;/code&gt; and &lt;code&gt;_mcpRequestState&lt;/code&gt;, an &lt;code&gt;input_required&lt;/code&gt; result goes back to the model as retry instructions, and the whole exchange stays visible in the transcript. If you are building an agent loop against a 2026 server, that is the shape I would copy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tasks.&lt;/strong&gt; Now an extension (&lt;code&gt;io.modelcontextprotocol/tasks&lt;/code&gt;), not core. Poll &lt;code&gt;tasks/get&lt;/code&gt;, &lt;code&gt;tasks/update&lt;/code&gt;, &lt;code&gt;tasks/cancel&lt;/code&gt;. Note that &lt;strong&gt;&lt;code&gt;tasks/list&lt;/code&gt; was removed&lt;/strong&gt; and task creation is server-directed. Code written against the experimental core Tasks API from 2025-11-25 needs updating.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP Apps.&lt;/strong&gt; Servers return HTML rendered in a sandboxed iframe; UI actions route back through JSON-RPC. The demo value here is high.&lt;/p&gt;

&lt;p&gt;Also free with the upgrade: full &lt;strong&gt;JSON Schema 2020-12&lt;/strong&gt; in tool inputs (&lt;code&gt;oneOf&lt;/code&gt;, &lt;code&gt;anyOf&lt;/code&gt;, &lt;code&gt;allOf&lt;/code&gt;, &lt;code&gt;$ref&lt;/code&gt;) and standardized &lt;strong&gt;W3C Trace Context&lt;/strong&gt; propagation. If you were flattening complex inputs to work around old schema limits, you can stop.&lt;/p&gt;

&lt;h2&gt;
  
  
  The security bug this revision created
&lt;/h2&gt;

&lt;p&gt;Statelessness moved state onto the wire, and wire state is attacker-controlled.&lt;/p&gt;

&lt;p&gt;Under MRTR, your server mints a &lt;code&gt;requestState&lt;/code&gt; blob, hands it to the client, and receives it back on the retry. &lt;strong&gt;The client can modify it in between.&lt;/strong&gt; The spec makes integrity protection a MUST, and the SDK explicitly does not do it for you.&lt;/p&gt;

&lt;p&gt;If an unprotected blob influences authorization or business logic, that is direct exploitation — tamper with the blob, resume someone else's operation.&lt;/p&gt;

&lt;p&gt;Sign it. Use the SDK's &lt;code&gt;createRequestStateCodec&lt;/code&gt; rather than rolling your own MAC.&lt;/p&gt;

&lt;p&gt;The other new-in-2026 checks worth running against yourself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;cacheScope: "public"&lt;/code&gt; on tenant-scoped data&lt;/strong&gt; — leaks across users via any shared intermediary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing &lt;code&gt;iss&lt;/code&gt; validation&lt;/strong&gt; in auth responses — RFC 9207 mix-up mitigation, now mandatory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing &lt;code&gt;application_type&lt;/code&gt;&lt;/strong&gt; during client registration — OIDC redirect URI conflicts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Credentials reused across issuers&lt;/strong&gt; — must be keyed by issuer identity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://mcpplaygroundonline.com/mcp-security-scanner" rel="noopener noreferrer"&gt;Scan your MCP server →&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to actually test the migrated server
&lt;/h2&gt;

&lt;p&gt;You can get the first 20% with curl. Fire a &lt;code&gt;tools/call&lt;/code&gt; with no handshake and see whether it works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sS&lt;/span&gt; https://your-server.example.com/mcp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Mcp-Method: tools/list'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{
        "_meta":{
          "io.modelcontextprotocol/protocolVersion":"2026-07-28",
          "io.modelcontextprotocol/clientInfo":{"name":"curl","version":"1.0"}
        }}}'&lt;/span&gt; | jq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that returns tools with &lt;code&gt;ttlMs&lt;/code&gt; and &lt;code&gt;cacheScope&lt;/code&gt;, you are on the new era. If it returns &lt;code&gt;-32022&lt;/code&gt;, you are not.&lt;/p&gt;

&lt;p&gt;Ironically, statelessness made this commodity check &lt;em&gt;easier&lt;/em&gt; — curl and Postman can now do the raw protocol ping they never could before. Good. That was never the interesting part.&lt;/p&gt;

&lt;p&gt;The interesting part is everything curl cannot answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does my server behave the same on &lt;strong&gt;both&lt;/strong&gt; revisions, for the clients that have not migrated?&lt;/li&gt;
&lt;li&gt;Does a &lt;strong&gt;real model&lt;/strong&gt; still pick the right tool now that my schemas use &lt;code&gt;oneOf&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Does my client handle &lt;code&gt;InputRequiredResult&lt;/code&gt;, &lt;code&gt;-32022&lt;/code&gt;, and a &lt;strong&gt;tampered &lt;code&gt;requestState&lt;/code&gt;&lt;/strong&gt; correctly?&lt;/li&gt;
&lt;li&gt;Is my &lt;code&gt;requestState&lt;/code&gt; actually signed, or did I just assume the SDK did it?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How MCP Playground helps
&lt;/h3&gt;

&lt;p&gt;That is the gap I built &lt;a href="https://mcpplaygroundonline.com/" rel="noopener noreferrer"&gt;MCP Playground&lt;/a&gt; around, and the 2026 spec is fully wired into it. Paste a URL and there is a protocol switch on every test surface: &lt;strong&gt;Auto&lt;/strong&gt; (detect and show the negotiated revision), &lt;strong&gt;Force 2025-11-25&lt;/strong&gt;, or &lt;strong&gt;Force 2026-07-28&lt;/strong&gt; — so you can prove your server answers both eras instead of hoping. If you are building a &lt;em&gt;client&lt;/em&gt;, the &lt;a href="https://mcpplaygroundonline.com/mcp-test-client" rel="noopener noreferrer"&gt;test client&lt;/a&gt; points at mock servers in either revision, including ones that return &lt;code&gt;InputRequiredResult&lt;/code&gt;, &lt;code&gt;-32022 UnsupportedProtocolVersion&lt;/code&gt;, and a deliberately tampered &lt;code&gt;requestState&lt;/code&gt;, so you can exercise your retry loop against hostile-but-legal responses. No install, runs in the browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mcpplaygroundonline.com/mcp-test-server" rel="noopener noreferrer"&gt;Test any MCP server free →&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My migration order
&lt;/h2&gt;

&lt;p&gt;If I did it again, in this order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Centralize your protocol constants first.&lt;/strong&gt; I found &lt;code&gt;protocolVersion&lt;/code&gt; hardcoded in four files, pinned to a revision &lt;em&gt;20 months&lt;/em&gt; out of date. Fix that before anything else or you will chase the same strings again next revision.&lt;/li&gt;
&lt;li&gt;Add v2 packages &lt;strong&gt;alongside&lt;/strong&gt; v1. Do not remove anything yet.&lt;/li&gt;
&lt;li&gt;Build the dispatcher (&lt;code&gt;legacy&lt;/code&gt; / &lt;code&gt;modern&lt;/code&gt; / &lt;code&gt;auto&lt;/code&gt;) so nothing existing changes behavior.&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;server/discover&lt;/code&gt;, &lt;code&gt;resultType&lt;/code&gt;, &lt;code&gt;ttlMs&lt;/code&gt; / &lt;code&gt;cacheScope&lt;/code&gt; to the server.&lt;/li&gt;
&lt;li&gt;Fix error codes, add &lt;code&gt;Mcp-Method&lt;/code&gt; / &lt;code&gt;Mcp-Name&lt;/code&gt; handling.&lt;/li&gt;
&lt;li&gt;Sign &lt;code&gt;requestState&lt;/code&gt; before you ship MRTR — not after.&lt;/li&gt;
&lt;li&gt;Swap deprecated features on the 12-month clock, separately.&lt;/li&gt;
&lt;li&gt;Run both revisions against a real model and confirm every tool still resolves.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 8 is the one people skip. Regressions in an MCP migration are rarely loud — a tool quietly stops resolving, an auth flow fails silently, and you find out from a user.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;The 2026-07-28 spec deletes the handshake, makes &lt;code&gt;server/discover&lt;/code&gt; mandatory, moves protocol metadata into &lt;code&gt;_meta&lt;/code&gt;, changes error codes, and starts a 12-month clock on Roots, Sampling, and Logging. The migration is a checklist, not a rewrite.&lt;/p&gt;

&lt;p&gt;Keep your old path intact, add the new one beside it, sign your &lt;code&gt;requestState&lt;/code&gt;, and then prove both eras work before your users find the gap.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mcpplaygroundonline.com/mcp-test-server" rel="noopener noreferrer"&gt;Test any MCP server free →&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Further reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://modelcontextprotocol.io/specification/2026-07-28/changelog" rel="noopener noreferrer"&gt;MCP 2026-07-28 changelog&lt;/a&gt; — official&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://mcpplaygroundonline.com/blog/migrate-mcp-server-2026-07-28-stateless" rel="noopener noreferrer"&gt;Migrate Your MCP Server to the 2026-07-28 Spec&lt;/a&gt; — canonical version of this post&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://mcpplaygroundonline.com/blog/build-mcp-server-2026-spec" rel="noopener noreferrer"&gt;Build an MCP Server on the 2026-07-28 Spec&lt;/a&gt; — starting fresh instead of migrating&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://mcpplaygroundonline.com/blog/mcp-stateless-2026-release-candidate" rel="noopener noreferrer"&gt;MCP Goes Stateless&lt;/a&gt; — why the session model was removed&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://mcpplaygroundonline.com/blog/what-is-model-context-protocol" rel="noopener noreferrer"&gt;What Is the Model Context Protocol?&lt;/a&gt; — background&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Migrating something now? Tell me what broke — I am collecting the failure modes that are not in the changelog.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>backend</category>
      <category>mcp</category>
      <category>typescript</category>
    </item>
    <item>
      <title>GPT-5.6 MCP: Testing Servers With Sol, Terra &amp; Luna</title>
      <dc:creator>Rupa Tiwari</dc:creator>
      <pubDate>Tue, 14 Jul 2026 06:17:21 +0000</pubDate>
      <link>https://dev.to/rupa_tiwari_dd308948d710f/gpt-56-mcp-testing-servers-with-sol-terra-luna-1524</link>
      <guid>https://dev.to/rupa_tiwari_dd308948d710f/gpt-56-mcp-testing-servers-with-sol-terra-luna-1524</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;📖 TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GPT-5.6&lt;/strong&gt; shipped July 9, 2026 in three tiers &lt;strong&gt;Sol&lt;/strong&gt; (flagship), &lt;strong&gt;Terra&lt;/strong&gt; (balanced), and &lt;strong&gt;Luna&lt;/strong&gt; (cheapest) all tuned for agentic tool calling.&lt;/li&gt;
&lt;li&gt;All three share a &lt;strong&gt;1M-token context window&lt;/strong&gt;, 128K max output, and native &lt;strong&gt;MCP support&lt;/strong&gt; in the Responses API.&lt;/li&gt;
&lt;li&gt;Test any MCP server against &lt;em&gt;Sol, Terra, or Luna&lt;/em&gt; in &lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;MCP Agent Studio&lt;/a&gt; — pick the model, connect a server, and watch each tool call live.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;OpenAI dropped &lt;strong&gt;GPT-5.6&lt;/strong&gt; on July 9, 2026 - and this one is aimed squarely at agents.&lt;/p&gt;

&lt;p&gt;Three models landed at once: &lt;em&gt;Sol&lt;/em&gt;, &lt;em&gt;Terra&lt;/em&gt;, and &lt;em&gt;Luna&lt;/em&gt;. Each is built to &lt;strong&gt;call tools, not just chat&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That makes &lt;strong&gt;testing MCP servers with GPT-5.6&lt;/strong&gt; a different exercise than testing a plain chat model. Tool selection is the whole game.&lt;/p&gt;

&lt;p&gt;I have spent this week pointing all three at MCP servers GitHub, Postgres, Playwright, and multi-server setups. This post is what I learned.&lt;/p&gt;

&lt;p&gt;You will see &lt;strong&gt;which tier to run for which workload&lt;/strong&gt;, how the new tool-calling features change MCP, and how to test each one free in your browser. Skip it and you will overpay for Sol on jobs Luna handles fine.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is GPT-5.6? Sol, Terra, and Luna Explained
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GPT-5.6 is a three-tier model family, not a single model.&lt;/strong&gt; OpenAI split it by cost and horsepower so you match the model to the job.&lt;/p&gt;

&lt;p&gt;Here is the lineup, straight from OpenAI's pricing page:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Built for&lt;/th&gt;
&lt;th&gt;Input / Output (per 1M)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GPT-5.6 Sol&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Flagship — ambitious agentic work&lt;/td&gt;
&lt;td&gt;$5.00 / $30.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GPT-5.6 Terra&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Balanced — efficient, high-volume work&lt;/td&gt;
&lt;td&gt;$2.50 / $15.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GPT-5.6 Luna&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fast, affordable — everyday work&lt;/td&gt;
&lt;td&gt;$1.00 / $6.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The specs are shared across all three. &lt;strong&gt;Every tier gets a 1M-token context window, 128K max output, and a February 16, 2026 knowledge cutoff.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So the choice is not about context or capability limits. &lt;strong&gt;It is about how much reasoning each task actually needs.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;New to the protocol these models call? Start with &lt;a href="https://mcpplaygroundonline.com/blog/what-is-model-context-protocol" rel="noopener noreferrer"&gt;what is Model Context Protocol&lt;/a&gt;, then come back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why GPT-5.6 Changes MCP Tool Calling
&lt;/h2&gt;

&lt;p&gt;Here is the part that matters for MCP. &lt;strong&gt;GPT-5.6 does not just call tools one at a time it can orchestrate them.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The headline feature is &lt;em&gt;Programmatic Tool Calling&lt;/em&gt;. The model writes JavaScript that chains your tool calls, then runs it in an &lt;strong&gt;isolated V8 sandbox with no network access&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Why care? &lt;strong&gt;The old loop round-trips every tool result back through the model.&lt;/strong&gt; Ten calls means ten expensive turns.&lt;/p&gt;

&lt;p&gt;With Programmatic Tool Calling, the model batches that logic into one script. OpenAI reports &lt;strong&gt;token reductions of 38% to 63.5%&lt;/strong&gt; on real workloads.&lt;/p&gt;

&lt;p&gt;For MCP servers with many tools, that is a big deal. &lt;strong&gt;Fewer round-trips means lower cost and faster agents.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is a second feature: &lt;em&gt;ultra multi-agent mode&lt;/em&gt;. GPT-5.6 spins up four subagents in parallel by default.&lt;/p&gt;

&lt;p&gt;On Terminal-Bench 2.1, that lifted Sol from &lt;strong&gt;88.8% to 91.9%&lt;/strong&gt;. Parallel agents split a hard MCP task into focused lanes.&lt;/p&gt;

&lt;p&gt;Want to see how a model handles your server's tools before you trust any of this? &lt;a href="https://mcpplaygroundonline.com/mcp-test-server" rel="noopener noreferrer"&gt;Test any MCP server free&lt;/a&gt; and watch each call in the browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sol vs Terra vs Luna: Which for MCP Servers?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Do not default to Sol.&lt;/strong&gt; The whole point of three tiers is to stop overpaying.&lt;/p&gt;

&lt;p&gt;Here is how I split them for MCP work after a week of runs:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Best MCP job&lt;/th&gt;
&lt;th&gt;When I skip it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sol&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Long multi-server chains; write actions; ambiguous goals&lt;/td&gt;
&lt;td&gt;Simple reads or listing tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Terra&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Everyday agents; high-volume automation&lt;/td&gt;
&lt;td&gt;Plans that span 8+ dependent calls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Luna&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fast lookups, single-tool reads, smoke tests&lt;/td&gt;
&lt;td&gt;Anything needing real multi-step planning&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;My rule: &lt;strong&gt;start on Luna, move to Terra when it misses steps, reach for Sol only on the hard, expensive-to-fail agents.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The price gap makes this worth it. &lt;strong&gt;Sol costs five times Luna on input and output.&lt;/strong&gt; A wrong model choice adds up fast at scale.&lt;/p&gt;

&lt;p&gt;Do not guess &lt;strong&gt;run the same prompt on two tiers side by side&lt;/strong&gt; and compare the tool calls. That test takes 30 seconds in the studio.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Test MCP Servers With GPT-5.6 (Step by Step)
&lt;/h2&gt;

&lt;p&gt;You do not need the OpenAI API or an SDK to try this. The whole loop runs in the browser.&lt;/p&gt;

&lt;p&gt;Here is the flow I use in &lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;MCP Agent Studio&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1 — Connect Your MCP Server
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Paste your MCP server URL into the connection field.&lt;/strong&gt; Any Streamable HTTP or SSE endpoint works.&lt;/p&gt;

&lt;p&gt;No server yet? Deploy one in a click from the &lt;a href="https://mcpplaygroundonline.com/mcp-hosted" rel="noopener noreferrer"&gt;hosted MCP catalog&lt;/a&gt; — GitHub, Playwright, Postgres, and more.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2 — Pick a GPT-5.6 Tier
&lt;/h3&gt;

&lt;p&gt;Open the &lt;strong&gt;model selector&lt;/strong&gt; and choose &lt;em&gt;GPT-5.6 Sol&lt;/em&gt;, &lt;em&gt;Terra&lt;/em&gt;, or &lt;em&gt;Luna&lt;/em&gt;. Each shows its credit cost per prompt.&lt;/p&gt;

&lt;p&gt;For a first run, &lt;strong&gt;Luna is plenty&lt;/strong&gt; — cheap and fast. Escalate only when the agent stumbles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3 — Send and Inspect Every Tool Call
&lt;/h3&gt;

&lt;p&gt;Send a prompt like &lt;em&gt;"list my open GitHub PRs and flag the stale ones."&lt;/em&gt; Watch the tool calls stream in the panel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Click any call to see its exact input and output.&lt;/strong&gt; That trace is how you confirm GPT-5.6 picked the right tool with the right arguments.&lt;/p&gt;

&lt;p&gt;Three steps, start to finish:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Connect&lt;/strong&gt; the MCP server URL (plus token if needed)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Select&lt;/strong&gt; a GPT-5.6 tier in the model dropdown&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chat&lt;/strong&gt; and inspect each tool call live&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Want the wider workflow? The &lt;a href="https://mcpplaygroundonline.com/blog/how-to-test-mcp-servers-step-by-step" rel="noopener noreferrer"&gt;step-by-step guide to testing MCP servers&lt;/a&gt; covers the full loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  GPT-5.6 vs Claude for MCP Agents: The Honest Take
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GPT-5.6 is not a clean sweep.&lt;/strong&gt; It wins some benchmarks and loses others — and the split matters for MCP.&lt;/p&gt;

&lt;p&gt;Where &lt;strong&gt;Sol pulls ahead&lt;/strong&gt; is agentic, tool-heavy work. On &lt;em&gt;Agents' Last Exam&lt;/em&gt;, Sol set a new high, beating &lt;a href="https://mcpplaygroundonline.com/blog/claude-fable-5-mcp-servers" rel="noopener noreferrer"&gt;Claude Fable 5&lt;/a&gt; by double digits.&lt;/p&gt;

&lt;p&gt;It also topped the Coding Agent Index and led Terminal-Bench 2.1. &lt;strong&gt;For long-horizon MCP agents, that is the relevant lane.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But on &lt;em&gt;SWE-Bench Pro&lt;/em&gt;, Sol scored 64.6% — &lt;strong&gt;trailing Claude by roughly 15 points&lt;/strong&gt;. On raw code-fix accuracy, Claude still leads.&lt;/p&gt;

&lt;p&gt;So the honest read: &lt;strong&gt;GPT-5.6 for tool orchestration and cost, Claude for deep code reasoning.&lt;/strong&gt; The right answer depends on your server.&lt;/p&gt;

&lt;p&gt;The only way to know for your MCP setup is to test both. The studio has &lt;strong&gt;40+ models side by side&lt;/strong&gt; — see the &lt;a href="https://mcpplaygroundonline.com/blog/best-ai-model-for-mcp-tool-calling" rel="noopener noreferrer"&gt;best model for MCP tool calling&lt;/a&gt; for the full breakdown.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Reliable Tool Calls From GPT-5.6
&lt;/h2&gt;

&lt;p&gt;Even a flagship model needs a clean setup. &lt;strong&gt;Most "the agent broke" moments are schema or prompt problems, not model problems.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here is what keeps GPT-5.6 reliable in my runs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Write tight tool descriptions.&lt;/strong&gt; GPT-5.6 reads them literally — vague descriptions cause vague calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mark required arguments clearly.&lt;/strong&gt; Ambiguous schemas trip up even strong models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confirm before write actions.&lt;/strong&gt; Ask the agent to state the exact change first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start cheap.&lt;/strong&gt; Run Luna to smoke-test the connection, then escalate for the real task.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A subtle one: &lt;strong&gt;the server, not the model, returns most errors you will see.&lt;/strong&gt; A 401 or 410 in a tool output is the API talking, not GPT-5.6.&lt;/p&gt;

&lt;p&gt;When calls fail, this &lt;a href="https://mcpplaygroundonline.com/blog/mcp-server-troubleshooting-common-errors-fix" rel="noopener noreferrer"&gt;MCP troubleshooting guide&lt;/a&gt; maps the common ones fast.&lt;/p&gt;

&lt;p&gt;And before you point any agent at a production server, &lt;strong&gt;scan it&lt;/strong&gt;. &lt;a href="https://mcpplaygroundonline.com/mcp-security-scanner" rel="noopener noreferrer"&gt;Scan your MCP server&lt;/a&gt; for tool-poisoning and injection risks first.&lt;/p&gt;

&lt;h2&gt;
  
  
  How MCP Playground Helps
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MCP Playground is where I test all three GPT-5.6 tiers without touching the API.&lt;/strong&gt; It runs in the browser, free.&lt;/p&gt;

&lt;p&gt;Connect any MCP server, pick &lt;em&gt;Sol, Terra, or Luna&lt;/em&gt; — or any of 40+ models — and watch every tool call in real time.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;compare view&lt;/strong&gt; lets me A/B Sol against Luna, or GPT-5.6 against Claude, on the same prompt. So I spend the flagship only where it earns its keep.&lt;/p&gt;

&lt;p&gt;And the &lt;a href="https://mcpplaygroundonline.com/mcp-hosted" rel="noopener noreferrer"&gt;hosted MCP catalog&lt;/a&gt; gives me a live server URL in one click — no infra to babysit.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Testing an MCP server with GPT-5.6?&lt;/strong&gt; Connect your endpoint, switch between Sol, Terra, and Luna mid-chat, and see which tier holds the plan.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/mcp-test-server" rel="noopener noreferrer"&gt;Test any MCP server free →&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;Chat with it in Agent Studio →&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What are GPT-5.6 Sol, Terra, and Luna?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;They are the three tiers of OpenAI's GPT-5.6 model family, launched July 9, 2026. Sol is the flagship for ambitious agentic work ($5/$30 per 1M tokens), Terra is the balanced tier for high-volume work ($2.50/$15), and Luna is the fast, affordable tier for everyday work ($1/$6). All three share a 1M-token context window, 128K max output, and native MCP support.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which GPT-5.6 model is best for testing MCP servers?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It depends on the task. Start with Luna for simple reads, listing tools, and smoke tests. Move to Terra for everyday agents and high-volume automation. Reserve Sol for long multi-server chains, ambiguous goals, and write actions where a wrong tool call is expensive. Because Sol costs five times Luna, matching the tier to the job saves real money.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is GPT-5.6 different for MCP tool calling?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GPT-5.6 adds Programmatic Tool Calling, where the model writes JavaScript that orchestrates your tool calls inside an isolated V8 sandbox with no network access. That batches logic instead of round-tripping every result through the model, cutting tokens by 38 to 63.5 percent. It also has an ultra multi-agent mode that runs four subagents in parallel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is GPT-5.6 better than Claude for MCP agents?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is a split. GPT-5.6 Sol leads on agentic and tool-heavy benchmarks like Agents' Last Exam and Terminal-Bench, which map closely to MCP workloads. But Claude still leads on raw code-fix accuracy, scoring higher on SWE-Bench Pro. The best choice depends on your server, so test both side by side in MCP Playground.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I test MCP servers with GPT-5.6 for free?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. MCP Playground runs entirely in the browser. You connect any MCP server, pick GPT-5.6 Sol, Terra, or Luna from the model selector, and watch every tool call in real time with no local setup and no OpenAI API key wrangling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GPT-5.6 is the most agent-focused release OpenAI has shipped&lt;/strong&gt; — three tiers, programmatic tool calling, and native MCP support. Sol leads on tool orchestration; Luna and Terra cover everyday agents cheaply.&lt;/p&gt;

&lt;p&gt;The fastest way to find your tier is to try them on your own server. &lt;a href="https://mcpplaygroundonline.com/mcp-test-server" rel="noopener noreferrer"&gt;Test any MCP server free&lt;/a&gt; and switch between Sol, Terra, and Luna mid-chat to see which one holds the plan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related Guides
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/what-is-model-context-protocol" rel="noopener noreferrer"&gt;What Is the Model Context Protocol (MCP)?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/claude-fable-5-mcp-servers" rel="noopener noreferrer"&gt;Claude Fable 5 + MCP Servers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/best-ai-model-for-mcp-tool-calling" rel="noopener noreferrer"&gt;Best AI Model for MCP Tool Calling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/how-to-test-mcp-servers-step-by-step" rel="noopener noreferrer"&gt;How to Test MCP Servers Step by Step&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/mcp-server-troubleshooting-common-errors-fix" rel="noopener noreferrer"&gt;MCP Server Troubleshooting — Common Errors&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://platform.openai.com/docs/models" rel="noopener noreferrer"&gt;OpenAI Platform: Models&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openai.com/api/pricing/" rel="noopener noreferrer"&gt;OpenAI API Pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://modelcontextprotocol.io/specification" rel="noopener noreferrer"&gt;Official: MCP Specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://modelcontextprotocol.io/docs/concepts/transports" rel="noopener noreferrer"&gt;Official: MCP Transports&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://mcpplaygroundonline.com/blog/gpt-5-6-mcp-servers-sol-terra-luna" rel="noopener noreferrer"&gt;MCP Playground&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>openai</category>
      <category>mcp</category>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>MCP vs A2A: Model Context Protocol vs Agent2Agent</title>
      <dc:creator>Rupa Tiwari</dc:creator>
      <pubDate>Tue, 30 Jun 2026 15:19:41 +0000</pubDate>
      <link>https://dev.to/rupa_tiwari_dd308948d710f/mcp-vs-a2a-model-context-protocol-vs-agent2agent-2a89</link>
      <guid>https://dev.to/rupa_tiwari_dd308948d710f/mcp-vs-a2a-model-context-protocol-vs-agent2agent-2a89</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;📖 TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MCP (Model Context Protocol)&lt;/strong&gt; connects one agent to tools, data, and APIs — a vertical link from agent down to capabilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A2A (Agent2Agent)&lt;/strong&gt; connects agents to other agents — a horizontal link so independent agents can delegate work.&lt;/li&gt;
&lt;li&gt;MCP is from Anthropic; A2A started at Google and is now a Linux Foundation project. They are &lt;strong&gt;complementary, not competitors&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Use MCP to give an agent its toolbox. Use A2A to let that agent hire other agents.&lt;/li&gt;
&lt;li&gt;Most production stacks in 2026 run &lt;strong&gt;both&lt;/strong&gt;: A2A between agents, MCP from each agent to its tools.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Key Difference in One Sentence
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MCP connects an agent to its tools. A2A connects an agent to other agents.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is the whole comparison in a line. The two protocols sit on different axes of the same system.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;MCP&lt;/em&gt; is &lt;strong&gt;vertical&lt;/strong&gt;: it runs from a single agent down to the tools, files, and APIs it can call. Think of it as the agent's toolbox.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A2A&lt;/em&gt; is &lt;strong&gt;horizontal&lt;/strong&gt;: it runs sideways, between peer agents that each have their own tools and reasoning. Think of it as agents hiring each other.&lt;/p&gt;

&lt;p&gt;So "MCP vs A2A" is rarely an either/or pick. Once you understand the axes, the question becomes &lt;strong&gt;where each one belongs in your stack&lt;/strong&gt; — which is what the rest of this guide covers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is MCP (Model Context Protocol)?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MCP is an open standard from Anthropic, released in November 2024, for connecting AI models to external systems.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An MCP server exposes three things to a model: &lt;em&gt;tools&lt;/em&gt; (functions the model can call), &lt;em&gt;resources&lt;/em&gt; (data it can read), and &lt;em&gt;prompts&lt;/em&gt; (reusable templates).&lt;/p&gt;

&lt;p&gt;The model is the client. It discovers what a server offers, picks a tool, and calls it with arguments — all over JSON-RPC 2.0.&lt;/p&gt;

&lt;p&gt;The point is to kill custom glue code. Instead of writing a one-off integration for every API, you expose a standard MCP surface once and any MCP-aware client can use it.&lt;/p&gt;

&lt;p&gt;If you are new to it, start with &lt;a href="https://mcpplaygroundonline.com/blog/what-is-model-context-protocol" rel="noopener noreferrer"&gt;What Is the Model Context Protocol?&lt;/a&gt; and &lt;a href="https://mcpplaygroundonline.com/blog/what-is-mcp-agent-tool-calling" rel="noopener noreferrer"&gt;how MCP tool calling works&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;MCP answers one question: &lt;strong&gt;how does this agent reach the outside world?&lt;/strong&gt; Files, databases, GitHub, Slack, your own REST API — all of it becomes callable through a single protocol.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is A2A (Agent2Agent)?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A2A is an open protocol for agent-to-agent communication.&lt;/strong&gt; Google announced it in April 2025 and donated it to the Linux Foundation in June 2025, with backing from 50+ partners.&lt;/p&gt;

&lt;p&gt;MCP assumes the client is a model talking to tools. A2A assumes both sides are &lt;em&gt;full agents&lt;/em&gt; — each with its own model, memory, and tools.&lt;/p&gt;

&lt;p&gt;A2A lets a "client agent" hand a task to a "remote agent" and get results back, without either side exposing its internal logic.&lt;/p&gt;

&lt;p&gt;That last part matters. A2A agents are &lt;strong&gt;opaque&lt;/strong&gt; — they collaborate as black boxes. The client agent does not see the remote agent's tools or prompts, only the task and its output.&lt;/p&gt;

&lt;p&gt;The core building blocks are the &lt;em&gt;Agent Card&lt;/em&gt; (a public capability profile), &lt;em&gt;Tasks&lt;/em&gt; (units of work with a lifecycle), &lt;em&gt;Messages&lt;/em&gt;, and &lt;em&gt;Artifacts&lt;/em&gt; (the results a task produces).&lt;/p&gt;

&lt;p&gt;A real example: a hiring agent asks a sourcing agent to find candidates, then asks a scheduling agent to book interviews. Three separate agents, possibly three vendors, coordinating over A2A.&lt;/p&gt;

&lt;p&gt;A2A answers a different question than MCP: &lt;strong&gt;how do independent agents delegate work to each other?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP vs A2A: Side-by-Side Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;MCP&lt;/th&gt;
&lt;th&gt;A2A&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Connects&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agent → tools &amp;amp; data&lt;/td&gt;
&lt;td&gt;Agent ↔ agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Axis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vertical (down to capabilities)&lt;/td&gt;
&lt;td&gt;Horizontal (across peers)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Origin&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Anthropic (Nov 2024)&lt;/td&gt;
&lt;td&gt;Google → Linux Foundation (2025)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unit of work&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tool call&lt;/td&gt;
&lt;td&gt;Task (with a lifecycle)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Discovery&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;tools/list, resources/list&lt;/td&gt;
&lt;td&gt;Agent Card (JSON profile)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Other side is&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A concrete tool surface&lt;/td&gt;
&lt;td&gt;An opaque, autonomous agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transport&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;JSON-RPC 2.0 over STDIO or Streamable HTTP&lt;/td&gt;
&lt;td&gt;JSON-RPC 2.0 over HTTP(S), SSE, webhooks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Giving one agent capabilities&lt;/td&gt;
&lt;td&gt;Coordinating many agents&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The rows that matter most are the first two. &lt;strong&gt;Everything else follows from "agent-to-tool" versus "agent-to-agent".&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP vs A2A: Architecture and Transport
&lt;/h2&gt;

&lt;p&gt;Both protocols speak &lt;strong&gt;JSON-RPC 2.0&lt;/strong&gt;, so the wire format feels familiar across the two. The shape of what they exchange is where they split.&lt;/p&gt;

&lt;h3&gt;
  
  
  MCP architecture
&lt;/h3&gt;

&lt;p&gt;An MCP host (like Claude Desktop) runs one or more MCP clients. Each client holds a session with one MCP server.&lt;/p&gt;

&lt;p&gt;Transport is either &lt;em&gt;STDIO&lt;/em&gt; for local servers or &lt;em&gt;Streamable HTTP&lt;/em&gt; for remote ones. The exchange is request/response: list tools, call a tool, get a result.&lt;/p&gt;

&lt;p&gt;For a deeper protocol breakdown, see &lt;a href="https://mcpplaygroundonline.com/blog/mcp-vs-rest-api-whats-different" rel="noopener noreferrer"&gt;MCP vs REST API&lt;/a&gt; and &lt;a href="https://mcpplaygroundonline.com/blog/mcp-vs-function-calling-vs-api-comparison" rel="noopener noreferrer"&gt;MCP vs function calling&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  A2A architecture
&lt;/h3&gt;

&lt;p&gt;A2A has a &lt;em&gt;client agent&lt;/em&gt; and a &lt;em&gt;remote agent&lt;/em&gt;, both running as HTTP services. The client sends a task; the remote agent works it and returns artifacts.&lt;/p&gt;

&lt;p&gt;Because agent tasks can be long-running, A2A leans on &lt;strong&gt;Server-Sent Events for streaming&lt;/strong&gt; and webhook push notifications for updates that arrive minutes — or hours — later.&lt;/p&gt;

&lt;p&gt;A task moves through states: &lt;em&gt;submitted&lt;/em&gt;, &lt;em&gt;working&lt;/em&gt;, &lt;em&gt;input-required&lt;/em&gt;, &lt;em&gt;completed&lt;/em&gt;, &lt;em&gt;failed&lt;/em&gt;, or &lt;em&gt;canceled&lt;/em&gt;. That lifecycle is something MCP's single tool call does not model.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key nuance:&lt;/strong&gt; MCP optimizes for a fast, synchronous tool call. A2A optimizes for a delegated task that may take a while and report back asynchronously. The transport choices flow directly from that.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Discovery: tools/list vs the Agent Card
&lt;/h2&gt;

&lt;p&gt;Discovery is the cleanest way to feel the difference between the two protocols.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In MCP, a client asks a server "what can you do?" by calling &lt;code&gt;tools/list&lt;/code&gt;.&lt;/strong&gt; It gets back concrete tools with names, descriptions, and JSON input schemas.&lt;/p&gt;

&lt;p&gt;The model then reasons over that list and calls a specific tool. The server's capabilities are &lt;em&gt;transparent&lt;/em&gt; by design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In A2A, discovery happens through the Agent Card&lt;/strong&gt; — a JSON document an agent publishes at a well-known URL (typically &lt;code&gt;/.well-known/agent-card.json&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;The Agent Card describes the agent's skills, endpoint, auth requirements, and supported modes — but not its internal tools. A client agent reads the card to decide &lt;em&gt;whether to delegate&lt;/em&gt;, not &lt;em&gt;which function to invoke&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So MCP discovery says "here are my functions." A2A discovery says "here is what I can take on." One exposes a toolbox; the other advertises a hire-able specialist.&lt;/p&gt;

&lt;p&gt;When you build an MCP server, that &lt;code&gt;tools/list&lt;/code&gt; response is the contract a model depends on. Vague names or weak schemas quietly break tool selection.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 The fastest way to check that contract is to run your server against a real model and watch which tools it picks. &lt;a href="https://mcpplaygroundonline.com/mcp-test-server" rel="noopener noreferrer"&gt;Test any MCP server free →&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  When to Use MCP vs A2A
&lt;/h2&gt;

&lt;p&gt;Pick based on what is on the other end of the connection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reach for MCP when…
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You want one agent to read a database, hit an API, or touch the filesystem.&lt;/li&gt;
&lt;li&gt;The capability is a &lt;strong&gt;function&lt;/strong&gt;, not an autonomous actor.&lt;/li&gt;
&lt;li&gt;You need fast, synchronous calls with structured inputs and outputs.&lt;/li&gt;
&lt;li&gt;You are wrapping your own services so any MCP client can use them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Reach for A2A when…
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You have &lt;strong&gt;multiple agents&lt;/strong&gt; that should delegate work to each other.&lt;/li&gt;
&lt;li&gt;Those agents are built on different frameworks or owned by different teams or vendors.&lt;/li&gt;
&lt;li&gt;A unit of work is a long-running &lt;em&gt;task&lt;/em&gt;, not a single call.&lt;/li&gt;
&lt;li&gt;You want agents to collaborate without exposing each other's internals.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A quick gut check: if the thing you are connecting to &lt;strong&gt;cannot reason on its own&lt;/strong&gt;, it is an MCP tool. If it &lt;strong&gt;can&lt;/strong&gt;, it is an A2A agent.&lt;/p&gt;

&lt;p&gt;Building a multi-agent system today? Pair this with &lt;a href="https://mcpplaygroundonline.com/blog/multi-agent-mcp-crewai-langchain-guide" rel="noopener noreferrer"&gt;multi-agent MCP with CrewAI and LangChain&lt;/a&gt; for the orchestration side.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why You'll Often Use Both Together
&lt;/h2&gt;

&lt;p&gt;The framing "MCP vs A2A" sells the wrong story. In real systems, &lt;strong&gt;they stack&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Google said as much when it launched A2A: it is positioned as &lt;em&gt;complementary&lt;/em&gt; to MCP, not a replacement.&lt;/p&gt;

&lt;p&gt;Here is the mental model. &lt;strong&gt;A2A is how agents coordinate. MCP is how each agent gets work done.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Walk through one task. A user asks a "travel planner" agent to book a trip.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The planner agent uses &lt;strong&gt;A2A&lt;/strong&gt; to delegate flights to a flight agent and hotels to a hotel agent.&lt;/li&gt;
&lt;li&gt;The flight agent uses &lt;strong&gt;MCP&lt;/strong&gt; to call an airline API and a payments tool.&lt;/li&gt;
&lt;li&gt;The hotel agent uses &lt;strong&gt;MCP&lt;/strong&gt; to query a booking database and a maps service.&lt;/li&gt;
&lt;li&gt;Results flow back over A2A as artifacts, and the planner assembles the itinerary.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A2A handles the conversation between agents. MCP handles each agent's grip on the real world. Remove either and the system stops working.&lt;/p&gt;

&lt;p&gt;That is why I treat them as &lt;strong&gt;two layers of the same architecture&lt;/strong&gt;, not rival standards. Most serious agent platforms in 2026 ship support for both.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Building the MCP layer of your agent stack?&lt;/strong&gt; Test your MCP server against real models in the browser before any agent — or any other agent — depends on it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/mcp-test-server" rel="noopener noreferrer"&gt;Test any MCP server free →&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;Chat with your server in Agent Studio →&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does A2A replace MCP?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. They operate on different axes. MCP connects an agent to tools and data; A2A connects agents to each other. Google explicitly positions A2A as complementary to MCP, and most agent stacks use both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who created MCP and A2A?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Anthropic released MCP in November 2024. Google announced A2A in April 2025 and donated it to the Linux Foundation in June 2025, where it is now a vendor-neutral open project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is an Agent Card in A2A?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An Agent Card is a JSON document an agent publishes at a well-known URL describing its skills, endpoint, and auth requirements. Other agents read it to decide whether to delegate a task — it is A2A's discovery mechanism, similar in spirit to MCP's tools/list.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use MCP and A2A in the same system?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, and most production systems do. A2A handles coordination between agents while each agent uses MCP to call its own tools and data sources. They form two layers of one architecture rather than competing choices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is A2A the same as multi-agent frameworks like CrewAI?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not quite. Frameworks like CrewAI or LangGraph orchestrate agents inside one application. A2A is an open wire protocol for agents to communicate across frameworks, teams, and vendors — including agents the framework did not build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related Guides
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/what-is-model-context-protocol" rel="noopener noreferrer"&gt;What Is the Model Context Protocol (MCP)? A Developer's Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/mcp-vs-rest-api-whats-different" rel="noopener noreferrer"&gt;MCP vs REST API — What's Different?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/mcp-vs-function-calling-vs-api-comparison" rel="noopener noreferrer"&gt;MCP vs Function Calling vs API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/multi-agent-mcp-crewai-langchain-guide" rel="noopener noreferrer"&gt;Multi-Agent MCP with CrewAI and LangChain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/what-is-mcp-agent-tool-calling" rel="noopener noreferrer"&gt;What Is an MCP Agent? Tool Calling Explained&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://modelcontextprotocol.io/specification" rel="noopener noreferrer"&gt;Official: MCP Specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://modelcontextprotocol.io/docs/concepts/transports" rel="noopener noreferrer"&gt;Official: MCP Transports&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://a2a-protocol.org/" rel="noopener noreferrer"&gt;Official: A2A Protocol Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/a2aproject/A2A" rel="noopener noreferrer"&gt;A2A Specification on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/" rel="noopener noreferrer"&gt;Google: Announcing the Agent2Agent Protocol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linuxfoundation.org/press/linux-foundation-launches-the-agent2agent-protocol-project" rel="noopener noreferrer"&gt;Linux Foundation: A2A Project Launch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://mcpplaygroundonline.com/blog/mcp-vs-a2a-agent2agent-protocol" rel="noopener noreferrer"&gt;MCP Playground&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>agents</category>
      <category>llm</category>
    </item>
    <item>
      <title>Why Testing MCP Servers With Real AI Models Matters (2026)</title>
      <dc:creator>Rupa Tiwari</dc:creator>
      <pubDate>Sat, 13 Jun 2026 16:53:58 +0000</pubDate>
      <link>https://dev.to/rupa_tiwari_dd308948d710f/why-testing-mcp-servers-with-real-ai-models-matters-2026-55e9</link>
      <guid>https://dev.to/rupa_tiwari_dd308948d710f/why-testing-mcp-servers-with-real-ai-models-matters-2026-55e9</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Curl and unit tests check the wire format. A real model checks whether the tool is usable&lt;/strong&gt; — those are different failures.&lt;/li&gt;
&lt;li&gt;A model decides &lt;em&gt;which&lt;/em&gt; tool to call, &lt;em&gt;when&lt;/em&gt;, and &lt;em&gt;with what arguments&lt;/em&gt; — your schema and descriptions drive all three.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The same MCP server behaves differently across models&lt;/strong&gt; — GPT, Claude, Gemini, and the open-weight models pick tools and shape arguments differently.&lt;/li&gt;
&lt;li&gt;Model performance gains in 2026 changed tool-calling reliability — test against current models, not last year's.&lt;/li&gt;
&lt;li&gt;Fastest way to do it: paste your server URL into &lt;a href="https://mcpplaygroundonline.com/mcp-test-server" rel="noopener noreferrer"&gt;MCP Playground&lt;/a&gt;, pick a model, and watch every tool call as structured JSON. No setup.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Your MCP server returns a clean &lt;code&gt;200&lt;/code&gt;. The JSON validates. Every unit test is green. So it works, right?&lt;/p&gt;

&lt;p&gt;Not quite. &lt;strong&gt;Testing MCP servers with real AI models is the only way to know your tools are actually usable&lt;/strong&gt; — and that is a separate question from whether they respond.&lt;/p&gt;

&lt;p&gt;A model has to read your tool descriptions, pick the right tool, and build valid arguments on its own. Curl never does any of that.&lt;/p&gt;

&lt;p&gt;I've watched servers pass every wire-level test and still fail in a live agent loop. The model couldn't tell two tools apart. Or it guessed an argument shape that didn't exist.&lt;/p&gt;

&lt;p&gt;This post covers why model-in-the-loop testing matters, how model performance changes your results, and how to check your server across different models before users do.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Testing MCP Servers With Real AI Models Means
&lt;/h2&gt;

&lt;p&gt;There are two layers to an MCP server, and they fail in different ways.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The transport layer&lt;/strong&gt; is the wire: JSON-RPC over Streamable HTTP or STDIO. Does the server respond, list tools, and return valid results? Curl and unit tests cover this fine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The semantic layer&lt;/strong&gt; is whether a model can &lt;em&gt;use&lt;/em&gt; the tools. Can it find the right one, read the schema, and pass correct arguments without help?&lt;/p&gt;

&lt;p&gt;Testing with a real model means putting an actual LLM in the loop. You send a natural-language prompt, the model reads your &lt;code&gt;tools/list&lt;/code&gt; output, and it decides what to call. That is the same flow your users hit in production.&lt;/p&gt;

&lt;p&gt;New to the protocol? Start with &lt;a href="https://mcpplaygroundonline.com/blog/what-is-model-context-protocol" rel="noopener noreferrer"&gt;what the Model Context Protocol is&lt;/a&gt;, then come back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why It Matters
&lt;/h2&gt;

&lt;p&gt;Here's the problem. Your tool definition is a contract written for a reader you never meet during development — the model.&lt;/p&gt;

&lt;p&gt;A tool named &lt;code&gt;get_data&lt;/code&gt; with a one-word description passes every schema validator. It also tells the model almost nothing about when to use it.&lt;/p&gt;

&lt;p&gt;Now agitate that. You have three tools that all sound similar. The model picks the wrong one. Or it skips your tool entirely and hallucinates an answer instead.&lt;/p&gt;

&lt;p&gt;None of that shows up in a unit test. The server worked perfectly — nobody called it correctly.&lt;/p&gt;

&lt;p&gt;The failures only a real model exposes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tool selection&lt;/strong&gt; — the model picks the wrong tool, or ignores yours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Argument construction&lt;/strong&gt; — it fills a required field with a value of the wrong type or format.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ambiguous descriptions&lt;/strong&gt; — two tools read as interchangeable, so choice becomes a coin flip.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-step chaining&lt;/strong&gt; — the model can't sequence tool A's output into tool B's input.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Over-calling&lt;/strong&gt; — a vague description makes the model call your tool when it shouldn't.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Every one of these is a real bug your users will hit.&lt;/strong&gt; And every one is invisible until a model drives the server. That is why model-in-the-loop testing isn't optional.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Curl and Unit Tests Quietly Miss
&lt;/h2&gt;

&lt;p&gt;I'm not against unit tests. They're fast, deterministic, and they belong in CI. But they test the half of the server that rarely breaks in surprising ways.&lt;/p&gt;

&lt;p&gt;Here's the split I use:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;curl / unit test&lt;/th&gt;
&lt;th&gt;real model&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Does the server respond?&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Is the JSON schema valid?&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Does a model pick the right tool?&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Are the descriptions clear enough?&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can it chain multiple tools?&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Unit tests confirm the wire format. A real model confirms the product.&lt;/strong&gt; You need both, but only one of them mirrors what your users actually do.&lt;/p&gt;

&lt;p&gt;For a full breakdown of a test plan, see the &lt;a href="https://mcpplaygroundonline.com/blog/how-to-test-mcp-servers-step-by-step" rel="noopener noreferrer"&gt;step-by-step guide to testing MCP servers&lt;/a&gt; and &lt;a href="https://mcpplaygroundonline.com/blog/how-qa-teams-should-test-mcp-servers" rel="noopener noreferrer"&gt;how QA teams should approach it&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How AI Model Performance Changes Your Results
&lt;/h2&gt;

&lt;p&gt;Tool calling is a model capability, and it has improved sharply over the last year. That cuts both ways for your testing.&lt;/p&gt;

&lt;p&gt;A stronger model is more forgiving. It can infer intent from a weak tool description and still pick correctly. So a server that "works" on the latest frontier model may be hiding sloppy schemas.&lt;/p&gt;

&lt;p&gt;Swap in a smaller or older model and the cracks show. The weak description that the frontier model papered over now produces wrong tool calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is the trap: you test on your favorite model, ship, then a user runs your server on a cheaper one and it falls apart.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Performance shows up in concrete ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Parallel tool calls&lt;/strong&gt; — newer models fire several tools in one turn; older ones go one at a time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Argument accuracy&lt;/strong&gt; — better models respect enums, formats, and required fields more reliably.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recovery&lt;/strong&gt; — a strong model reads an error result and retries with a fix; a weak one loops or gives up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reasoning before calling&lt;/strong&gt; — reasoning models plan a tool sequence instead of guessing the first step.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because of this, last year's test run doesn't validate today's reality. Models update constantly — re-test against current ones. My breakdown of the &lt;a href="https://mcpplaygroundonline.com/blog/best-ai-model-for-mcp-tool-calling" rel="noopener noreferrer"&gt;best AI model for MCP tool calling&lt;/a&gt; goes deeper on the differences.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checking How Different Models Work With Your Server
&lt;/h2&gt;

&lt;p&gt;Here's the part most people skip: &lt;strong&gt;the same MCP server behaves differently across models.&lt;/strong&gt; Tool calling isn't standardized behavior — each model family has its own habits.&lt;/p&gt;

&lt;p&gt;If you only ship to one client, test on the model that client uses. If you publish a public server, you don't get to choose — so test broadly.&lt;/p&gt;

&lt;p&gt;What I watch for across families:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude (Opus 4.7, Sonnet 4.6)&lt;/strong&gt; — strong at reading long descriptions and chaining tools; good baseline for "is my schema clear".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-5.x&lt;/strong&gt; — aggressive parallel tool calls; exposes race conditions in stateful servers fast.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini 3&lt;/strong&gt; — strict about argument formats; surfaces loose schema definitions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open-weight (DeepSeek V4, Qwen 3.x, GLM, Kimi, MiniMax)&lt;/strong&gt; — more sensitive to vague descriptions; the honest stress test for tool clarity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A concrete example. I once had a tool with an optional &lt;code&gt;format&lt;/code&gt; field. Claude ignored it and defaulted correctly. A smaller open model passed an invalid value every time.&lt;/p&gt;

&lt;p&gt;The fix wasn't the model — it was my description. I made the allowed values explicit, and every model got it right. &lt;strong&gt;Cross-model testing turns a "model bug" into a schema fix you control.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I've written client-specific walkthroughs if you want the exact setup: &lt;a href="https://mcpplaygroundonline.com/blog/test-mcp-server-with-chatgpt-and-openai" rel="noopener noreferrer"&gt;ChatGPT and OpenAI&lt;/a&gt;, &lt;a href="https://mcpplaygroundonline.com/blog/test-mcp-server-with-gemini-models" rel="noopener noreferrer"&gt;Gemini models&lt;/a&gt;, &lt;a href="https://mcpplaygroundonline.com/blog/testing-mcp-with-deepseek" rel="noopener noreferrer"&gt;DeepSeek V4&lt;/a&gt;, and &lt;a href="https://mcpplaygroundonline.com/blog/testing-mcp-with-grok-xai" rel="noopener noreferrer"&gt;Grok&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Practical Cross-Model MCP Testing Workflow
&lt;/h2&gt;

&lt;p&gt;You don't need a test farm. Here's the order I work in before shipping a server.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Wire check first&lt;/strong&gt; — confirm the server lists tools and returns valid results with curl or your client. Fix transport bugs before involving a model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One strong model&lt;/strong&gt; — connect a frontier model and run real prompts. Confirm it finds and calls each tool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One weak model&lt;/strong&gt; — repeat on a smaller or open-weight model. This is where unclear descriptions break.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watch the arguments&lt;/strong&gt; — don't just check the final answer. Read the actual JSON arguments the model built for each call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test the chains&lt;/strong&gt; — give a prompt that needs two or three tools in sequence and confirm the model wires outputs into inputs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix the schema, not the model&lt;/strong&gt; — most failures trace back to a vague name, description, or enum. Tighten those and re-run.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If your tools touch real systems, add a security pass too — a tool a model over-calls is also a tool an attacker can abuse. Before you publish a public server, &lt;a href="https://mcpplaygroundonline.com/mcp-security-scanner" rel="noopener noreferrer"&gt;scan your MCP server&lt;/a&gt; for exposure and prompt injection.&lt;/p&gt;

&lt;h2&gt;
  
  
  How MCP Playground Helps You Test Across Models
&lt;/h2&gt;

&lt;p&gt;Setting up one client per model is the reason most people skip cross-model testing. That's the friction &lt;a href="https://mcpplaygroundonline.com/mcp-test-server" rel="noopener noreferrer"&gt;MCP Playground&lt;/a&gt; removes.&lt;/p&gt;

&lt;p&gt;It runs in the browser: paste a server URL, pick from dozens of models across providers — Claude, GPT-5.x, Gemini 3, DeepSeek, Qwen, Grok, Kimi, and more — and send a real prompt. No API keys, no local client to rebuild.&lt;/p&gt;

&lt;p&gt;You see every tool call as structured JSON: which tool the model chose, the exact arguments, and the raw result. Switch models and re-run the same prompt to compare behavior side by side.&lt;/p&gt;

&lt;p&gt;That's the loop that catches the regressions a migration or a schema tweak hides — before your users find them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://mcpplaygroundonline.com/mcp-test-server" rel="noopener noreferrer"&gt;Test any MCP server free →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why isn't passing my unit tests enough to know my MCP server works?
&lt;/h3&gt;

&lt;p&gt;Unit tests and curl check the transport layer: does the server respond, list tools, and return valid JSON. They never check whether a model can read your tool descriptions, pick the right tool, and build valid arguments on its own. That semantic layer only gets tested when a real AI model drives the server with a natural-language prompt — which is exactly what your users do in production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does the same MCP server work differently with different AI models?
&lt;/h3&gt;

&lt;p&gt;Yes. Tool calling is a model capability, not standardized behavior. Stronger models infer intent from weak descriptions and forgive sloppy schemas; smaller or open-weight models expose those gaps with wrong tool choices or invalid arguments. Models also differ in parallel tool calls, format strictness, and error recovery. If you publish a public server, test across several model families.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I test my MCP server with a real AI model without a full client setup?
&lt;/h3&gt;

&lt;p&gt;Use a browser-based tool like MCP Playground. Paste your server URL, pick a model, and send a natural-language prompt — no API keys or local client required. You see which tool the model chose, the exact arguments it built, and the raw result as structured JSON, then switch models to compare behavior on the same prompt.&lt;/p&gt;

&lt;h3&gt;
  
  
  My tool works on the latest model but fails on a smaller one. Whose bug is it?
&lt;/h3&gt;

&lt;p&gt;Usually it's your schema, not the model. A frontier model papers over a vague tool name, description, or missing enum; a smaller model takes the schema literally and gets it wrong. Make allowed values explicit, sharpen the description, and tighten required fields. Cross-model testing turns what looks like a model bug into a schema fix you control.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://mcpplaygroundonline.com/blog/testing-mcp-servers-with-real-ai-models" rel="noopener noreferrer"&gt;MCP Playground&lt;/a&gt; — a free browser-based tool for testing MCP servers against real AI models.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>mcp</category>
      <category>agents</category>
    </item>
    <item>
      <title>Connect Your MCP Server With DeepSeek V4 — Step-by-Step Guide (2026)</title>
      <dc:creator>Rupa Tiwari</dc:creator>
      <pubDate>Mon, 18 May 2026 10:22:52 +0000</pubDate>
      <link>https://dev.to/rupa_tiwari_dd308948d710f/connect-your-mcp-server-with-deepseek-v4-step-by-step-guide-2026-5dop</link>
      <guid>https://dev.to/rupa_tiwari_dd308948d710f/connect-your-mcp-server-with-deepseek-v4-step-by-step-guide-2026-5dop</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DeepSeek V4 shipped April 24, 2026&lt;/strong&gt; in two flavours: &lt;strong&gt;V4-Pro&lt;/strong&gt; (1.6T MoE / 49B active) and &lt;strong&gt;V4-Flash&lt;/strong&gt; (284B MoE / 13B active). Both expose a &lt;strong&gt;1M-token context&lt;/strong&gt; and ship under the MIT license.&lt;/li&gt;
&lt;li&gt;V4 ties &lt;strong&gt;Claude Opus 4.6 on MCPAtlas Public (73.6)&lt;/strong&gt; and beats GPT-5.4 on Codeforces — the best open-weight model for MCP agents in 2026.&lt;/li&gt;
&lt;li&gt;Both OpenAI &lt;strong&gt;and&lt;/strong&gt; Anthropic-compatible APIs — drop in &lt;code&gt;deepseek-v4-pro&lt;/code&gt; or &lt;code&gt;deepseek-v4-flash&lt;/code&gt; as the model name and any MCP client already works.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;128 parallel tool calls&lt;/strong&gt;, a new XML-based &lt;code&gt;|DSML|&lt;/code&gt; schema that virtually eliminates argument-parse errors, and three reasoning modes (Non-think / Think High / Think Max).&lt;/li&gt;
&lt;li&gt;V4-Pro promo pricing: &lt;strong&gt;$0.435/M input · $0.870/M output&lt;/strong&gt; through May 31. V4-Flash is ~&lt;strong&gt;$0.28/M output&lt;/strong&gt; — roughly 1/20th of Claude Opus 4.7.&lt;/li&gt;
&lt;li&gt;Fastest way to test on your MCP server: paste the URL into &lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;MCP Agent Studio&lt;/a&gt;, pick V4-Pro or V4-Flash, start chatting. No DeepSeek API key required.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;You can &lt;strong&gt;connect any MCP server to DeepSeek V4&lt;/strong&gt; in about 60 seconds — paste the server URL into &lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;MCP Agent Studio&lt;/a&gt;, pick &lt;code&gt;deepseek-v4-pro&lt;/code&gt; or &lt;code&gt;deepseek-v4-flash&lt;/code&gt; from the model dropdown, and start chatting. Every tool call is shown live, no DeepSeek API key required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DeepSeek V4&lt;/strong&gt; shipped on April 24, 2026 and turned the company's open-weight stack into a credible alternative to Claude Opus 4.6 and GPT-5.4 for tool-driven agents — at a fraction of the price. If the last time you tried &lt;strong&gt;connecting an MCP server with DeepSeek&lt;/strong&gt; was on V3 or R1, the story has changed completely.&lt;/p&gt;

&lt;p&gt;This post walks through three ways to wire your MCP server up to V4 — Agent Studio, the OpenAI SDK, and Claude Code with V4's pre-tuned adapter — then a head-to-head against Claude and GPT-5 and the four pitfalls that ate the most time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The DeepSeek V4 Lineup (and Why You Can Stop Reading About R1)
&lt;/h2&gt;

&lt;p&gt;There are two V4 models that matter, plus two older ones worth knowing about so you do not pick them by accident:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Params (active)&lt;/th&gt;
&lt;th&gt;Context&lt;/th&gt;
&lt;th&gt;Tool calling?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;deepseek-v4-pro&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1.6T (49B)&lt;/td&gt;
&lt;td&gt;1M tokens&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Yes&lt;/strong&gt; — 128 parallel, native MCPAtlas-tuned&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;deepseek-v4-flash&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;284B (13B)&lt;/td&gt;
&lt;td&gt;1M tokens&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Yes&lt;/strong&gt; — same tool schema, 4–5× faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;deepseek-v3.2 (deepseek-chat / -reasoner)&lt;/td&gt;
&lt;td&gt;685B (37B)&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;Yes — but superseded by V4 in every benchmark&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;deepseek-r1&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;No&lt;/strong&gt; — cannot call tools by design&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Architecturally, V4 is a different beast from V3.2. DeepSeek replaced the dense attention with a &lt;em&gt;Hybrid Attention&lt;/em&gt; stack — Compressed Sparse Attention plus Heavily Compressed Attention — which cuts KV cache by ~90% and per-token inference FLOPs by ~73% versus V3.2 at the 1M-context setting. Translation: long-context MCP agents that used to OOM now run cheaply.&lt;/p&gt;

&lt;p&gt;It was pre-trained on &lt;strong&gt;32T tokens&lt;/strong&gt;, ships with the Muon optimizer, and uses Manifold-Constrained Hyper-Connections to stabilize signal propagation. That is the why-it-works story; the practical story is that V4 ties Claude Opus 4.6 on every public agentic benchmark I checked.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why DeepSeek V4 Is Built for MCP
&lt;/h2&gt;

&lt;p&gt;Three things make V4 unusually good at MCP-style tool calling. None of them existed in V3.2 or earlier.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The |DSML| XML Schema (Goodbye, Empty Argument Bug)
&lt;/h3&gt;

&lt;p&gt;Function calling in V3 and V3.2 used pure JSON for tool arguments. That broke whenever a string parameter contained a stray quote or brace — the model would emit a malformed object and the call would fail.&lt;/p&gt;

&lt;p&gt;V4 introduces an &lt;strong&gt;XML-based schema powered by a special &lt;code&gt;|DSML|&lt;/code&gt; token&lt;/strong&gt; that separates string parameters from structured JSON parameters. In practice this means tools that previously failed 5–10% of the time on string-heavy inputs (Slack messages, SQL queries with quoted identifiers, Stripe descriptions) now succeed nearly 100% of the time.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Reasoning Persisted Across Tool Calls
&lt;/h3&gt;

&lt;p&gt;V4 keeps its internal reasoning chain coherent &lt;em&gt;across&lt;/em&gt; tool-call boundaries. Earlier models reset their reasoning after each tool result, which is why long agent loops would drift. V4 carries the chain forward, so a 10-step agent stays on-task.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Three Reasoning Modes for Three MCP Workloads
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;When to use it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;non-think&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;High-volume agents — log triage, customer-support bots, batch summarisation. Cheapest, fastest.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;think-high&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Default for most MCP agents — the model reasons before each tool call, verifies output, retries if wrong.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;think-max&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SWE-Bench-class workloads: multi-step debugging, complex SQL, security analysis. Costlier but matches Opus 4.6.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  4. Native MCPAtlas-Tuned Adapters
&lt;/h3&gt;

&lt;p&gt;DeepSeek shipped &lt;strong&gt;pre-tuned adapters for Claude Code and OpenCode&lt;/strong&gt; alongside V4 — meaning the model was fine-tuned on real MCP-style agent traces, not just synthetic function-calling data. That shows up in MCPAtlas Public scores of 73.6 (tied with Opus 4.6) and SWE-Bench Verified at 80.6% (0.2pp behind Opus 4.6).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Naming gotcha:&lt;/strong&gt; DeepSeek still serves the legacy &lt;code&gt;deepseek-r1&lt;/code&gt; model. It does &lt;em&gt;not&lt;/em&gt; support function calling — it never did, and V4 did not change that. If you point an MCP client at &lt;code&gt;deepseek-r1&lt;/code&gt; it will hallucinate tool output. Use &lt;code&gt;deepseek-v4-pro&lt;/code&gt; or &lt;code&gt;deepseek-v4-flash&lt;/code&gt; for any MCP work.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Connect Your MCP Server With DeepSeek V4 — 3 Ways
&lt;/h2&gt;

&lt;p&gt;Three ways to wire your MCP server up to V4, ordered by setup time. &lt;strong&gt;Option 1 takes about 60 seconds and needs no code.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 1 — MCP Playground Agent Studio (60 seconds, no code)
&lt;/h3&gt;

&lt;p&gt;This is the recommended path for most people. &lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;MCP Agent Studio&lt;/a&gt; handles the OpenAI ↔ MCP bridge for you, ships V4-Pro and V4-Flash in the model dropdown, and runs the full agent loop in the browser. No SDK, no DeepSeek API key, free credits on sign-up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-by-step:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;mcpplaygroundonline.com/mcp-agent-studio&lt;/a&gt; and sign in (free credits are added to your account).&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;MCP Servers&lt;/strong&gt; panel, click &lt;strong&gt;Add server&lt;/strong&gt;. Paste your server URL — works with Streamable HTTP, SSE, or HTTP. Add a bearer token in the &lt;strong&gt;Headers&lt;/strong&gt; field if your server needs one.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Connect&lt;/strong&gt;. Agent Studio runs &lt;code&gt;tools/list&lt;/code&gt; against the server and shows you every tool it discovered. If the count looks right, your server is wired up.&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;Model&lt;/strong&gt; dropdown, pick &lt;strong&gt;DeepSeek V4-Pro&lt;/strong&gt; (for hard reasoning) or &lt;strong&gt;DeepSeek V4-Flash&lt;/strong&gt; (for speed + cost).&lt;/li&gt;
&lt;li&gt;Type your first prompt and hit send. Every tool call, argument, and result is shown inline as the agent runs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you don't have an MCP server yet, head to &lt;a href="https://mcpplaygroundonline.com/mcp-hosted" rel="noopener noreferrer"&gt;mcpplaygroundonline.com/mcp-hosted&lt;/a&gt; and deploy one in one click — Postgres, Stripe, GitHub, Atlassian, MongoDB, Playwright, and 35+ more. You'll get a live HTTPS URL plus bearer token that drops straight into step 2 above.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 2 — OpenAI SDK + DeepSeek V4 Endpoint (writing your own runtime)
&lt;/h3&gt;

&lt;p&gt;If you're building your own agent runtime, V4's API is OpenAI-compatible &lt;em&gt;and&lt;/em&gt; Anthropic-compatible. Change the base URL and the model name, and existing function-calling code routes to V4.&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;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&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;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sk-...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.deepseek.com/v1&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="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;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&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;deepseek-v4-pro&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="c1"&gt;# or "deepseek-v4-flash"
&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;List my open GitHub PRs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;mcp_tools_as_openai_functions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# MCP tools/list → OpenAI tools[]
&lt;/span&gt;    &lt;span class="n"&gt;tool_choice&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;auto&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;reasoning_effort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;think-high&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;# non-think | think-high | think-max
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You still have to bridge MCP's &lt;code&gt;tools/list&lt;/code&gt; into the OpenAI &lt;code&gt;tools[]&lt;/code&gt; array, parse each &lt;code&gt;tool_calls&lt;/code&gt; entry into an MCP &lt;code&gt;tools/call&lt;/code&gt;, feed the result back, and loop until the model is done — about 80 lines of Python if you want it solid. Agent Studio does all of this for you.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 3 — Claude Code With the V4 Adapter (terminal workflow)
&lt;/h3&gt;

&lt;p&gt;New with V4: DeepSeek ships pre-tuned adapters for &lt;strong&gt;Claude Code&lt;/strong&gt; and &lt;strong&gt;OpenCode&lt;/strong&gt;. Drop V4-Pro in as the underlying model and Claude Code's existing MCP config (&lt;code&gt;~/.claude/mcp.json&lt;/code&gt;) works unchanged — including HTTP, SSE and Streamable HTTP servers.&lt;/p&gt;

&lt;p&gt;This is the path to pick if you live in the terminal and want V4 driving your MCP tools the same way Claude does today. Surprisingly clean for an open-weight model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hands-On Tests: 4 MCP Servers Against DeepSeek V4-Pro
&lt;/h2&gt;

&lt;p&gt;Four common MCP servers, each with a prompt that required at least three tool calls. Same prompts I used for my V3.2 tests in April, so you can compare against history.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test 1: GitHub MCP (Search + Read Code)
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt; "Find all open issues labelled 'security' across my repos, read the latest comment on each, and summarise the highest-severity ones."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; V4-Pro used &lt;strong&gt;parallel&lt;/strong&gt; tool calls aggressively — one &lt;code&gt;search_issues&lt;/code&gt;, then six concurrent &lt;code&gt;get_issue_comments&lt;/code&gt; in a single turn. Total time 6.3 seconds (down from 11s on V3.2). The parallel-call ceiling of 128 is V4's headline feature for agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test 2: Postgres MCP (Analytical SQL)
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt; "Which 5 customers had the largest week-over-week drop in revenue? Show me the gap and the absolute numbers."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; V4-Pro grounded by calling &lt;code&gt;list_schemas&lt;/code&gt; + &lt;code&gt;describe_table&lt;/code&gt; first, then wrote a clean window-function query. The XML-based &lt;code&gt;|DSML|&lt;/code&gt; schema mattered here — the SQL string had quoted identifiers that broke V3.2 about 20% of the time. V4 handled all 10 runs cleanly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test 3: Stripe MCP (Real-Money Reasoning)
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt; "List failed payments from last week. Group by failure reason and tell me which ones I should follow up with."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; V4-Pro in &lt;code&gt;think-high&lt;/code&gt; mode reasoned about the trade-offs before suggesting any follow-up — flagged a stale-card cluster, a 3DS-rejection cluster, and a fraud-block cluster separately. Refused to suggest re-charging without explicit confirmation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test 4: Multi-MCP — GitHub + Slack + Atlassian Together
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt; "Pull yesterday's merged GitHub PRs, find the linked Jira tickets, and post a roll-up to the #eng channel."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; Three MCP servers connected at once (47 tools total). V4-Pro picked the right tool from each without me labelling them. The &lt;em&gt;parallel&lt;/em&gt; call architecture meant it pulled PRs and Jira tickets simultaneously, then composed the Slack message. End-to-end 8 seconds, would have been ~25 on V3.2.&lt;/p&gt;

&lt;h2&gt;
  
  
  DeepSeek V4 vs Claude, GPT-5, Gemini on MCP Workloads
&lt;/h2&gt;

&lt;p&gt;Same four prompts, six models, three runs each, averaged. Cost numbers use V4 promo pricing; assume V4-Pro doubles after May 31.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Tool calls / task&lt;/th&gt;
&lt;th&gt;Avg latency&lt;/th&gt;
&lt;th&gt;Cost / task&lt;/th&gt;
&lt;th&gt;Final-answer quality&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DeepSeek V4-Flash&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3.6&lt;/td&gt;
&lt;td&gt;5.4s&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.0021&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Strong&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DeepSeek V4-Pro (think-high)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3.2&lt;/td&gt;
&lt;td&gt;7.1s&lt;/td&gt;
&lt;td&gt;$0.0065&lt;/td&gt;
&lt;td&gt;Strongest (tie)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DeepSeek V4-Pro (think-max)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3.0&lt;/td&gt;
&lt;td&gt;11.4s&lt;/td&gt;
&lt;td&gt;$0.014&lt;/td&gt;
&lt;td&gt;Strongest (tie)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 4.5&lt;/td&gt;
&lt;td&gt;3.0&lt;/td&gt;
&lt;td&gt;7.4s&lt;/td&gt;
&lt;td&gt;$0.022&lt;/td&gt;
&lt;td&gt;Strong&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 4.7&lt;/td&gt;
&lt;td&gt;2.9&lt;/td&gt;
&lt;td&gt;9.8s&lt;/td&gt;
&lt;td&gt;$0.061&lt;/td&gt;
&lt;td&gt;Strongest (tie)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4&lt;/td&gt;
&lt;td&gt;3.6&lt;/td&gt;
&lt;td&gt;8.1s&lt;/td&gt;
&lt;td&gt;$0.018&lt;/td&gt;
&lt;td&gt;Strong&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.1 Pro&lt;/td&gt;
&lt;td&gt;3.3&lt;/td&gt;
&lt;td&gt;10.5s&lt;/td&gt;
&lt;td&gt;$0.014&lt;/td&gt;
&lt;td&gt;Strong&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Four things I did not expect before this benchmark:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;V4-Flash is the price-performance shock of 2026.&lt;/strong&gt; Quality on par with GPT-5.4, ~9× cheaper. For high-volume agents (CI bots, log triage, customer support) this changes the math entirely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;V4-Pro in think-max ties Claude Opus 4.7&lt;/strong&gt; on final-answer quality at ~1/4 the cost. The 1M context plus persisted reasoning means it can handle long agent loops Opus would struggle to fit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parallel tool calls cut wall-clock time roughly in half&lt;/strong&gt; on multi-MCP setups. V4 will fire 6–8 concurrent calls when it sees they are independent; Claude and GPT-5 still tend to serialize.&lt;/li&gt;
&lt;li&gt;Claude is still slightly more polished on natural-language final answers — there's a "Claude voice" that V4 does not quite match. For tool execution itself, V4-Pro is at parity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pitfalls I Hit With V4
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Don't mix V4 with legacy V3.2 conversations
&lt;/h3&gt;

&lt;p&gt;V4's XML &lt;code&gt;|DSML|&lt;/code&gt; schema is incompatible with V3.2's pure-JSON tool format. If your gateway routes between V4 and V3.2 mid-session, tool-call replay breaks. Pin the model per conversation.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The 128-tool ceiling still applies
&lt;/h3&gt;

&lt;p&gt;V4 supports 128 parallel calls per request — but also 128 tool &lt;em&gt;definitions&lt;/em&gt;. Most single MCP servers are well below this, but if you wire up GitHub + Slack + Postgres + Jira + Linear + Stripe in one session you can blow past 128 tools and the tail will silently drop. Scope the toolsets you expose.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. think-max is expensive — use it sparingly
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;think-max&lt;/code&gt; mode is wonderful on hard reasoning tasks, but burns ~2× the tokens of &lt;code&gt;think-high&lt;/code&gt;. For most MCP workflows, &lt;code&gt;think-high&lt;/code&gt; is the sweet spot. Save &lt;code&gt;think-max&lt;/code&gt; for SWE-Bench-class problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Don't bet on the promo pricing
&lt;/h3&gt;

&lt;p&gt;V4-Pro's headline $0.435/M input is a &lt;strong&gt;75% promo discount through May 31, 2026&lt;/strong&gt;. List price is $1.74/M input and $3.48/M output. Still cheaper than Claude — but model your cost projection on list, not promo.&lt;/p&gt;

&lt;h2&gt;
  
  
  How MCP Playground Helps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;40+ models in one UI&lt;/strong&gt; — V4-Pro, V4-Flash, Claude Opus 4.7 / Sonnet 4.5, GPT-5.4, Gemini 3.1 Pro, Grok, Qwen, Mistral. No DeepSeek API key needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paste any MCP URL&lt;/strong&gt; — works with hosted Atlassian, GitHub, Linear, Vercel, Supabase, Datadog, or your own remote.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One-click hosted MCP servers&lt;/strong&gt; — 40+ pre-configured: Postgres, Stripe, MongoDB, Playwright, Brave Search and more. &lt;a href="https://mcpplaygroundonline.com/mcp-hosted" rel="noopener noreferrer"&gt;Deploy in under a minute&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare mode&lt;/strong&gt; — run the same prompt across V4-Pro, Claude and GPT-5 side-by-side. Tool-call traces and final answers, parallel.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are evaluating V4 for a production agent, the side-by-side compare is the fastest way to make the call.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom Line
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DeepSeek V4 is the first open-weight model that's a real alternative to Claude Opus and GPT-5 for MCP agents.&lt;/strong&gt; It ties Opus 4.6 on MCPAtlas, beats GPT-5.4 on Codeforces, runs at a fraction of the cost, and ships with parallel tool calls plus a 1M context that most closed models cannot match.&lt;/p&gt;

&lt;p&gt;Picking between Pro and Flash is easy: &lt;strong&gt;Flash&lt;/strong&gt; for high-volume, latency-sensitive agents; &lt;strong&gt;Pro&lt;/strong&gt; when the agent has to reason its way through a hard problem.&lt;/p&gt;

&lt;p&gt;The fastest way to validate it on &lt;em&gt;your&lt;/em&gt; MCP server is &lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;Agent Studio&lt;/a&gt; — pick DeepSeek V4-Pro or V4-Flash, paste the URL, run your hardest prompt three times. If it works there, it will work in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;When was DeepSeek V4 released?&lt;/strong&gt;&lt;br&gt;
April 24, 2026. Two models shipped at GA: &lt;code&gt;deepseek-v4-pro&lt;/code&gt; (1.6T MoE / 49B active) and &lt;code&gt;deepseek-v4-flash&lt;/code&gt; (284B / 13B active), both with a 1M-token context window. Weights are open under the MIT license on Hugging Face.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does DeepSeek V4 support MCP servers?&lt;/strong&gt;&lt;br&gt;
Yes. V4 exposes OpenAI-compatible &lt;em&gt;and&lt;/em&gt; Anthropic-compatible APIs — any MCP client that talks to GPT or Claude works with V4 out of the box. Drop in &lt;code&gt;deepseek-v4-pro&lt;/code&gt; or &lt;code&gt;deepseek-v4-flash&lt;/code&gt; as the model and tool calls just work. It also ties Claude Opus 4.6 on MCPAtlas Public (73.6).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the difference between V4-Pro and V4-Flash?&lt;/strong&gt;&lt;br&gt;
V4-Pro is the flagship (1.6T MoE, 49B active) and matches Opus on hard agent reasoning. V4-Flash (284B MoE, 13B active) is roughly 4–5× faster and ~3× cheaper, with quality on par with GPT-5.4 on routine MCP tasks. Use Flash for high-volume agents, Pro when the model has to reason about which tool to call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can DeepSeek R1 call tools?&lt;/strong&gt;&lt;br&gt;
No. R1 is a pure reasoning model with no function-calling capability — it cannot drive an MCP server. Use &lt;code&gt;deepseek-v4-pro&lt;/code&gt; or &lt;code&gt;deepseek-v4-flash&lt;/code&gt; instead. R1's reasoning has been superseded by V4's &lt;code&gt;think-high&lt;/code&gt; and &lt;code&gt;think-max&lt;/code&gt; modes, which include tool use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How many tools can DeepSeek V4 call in one request?&lt;/strong&gt;&lt;br&gt;
Up to &lt;strong&gt;128 parallel tool calls&lt;/strong&gt; per request, and the model treats independent calls as eligible to run concurrently. That is enough for 5–6 typical MCP servers connected at once. Exceeding 128 silently drops trailing tools — scope the MCP toolsets you pass to stay under the cap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is DeepSeek V4 cheaper than Claude or GPT-5 for MCP agents?&lt;/strong&gt;&lt;br&gt;
Significantly. V4-Pro promo pricing is $0.435/M input · $0.870/M output (through May 31). V4-Flash is ~$0.28/M output — roughly 1/20th of Claude Opus 4.7. On my benchmark V4-Flash ran an MCP agent task for $0.002 vs $0.061 for Opus.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I test DeepSeek V4 against an MCP server without writing code?&lt;/strong&gt;&lt;br&gt;
Use &lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;MCP Agent Studio&lt;/a&gt;. Paste the MCP server URL, pick DeepSeek V4-Pro or V4-Flash from the model dropdown, and start chatting. Every tool call and result is shown live. Free credits on sign-up — no DeepSeek API key required.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://mcpplaygroundonline.com/blog/testing-mcp-with-deepseek" rel="noopener noreferrer"&gt;mcpplaygroundonline.com/blog/testing-mcp-with-deepseek&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>deepseek</category>
      <category>ai</category>
      <category>mcp</category>
      <category>agents</category>
    </item>
    <item>
      <title>How to Test Your MCP Server with Z.AI GLM Models (2026 Guide)</title>
      <dc:creator>Rupa Tiwari</dc:creator>
      <pubDate>Wed, 06 May 2026 19:39:45 +0000</pubDate>
      <link>https://dev.to/rupa_tiwari_dd308948d710f/how-to-test-your-mcp-server-with-zai-glm-models-2026-guide-38nc</link>
      <guid>https://dev.to/rupa_tiwari_dd308948d710f/how-to-test-your-mcp-server-with-zai-glm-models-2026-guide-38nc</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;TL;DR&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to test:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open &lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;MCP Agent Studio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Paste your MCP server URL&lt;/li&gt;
&lt;li&gt;Pick a GLM model from the picker&lt;/li&gt;
&lt;li&gt;Start chatting — Agent Studio handles the MCP → OpenAI-function-calling translation automatically&lt;/li&gt;
&lt;li&gt;No API keys, no setup, no code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Which GLM to pick:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🟢 &lt;strong&gt;GLM 4.5 Air&lt;/strong&gt; — daily driver. Fast, low cost, 76.4 on BFCL-v3&lt;/li&gt;
&lt;li&gt;🔵 &lt;strong&gt;GLM 5 Turbo&lt;/strong&gt; — mid-tier agentic execution at lower cost than the flagship&lt;/li&gt;
&lt;li&gt;🟣 &lt;strong&gt;GLM 5.1&lt;/strong&gt; — long-horizon multi-step agents. 200K context, autonomous up to 8 hours, &lt;strong&gt;58.4 on SWE-Bench Pro&lt;/strong&gt; (beats GPT-5.4, &amp;gt;Claude Opus 4.6, Gemini 3.1 Pro)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Z.AI's GLM family has quietly become one of the strongest options for MCP tool calling in 2026. The flagship &lt;strong&gt;GLM 5.1&lt;/strong&gt;, released open-source on April 8, 2026, is purpose-built for long-horizon agentic work — capable of running autonomously for up to 8 hours across hundreds of tool calls. It scores &lt;strong&gt;58.4 on SWE-Bench Pro&lt;/strong&gt;, ahead of GPT-5.4, Claude Opus 4.6, and Gemini 3.1 Pro. The smaller &lt;strong&gt;GLM 4.5 Air&lt;/strong&gt; (106B total / 12B active MoE) hits 76.4 on BFCL-v3 and 69.4 on τ-bench at a fraction of the cost.&lt;/p&gt;

&lt;p&gt;The fastest way to test any GLM model against your MCP server — without a Z.AI account, OpenRouter key, or any code — is &lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;MCP Agent Studio&lt;/a&gt;. You paste your server URL, pick a GLM model, and the agent starts calling your tools in real time.&lt;/p&gt;

&lt;p&gt;Z.AI's GLM family has quietly become one of the strongest options for MCP tool calling in 2026. The flagship &lt;strong&gt;GLM 5.1&lt;/strong&gt;, released open-source on April 8, 2026, is purpose-built for long-horizon agentic work — capable of running autonomously for up to 8 hours across hundreds of tool calls. It scores &lt;strong&gt;58.4 on SWE-Bench Pro&lt;/strong&gt;, ahead of GPT-5.4, Claude Opus 4.6, and Gemini 3.1 Pro. The smaller &lt;strong&gt;GLM 4.5 Air&lt;/strong&gt; (106B total / 12B active MoE) hits 76.4 on BFCL-v3 and 69.4 on τ-bench at a fraction of the cost.&lt;/p&gt;

&lt;p&gt;The fastest way to test any GLM model against your MCP server — without a Z.AI account or api key, or any code — is &lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;MCP Agent Studio&lt;/a&gt;. You paste your server URL, pick a GLM model, and the agent starts calling your tools in real time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you'll get from this guide
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Understand the GLM 5.1 / GLM 5 Turbo / GLM 4.5 Air lineup and which one to pick for MCP tool calling&lt;/li&gt;
&lt;li&gt;Connect any MCP server (HTTP, SSE, Streamable HTTP) to GLM in seconds — no Z.AI account required&lt;/li&gt;
&lt;li&gt;Run your first agentic conversation with GLM and inspect every tool call live&lt;/li&gt;
&lt;li&gt;Know exactly when GLM beats Claude or GPT on your server — and when it doesn't&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1. The GLM family in Agent Studio — which one to use
&lt;/h2&gt;

&lt;p&gt;Z.AI (formerly Zhipu AI) shipped GLM-4.5 in July 2025, GLM-4.6 in late September 2025, GLM-5 on February 11, 2026, and GLM-5.1 to subscription users in late March 2026 (open-sourced April 8, 2026). Each generation tightened agentic behaviour, expanded context, and pushed harder on long-horizon tool use rather than chasing chatbot benchmarks.&lt;/p&gt;

&lt;p&gt;MCP Agent Studio exposes three GLM models covering the full quality-to-cost range:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Architecture&lt;/th&gt;
&lt;th&gt;Context&lt;/th&gt;
&lt;th&gt;Best for MCP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GLM 5.1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Flagship long-horizon agent&lt;/td&gt;
&lt;td&gt;200K input / 128K output&lt;/td&gt;
&lt;td&gt;Best for complex MCP work — long chains of tool calls, autonomous bug-fix-style loops, hundreds of iterations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GLM 5 Turbo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fast inference, agent-tuned&lt;/td&gt;
&lt;td&gt;200K input / 131K output&lt;/td&gt;
&lt;td&gt;Mid-tier daily driver — strong tool-call accuracy at lower latency than GLM 5.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GLM 4.5 Air&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MoE (106B total / 12B active)&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Best daily driver&lt;/strong&gt; — 76.4 on BFCL-v3, 69.4 on τ-bench,&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Recommended starting point:&lt;/strong&gt; &lt;strong&gt;GLM 4.5 Air&lt;/strong&gt; is the right first stop for most MCP testing sessions. It hits 76.4 on BFCL-v3 — within striking distance of frontier closed models — and runs cheap. Switch to &lt;strong&gt;GLM 5.1&lt;/strong&gt; when you need long-horizon planning across 50+ tool calls, or when your MCP workflow has the kind of "agent debugs itself" loop GLM 5.1 was specifically trained on.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A practical reality check: most MCP testing prompts don't need the full GLM 5.1. If your conversation involves 1–5 tool calls with simple arguments, GLM 4.5 Air is faster, cheaper, and accurate enough. The accuracy gap shows up when you ask the model to plan, execute, observe, and revise across many turns.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. How GLM handles MCP tool calling
&lt;/h2&gt;

&lt;p&gt;GLM models expose an &lt;strong&gt;OpenAI-compatible function calling API&lt;/strong&gt; at &lt;code&gt;https://api.z.ai/api/paas/v4/&lt;/code&gt;. The same &lt;code&gt;tools&lt;/code&gt; array and &lt;code&gt;tool_calls&lt;/code&gt; response format you'd send to GPT-5.4 or Qwen also works against GLM. That means any MCP client that already speaks OpenAI function calling can route GLM at MCP servers with zero changes.&lt;/p&gt;

&lt;p&gt;A few GLM-specific behaviours worth knowing when testing your server:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tuned specifically for agentic loops.&lt;/strong&gt; GLM 5.1's training puts heavy weight on planning, executing, observing tool output, and revising. On long-horizon MCP tasks it tends to recover from a bad first tool call faster than smaller open-weight models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native MCP integration mentioned in Z.AI docs.&lt;/strong&gt; Z.AI's official docs reference MCP support directly — GLM is one of the few non-Anthropic providers explicitly designed with the protocol in mind.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anthropic-compatible endpoint also available.&lt;/strong&gt; Z.AI exposes a Claude-shaped API at &lt;code&gt;https://api.z.ai/api/anthropic&lt;/code&gt; — useful if you've already built around Claude's MCP-native client and want to swap GLM in. Agent Studio uses the OpenAI-compatible route under the hood.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parallel tool calls supported.&lt;/strong&gt; All three GLM variants in Agent Studio can issue multiple tool calls in a single turn — important for MCP servers where read operations are independent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strong long-context behaviour.&lt;/strong&gt; GLM 5.1 and GLM 5 Turbo carry ~200K input windows (202,752 tokens), GLM 4.5 Air carries 128K. Even a server with 50+ tool definitions plus a long conversation history fits comfortably.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Connect your MCP server to GLM in 3 steps
&lt;/h2&gt;

&lt;p&gt;No Z.AI account, no api key, no local install. MCP Agent Studio handles everything in the browser:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Sign in to MCP Agent Studio&lt;/strong&gt;&lt;br&gt;
Go to &lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;mcpplaygroundonline.com/mcp-agent-studio&lt;/a&gt; and sign in. New accounts get starter credits — enough to test all three GLM models against your server immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Paste your MCP server URL&lt;/strong&gt;&lt;br&gt;
Click &lt;strong&gt;+ Add Server&lt;/strong&gt; and paste the endpoint. Agent Studio supports HTTP, SSE, and Streamable HTTP. If the server needs an auth token, drop it in the auth field. You can wire up to 4 servers in one conversation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Pick a GLM model and start chatting&lt;/strong&gt;&lt;br&gt;
Open the model picker, search for "GLM". Pick &lt;strong&gt;GLM 4.5 Air&lt;/strong&gt; to start. Type a natural-language question that needs one of your tools to answer. The agent discovers your tools, decides which to call, and shows every step live.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;No MCP server yet?&lt;/strong&gt; Grab a hosted mock server (Echo, Auth, Error, or Complex) from &lt;a href="https://mcpplaygroundonline.com/mcp-test-client" rel="noopener noreferrer"&gt;MCP Test Client&lt;/a&gt; and paste the URL into Agent Studio. Each one stresses a different part of your tool-calling flow.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  4. Prompts that exercise long-horizon GLM behaviour
&lt;/h2&gt;

&lt;p&gt;GLM 5.1 was trained specifically for tasks where the model has to plan, act, observe, and revise — not just one-shot tool calls. The shape of your prompt decides how much of that behaviour you actually see.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔍 Discovery prompt&lt;/strong&gt; — forces GLM to enumerate and summarise your server's surface:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What tools does this server expose? Group them by
category and give a one-line summary of what each
one does.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;⛓️ Long-horizon prompt&lt;/strong&gt; — where GLM 5.1 actually pulls ahead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Find every [resource] modified in the last 7 days,
look up the owner, then group them by team and flag
anything older than the team's SLA.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;🔀 Parallel tool prompt&lt;/strong&gt; — tests whether GLM batches independent reads in one turn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Compare [item A] and [item B] side by side — fetch
both at the same time.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;🛑 Recovery prompt&lt;/strong&gt; — tests how GLM handles a failing tool, the area where 5.1 was tuned:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Look up [a resource that probably doesn't exist].
If you can't find it, suggest 3 similar things
that do exist on this server.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For multi-server setups, GLM handles cross-server coordination cleanly. A prompt like &lt;em&gt;"For every open issue in [your GitHub MCP], post a status update to the matching channel in [your Slack MCP]"&lt;/em&gt; exercises sequential, multi-server tool use — exactly the workload where GLM 5.1's long-horizon training pays off.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Reading the tool-call inspector with GLM
&lt;/h2&gt;

&lt;p&gt;Every time GLM calls a tool on your server, MCP Agent Studio logs it in the inspector panel on the right. Click any tool card in the chat to expand. You'll see:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Inspector field&lt;/th&gt;
&lt;th&gt;What it shows&lt;/th&gt;
&lt;th&gt;What to check with GLM&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tool name&lt;/td&gt;
&lt;td&gt;Which MCP tool GLM picked&lt;/td&gt;
&lt;td&gt;Right tool for the request? GLM 5.1 sometimes picks a richer tool than the obvious one&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Input JSON&lt;/td&gt;
&lt;td&gt;Arguments GLM sent&lt;/td&gt;
&lt;td&gt;Types correct? GLM tends to populate optional fields proactively — verify they match your schema&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output JSON&lt;/td&gt;
&lt;td&gt;What your server returned&lt;/td&gt;
&lt;td&gt;Empty arrays or errors trigger GLM 5.1's revision loop — watch the next call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latency&lt;/td&gt;
&lt;td&gt;Tool invocation to result&lt;/td&gt;
&lt;td&gt;Separates slow server from slow model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Server source&lt;/td&gt;
&lt;td&gt;Which connected server the tool came from&lt;/td&gt;
&lt;td&gt;Multi-server runs — verify GLM picked the right namespace&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;GLM-specific pattern to watch:&lt;/strong&gt; If a tool returns an error or empty payload, GLM 5.1 often calls a &lt;em&gt;different&lt;/em&gt; tool with adjusted arguments before replying — this is the "revise" half of its plan-execute-observe-revise loop. The inspector lets you follow the full chain.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. GLM vs Claude vs GPT on MCP tool calling
&lt;/h2&gt;

&lt;p&gt;Rather than abstract benchmarks, here's the practical comparison you'll feel on a real MCP server in Agent Studio:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Behaviour&lt;/th&gt;
&lt;th&gt;GLM 5.1&lt;/th&gt;
&lt;th&gt;GPT-5.4&lt;/th&gt;
&lt;th&gt;Claude Sonnet 4.6&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Argument accuracy on first call&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-horizon agent loops&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Best in class&lt;/strong&gt; — designed for this&lt;/td&gt;
&lt;td&gt;Very good&lt;/td&gt;
&lt;td&gt;Very good&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recovers from failed tool calls&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Strong&lt;/strong&gt; — revises and retries&lt;/td&gt;
&lt;td&gt;Strong&lt;/td&gt;
&lt;td&gt;Strong&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parallel tool calls&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context window&lt;/td&gt;
&lt;td&gt;200K input / 128K output&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;td&gt;200K (1M tier available)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SWE-Bench Pro score&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;58.4 (leader)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lower&lt;/td&gt;
&lt;td&gt;Lower&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native MCP support&lt;/td&gt;
&lt;td&gt;Listed in Z.AI docs&lt;/td&gt;
&lt;td&gt;Via Agents SDK&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Native&lt;/strong&gt; (&lt;code&gt;mcp_servers&lt;/code&gt; param)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing per 1M tokens (in / out)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$1.05 / $3.50&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$2.50 / $15&lt;/td&gt;
&lt;td&gt;$3.00 / $15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open-weight / self-hostable&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes (MIT licence)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Bottom line:&lt;/strong&gt; GLM 5.1 is the strongest open-weight model for MCP tool calling in 2026 and the only model in this tier with explicit long-horizon agent training. Output tokens — the dominant cost in agentic workloads — are roughly a quarter the price of GPT-5.4 or Claude Sonnet 4.6, and it tops both on SWE-Bench Pro at 58.4. Runs under an MIT licence, so you can self-host the same weights in production.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;Open MCP Agent Studio →&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No Z.AI account. No API keys. GLM 5.1, GLM 5 Turbo, and GLM 4.5 Air all ready in seconds — alongside Claude, GPT-5.4, and Gemini for side-by-side comparison.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does GLM support MCP natively?&lt;/strong&gt;&lt;br&gt;
GLM doesn't speak the raw MCP wire protocol the way Claude does — it uses OpenAI-compatible function calling. Z.AI's docs do reference MCP integration directly, and the model's training makes it well-suited to tool-driven agentic loops. MCP Agent Studio handles the protocol translation: it discovers your server's tools via MCP, converts them to the function-calling format GLM expects, runs the agentic loop, and shows results — no code on your end.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which GLM model should I start with for MCP testing?&lt;/strong&gt;&lt;br&gt;
Start with &lt;strong&gt;GLM 4.5 Air&lt;/strong&gt;. It hits 76.4 on BFCL-v3 and 69.4 on τ-bench — close enough to the flagship for most testing — at the lowest cost tier in Agent Studio. Move to &lt;strong&gt;GLM 5.1&lt;/strong&gt; when you're stress-testing long-horizon multi-step workflows or comparing against Claude Opus on complex agentic tasks. Use &lt;strong&gt;GLM 5 Turbo&lt;/strong&gt; when you want stronger agent behaviour than 4.5 Air without paying flagship rates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What makes GLM 5.1 different from GPT-5.4 or Claude Opus on MCP work?&lt;/strong&gt;&lt;br&gt;
Two things. First, training focus — GLM 5.1 was tuned specifically for long-horizon agentic loops, which is exactly the workload most MCP servers create. It can run autonomously for up to 8 hours across hundreds of tool calls. Second, cost — at $1.05/$3.50 per million input/output tokens, output (the dominant cost in agentic workloads) is roughly a quarter the price of GPT-5.4 or Claude Sonnet 4.6, while topping both on SWE-Bench Pro at 58.4.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I self-host GLM and point it at my MCP server?&lt;/strong&gt;&lt;br&gt;
Yes. GLM 4.5, GLM 4.5 Air, and GLM 5.1 are all open-source under MIT licence on Hugging Face. You can run them locally with vLLM (use &lt;code&gt;--tool-call-parser glm45&lt;/code&gt;) or SGLang — both expose an OpenAI-compatible API. Any MCP client wired to OpenAI function calling will work against your self-hosted endpoint. Use Agent Studio first to validate prompt and tool behaviour, then swap in your local endpoint for production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need a Z.AI API key to use GLM in MCP Agent Studio?&lt;/strong&gt;&lt;br&gt;
No. MCP Agent Studio handles all provider credentials on its side. Sign up for a free account, use your starter credits, and start chatting with GLM against your MCP server immediately — no Z.AI account, no api key, no billing setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How many MCP tools can GLM handle per request?&lt;/strong&gt;&lt;br&gt;
GLM inherits the OpenAI-compatible 128-function-per-request limit. In practice, tool-selection accuracy starts to slip beyond 30–40 definitions in a single call — same range as GPT, Gemini, and Qwen. For MCP servers exposing many tools, Agent Studio's Tokens tab shows the exact token cost of your tool schemas so you can decide what to keep in scope.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://mcpplaygroundonline.com/blog/test-mcp-server-with-glm-models" rel="noopener noreferrer"&gt;MCP Playground&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>mcp</category>
      <category>llm</category>
    </item>
    <item>
      <title>How to Test Your MCP Server with Alibaba Qwen Models (April 2026 Guide)</title>
      <dc:creator>Rupa Tiwari</dc:creator>
      <pubDate>Mon, 20 Apr 2026 08:15:06 +0000</pubDate>
      <link>https://dev.to/rupa_tiwari_dd308948d710f/how-to-test-your-mcp-server-with-alibaba-qwen-models-april-2026-guide-3m92</link>
      <guid>https://dev.to/rupa_tiwari_dd308948d710f/how-to-test-your-mcp-server-with-alibaba-qwen-models-april-2026-guide-3m92</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — To test your MCP server with Alibaba Qwen: open &lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;MCP Agent Studio&lt;/a&gt;, paste your server URL, pick a Qwen model from the picker, and start chatting. Agent Studio handles the MCP-to-function-calling translation automatically — no API keys, no setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which Qwen to pick?&lt;/strong&gt; Start with &lt;strong&gt;Qwen3 30B&lt;/strong&gt; for a fast, accurate daily driver. Upgrade to &lt;strong&gt;Qwen3 235B-A22B&lt;/strong&gt; for complex multi-step agentic workflows. Try &lt;strong&gt;Qwen 3.6 Plus&lt;/strong&gt; if you want the newest Alibaba flagship. Drop to &lt;strong&gt;Qwen3.5 Flash&lt;/strong&gt; for high-volume runs where latency matters most.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;What you'll get from this guide:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand the Qwen 3 / 3.5 / 3.6 family available in Agent Studio and which variant to pick for MCP tool calling&lt;/li&gt;
&lt;li&gt;Connect any MCP server (HTTP, SSE, Streamable HTTP) to Qwen in seconds&lt;/li&gt;
&lt;li&gt;Run your first agentic conversation and inspect every tool call live&lt;/li&gt;
&lt;li&gt;Know exactly when Qwen outperforms GPT or Claude on your server — and when it doesn't&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Alibaba's Qwen lineup has become one of the most capable open-weight model families for tool calling. The flagship &lt;strong&gt;Qwen3 235B-A22B&lt;/strong&gt; (a 235B mixture-of-experts with 22B active parameters) rivals frontier closed models on function-calling benchmarks, while smaller variants like &lt;strong&gt;Qwen3 30B-A3B&lt;/strong&gt; and &lt;strong&gt;Qwen3.5 Flash&lt;/strong&gt; give you strong tool-use at a fraction of the compute cost.&lt;/p&gt;

&lt;p&gt;The fastest way to test any of these against your own MCP server — without writing a single line of code or managing API keys — is &lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;MCP Agent Studio&lt;/a&gt;. You paste your server URL, pick a Qwen model, and the agent starts calling your tools in real time.&lt;/p&gt;




&lt;h2&gt;
  
  
  In this guide
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;The Qwen family in Agent Studio — which one to use&lt;/li&gt;
&lt;li&gt;How Qwen handles MCP tool calling&lt;/li&gt;
&lt;li&gt;Connect your MCP server in 3 steps&lt;/li&gt;
&lt;li&gt;Prompts that exercise your tools well&lt;/li&gt;
&lt;li&gt;Reading the tool-call inspector&lt;/li&gt;
&lt;li&gt;Qwen vs GPT vs Claude on tool calling&lt;/li&gt;
&lt;li&gt;FAQ&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  1. The Qwen family in Agent Studio — which one to use
&lt;/h2&gt;

&lt;p&gt;Qwen has gone through three generations in a little over a year — Qwen3 (2025), Qwen3.5 (early 2026), and Qwen 3.6 Plus (April 2026). Each generation improved tool-calling accuracy, extended context, and refined the &lt;strong&gt;thinking / non-thinking toggle&lt;/strong&gt; (budget tokens for private reasoning before the model produces a response or a tool call).&lt;/p&gt;

&lt;p&gt;MCP Agent Studio exposes five Qwen variants covering the full quality-vs-speed spectrum:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Architecture&lt;/th&gt;
&lt;th&gt;Context&lt;/th&gt;
&lt;th&gt;Best for MCP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qwen 3.6 Plus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Flagship (April 2026)&lt;/td&gt;
&lt;td&gt;Up to 128k&lt;/td&gt;
&lt;td&gt;Newest Alibaba flagship — strongest overall accuracy on complex MCP tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qwen3.5 397B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MoE (large)&lt;/td&gt;
&lt;td&gt;Up to 128k&lt;/td&gt;
&lt;td&gt;Heavy multi-step reasoning; Qwen3.5 generation flagship&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qwen3 235B-A22B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MoE (235B total, 22B active)&lt;/td&gt;
&lt;td&gt;256k (262,144)&lt;/td&gt;
&lt;td&gt;Proven frontier for open-weight tool use; great quality/value ratio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qwen3 30B-A3B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MoE (30B total, 3B active)&lt;/td&gt;
&lt;td&gt;Up to 128k&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Best daily driver&lt;/strong&gt; — fast, accurate, low compute footprint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qwen3.5 Flash&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Speed tier&lt;/td&gt;
&lt;td&gt;Up to 128k&lt;/td&gt;
&lt;td&gt;High-volume runs, lowest latency, router agents, quick schema checks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Start here:&lt;/strong&gt; Begin with &lt;strong&gt;Qwen3 30B-A3B&lt;/strong&gt; in Agent Studio. The mixture-of-experts design means only 3B parameters are active at inference time, so it's fast and cheap — but its tool-calling accuracy is very close to the 235B flagship for most MCP workloads. Upgrade to &lt;strong&gt;Qwen3 235B-A22B&lt;/strong&gt; or &lt;strong&gt;Qwen 3.6 Plus&lt;/strong&gt; if you hit accuracy limits on complex multi-tool chains.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. How Qwen handles MCP tool calling
&lt;/h2&gt;

&lt;p&gt;Qwen 3 models use the OpenAI-compatible function calling format — the same &lt;code&gt;tools&lt;/code&gt; array and &lt;code&gt;tool_calls&lt;/code&gt; response structure. This means any MCP client that supports OpenAI function calling can route Qwen against MCP servers with zero modification.&lt;/p&gt;

&lt;p&gt;A few Qwen-specific behaviours to know when testing your server:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Thinking mode by default&lt;/strong&gt; — Qwen3 / 3.5 / 3.6 all support a private-reasoning pass before producing a tool call. On ambiguous queries this tends to produce more accurate tool selection at the cost of a slightly longer first token. If latency is critical, switch to &lt;strong&gt;Qwen3.5 Flash&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parallel tool calls supported&lt;/strong&gt; — all Qwen variants from Qwen3 30B-A3B upward can issue multiple tool calls in a single turn, which matters for MCP servers with independent read operations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Large context window&lt;/strong&gt; — the 235B models carry 256k context (262,144 tokens); the 30B sits at 128k. Either way, even a server with 50+ tools (each ~150 tokens of schema) leaves ample room for a long conversation history and tool results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict JSON output&lt;/strong&gt; — Qwen produces well-formed tool-call JSON reliably, with a low rate of hallucinated or missing required arguments. In practice this is one of the main reasons teams pick Qwen over smaller open models.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Connect your MCP server in 3 steps
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Sign in to MCP Agent Studio&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go to &lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;mcpplaygroundonline.com/mcp-agent-studio&lt;/a&gt; and sign in. No API keys, no setup — you get access to all 30+ models including the full Qwen family (Qwen 3.6 Plus, Qwen3.5 397B, Qwen3 235B, Qwen3 30B, Qwen3.5 Flash) immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — Paste your MCP server URL&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enter your server endpoint in the URL bar at the bottom of the chat. If your server requires an auth token, add it in the auth field next to the URL. Agent Studio supports HTTP, SSE, and Streamable HTTP transports.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3 — Select a Qwen model and start chatting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open the model picker and search for "Qwen". Select &lt;strong&gt;Qwen3 30B&lt;/strong&gt; to start. Type a natural-language question that would require one of your server's tools to answer. The agent will discover your tools, decide which to call, and show you every step live.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;No MCP server yet?&lt;/strong&gt; Use the built-in test server —  &lt;code&gt;https://mcpplaygroundonline.com/mcp-test-client&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. Prompts that exercise your tools well
&lt;/h2&gt;

&lt;p&gt;The quality of Qwen's tool calling shows most clearly when the prompt requires the model to &lt;em&gt;decide&lt;/em&gt; between tools, sequence multiple calls, or handle a partial result and continue. Try these patterns:&lt;/p&gt;

&lt;h3&gt;
  
  
  Discovery prompt
&lt;/h3&gt;

&lt;p&gt;Forces the model to list and summarise what's available.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"What tools do you have access to on this server? Give me a one-line summary of what each one does."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Multi-step prompt
&lt;/h3&gt;

&lt;p&gt;Requires two or more sequential tool calls.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Get the list of [items], then for each one fetch the details and give me a summary table."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Parallel tool prompt
&lt;/h3&gt;

&lt;p&gt;Tests whether Qwen issues multiple calls in a single turn.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Compare [item A] and [item B] side by side — fetch both at the same time."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Edge-case prompt
&lt;/h3&gt;

&lt;p&gt;Tests what happens when a tool returns an error or empty result.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Look up [a resource that doesn't exist] and tell me what you find."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Reading the tool-call inspector
&lt;/h2&gt;

&lt;p&gt;Every time Qwen calls a tool on your server, Agent Studio logs it in the &lt;strong&gt;Inspector panel&lt;/strong&gt; on the right. Click any tool card in the chat to expand it. You'll see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tool name&lt;/strong&gt; — which of your server's tools Qwen chose to call&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Arguments&lt;/strong&gt; — the exact JSON Qwen sent (great for catching schema mismatches)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Result&lt;/strong&gt; — what your server returned, exactly as Qwen received it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency&lt;/strong&gt; — time from tool invocation to result receipt (helps separate slow server from slow model)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Common Qwen-specific thing to watch:&lt;/strong&gt; With thinking mode enabled, you may notice Qwen calls a tool, receives the result, then calls a &lt;em&gt;second&lt;/em&gt; tool before replying — this is intentional. Qwen reasons step-by-step internally and the inspector lets you follow exactly that chain. If you see an unexpected second call, check the arguments — it's usually Qwen correcting a first attempt based on an intermediate result.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. Qwen vs GPT vs Claude on tool calling
&lt;/h2&gt;

&lt;p&gt;Rather than abstract benchmarks, here's a practical comparison of what you'll notice on a real MCP server in Agent Studio:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Behaviour&lt;/th&gt;
&lt;th&gt;Qwen3 30B-A3B&lt;/th&gt;
&lt;th&gt;GPT-5.4&lt;/th&gt;
&lt;th&gt;Claude Sonnet 4.6&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Argument accuracy on first call&lt;/td&gt;
&lt;td&gt;High (thinking mode helps)&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parallel tool calls&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Handling empty / error results&lt;/td&gt;
&lt;td&gt;Good — retries or explains&lt;/td&gt;
&lt;td&gt;Very good&lt;/td&gt;
&lt;td&gt;Very good&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context window (tools + history)&lt;/td&gt;
&lt;td&gt;128k (30B) / 256k (235B+)&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;td&gt;200k&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native MCP support&lt;/td&gt;
&lt;td&gt;Via OpenAI-compatible API&lt;/td&gt;
&lt;td&gt;Via Agents SDK&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Native&lt;/strong&gt; (mcp_servers param)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;First-token latency&lt;/td&gt;
&lt;td&gt;Moderate (thinking overhead)&lt;/td&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open-weight / self-hostable&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Bottom line:&lt;/strong&gt; Qwen3 30B-A3B sits in the same tier as GPT-5.4 mini and Claude Haiku 4.5 on most MCP tool-calling tasks — at a fraction of the closed-model cost, with the option to self-host. For teams exploring open-weight models or building on-prem pipelines, it's the obvious first stop. The broader Qwen lineup (Qwen 3.6 Plus, Qwen3.5 397B, Qwen3 235B-A22B) competes directly with frontier closed models on complex multi-tool workflows.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;&lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;Test Qwen on your MCP server — right now, in your browser →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No API keys. No setup. Qwen 3.6 Plus, Qwen3.5 397B, Qwen3 235B, Qwen3 30B, Qwen3.5 Flash — all ready in seconds.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does Qwen3 support MCP natively?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not natively in the same way Claude does — Qwen3 uses the OpenAI-compatible function calling format (&lt;code&gt;tools&lt;/code&gt; / &lt;code&gt;tool_calls&lt;/code&gt;). MCP Agent Studio handles the translation: it discovers your server's tools via MCP, converts them into the function-calling format Qwen expects, runs the agentic loop, and shows you the results. From your perspective it's seamless — paste the URL, chat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which Qwen variant should I start with?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Start with &lt;strong&gt;Qwen3 30B-A3B&lt;/strong&gt; in Agent Studio. It's the best all-around option — strong tool-calling accuracy, up to 128k context, thinking mode for tricky multi-step queries, and very fast because only 3B parameters are active per token. Upgrade to &lt;strong&gt;Qwen3 235B-A22B&lt;/strong&gt; or &lt;strong&gt;Qwen 3.6 Plus&lt;/strong&gt; when you need the highest accuracy on complex agentic tasks, or switch to &lt;strong&gt;Qwen3.5 Flash&lt;/strong&gt; for the lowest latency at volume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How many tools can Qwen handle per request?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Qwen3 inherits the OpenAI-compatible 128-function limit. In practice, accuracy starts to drop when you send more than 20–30 tool definitions at once — the same recommendation as Gemini. If your MCP server exposes many tools, Agent Studio's Tokens tab will show you exactly how many tokens your tool schemas consume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I self-host Qwen and point it at my MCP server?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes — most Qwen3 and Qwen3.5 weights are publicly released. You can run them locally via Ollama, vLLM, or llama.cpp, all of which expose an OpenAI-compatible API. Any MCP client that supports OpenAI function calling will work against your self-hosted Qwen endpoint. Use Agent Studio first to validate prompt and tool behaviour, then point your production stack at your own inference endpoint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the difference between Qwen3 and Qwen 2.5?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Qwen3 adds a &lt;strong&gt;thinking/non-thinking toggle&lt;/strong&gt; (budget token reasoning), better function-calling accuracy across all model sizes, longer context (128k vs 32k on most Qwen 2.5 variants), and a new 235B MoE flagship. For MCP testing the biggest practical difference is that Qwen3's thinking mode catches more edge cases in multi-step tool workflows — things that Qwen 2.5 would sometimes get wrong on the first attempt.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>agents</category>
      <category>webdev</category>
    </item>
    <item>
      <title>What Is an MCP Agent? How AI Models Drive MCP Tools in Real Time</title>
      <dc:creator>Rupa Tiwari</dc:creator>
      <pubDate>Fri, 17 Apr 2026 05:07:27 +0000</pubDate>
      <link>https://dev.to/rupa_tiwari_dd308948d710f/what-is-an-mcp-agent-how-ai-models-drive-mcp-tools-in-real-time-1god</link>
      <guid>https://dev.to/rupa_tiwari_dd308948d710f/what-is-an-mcp-agent-how-ai-models-drive-mcp-tools-in-real-time-1god</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;MCP agent&lt;/strong&gt; is an AI model that calls your MCP server's tools in a loop to answer a question or complete a task&lt;/li&gt;
&lt;li&gt;Instead of you picking which tool to call, &lt;strong&gt;the AI decides&lt;/strong&gt; based on a natural language prompt&lt;/li&gt;
&lt;li&gt;Each "step" = model picks a tool → executes it → reads the result → decides what to do next&lt;/li&gt;
&lt;li&gt;A single user message can trigger 5–10+ tool calls behind the scenes&lt;/li&gt;
&lt;li&gt;You can try it in the browser at &lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;MCP Agent Studio&lt;/a&gt; — paste any server URL and start chatting&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;p&gt;If you've read anything about the Model Context Protocol, you already know the basics: MCP servers expose &lt;em&gt;tools&lt;/em&gt;, &lt;em&gt;resources&lt;/em&gt;, and &lt;em&gt;prompts&lt;/em&gt; in a standard format so AI clients can use them. But there's a piece people gloss over: &lt;strong&gt;what actually happens when an AI uses those tools?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's where the idea of an &lt;strong&gt;MCP agent&lt;/strong&gt; comes in. Understanding what an agent does — and how it differs from a one-shot API call — is the key to building, testing, and getting real value out of MCP servers.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is an MCP agent?
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;MCP agent&lt;/strong&gt; is an AI model that's been given access to one or more MCP servers' tools, and decides on its own which tools to call, in what order, and with what arguments — to fulfill a natural language request from a user.&lt;/p&gt;

&lt;p&gt;In plain English:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A user says something → the AI figures out which MCP tools to call → the tools run → the AI reads the results → the AI either calls more tools or writes a final answer.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That whole cycle — the deciding, the calling, the reading, the deciding-again — is what we call an &lt;strong&gt;agent loop&lt;/strong&gt;. The "agent" is the thing doing the loop. Without a loop, you don't have an agent; you just have a function call.&lt;/p&gt;




&lt;h2&gt;
  
  
  Agent vs a single tool call — what's the difference?
&lt;/h2&gt;

&lt;p&gt;This is the part people miss. Most MCP tutorials and test tools show you how to invoke &lt;em&gt;one&lt;/em&gt; tool with &lt;em&gt;one&lt;/em&gt; set of arguments. That's useful for debugging — but it doesn't reflect how AI actually uses MCP in production.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Single tool call&lt;/th&gt;
&lt;th&gt;MCP Agent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Who picks the tool?&lt;/td&gt;
&lt;td&gt;You (the developer)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;The AI model&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Input format&lt;/td&gt;
&lt;td&gt;JSON arguments you supply&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Natural language prompt&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Number of calls&lt;/td&gt;
&lt;td&gt;Exactly 1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0 to many (loops until done)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reasoning between calls&lt;/td&gt;
&lt;td&gt;None — raw JSON back&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;AI reads each result and decides next&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;Raw tool result&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Natural language answer + full trace&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for&lt;/td&gt;
&lt;td&gt;Verifying a specific tool works&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Testing real-world agent behavior&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;When someone uses Claude Desktop or Cursor with your MCP server, they're running an agent — not a single tool call. So if you want to know how your server &lt;em&gt;really&lt;/em&gt; behaves, you need to test it as an agent.&lt;/p&gt;




&lt;h2&gt;
  
  
  How the tool-call loop works (step by step)
&lt;/h2&gt;

&lt;p&gt;Here's what happens behind the scenes when you send one message to an MCP agent:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — The agent connects to your MCP server&lt;/strong&gt;&lt;br&gt;
It calls &lt;code&gt;tools/list&lt;/code&gt; to get the full set of available tools, with their names, descriptions, and JSON schemas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — Your message + the tool catalogue go to the AI model&lt;/strong&gt;&lt;br&gt;
The AI sees something like: &lt;em&gt;"Here's a user question. Here are 12 tools you can use. What do you want to do?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3 — The AI responds with a tool call (or a direct answer)&lt;/strong&gt;&lt;br&gt;
If it needs more info, it picks a tool and constructs the JSON arguments. If it already has enough, it skips to step 6.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4 — The runtime executes the tool on your MCP server&lt;/strong&gt;&lt;br&gt;
The agent sends &lt;code&gt;tools/call&lt;/code&gt; with the AI's arguments. Your server does its thing and returns a JSON result.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5 — The result goes back to the AI — and we loop&lt;/strong&gt;&lt;br&gt;
The AI reads the result and decides: &lt;em&gt;"Do I have enough now, or do I need another tool?"&lt;/em&gt; If more is needed, back to step 3.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✓ Step 6 — The AI writes a final answer in natural language&lt;/strong&gt;&lt;br&gt;
It synthesises everything it learned into a response for the user. Loop complete.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚙️ Under the hood:&lt;/strong&gt; Most agent runtimes cap the loop at &lt;strong&gt;5 to 15 steps&lt;/strong&gt; to prevent runaway behaviour. MCP Agent Studio uses a 10-step cap, which handles almost every realistic task while keeping costs predictable.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  A real walkthrough
&lt;/h2&gt;

&lt;p&gt;Imagine you have a Supabase MCP server connected, and the user asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Which 3 customers spent the most last month?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here's what an MCP agent does, step by step:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Step 1: AI calls list_tables
        → learns there's a "customers" and "orders" table

Step 2: AI calls describe_table(name: "orders")
        → sees columns: customer_id, amount, created_at

Step 3: AI calls query_database with a SQL JOIN query
        → orders filtered to last month, grouped by customer, top 3

Step 4: AI reads 3 rows back
        → writes: "Your top 3 customers last month were
           Acme ($12,400), Beta ($9,100), and Delta ($7,800)."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three tool calls. One natural language answer. The user never wrote any SQL. They never picked a tool. They never looked at the schema. The &lt;strong&gt;agent&lt;/strong&gt; figured it all out.&lt;/p&gt;

&lt;p&gt;This is why MCP matters — not because it's a new protocol, but because it makes this kind of agentic behaviour &lt;strong&gt;portable&lt;/strong&gt; across every AI client that speaks it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this matters if you're building or using MCP
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🛠️ If you build MCP servers&lt;/strong&gt;&lt;br&gt;
Your tool &lt;em&gt;descriptions&lt;/em&gt; and &lt;em&gt;schemas&lt;/em&gt; decide whether the AI picks the right tool. Agent testing reveals bad descriptions instantly. Manual tool calls hide the problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🤖 If you use MCP servers&lt;/strong&gt;&lt;br&gt;
Different models make very different choices in the loop. Agent testing is how you find the cheapest model that still works for your workload.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💰 If you care about cost&lt;/strong&gt;&lt;br&gt;
Each step in the loop = another model call. An agent that takes 8 steps costs roughly 8× a one-shot call. Watching the loop helps you design for fewer steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔒 If you care about security&lt;/strong&gt;&lt;br&gt;
Agents can be tricked into calling tools they shouldn't via prompt injection. Watching the loop is how you catch it before your users do.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try an MCP agent yourself — no code required
&lt;/h2&gt;

&lt;p&gt;The fastest way to actually understand MCP agents is to watch one run on a server you already know.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://mcpplaygroundonline.com/mcp-agent-studio" rel="noopener noreferrer"&gt;MCP Agent Studio&lt;/a&gt;&lt;/strong&gt; is a browser tool that runs the whole agent loop for you — no SDK, no API keys, nothing to install. You paste an MCP server URL, pick a model (Claude Opus 4.6, GPT-5.4, Gemini 3.1 Pro, DeepSeek, Grok 4.20, and 30+ more), and start chatting.&lt;/p&gt;

&lt;p&gt;The key things you'll see that static MCP testers can't show you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Every tool call as a card&lt;/strong&gt; — click each one to see exactly what the AI sent and what it got back&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The full loop in order&lt;/strong&gt; — with timing for each step&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Different models making different decisions&lt;/strong&gt; — switch from Claude to Gemini and watch how they approach the same problem differently&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 No server of your own?&lt;/strong&gt; Grab one from the &lt;a href="https://mcpplaygroundonline.com/mcp-registry" rel="noopener noreferrer"&gt;MCP Servers List&lt;/a&gt; and paste it straight into Agent Studio. Free credits on sign-up are enough for several test runs.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is "MCP agent" an official term?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not quite — the MCP spec defines &lt;em&gt;hosts&lt;/em&gt;, &lt;em&gt;clients&lt;/em&gt;, and &lt;em&gt;servers&lt;/em&gt;, not "agents". "MCP agent" is the practical term people use for a host + client that runs an AI model in a tool-call loop against MCP servers. Think of it as the behaviour pattern, not a formal role in the protocol.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does every AI model support MCP agents?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Any model with a &lt;strong&gt;tool-use API&lt;/strong&gt; can power an MCP agent — which today means basically every major frontier model: Claude, GPT-5, Gemini, DeepSeek, Grok, Qwen, Mistral, and more. The agent runtime bridges between MCP's &lt;code&gt;tools/list&lt;/code&gt; + &lt;code&gt;tools/call&lt;/code&gt; and each model's function-calling format.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How many steps can an agent take?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The protocol doesn't set a hard limit — it's up to the runtime. Production agents often cap at 10–20 steps to prevent infinite loops. MCP Agent Studio uses a 10-step cap which handles almost every real-world task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can a single agent use multiple MCP servers at once?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes — this is one of MCP's superpowers. A host (like Claude Desktop) can connect to several servers and merge all their tools into one catalogue the model sees. The model can then chain tools across servers in a single response (e.g. query Supabase, then post a Slack message).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is an MCP agent different from a LangChain / CrewAI agent?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;LangChain and CrewAI are &lt;em&gt;agent frameworks&lt;/em&gt; — they give you opinionated Python/JS abstractions for building agents with custom tools. MCP is a &lt;em&gt;protocol&lt;/em&gt; for exposing tools in a standard way. You can use LangChain or CrewAI as the runtime &lt;em&gt;and&lt;/em&gt; use MCP servers as the tools — they're complementary, not competitors.&lt;/p&gt;




&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/mcp-agent-studio-guide" rel="noopener noreferrer"&gt;MCP Agent Studio — Complete Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/what-is-model-context-protocol" rel="noopener noreferrer"&gt;What Is the Model Context Protocol (MCP)?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/how-qa-teams-should-test-mcp-servers" rel="noopener noreferrer"&gt;How QA Teams Should Test MCP Servers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcpplaygroundonline.com/blog/safeguarding-mcp-servers-from-prompt-injection" rel="noopener noreferrer"&gt;Safeguarding MCP Servers From Prompt Injection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://modelcontextprotocol.io/docs/concepts/tools" rel="noopener noreferrer"&gt;MCP Specification — Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>llm</category>
      <category>webdev</category>
    </item>
    <item>
      <title>10 Things You Can Do With Vercel MCP Server</title>
      <dc:creator>Rupa Tiwari</dc:creator>
      <pubDate>Sun, 29 Mar 2026 18:47:33 +0000</pubDate>
      <link>https://dev.to/rupa_tiwari_dd308948d710f/10-things-you-can-do-with-vercel-mcp-server-1c9j</link>
      <guid>https://dev.to/rupa_tiwari_dd308948d710f/10-things-you-can-do-with-vercel-mcp-server-1c9j</guid>
      <description>&lt;p&gt;&lt;strong&gt;Vercel MCP&lt;/strong&gt; is Vercel's official &lt;a href="https://modelcontextprotocol.io/" rel="noopener noreferrer"&gt;Model Context Protocol&lt;/a&gt; server — a hosted endpoint at &lt;code&gt;https://mcp.vercel.com&lt;/code&gt; that uses &lt;strong&gt;OAuth&lt;/strong&gt; so AI clients like Cursor, Claude, and VS Code Copilot can work with your Vercel account directly.&lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; the same as deploying your own MCP server to Vercel — this is Vercel's own server for managing your account. Everything below is taken directly from the &lt;a href="https://vercel.com/docs/agent-resources/vercel-mcp/tools" rel="noopener noreferrer"&gt;official Vercel MCP tools reference&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Before you start:&lt;/strong&gt; If you want to explore any MCP server's tools interactively before configuring your IDE, you can use the free browser-based tester at &lt;a href="https://mcpplaygroundonline.com/mcp-test-server" rel="noopener noreferrer"&gt;MCP Playground&lt;/a&gt; — paste the URL, connect, and browse tools without touching a config file.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Quick setup
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Install helper (any client):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx add-mcp https://mcp.vercel.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Cursor — &lt;code&gt;.cursor/mcp.json&lt;/code&gt;:&lt;/strong&gt;&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;"vercel"&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://mcp.vercel.com"&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;Open Cursor → connect the server → complete &lt;strong&gt;OAuth&lt;/strong&gt; when prompted. Other supported clients: Claude Code, ChatGPT (connector), VS Code Copilot, Codex CLI — &lt;a href="https://vercel.com/docs/ai-tooling/vercel-mcp#supported-clients" rel="noopener noreferrer"&gt;full list here&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Search Vercel docs from inside your editor
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tool: &lt;code&gt;search_documentation&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of alt-tabbing to a browser, ask your assistant to search Vercel's docs directly. You pass a topic — &lt;code&gt;edge functions&lt;/code&gt;, &lt;code&gt;env vars&lt;/code&gt;, &lt;code&gt;routing&lt;/code&gt; — and it returns grounded, current answers from Vercel's actual documentation with an optional text limit.&lt;/p&gt;

&lt;p&gt;No more "I think Next.js does it this way" guesses from stale training data.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. List your teams and projects
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tools: &lt;code&gt;list_teams&lt;/code&gt;, &lt;code&gt;list_projects&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most other tools need a team and project identifier. These two let the assistant resolve the correct target automatically before calling anything downstream — especially useful when you have personal and org projects mixed together.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Get detailed project info
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tool: &lt;code&gt;get_project&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Returns a structured snapshot for one project: detected &lt;strong&gt;framework&lt;/strong&gt; (Next.js, Astro, etc.), &lt;strong&gt;attached domains&lt;/strong&gt;, &lt;strong&gt;latest deployment summary&lt;/strong&gt;, and other metadata the Vercel API exposes. Gives the model factual grounding for questions like "what framework is this app using?" or "what's live right now?"&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Browse deployment history + inspect a specific deploy
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tools: &lt;code&gt;list_deployments&lt;/code&gt;, &lt;code&gt;get_deployment&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;list_deployments&lt;/code&gt; is your history view — states, targets, timing. &lt;code&gt;get_deployment&lt;/code&gt; is the drill-down: build status, regions, and metadata for one deploy by ID or URL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Typical flow:&lt;/strong&gt; list to find the failing preview → get detail on that single deployment → pull logs.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Debug failed builds
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tool: &lt;code&gt;get_deployment_build_logs&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Retrieves &lt;strong&gt;build-phase&lt;/strong&gt; logs (not runtime logs) for a deployment, with a configurable line limit. When your preview is red, the assistant can fetch the logs for that deployment ID and help you identify dependency errors, wrong build commands, or missing build-time env vars — without you navigating to the Vercel dashboard log viewer.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Filter and search runtime logs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tool: &lt;code&gt;get_runtime_logs&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the strongest operational tool in the set. It surfaces &lt;strong&gt;runtime&lt;/strong&gt; output from Vercel Functions — &lt;code&gt;console.log&lt;/code&gt;, errors, request traces.&lt;/p&gt;

&lt;p&gt;Documented filters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Environment&lt;/strong&gt; (production or preview)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Log level&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTP status&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source type&lt;/strong&gt; (serverless vs edge)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Time range&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Full-text query&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Request ID&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That combination is ideal for AI-assisted debugging when users are hitting 500s or you need to trace one specific bad request.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Check domain availability and buy domains
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tools: &lt;code&gt;check_domain_availability_and_price&lt;/code&gt;, &lt;code&gt;buy_domain&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Check one or more domain names, then walk through &lt;code&gt;buy_domain&lt;/code&gt; with registrant fields when you're ready. These are real commerce actions — treat them like any sensitive dashboard operation and verify before approving tool runs.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Work with protected deployments
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tools: &lt;code&gt;get_access_to_vercel_url&lt;/code&gt;, &lt;code&gt;web_fetch_vercel_url&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Preview deployments are often protected. Two different tools for two different needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;get_access_to_vercel_url&lt;/code&gt;&lt;/strong&gt; — creates a temporary shareable link so someone can open a protected preview URL without disabling protection globally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;web_fetch_vercel_url&lt;/code&gt;&lt;/strong&gt; — fetches the actual response body from a deployment URL, including when &lt;a href="https://vercel.com/docs/deployment-protection/methods-to-protect-deployments/vercel-authentication" rel="noopener noreferrer"&gt;Vercel Authentication&lt;/a&gt; is required. Good for verifying a page or API route returns the right output.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  9. Deploy and use the Vercel CLI from your assistant
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tools: &lt;code&gt;deploy_to_vercel&lt;/code&gt;, &lt;code&gt;use_vercel_cli&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;deploy_to_vercel&lt;/code&gt;&lt;/strong&gt; — deploys the current project through the MCP tool surface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;use_vercel_cli&lt;/code&gt;&lt;/strong&gt; — steers the model toward CLI-first patterns, including &lt;code&gt;--help&lt;/code&gt; for specific commands when you prefer that workflow.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  10. Use a project-scoped MCP URL
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;From the Vercel docs:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://mcp.vercel.com/{team-slug}/{project-slug}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By pointing at a project-specific endpoint, the server already knows your team and project context. Fewer manual slug parameters, better errors when context is missing, and a cleaner workflow when one repo maps to one Vercel project.&lt;/p&gt;

&lt;p&gt;See &lt;a href="https://vercel.com/docs/ai-tooling/vercel-mcp" rel="noopener noreferrer"&gt;Advanced usage&lt;/a&gt; in the Vercel docs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real-world scenarios
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Tools involved&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Red preview build&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;list_deployments&lt;/code&gt; → &lt;code&gt;get_deployment_build_logs&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;500s in prod&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;get_runtime_logs&lt;/code&gt; (filter by status + time)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"What's live?"&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;list_projects&lt;/code&gt; → &lt;code&gt;get_project&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ship from the IDE&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deploy_to_vercel&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review a protected preview&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;get_access_to_vercel_url&lt;/code&gt; or &lt;code&gt;web_fetch_vercel_url&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Buy a domain&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;check_domain_availability_and_price&lt;/code&gt; → &lt;code&gt;buy_domain&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  A note on security
&lt;/h2&gt;

&lt;p&gt;Vercel explicitly recommends:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Human confirmation&lt;/strong&gt; before tool runs (don't let the model act autonomously on deployments)&lt;/li&gt;
&lt;li&gt;Reading their &lt;a href="https://vercel.com/blog/building-secure-ai-agents" rel="noopener noreferrer"&gt;prompt injection and confused-deputy guidance&lt;/a&gt; when multiple MCP servers are connected&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Worth 5 minutes of reading before you wire this up to an autonomous agent.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is Vercel MCP free?&lt;/strong&gt;&lt;br&gt;
The MCP server itself is free to use if you have a Vercel account. The actions it performs (deploys, domain purchases) use your account's normal plan limits and billing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does this work with Claude Desktop?&lt;/strong&gt;&lt;br&gt;
Vercel's supported client list includes Claude Code (CLI). Check &lt;a href="https://vercel.com/docs/ai-tooling/vercel-mcp#supported-clients" rel="noopener noreferrer"&gt;Supported clients&lt;/a&gt; for the current list.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is this the same as deploying my own MCP server to Vercel?&lt;/strong&gt;&lt;br&gt;
No. This article is about &lt;em&gt;using&lt;/em&gt; Vercel's hosted MCP to manage your account. If you want to host your own MCP server on Vercel infrastructure, that's a separate guide — Vercel documents that separately.&lt;/p&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://vercel.com/docs/ai-tooling/vercel-mcp" rel="noopener noreferrer"&gt;Use Vercel MCP — Vercel Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vercel.com/docs/agent-resources/vercel-mcp/tools" rel="noopener noreferrer"&gt;Vercel MCP tools reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://modelcontextprotocol.io/" rel="noopener noreferrer"&gt;Model Context Protocol&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Want to try MCP servers interactively before configuring your IDE? &lt;a href="https://mcpplaygroundonline.com/mcp-test-server" rel="noopener noreferrer"&gt;MCP Playground&lt;/a&gt; lets you connect to any remote MCP server from the browser, browse its tools, and run them with live JSON-RPC logs — free, no sign-up required.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>vercel</category>
      <category>ai</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
