<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on Model Context Protocol Blog</title><link>https://blog.modelcontextprotocol.io/posts/</link><description>Recent content in Posts on Model Context Protocol Blog</description><image><title>Model Context Protocol Blog</title><url>https://blog.modelcontextprotocol.io/og-image.png</url><link>https://blog.modelcontextprotocol.io/og-image.png</link></image><generator>Hugo -- 0.148.0</generator><language>en-us</language><copyright>Copyright © Model Context Protocol a Series of LF Projects, LLC.
For web site terms of use, trademark policy and other project policies please see https://lfprojects.org.</copyright><lastBuildDate>Tue, 28 Jul 2026 21:13:29 +0000</lastBuildDate><atom:link href="https://blog.modelcontextprotocol.io/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>The 2026-07-28 Specification</title><link>https://blog.modelcontextprotocol.io/posts/2026-07-28/</link><pubDate>Tue, 28 Jul 2026 09:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2026-07-28/</guid><description>The 2026-07-28 Model Context Protocol specification is out, bringing a stateless protocol core, Multi Round-Trip Requests, header-based routing, cacheable list results, authorization hardening, a formal extensions framework, and updated Tier 1 SDKs.</description><content:encoded><![CDATA[<p>Since our <a href="/posts/2025-11-25-first-mcp-anniversary/">last November release</a> MCP continued to grow at an astonishing rate. Across our Tier 1 SDKs, we&rsquo;re seeing close to half-a-billion downloads a month, with both TypeScript and Python SDKs crossing the 1 billion total downloads threshold. In just a few months, the protocol continued to grow as the data and interactivity substrate for agentic workflows.</p>
<p>Today, we&rsquo;re officially pushing the release button on the next version of the MCP specification, <code>2026-07-28</code>, along with the SDKs that will allow you to start building clients and servers right away.</p>
<p>The highlight of this release is a stateless protocol core - MCP is transforming from a bidirectional stateful protocol into a request/response stateless protocol. It was one of the most highly-requested features from developers who were eager to get better reliability and scalability for their MCP servers.</p>
<video autoplay loop muted playsinline width="1280" height="454">
  <source src="stateless-core-demo.mp4" type="video/mp4">
  A short demo of the stateless protocol core in action.
</video>
<p>There is, of course, more to what we&rsquo;re introducing with this version:</p>
<ul>
<li>Every request is self-describing, with an optional discovery call for clients that want capabilities up front, so any request can land on any instance behind a plain round-robin load balancer.</li>
<li>Method and tool names travel in the <code>Mcp-Method</code> and <code>Mcp-Name</code> HTTP headers, so gateways can route and authorize on headers directly.</li>
<li>Server-to-client requests for things like sampling and elicitation are being redesigned to use Multi Round-Trip Requests (MRTR), removing the need for constantly open bidirectional streams.</li>
<li>List responses carry cache hints and a deterministic order, so clients can cache tool catalogs and keep upstream prompt caches stable across reconnects.</li>
<li>Formally locking in on a proper extensions framework, with Tasks joining other extensions, such as MCP Apps and Enterprise Managed Authorization (EMA).</li>
<li>A set of authorization hardening changes including RFC 9207 issuer validation and a formal shift away from Dynamic Client Registration (DCR) toward client metadata documents (CIMD).</li>
<li>A formal deprecation policy with a twelve-month minimum window so you can plan upgrades instead of reacting to them.</li>
</ul>
<p>The TypeScript, Python, Go, and C# SDKs are updated to match, with detailed migration notes for the breaking bits - and you can get started with the new spec right away.</p>
<h2 id="what-changed">What changed</h2>
<h3 id="no-handshake-or-sessions">No handshake or sessions</h3>
<p>With the new spec version, we&rsquo;ve officially retired the <code>initialize</code>/<code>initialized</code> exchange along with the <code>Mcp-Session-Id</code> header (refer to <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2575">SEP-2575</a>, <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2567">SEP-2567</a>). Each request now travels on its own, carrying its protocol version, client identity, and client capabilities in <code>_meta</code>. If a client wants to learn a server&rsquo;s capabilities before doing anything else, there&rsquo;s a new <code>server/discover</code> Remote Procedure Call (RPC) for that; however, it is not required. Any request can now land on any server instance behind a plain round-robin load balancer without needing shared storage.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-http" data-lang="http"><span style="display:flex;"><span><span style="color:#a6e22e">POST</span> /mcp <span style="color:#66d9ef">HTTP</span><span style="color:#f92672">/</span><span style="color:#ae81ff">1.1</span>
</span></span><span style="display:flex;"><span>MCP-Protocol-Version<span style="color:#f92672">:</span> <span style="color:#ae81ff">2026-07-28</span>
</span></span><span style="display:flex;"><span>Mcp-Method<span style="color:#f92672">:</span> <span style="color:#ae81ff">tools/call</span>
</span></span><span style="display:flex;"><span>Mcp-Name<span style="color:#f92672">:</span> <span style="color:#ae81ff">search</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>{&#34;jsonrpc&#34;:&#34;2.0&#34;,&#34;id&#34;:1,&#34;method&#34;:&#34;tools/call&#34;,
</span></span><span style="display:flex;"><span> &#34;params&#34;:{&#34;name&#34;:&#34;search&#34;,&#34;arguments&#34;:{&#34;q&#34;:&#34;otters&#34;},
</span></span><span style="display:flex;"><span> &#34;_meta&#34;:{&#34;io.modelcontextprotocol/clientInfo&#34;:{&#34;name&#34;:&#34;my-app&#34;,&#34;version&#34;:&#34;1.0&#34;}}}}
</span></span></code></pre></div><p>Dropping the protocol-level session doesn&rsquo;t force your application to be stateless. If your server needs to carry state across calls, mint an explicit handle from a tool and have the model pass it back as an argument. We found this works better than session state hidden in the transport - the model can see the handle and thread it between tools.</p>
<h3 id="multi-round-trip-requests-mrtr">Multi Round-Trip Requests (MRTR)</h3>
<p>MRTR replaces the server-initiated <code>elicitation/create</code>, <code>sampling/createMessage</code>, and <code>roots/list</code> requests that previously required a held-open stream.</p>
<p>Sometimes a tool needs something from the user mid-call, such as a confirmation or a missing parameter. MRTR (<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2322">SEP-2322</a>) enables this scenario over a stateless protocol: the server returns <code>resultType: &quot;input_required&quot;</code> along with the requests it needs answered, and the client retries the original call with the answers attached in <code>inputResponses</code>.</p>
<h3 id="header-based-routing">Header-based routing</h3>
<p>Streamable HTTP requests now must include <code>Mcp-Method</code> and <code>Mcp-Name</code> (<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2243">SEP-2243</a>). Your gateway, rate limiter, or WAF can route and meter on those headers instead of parsing JSON bodies.</p>
<h3 id="list-results-are-cacheable">List results are cacheable</h3>
<p>Responses from <code>tools/list</code>, <code>prompts/list</code>, <code>resources/list</code>, and <code>resources/read</code> now carry <code>ttlMs</code> and <code>cacheScope</code> (<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2549">SEP-2549</a>). This allows clients to determine the best caching strategy for responses and reduce unnecessary re-fetching.</p>
<h3 id="authorization">Authorization</h3>
<p>From our discussions with implementers for the past year, authorization is where implementers spend most of their integration time. With this spec revision, we continued evolving the MCP auth and security posture.</p>
<ul>
<li>Authorization servers should return the <code>iss</code> parameter per <a href="https://www.rfc-editor.org/rfc/rfc9207">RFC 9207</a>, and clients must validate it before redeeming a code (<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2468">SEP-2468</a>). This closes an authorization-server mix-up hole.</li>
<li>Clients set <code>application_type</code> during Dynamic Client Registration (DCR) so authorization servers stop rejecting <code>localhost</code> redirects for desktop and CLI apps (<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/837">SEP-837</a>). If you&rsquo;ve ever wondered why your CLI client&rsquo;s OAuth flow got a <code>redirect_uri</code> error, this is likely why. And while we&rsquo;re moving to Client ID Metadata Documents (CIMD) as the standard, this is a hardening measure making the protocol comply with OAuth spec requirements.</li>
<li>Client credentials are bound to the issuer that minted them. No reuse across authorization servers (<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2352">SEP-2352</a>).</li>
<li>Dynamic Client Registration itself is now formally deprecated in favor of CIMD. DCR continues to work for backward compatibility, but will be removed in a future version of the MCP spec.</li>
</ul>
<h3 id="tasks">Tasks</h3>
<p>Tasks move out of the experimental core and into the <code>io.modelcontextprotocol/tasks</code> extension, with a poll-based <code>tasks/get</code> and a new <code>tasks/update</code> (<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2663">SEP-2663</a>). Change notifications move from the old HTTP GET endpoint to a single <code>subscriptions/listen</code> stream that clients opt into per notification type.</p>
<h3 id="deprecations">Deprecations</h3>
<p>Roots, Sampling, and Logging are deprecated (<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2577">SEP-2577</a>). They still work, and they&rsquo;ll keep working for at least twelve months. New implementations shouldn&rsquo;t adopt them. The legacy HTTP+SSE transport is also considered to be officially deprecated, with a year-long offramp.</p>
<h2 id="sdks">SDKs</h2>
<p>All four Tier 1 SDKs speak <code>2026-07-28</code> as of today:</p>
<ul>
<li><a href="https://github.com/modelcontextprotocol/typescript-sdk">TypeScript</a></li>
<li><a href="https://github.com/modelcontextprotocol/python-sdk">Python</a></li>
<li><a href="https://github.com/modelcontextprotocol/go-sdk">Go</a></li>
<li><a href="https://github.com/modelcontextprotocol/csharp-sdk">C#</a></li>
</ul>
<p>Beyond the Tier 1 set, the <a href="https://github.com/modelcontextprotocol/rust-sdk">Rust SDK</a> supports the new spec in beta.</p>
<p>The SDKs implement APIs that allow you to build both servers and clients with the new spec version. As we mentioned in the <a href="/posts/sdk-betas-2026-07-28/">SDK beta blog post</a>, there will be some migration cost, especially for developers that did depend on session identifiers; however, we incorporated early testing feedback that makes this process much easier.</p>
<h2 id="ecosystem-support">Ecosystem support</h2>
<p>As with any large release, the work that we&rsquo;re doing with MCP would not be possible without contributions from folks across the ecosystem. We&rsquo;re also especially grateful to a number of contributors and partners who helped us test and validate the spec before it became generally available.</p>
<div class="mcp-quotes">
  <div class="mcp-quotes-track" tabindex="0" role="region" aria-label="Testimonials">
    
<figure class="mcp-quote"><span class="mcp-quote-logo" role="img" aria-label="Anthropic"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024.2 115"><path fill="currentColor" d="M250.649,23.3494h37.328V113.094h23.825V23.3494H349.13V1.9061H250.649Z"/><path fill="currentColor" d="M208.557,79.7376,158.522,1.9061H131.519V113.094h23.032V35.2624l50.035,77.8316h27.002V1.9061H208.557Z"/><path fill="currentColor" d="M444.434,46.2224H392.017V1.9061H368.191V113.094h23.826V67.6657h52.417V113.094H468.26V1.9061H444.434Z"/><path fill="currentColor" d="M44.3163,1.9061,0,113.094H24.779l9.0634-23.3495H80.2061L89.268,113.094h24.779L69.7307,1.9061ZM41.8575,69.0953l15.166-39.0746L72.19,69.0953Z"/><path fill="currentColor" d="M665.698,0c-32.086,0-54.8,23.826-54.8,57.6588,0,33.5152,22.714,57.3412,54.8,57.3412,31.926,0,54.482-23.826,54.482-57.3412C720.18,23.826,697.624,0,665.698,0Zm0,92.7624c-18.744,0-30.18-13.3425-30.18-35.1036,0-22.0787,11.436-35.4212,30.18-35.4212,18.584,0,29.861,13.3425,29.861,35.4212C695.559,79.42,684.282,92.7624,665.698,92.7624Z"/><path fill="currentColor" d="M998.785,75.7666c-4.13,10.8011-12.39,16.9958-23.668,16.9958-18.743,0-30.179-13.3425-30.179-35.1036,0-22.0787,11.436-35.4212,30.179-35.4212,11.278,0,19.538,6.1947,23.668,16.9958h25.255C1017.85,15.4075,999.261,0,975.117,0c-32.085,0-54.799,23.826-54.799,57.6588C920.318,91.174,943.032,115,975.117,115,999.42,115,1018,99.4337,1024.2,75.7666Z"/><path fill="currentColor" d="M846.934,1.9061,891.25,113.094h24.302L871.236,1.9061Z"/><path fill="currentColor" d="M796.74,1.9061H742.417V113.094h23.826V72.7486H796.74c25.256,0,40.663-13.3425,40.663-35.4213S821.996,1.9061,796.74,1.9061Zm-1.112,49.3991H766.243V23.3494h29.385c11.755,0,17.949,4.7652,17.949,13.9779S807.383,51.3052,795.628,51.3052Z"/><path fill="currentColor" d="M592.631,35.7389c0-20.9668-15.407-33.8328-40.663-33.8328H497.645V113.094h23.826V69.5718h26.525l23.827,43.5222h26.368L571.807,66.2568C585.05,61.166,592.631,50.4459,592.631,35.7389Zm-71.16-12.39h29.385c11.754,0,17.949,4.2887,17.949,12.39s-6.195,12.39-17.949,12.39H521.471Z"/></svg></span>
  <blockquote class="mcp-quote-text">The new release is MCP&rsquo;s most important since remote MCP first launched over a year ago. It is a leap in serving scalable MCP servers and takes all the lessons learned over the last 18 months to provide a robust foundation for MCP&rsquo;s future. The newly added extensions showcase the continuous innovation of the wider open source project. I am excited to see what people will do with the new capabilities of MCP.</blockquote>
  <figcaption class="mcp-quote-attrib">
    <span class="mcp-quote-attrib-name">David Soria Parra</span>
    <span class="mcp-quote-attrib-title">Member of Technical Staff, Co-Inventor of MCP</span>
  </figcaption>
</figure>

<figure class="mcp-quote"><span class="mcp-quote-logo" role="img" aria-label="Arcade.dev"><svg viewBox="0 0 1129 299" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1_9)">
<mask id="mask0_1_9" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="1129" height="299">
<path d="M1129 0H0V299H1129V0Z" fill="white"/>
</mask>
<g mask="url(#mask0_1_9)">
<path d="M384.521 278.19L343.96 274.507V201.575C344.112 194.44 345.339 186.759 353.34 178.774L353.31 178.713L433.73 97.3619H386.397L340.686 165.668L339.863 99.7412L323.467 100.965L276.337 122.441V140.133L305.023 126.813V274.952L250.297 275.306C249.83 275.306 249.456 274.931 249.456 274.475L249.343 0L248.168 0.526281L216.358 14.7764C216.217 14.8371 216.095 14.9484 216.003 15.0699L42.284 275.022C42.1521 275.225 41.9393 275.357 41.7059 275.386L9.21728 279.839L0 294.15H91.7167L101.847 279.83L68.8104 274.709C68.2222 274.617 67.918 273.949 68.2324 273.444L102.171 218.913C102.263 218.771 102.384 218.659 102.536 218.588L160.203 192.811C165.891 190.271 172.057 188.955 178.283 188.955H206.736L206.705 198.884V198.924L206.502 274.516L179.185 278.524L168.781 294.15H308.693H388.597L384.521 278.2V278.19ZM160.01 175.555L119.51 194.147C118.75 194.491 118.01 193.641 118.466 192.943L207.232 56.049L207.252 80.6119L206.786 148.492L206.745 171.547L178.546 171.517C172.147 171.517 165.81 172.884 159.999 175.555H160.01Z" fill="currentColor"/>
<path d="M1123.86 246.41C1103.07 255.267 1075.98 266.156 1063.73 266.156C1023.57 266.156 1000.2 235.449 1000.2 191.678C1000.2 190.716 1000.22 189.764 1000.24 188.812H1127.71L1108.53 114.769C1095.83 103.728 1075.21 94.3151 1055.94 94.3151C1005.94 106.591 958.798 137.268 958.798 201.494C958.798 220.39 962.289 236.685 968.57 250.267L938.962 263.11C938.962 263.11 931.978 258.434 931.978 242.048V2.84326L911.051 4.48283L862.339 26.7688L865.278 36.8289L892.994 35.3816V105.68C883.551 101.176 866.317 94.6185 858.115 94.6185C798.196 102.816 757.567 139.241 757.567 206.008C757.567 223.264 760.064 238.618 765.006 251.653L735.356 265.498C731.259 258.95 727.873 256.237 727.873 238.648V159.644C727.873 107.695 714.762 94.5984 663.119 94.5984L588.934 128.341V155.687H624.182L631.147 126.095C640.161 122.411 653.689 118.726 664.752 118.726C686.887 118.726 688.935 133.452 688.935 157.995V170.322L596.721 212.162C589.633 221.817 584.838 230.459 583.104 240.874C565.5 250.043 526.41 267.462 512.011 267.462C471.847 267.462 447.166 235.439 447.166 191.667C447.166 147.894 468.48 115.984 496.345 115.984C507.002 115.984 513.147 118.028 520.114 122.532L528.53 155.668H559.872V114.759C547.167 103.717 522.162 94.3053 502.905 94.3053C452.906 106.582 405.763 137.257 405.763 201.484C405.763 265.711 444.297 298.847 497.167 298.847L583.256 259.618C588.042 285.881 611.982 299.352 636.744 298.826L694.675 272.42L701.914 298.3L772.371 266.53C785.328 287.066 806.742 298.836 836.38 298.836L897.892 270.801L905.331 298.816L977.751 265.691C994.073 287.4 1019.74 298.826 1050.2 298.826L1128.09 262.907L1123.86 246.38V246.41ZM1049.38 116.004C1060.04 116.004 1066.19 118.048 1073.15 122.553L1084.25 166.476L1001.91 170.656C1007.48 137.633 1026.14 116.004 1049.38 116.004ZM688.945 251.036C673.35 263.566 656.264 269.303 644.623 269.303C637.475 269.303 621.311 266.177 621.311 245.318C621.311 236.725 623.359 228.547 629.099 222.404L688.935 194.795V251.036H688.945ZM892.994 241.096C877.891 256.834 852.365 264.233 841.277 264.233C816.656 264.233 798.599 240.834 798.599 195.371C798.599 147.034 819.527 115.113 852.365 115.113C869.599 115.113 883.962 121.256 892.994 131.499V241.107V241.096Z" fill="currentColor"/>
</g>
</g>
<defs>
<clipPath id="clip0_1_9">
<rect width="1129" height="299" fill="white"/>
</clipPath>
</defs>
</svg>
</span>
  <blockquote class="mcp-quote-text">This release is the clearest signal yet that MCP is becoming real production-grade infrastructure. The biggest changes are breaking ones, and the community has chosen to do the hard work rather than paper over the gaps. That tracks with what we see across the enterprises we work with: MCP has already become the default these teams are building on, and this release is exactly the maturation they&rsquo;ve been waiting for. This is a protocol growing up in real time around what production teams actually need, and it&rsquo;s a step forward for anyone building enterprise agents.</blockquote>
  <figcaption class="mcp-quote-attrib">
    <span class="mcp-quote-attrib-name">Alex Salazar</span>
    <span class="mcp-quote-attrib-title">CEO &amp; Co-Founder</span>
  </figcaption>
</figure>

<figure class="mcp-quote"><span class="mcp-quote-logo" role="img" aria-label="AWS"><svg xmlns="http://www.w3.org/2000/svg"
	 viewBox="0 0 304 182">
<g>
	<path fill="currentColor" d="M86.4,66.4c0,3.7,0.4,6.7,1.1,8.9c0.8,2.2,1.8,4.6,3.2,7.2c0.5,0.8,0.7,1.6,0.7,2.3c0,1-0.6,2-1.9,3l-6.3,4.2
		c-0.9,0.6-1.8,0.9-2.6,0.9c-1,0-2-0.5-3-1.4C76.2,90,75,88.4,74,86.8c-1-1.7-2-3.6-3.1-5.9c-7.8,9.2-17.6,13.8-29.4,13.8
		c-8.4,0-15.1-2.4-20-7.2c-4.9-4.8-7.4-11.2-7.4-19.2c0-8.5,3-15.4,9.1-20.6c6.1-5.2,14.2-7.8,24.5-7.8c3.4,0,6.9,0.3,10.6,0.8
		c3.7,0.5,7.5,1.3,11.5,2.2v-7.3c0-7.6-1.6-12.9-4.7-16c-3.2-3.1-8.6-4.6-16.3-4.6c-3.5,0-7.1,0.4-10.8,1.3c-3.7,0.9-7.3,2-10.8,3.4
		c-1.6,0.7-2.8,1.1-3.5,1.3c-0.7,0.2-1.2,0.3-1.6,0.3c-1.4,0-2.1-1-2.1-3.1v-4.9c0-1.6,0.2-2.8,0.7-3.5c0.5-0.7,1.4-1.4,2.8-2.1
		c3.5-1.8,7.7-3.3,12.6-4.5c4.9-1.3,10.1-1.9,15.6-1.9c11.9,0,20.6,2.7,26.2,8.1c5.5,5.4,8.3,13.6,8.3,24.6V66.4z M45.8,81.6
		c3.3,0,6.7-0.6,10.3-1.8c3.6-1.2,6.8-3.4,9.5-6.4c1.6-1.9,2.8-4,3.4-6.4c0.6-2.4,1-5.3,1-8.7v-4.2c-2.9-0.7-6-1.3-9.2-1.7
		c-3.2-0.4-6.3-0.6-9.4-0.6c-6.7,0-11.6,1.3-14.9,4c-3.3,2.7-4.9,6.5-4.9,11.5c0,4.7,1.2,8.2,3.7,10.6
		C37.7,80.4,41.2,81.6,45.8,81.6z M126.1,92.4c-1.8,0-3-0.3-3.8-1c-0.8-0.6-1.5-2-2.1-3.9L96.7,10.2c-0.6-2-0.9-3.3-0.9-4
		c0-1.6,0.8-2.5,2.4-2.5h9.8c1.9,0,3.2,0.3,3.9,1c0.8,0.6,1.4,2,2,3.9l16.8,66.2l15.6-66.2c0.5-2,1.1-3.3,1.9-3.9c0.8-0.6,2.2-1,4-1
		h8c1.9,0,3.2,0.3,4,1c0.8,0.6,1.5,2,1.9,3.9l15.8,67l17.3-67c0.6-2,1.3-3.3,2-3.9c0.8-0.6,2.1-1,3.9-1h9.3c1.6,0,2.5,0.8,2.5,2.5
		c0,0.5-0.1,1-0.2,1.6c-0.1,0.6-0.3,1.4-0.7,2.5l-24.1,77.3c-0.6,2-1.3,3.3-2.1,3.9c-0.8,0.6-2.1,1-3.8,1h-8.6c-1.9,0-3.2-0.3-4-1
		c-0.8-0.7-1.5-2-1.9-4L156,23l-15.4,64.4c-0.5,2-1.1,3.3-1.9,4c-0.8,0.7-2.2,1-4,1H126.1z M254.6,95.1c-5.2,0-10.4-0.6-15.4-1.8
		c-5-1.2-8.9-2.5-11.5-4c-1.6-0.9-2.7-1.9-3.1-2.8c-0.4-0.9-0.6-1.9-0.6-2.8v-5.1c0-2.1,0.8-3.1,2.3-3.1c0.6,0,1.2,0.1,1.8,0.3
		c0.6,0.2,1.5,0.6,2.5,1c3.4,1.5,7.1,2.7,11,3.5c4,0.8,7.9,1.2,11.9,1.2c6.3,0,11.2-1.1,14.6-3.3c3.4-2.2,5.2-5.4,5.2-9.5
		c0-2.8-0.9-5.1-2.7-7c-1.8-1.9-5.2-3.6-10.1-5.2L246,52c-7.3-2.3-12.7-5.7-16-10.2c-3.3-4.4-5-9.3-5-14.5c0-4.2,0.9-7.9,2.7-11.1
		c1.8-3.2,4.2-6,7.2-8.2c3-2.3,6.4-4,10.4-5.2c4-1.2,8.2-1.7,12.6-1.7c2.2,0,4.5,0.1,6.7,0.4c2.3,0.3,4.4,0.7,6.5,1.1
		c2,0.5,3.9,1,5.7,1.6c1.8,0.6,3.2,1.2,4.2,1.8c1.4,0.8,2.4,1.6,3,2.5c0.6,0.8,0.9,1.9,0.9,3.3v4.7c0,2.1-0.8,3.2-2.3,3.2
		c-0.8,0-2.1-0.4-3.8-1.2c-5.7-2.6-12.1-3.9-19.2-3.9c-5.7,0-10.2,0.9-13.3,2.8c-3.1,1.9-4.7,4.8-4.7,8.9c0,2.8,1,5.2,3,7.1
		c2,1.9,5.7,3.8,11,5.5l14.2,4.5c7.2,2.3,12.4,5.5,15.5,9.6c3.1,4.1,4.6,8.8,4.6,14c0,4.3-0.9,8.2-2.6,11.6
		c-1.8,3.4-4.2,6.4-7.3,8.8c-3.1,2.5-6.8,4.3-11.1,5.6C264.4,94.4,259.7,95.1,254.6,95.1z"/>
	<g>
		<path fill="#FF9900" fill-rule="evenodd" clip-rule="evenodd" d="M273.5,143.7c-32.9,24.3-80.7,37.2-121.8,37.2c-57.6,0-109.5-21.3-148.7-56.7c-3.1-2.8-0.3-6.6,3.4-4.4
			c42.4,24.6,94.7,39.5,148.8,39.5c36.5,0,76.6-7.6,113.5-23.2C274.2,133.6,278.9,139.7,273.5,143.7z"/>
		<path fill="#FF9900" fill-rule="evenodd" clip-rule="evenodd" d="M287.2,128.1c-4.2-5.4-27.8-2.6-38.5-1.3c-3.2,0.4-3.7-2.4-0.8-4.5c18.8-13.2,49.7-9.4,53.3-5
			c3.6,4.5-1,35.4-18.6,50.2c-2.7,2.3-5.3,1.1-4.1-1.9C282.5,155.7,291.4,133.4,287.2,128.1z"/>
	</g>
</g>
</svg>
</span>
  <blockquote class="mcp-quote-text">AWS and Anthropic are committed to supporting the MCP community and helping developers ship enterprise-grade agents at scale. With the new MCP specification and its stateless protocol core available in Amazon Bedrock AgentCore, developers can deploy MCP servers on standard, scalable infrastructure without managing sessions or persistent connections. Tasks, one of the first official MCP extensions and contributed by AWS, brings support for reliable, long-running agents, so developers can spend less time on infrastructure and more time innovating.</blockquote>
  <figcaption class="mcp-quote-attrib">
    <span class="mcp-quote-attrib-name">Swami Sivasubramanian</span>
    <span class="mcp-quote-attrib-title">VP of Agentic AI</span>
  </figcaption>
</figure>

<figure class="mcp-quote"><span class="mcp-quote-logo" role="img" aria-label="Cloudflare"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 101.4 33.5">
  <path fill="#fff" d="M94.7,10.6,89.1,9.3l-1-.4-25.7.2V21.5l32.3.1Z"/>
  <path fill="#f48120" d="M84.2,20.4a2.85546,2.85546,0,0,0-.3-2.6,3.09428,3.09428,0,0,0-2.1-1.1l-17.4-.2c-.1,0-.2-.1-.3-.1a.1875.1875,0,0,1,0-.3c.1-.2.2-.3.4-.3L82,15.6a6.29223,6.29223,0,0,0,5.1-3.8l1-2.6c0-.1.1-.2,0-.3A11.39646,11.39646,0,0,0,66.2,7.7a5.45941,5.45941,0,0,0-3.6-1A5.20936,5.20936,0,0,0,58,11.3a5.46262,5.46262,0,0,0,.1,1.8A7.30177,7.30177,0,0,0,51,20.4a4.102,4.102,0,0,0,.1,1.1.3193.3193,0,0,0,.3.3H83.5c.2,0,.4-.1.4-.3Z"/>
  <path fill="#faad3f" d="M89.7,9.2h-.5c-.1,0-.2.1-.3.2l-.7,2.4a2.85546,2.85546,0,0,0,.3,2.6,3.09428,3.09428,0,0,0,2.1,1.1l3.7.2c.1,0,.2.1.3.1a.1875.1875,0,0,1,0,.3c-.1.2-.2.3-.4.3l-3.8.2a6.29223,6.29223,0,0,0-5.1,3.8l-.2.9c-.1.1,0,.3.2.3H98.5a.26517.26517,0,0,0,.3-.3,10.87184,10.87184,0,0,0,.4-2.6,9.56045,9.56045,0,0,0-9.5-9.5"/>
  <path fill="currentColor" d="M100.5,27.2a.9.9,0,1,1,.9-.9.89626.89626,0,0,1-.9.9m0-1.6a.7.7,0,1,0,.7.7.68354.68354,0,0,0-.7-.7m.4,1.2h-.2l-.2-.3h-.2v.3h-.2v-.9h.5a.26517.26517,0,0,1,.3.3c0,.1-.1.2-.2.3l.2.3Zm-.3-.5c.1,0,.1,0,.1-.1a.09794.09794,0,0,0-.1-.1h-.3v.3h.3Zm-89.7-.9h2.2v6h3.8v1.9h-6Zm8.3,3.9a4.10491,4.10491,0,0,1,4.3-4.1,4.02,4.02,0,0,1,4.2,4.1,4.10491,4.10491,0,0,1-4.3,4.1,4.07888,4.07888,0,0,1-4.2-4.1m6.3,0a2.05565,2.05565,0,0,0-2-2.2,2.1025,2.1025,0,0,0,0,4.2c1.2.2,2-.8,2-2m4.9.5V25.4h2.2v4.4c0,1.1.6,1.7,1.5,1.7a1.39926,1.39926,0,0,0,1.5-1.6V25.4h2.2v4.4c0,2.6-1.5,3.7-3.7,3.7-2.3-.1-3.7-1.2-3.7-3.7m10.7-4.4h3.1c2.8,0,4.5,1.6,4.5,3.9s-1.7,4-4.5,4h-3V25.4Zm3.1,5.9a2.00909,2.00909,0,1,0,0-4h-.9v4Zm7.6-5.9h6.3v1.9H54v1.3h3.7v1.8H54v2.9H51.8Zm9.4,0h2.2v6h3.8v1.9h-6Zm11.7-.1h2.2l3.4,8H76.1l-.6-1.4H72.4l-.6,1.4H69.5Zm2,4.9L74,28l-.9,2.2Zm6.4-4.8H85a3.41818,3.41818,0,0,1,2.6.9,2.62373,2.62373,0,0,1-.9,4.2l1.9,2.8H86.1l-1.6-2.4h-1v2.4H81.3Zm3.6,3.8c.7,0,1.2-.4,1.2-.9,0-.6-.5-.9-1.2-.9H83.5v1.9h1.4Zm6.5-3.8h6.4v1.8H93.6v1.2h3.8v1.8H93.6v1.2h4.3v1.9H91.4ZM6.1,30.3a1.97548,1.97548,0,0,1-1.8,1.2,2.1025,2.1025,0,0,1,0-4.2,2.0977,2.0977,0,0,1,1.9,1.3H8.5a4.13459,4.13459,0,0,0-4.2-3.3A4.1651,4.1651,0,0,0,0,29.4a4.07888,4.07888,0,0,0,4.2,4.1,4.31812,4.31812,0,0,0,4.2-3.2Z"/>
</svg>
</span>
  <blockquote class="mcp-quote-text">MCP 2026-07-28 is a major step toward making agent infrastructure work like the rest of the web: stateless, cacheable, routable, and globally scalable. Cloudflare&rsquo;s Agents SDK supports the spec from day zero, so developers can run MCP servers directly in Workers, call tools without transport-session overhead, and enable richer flows like elicitation for approvals. Because MCP is an open standard, Cloudflare customers like Sentry and Linear can adopt it on day zero and immediately deliver these improvements to their users.</blockquote>
  <figcaption class="mcp-quote-attrib">
    <span class="mcp-quote-attrib-name">Brendan Irvine-Broque</span>
    <span class="mcp-quote-attrib-title">Senior Director Product Management</span>
  </figcaption>
</figure>

<figure class="mcp-quote"><span class="mcp-quote-logo" role="img" aria-label="Figma"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 300"><path fill="#0acf83" d="M50 300c27.6 0 50-22.4 50-50v-50H50c-27.6 0-50 22.4-50 50s22.4 50 50 50z"/><path fill="#a259ff" d="M0 150c0-27.6 22.4-50 50-50h50v100H50c-27.6 0-50-22.4-50-50z"/><path fill="#f24e1e" d="M0 50C0 22.4 22.4 0 50 0h50v100H50C22.4 100 0 77.6 0 50z"/><path fill="#ff7262" d="M100 0h50c27.6 0 50 22.4 50 50s-22.4 50-50 50h-50V0z"/><path fill="#1abcfe" d="M200 150c0 27.6-22.4 50-50 50s-50-22.4-50-50 22.4-50 50-50 50 22.4 50 50z"/></svg>
</span>
  <blockquote class="mcp-quote-text">More builders are using our MCP server to bring generated outputs into Figma&rsquo;s canvas, where they can explore, riff and refine them with their team into products that stand out. As that usage grows, our stateless architecture can scale with it, and with MCP Apps, Tasks, and Enterprise-Managed Authorization, we can do even more to keep design and code together in one, connected flow.</blockquote>
  <figcaption class="mcp-quote-attrib">
    <span class="mcp-quote-attrib-name">Josh Clemm</span>
    <span class="mcp-quote-attrib-title">VP of Engineering</span>
  </figcaption>
</figure>

<figure class="mcp-quote"><span class="mcp-quote-logo"><img src="/posts/2026-07-28/google-cloud.png" alt="Google Cloud" loading="lazy"></span>
  <blockquote class="mcp-quote-text">The 2026-07-28 Model Context Protocol release represents a massive leap forward in enterprise AI scalability. By evolving into a stateless architecture, this specification removes the friction of deploying agentic workflows at scale. At Google Cloud, we are excited to leverage these powerful new capabilities across our ecosystem of developer tools. This release provides the robust, secure, and extensible foundation that our customers (and our own teams) need to build the next generation of AI applications, and we are proud to continue shaping the future of this open standard together.</blockquote>
  <figcaption class="mcp-quote-attrib">
    <span class="mcp-quote-attrib-name">Anna Berenberg</span>
    <span class="mcp-quote-attrib-title">Engineering Fellow</span>
  </figcaption>
</figure>

<figure class="mcp-quote"><span class="mcp-quote-logo" role="img" aria-label="Honeycomb"><svg viewBox="0 0 164 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#honeycomb-clip0_12_100)">
<path d="M151.695 26.0425C151.755 26.1019 151.8 26.1744 151.827 26.2543C151.861 26.3331 151.878 26.4179 151.879 26.5037V27.139C151.879 27.3116 151.817 27.4787 151.704 27.6096C151.651 27.6671 151.587 27.7134 151.516 27.7457C151.445 27.778 151.368 27.7958 151.29 27.7978H150.917C150.839 27.7987 150.761 27.7823 150.689 27.7498C150.617 27.7172 150.554 27.6694 150.503 27.6096C150.39 27.4787 150.328 27.3116 150.328 27.139V26.5037C150.326 26.3306 150.388 26.1629 150.503 26.0331C150.555 25.9754 150.619 25.9289 150.691 25.8966C150.762 25.8642 150.839 25.8466 150.917 25.8449H151.275C151.35 25.8431 151.425 25.8592 151.492 25.8919C151.569 25.9286 151.638 25.9797 151.695 26.0425Z" fill="currentColor"/>
<path d="M64.6291 28.8799H61.5329C61.0564 28.874 60.5839 28.9667 60.1451 29.1522C59.7063 29.3376 59.3107 29.6119 58.9833 29.9576C58.6438 30.286 58.3731 30.6785 58.1871 31.1123C58.001 31.5462 57.9032 32.0127 57.8994 32.4846V39.9999H59.1436V33.0776C59.153 32.292 59.4653 31.5404 60.0154 30.9788C60.5641 30.4331 61.3052 30.1239 62.0795 30.1176H63.9269C64.3088 30.1175 64.6869 30.1936 65.039 30.3415C65.391 30.4894 65.7099 30.706 65.9769 30.9788C66.2543 31.2534 66.4743 31.5804 66.624 31.9407C66.7737 32.301 66.8501 32.6875 66.8487 33.0776V39.9999H68.1494V32.4705C68.1545 31.9972 68.0607 31.5281 67.8741 31.093C67.6874 30.6579 67.4121 30.2664 67.0655 29.9435C66.7667 29.5934 66.392 29.3158 65.9699 29.1316C65.5478 28.9473 65.0893 28.8613 64.6291 28.8799Z" fill="currentColor"/>
<path d="M52.3575 28.6636H49.9164C48.8837 28.6807 47.895 29.0836 47.1453 29.793C46.4299 30.5296 46.0221 31.5105 46.0049 32.5365V36.3012C46.0125 37.3297 46.4138 38.3163 47.1265 39.0589C47.4867 39.426 47.9184 39.7157 48.395 39.9099C48.8715 40.1042 49.3829 40.1989 49.8975 40.1883H52.3387C53.3816 40.1806 54.3825 39.7768 55.138 39.0589C55.5025 38.7012 55.7913 38.2741 55.9872 37.8028C56.1832 37.3314 56.2822 36.8256 56.2784 36.3153V32.5506C56.2648 31.5197 55.8568 30.5331 55.138 29.793C54.3859 29.0815 53.3934 28.6783 52.3575 28.6636ZM54.9118 32.4283V36.5177C54.8982 37.1595 54.6463 37.7733 54.2049 38.24C53.7516 38.675 53.151 38.9236 52.5225 38.9365H49.808C49.1759 38.9345 48.5699 38.6843 48.1209 38.24C47.6728 37.7781 47.4211 37.1608 47.4187 36.5177V32.4283C47.4299 31.7883 47.6803 31.1756 48.1209 30.7106C48.5743 30.2725 49.1771 30.022 49.808 30.0095H52.5225C53.151 30.0134 53.7524 30.2655 54.1955 30.7106C54.6407 31.1737 54.8963 31.7865 54.9118 32.4283Z" fill="currentColor"/>
<path d="M41.0003 28.8799H37.9135C37.4465 28.864 36.9821 28.9558 36.5563 29.1482C36.1749 29.2724 35.8235 29.4743 35.5242 29.7411V24.8423H34.2754V39.9999H35.5808V33.0211C35.5904 32.2365 35.9008 31.4854 36.4479 30.9223C36.9983 30.3791 37.7383 30.0704 38.5121 30.0611H40.3594C40.7419 30.0619 41.1204 30.1384 41.4731 30.2863C41.8258 30.4341 42.1456 30.6503 42.4141 30.9223C42.6897 31.1981 42.9081 31.5254 43.0569 31.8855C43.2056 32.2457 43.2819 32.6315 43.2812 33.0211V39.9623H44.5866V32.4329C44.5919 31.9591 44.4978 31.4895 44.3103 31.0542C44.1228 30.619 43.8461 30.2278 43.498 29.9058C43.1814 29.5638 42.7939 29.2949 42.3625 29.1177C41.9311 28.9406 41.4663 28.8594 41.0003 28.8799Z" fill="currentColor"/>
<path d="M108.071 28.7059H105.63C104.597 28.7207 103.608 29.124 102.859 29.8353C102.143 30.5713 101.735 31.5526 101.719 32.5788V36.3435C101.736 37.3695 102.144 38.3505 102.859 39.0871C103.219 39.4542 103.651 39.7439 104.128 39.9381C104.604 40.1324 105.116 40.2271 105.63 40.2165H108.071C109.104 40.1985 110.092 39.7956 110.842 39.0871C111.558 38.3505 111.966 37.3695 111.983 36.3435V32.5788C111.967 31.5526 111.559 30.5713 110.842 29.8353C110.482 29.4681 110.051 29.1785 109.574 28.9842C109.097 28.79 108.586 28.6953 108.071 28.7059ZM110.626 32.4706V36.56C110.612 37.2003 110.36 37.8126 109.919 38.2776C109.702 38.5044 109.441 38.6839 109.151 38.8046C108.862 38.9253 108.55 38.9846 108.236 38.9788H105.517C104.886 38.9763 104.281 38.7242 103.835 38.2776C103.386 37.8182 103.134 37.202 103.133 36.56V32.4706C103.144 31.8293 103.395 31.2154 103.835 30.7482C104.288 30.3128 104.888 30.0626 105.517 30.0471H108.236C108.868 30.0506 109.472 30.3025 109.919 30.7482C110.36 31.2149 110.612 31.8288 110.626 32.4706Z" fill="currentColor"/>
<path d="M128.433 28.9319H125.393C124.805 28.9346 124.227 29.0834 123.711 29.3648C123.247 29.616 122.844 29.9643 122.528 30.386C122.224 29.948 121.812 29.5962 121.331 29.3648C120.833 29.0903 120.274 28.9417 119.705 28.9319H116.774C115.833 28.9565 114.939 29.3425 114.276 30.0095C113.947 30.3406 113.69 30.7359 113.522 31.1708C113.353 31.6057 113.276 32.0707 113.296 32.5366V40.066H114.517V33.1813C114.511 32.794 114.584 32.4095 114.733 32.0519C114.87 31.7026 115.073 31.383 115.332 31.1107C115.609 30.8455 115.928 30.6263 116.274 30.4613C116.615 30.3097 116.986 30.2373 117.358 30.2495H119.097C119.751 30.2489 120.385 30.477 120.888 30.8942C121.38 31.2896 121.725 31.838 121.868 32.4519V40.1225H123.226V32.3201C123.398 31.7193 123.761 31.1904 124.259 30.8128C124.758 30.4352 125.366 30.2293 125.992 30.226H127.787C128.56 30.2331 129.3 30.5422 129.847 31.0872C130.396 31.626 130.71 32.3604 130.719 33.1295V40.0707H132.076V32.5413C132.079 32.073 131.989 31.6088 131.812 31.1752C131.635 30.7415 131.374 30.347 131.044 30.0142C130.33 29.3551 129.404 28.9714 128.433 28.9319Z" fill="currentColor"/>
<path d="M142.444 29.7414C142.084 29.3914 141.659 29.116 141.192 28.931C140.725 28.746 140.227 28.6552 139.725 28.6637H137.283C136.339 28.6604 135.427 29.0114 134.729 29.6472V24.7908H133.367V36.2355C133.387 37.261 133.794 38.2411 134.508 38.979C134.869 39.3448 135.301 39.6336 135.777 39.8277C136.253 40.0219 136.764 40.1174 137.279 40.1084H139.72C140.234 40.1131 140.743 40.0156 141.219 39.8217C141.695 39.6278 142.127 39.3414 142.491 38.979C142.856 38.6214 143.145 38.1944 143.342 37.7231C143.539 37.2519 143.639 36.746 143.636 36.2355V32.4708C143.63 31.9739 143.538 31.4819 143.363 31.0167C143.118 30.5502 142.809 30.1209 142.444 29.7414ZM134.677 32.3767C134.691 31.7349 134.943 31.121 135.384 30.6543C135.837 30.2173 136.437 29.9668 137.067 29.9531H139.781C140.412 29.9566 141.017 30.2086 141.464 30.6543C141.913 31.1155 142.167 31.7329 142.17 32.3767V36.4661C142.157 37.1066 141.905 37.7192 141.464 38.1837C141.013 38.6228 140.411 38.8735 139.781 38.8849H137.067C136.754 38.8842 136.444 38.8219 136.156 38.7015C135.867 38.5812 135.605 38.4053 135.384 38.1837C134.934 37.7247 134.68 37.1086 134.677 36.4661V32.3767Z" fill="currentColor"/>
<path d="M99.437 38.0799C99.239 38.3034 98.9988 38.4857 98.7301 38.6164C98.4417 38.7733 98.1156 38.8482 97.7876 38.8329H95.238C94.6188 38.7966 94.0362 38.5276 93.6075 38.0799C93.3935 37.8585 93.2258 37.5967 93.1142 37.3099C93.0025 37.0231 92.9491 36.717 92.9571 36.4093V32.3199C92.9504 31.7016 93.1835 31.1047 93.6075 30.654C94.0435 30.2166 94.6219 29.9496 95.238 29.9011H97.7876C98.3349 29.9002 98.8608 30.113 99.2532 30.494L99.3097 30.5458H100.851L100.794 30.3858C100.476 29.8386 100.03 29.3767 99.4935 29.0399C98.9459 28.7305 98.3272 28.5683 97.698 28.5693H95.4171C94.43 28.6233 93.4994 29.0467 92.811 29.7552C92.129 30.4821 91.7586 31.4464 91.7789 32.4423V36.207C91.7569 36.7016 91.8372 37.1955 92.0148 37.6578C92.1924 38.1201 92.4634 38.541 92.811 38.894C93.4918 39.6133 94.4268 40.0388 95.4171 40.0799H97.698C98.352 40.0647 98.99 39.8746 99.5454 39.5293C100.113 39.2006 100.568 38.7086 100.851 38.1176L100.903 37.9576H99.437V38.0799Z" fill="currentColor"/>
<path d="M85.8071 37.647L85.6987 37.5952C85.3595 37.4943 85.0406 37.335 84.7562 37.1246C84.092 36.4456 83.6063 35.613 83.3424 34.7011L81.66 29.1105C81.66 29.054 81.6081 29.0023 81.6081 28.9458C81.6081 28.8893 81.5516 28.8376 81.5516 28.7858V28.7058H80.3027V28.8093C80.3561 29.1008 80.4285 29.3885 80.5195 29.6705L82.0417 34.847C82.5837 36.7293 83.7807 38.2352 85.1898 38.7717L82.6591 43.7646H83.9598L91.7262 28.7058H90.3689L85.8071 37.647Z" fill="currentColor"/>
<path d="M151.747 29.3083H150.498V40.1319H151.747V29.3083Z" fill="currentColor"/>
<path d="M163.675 30.9788C163.482 30.5056 163.184 30.0824 162.803 29.7412C162.438 29.389 162.018 29.0982 161.559 28.88C161.094 28.6868 160.593 28.5953 160.089 28.6117H157.648C156.615 28.6275 155.626 29.0306 154.877 29.7412C154.514 30.0975 154.227 30.5224 154.031 30.9911C153.835 31.4597 153.735 31.9627 153.736 32.4706V36.2353C153.754 37.2613 154.161 38.2422 154.877 38.9788C155.237 39.346 155.669 39.6356 156.145 39.8299C156.622 40.0241 157.133 40.1188 157.648 40.1082H160.089C161.122 40.0934 162.112 39.6901 162.86 38.9788C163.576 38.2422 163.983 37.2613 164.001 36.2353V32.4706C164.001 31.9558 163.89 31.4469 163.675 30.9788ZM162.643 32.3906V36.48C162.63 37.1205 162.378 37.7331 161.936 38.1976C161.485 38.6367 160.884 38.8874 160.254 38.8988H157.539C157.227 38.8981 156.917 38.8358 156.628 38.7155C156.34 38.5951 156.078 38.4192 155.857 38.1976C155.407 37.7387 155.153 37.1225 155.15 36.48V32.3764C155.164 31.7347 155.416 31.1208 155.857 30.6541C156.31 30.2184 156.911 29.9696 157.539 29.9576H160.254C160.885 29.9599 161.489 30.2101 161.936 30.6541C162.378 31.1208 162.63 31.7347 162.643 32.3764V32.3906Z" fill="currentColor"/>
<path d="M76.415 28.7057H73.0455C72.2862 28.6828 71.5471 28.9524 70.9813 29.4586C70.4048 29.9499 70.036 30.6409 69.9493 31.3927V36.2351C69.9467 36.7901 70.059 37.3396 70.2792 37.8492C70.4863 38.3362 70.7855 38.7788 71.1604 39.1527C71.5271 39.5196 71.9739 39.7967 72.4658 39.9622C72.82 40.0652 73.1828 40.1361 73.5497 40.1739H75.7741C76.4865 40.1705 77.1801 39.9451 77.7581 39.5292C77.9507 39.3866 78.1319 39.2293 78.3001 39.0586C78.4442 38.8925 78.5721 38.7128 78.6818 38.5222C78.7926 38.3348 78.8827 38.136 78.9504 37.9292L79.007 37.821L77.8241 37.6469L77.7722 37.7033C77.6411 37.9876 77.4554 38.2435 77.2256 38.4563C76.8507 38.7864 76.3726 38.9761 75.8731 38.9927H73.3754C73.1728 38.9893 72.9722 38.9528 72.7816 38.8845C72.312 38.735 71.9068 38.4316 71.6317 38.0233C71.4686 37.8208 71.357 37.5818 71.3065 37.3269C71.25 37.2186 71.25 37.0539 71.1981 36.9504V34.9598H76.4103C77.195 34.9794 77.9556 34.6885 78.5263 34.1504C79.1158 33.6065 79.4664 32.8522 79.5018 32.0516V31.6751C79.477 30.8788 79.1383 30.1244 78.5593 29.5763C78.2801 29.293 77.9459 29.0696 77.5772 28.9199C77.2084 28.7702 76.813 28.6973 76.415 28.7057ZM77.6073 33.4398C77.3226 33.6384 76.9782 33.7331 76.6318 33.708H71.2028V31.4069C71.2473 31.0908 71.3777 30.7929 71.5798 30.5457C71.7427 30.3472 71.947 30.1867 72.1783 30.0751C72.4167 29.9675 72.6755 29.9129 72.9371 29.9151H76.6318C76.8752 29.9128 77.1157 29.9676 77.334 30.0751C77.555 30.1871 77.757 30.3332 77.9325 30.508C78.138 30.8139 78.2688 31.1637 78.3142 31.5292C78.3604 31.892 78.3234 32.2605 78.2058 32.6069C78.1022 32.9459 77.8924 33.2428 77.6073 33.4539V33.4398Z" fill="currentColor"/>
<path d="M148.298 38.6119C148.297 38.9133 148.207 39.2076 148.038 39.4577C147.87 39.7078 147.631 39.9025 147.352 40.0172C147.073 40.1319 146.766 40.1614 146.47 40.1021C146.174 40.0427 145.903 39.8971 145.69 39.6837C145.477 39.4703 145.332 39.1986 145.273 38.903C145.215 38.6073 145.245 38.301 145.361 38.0227C145.477 37.7443 145.672 37.5065 145.923 37.3392C146.174 37.1718 146.469 37.0825 146.771 37.0825C146.972 37.0825 147.171 37.1221 147.356 37.199C147.542 37.2759 147.711 37.3887 147.852 37.5308C147.994 37.6728 148.107 37.8415 148.183 38.027C148.26 38.2125 148.299 38.4113 148.298 38.6119Z" fill="currentColor"/>
<path d="M26.0654 32.7012L30.4387 40.3482L26.0654 48H17.3706L13.002 40.3482L17.3706 32.7012H26.0654Z" fill="#FFB000"/>
<path d="M26.0654 14.24L30.4387 21.8871L26.0654 29.5388H17.3706L13.002 21.8871L17.3706 14.24H26.0654Z" fill="#64BA00"/>
<path d="M10.6741 24.7908L14.2369 31.1155L10.6741 37.4496H3.56276L0 31.1155L3.56276 24.7908H10.6741Z" fill="#F96E10"/>
<path d="M44.9918 0L50.647 10.0141L44.9918 20.0424H33.6249L27.9697 10.0141L33.6249 0H44.9918Z" fill="#0298EC"/>
</g>
<defs>
<clipPath id="honeycomb-clip0_12_100">
<rect width="164" height="48" fill="white"/>
</clipPath>
</defs>
</svg>
</span>
  <blockquote class="mcp-quote-text">At honeycomb.io, we&rsquo;ve seen fantastic adoption of MCP - nearly 20% of all monthly interactive queries are now made by agents! The new specification release allows us to support more advanced features such as elicitations while running at enterprise scale.</blockquote>
  <figcaption class="mcp-quote-attrib">
    <span class="mcp-quote-attrib-name">Austin Parker</span>
    <span class="mcp-quote-attrib-title">Director of AI Strategy</span>
  </figcaption>
</figure>

<figure class="mcp-quote"><span class="mcp-quote-logo" role="img" aria-label="Manufact"><svg viewBox="0 0 2808 500" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M693 435V85H733L878.5 324.5H852.5L998 85H1038V435H980.5V186L993.5 189.5L885.5 367H845.5L737.5 189.5L750.5 186V435H693ZM1206.9 440C1185.23 440 1165.57 434.5 1147.9 423.5C1130.57 412.5 1116.73 397.667 1106.4 379C1096.4 360 1091.4 338.833 1091.4 315.5C1091.4 291.833 1096.4 270.667 1106.4 252C1116.73 233 1130.57 218 1147.9 207C1165.57 195.667 1185.23 190 1206.9 190C1225.23 190 1241.4 194 1255.4 202C1269.73 209.667 1281.07 220.333 1289.4 234C1297.73 247.667 1301.9 263.167 1301.9 280.5V349.5C1301.9 366.833 1297.73 382.333 1289.4 396C1281.4 409.667 1270.23 420.5 1255.9 428.5C1241.57 436.167 1225.23 440 1206.9 440ZM1215.9 388C1236.23 388 1252.57 381.167 1264.9 367.5C1277.57 353.833 1283.9 336.333 1283.9 315C1283.9 300.667 1281.07 288 1275.4 277C1269.73 266 1261.73 257.5 1251.4 251.5C1241.4 245.167 1229.57 242 1215.9 242C1202.57 242 1190.73 245.167 1180.4 251.5C1170.4 257.5 1162.4 266 1156.4 277C1150.73 288 1147.9 300.667 1147.9 315C1147.9 329.333 1150.73 342 1156.4 353C1162.4 364 1170.4 372.667 1180.4 379C1190.73 385 1202.57 388 1215.9 388ZM1280.4 435V370.5L1289.9 312L1280.4 254V195H1335.4V435H1280.4ZM1560.94 435V296.5C1560.94 280.5 1555.77 267.333 1545.44 257C1535.44 246.667 1522.44 241.5 1506.44 241.5C1495.77 241.5 1486.27 243.833 1477.94 248.5C1469.6 253.167 1463.1 259.667 1458.44 268C1453.77 276.333 1451.44 285.833 1451.44 296.5L1429.94 284.5C1429.94 266.167 1433.94 250 1441.94 236C1449.94 221.667 1460.94 210.5 1474.94 202.5C1489.27 194.167 1505.27 190 1522.94 190C1540.94 190 1556.94 194.667 1570.94 204C1584.94 213 1595.94 224.833 1603.94 239.5C1611.94 253.833 1615.94 268.833 1615.94 284.5V435H1560.94ZM1396.44 435V195H1451.44V435H1396.44ZM1770.33 440C1749.99 440 1731.83 435.5 1715.83 426.5C1700.16 417.5 1687.83 405.167 1678.83 389.5C1670.16 373.5 1665.83 355.167 1665.83 334.5V195H1720.83V332C1720.83 343.667 1722.66 353.667 1726.33 362C1730.33 370 1735.99 376.167 1743.33 380.5C1750.99 384.833 1759.99 387 1770.33 387C1786.33 387 1798.49 382.333 1806.83 373C1815.49 363.333 1819.83 349.667 1819.83 332V195H1874.83V334.5C1874.83 355.5 1870.33 374 1861.33 390C1852.66 405.667 1840.49 418 1824.83 427C1809.16 435.667 1790.99 440 1770.33 440ZM1963.13 435V163.5C1963.13 145.167 1967.13 129 1975.13 115C1983.46 101 1994.8 90 2009.13 82C2023.8 74 2040.63 70 2059.63 70C2074.3 70 2086.8 72.5 2097.13 77.5C2107.46 82.5 2117.13 89.6666 2126.13 99L2090.63 134.5C2086.63 130.5 2082.3 127.333 2077.63 125C2072.96 122.667 2066.96 121.5 2059.63 121.5C2046.3 121.5 2035.96 125.167 2028.63 132.5C2021.63 139.5 2018.13 149.667 2018.13 163V435H1963.13ZM1905.63 245V195H2090.63V245H1905.63ZM2220.08 440C2198.42 440 2178.75 434.5 2161.08 423.5C2143.75 412.5 2129.92 397.667 2119.58 379C2109.58 360 2104.58 338.833 2104.58 315.5C2104.58 291.833 2109.58 270.667 2119.58 252C2129.92 233 2143.75 218 2161.08 207C2178.75 195.667 2198.42 190 2220.08 190C2238.42 190 2254.58 194 2268.58 202C2282.92 209.667 2294.25 220.333 2302.58 234C2310.92 247.667 2315.08 263.167 2315.08 280.5V349.5C2315.08 366.833 2310.92 382.333 2302.58 396C2294.58 409.667 2283.42 420.5 2269.08 428.5C2254.75 436.167 2238.42 440 2220.08 440ZM2229.08 388C2249.42 388 2265.75 381.167 2278.08 367.5C2290.75 353.833 2297.08 336.333 2297.08 315C2297.08 300.667 2294.25 288 2288.58 277C2282.92 266 2274.92 257.5 2264.58 251.5C2254.58 245.167 2242.75 242 2229.08 242C2215.75 242 2203.92 245.167 2193.58 251.5C2183.58 257.5 2175.58 266 2169.58 277C2163.92 288 2161.08 300.667 2161.08 315C2161.08 329.333 2163.92 342 2169.58 353C2175.58 364 2183.58 372.667 2193.58 379C2203.92 385 2215.75 388 2229.08 388ZM2293.58 435V370.5L2303.08 312L2293.58 254V195H2348.58V435H2293.58ZM2520.12 440C2496.45 440 2474.95 434.5 2455.62 423.5C2436.62 412.5 2421.62 397.5 2410.62 378.5C2399.62 359.5 2394.12 338.333 2394.12 315C2394.12 291.333 2399.62 270.167 2410.62 251.5C2421.62 232.5 2436.62 217.5 2455.62 206.5C2474.95 195.5 2496.45 190 2520.12 190C2538.79 190 2556.12 193.667 2572.12 201C2588.45 208 2602.29 218.167 2613.62 231.5L2577.62 268C2570.62 259.667 2562.12 253.5 2552.12 249.5C2542.45 245.167 2531.79 243 2520.12 243C2506.45 243 2494.29 246.167 2483.62 252.5C2473.29 258.5 2465.12 266.833 2459.12 277.5C2453.45 288.167 2450.62 300.667 2450.62 315C2450.62 329 2453.45 341.5 2459.12 352.5C2465.12 363.167 2473.29 371.667 2483.62 378C2494.29 384 2506.45 387 2520.12 387C2531.79 387 2542.45 385 2552.12 381C2562.12 376.667 2570.62 370.333 2577.62 362L2613.62 398.5C2602.29 411.833 2588.45 422.167 2572.12 429.5C2556.12 436.5 2538.79 440 2520.12 440ZM2685.87 435V95H2740.87V435H2685.87ZM2628.37 245V195H2798.37V245H2628.37Z" fill="currentColor"/>
<g clip-path="url(#clip0_815_1039)">
<path d="M101.695 20C157.859 20 203.389 65.7023 203.39 122.079C203.39 146.557 202.073 172.071 212.226 194.344L219.814 210.989C233.838 241.756 258.492 266.431 289.248 280.482L303.509 286.996C326.537 297.516 352.987 295.841 378.305 295.841C434.47 295.841 480 341.544 480 397.921C480 454.297 434.47 500 378.305 500C322.141 500 276.611 454.297 276.61 397.921C276.61 374.218 277.672 349.551 267.834 327.986L259.76 310.284C245.708 279.478 221.002 254.782 190.19 240.742L172.955 232.888C150.989 222.878 125.834 224.159 101.695 224.159C45.5304 224.159 0 178.456 0 122.079C0.000190044 65.7023 45.5304 20 101.695 20Z" fill="currentColor"/>
<path d="M96.4085 500.001C149.653 500.001 192.817 456.837 192.817 403.592C192.817 350.348 149.653 307.184 96.4085 307.184C43.1635 307.184 0 350.348 0 403.592C0 456.837 43.1635 500.001 96.4085 500.001Z" fill="currentColor"/>
<path d="M480 116.408C480 169.653 436.836 212.817 383.592 212.817C330.347 212.817 287.184 169.653 287.184 116.408C287.184 63.1635 330.347 20 383.592 20C436.836 20 480 63.1635 480 116.408Z" fill="currentColor"/>
</g>
<defs>
<clipPath id="clip0_815_1039">
<rect width="480" height="480" fill="white" transform="translate(0 20)"/>
</clipPath>
</defs>
</svg>
</span>
  <blockquote class="mcp-quote-text">The new version of the MCP spec proves that the maintainers listen to feedback from the community. It solves real issues we faced at Manufact, both in mcp-use, our open-source framework, and on Manufact Cloud, where we host thousands of MCP servers. The new SDK v2, which powers mcp-use, helped us cut the package size by around 83% while making it 25% faster, thanks to the new client-server split. And with MCP going stateless, we are able to handle production traffic more reliably, securely, and at scale, without impractical infrastructure workarounds.</blockquote>
  <figcaption class="mcp-quote-attrib">
    <span class="mcp-quote-attrib-name">Enrico Toniato</span>
    <span class="mcp-quote-attrib-title">CTO</span>
  </figcaption>
</figure>

<figure class="mcp-quote"><span class="mcp-quote-logo" role="img" aria-label="Microsoft"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 337.6 72">
<path fill="currentColor" d="M140.4,14.4v43.2h-7.5V23.7h-0.1l-13.4,33.9h-5l-13.7-33.9h-0.1v33.9h-6.9V14.4h10.8l12.4,32h0.2l13.1-32H140.4 z M146.6,17.7c0-1.2,0.4-2.2,1.3-3c0.9-0.8,1.9-1.2,3.1-1.2c1.3,0,2.4,0.4,3.2,1.2s1.3,1.8,1.3,3c0,1.2-0.4,2.2-1.3,3 c-0.9,0.8-1.9,1.2-3.2,1.2s-2.3-0.4-3.1-1.2C147.1,19.8,146.6,18.8,146.6,17.7z M154.7,26.6v31h-7.3v-31H154.7z M176.8,52.3 c1.1,0,2.3-0.2,3.6-0.8c1.3-0.5,2.5-1.2,3.6-2v6.8c-1.2,0.7-2.5,1.2-4,1.5c-1.5,0.3-3.1,0.5-4.9,0.5c-4.6,0-8.3-1.4-11.1-4.3 c-2.9-2.9-4.3-6.6-4.3-11c0-5,1.5-9.1,4.4-12.3c2.9-3.2,7-4.8,12.4-4.8c1.4,0,2.8,0.2,4.1,0.5c1.4,0.3,2.5,0.8,3.3,1.2v7 c-1.1-0.8-2.3-1.5-3.4-1.9c-1.2-0.4-2.4-0.7-3.6-0.7c-2.9,0-5.2,0.9-7,2.8s-2.6,4.4-2.6,7.6c0,3.1,0.9,5.6,2.6,7.3 C171.6,51.4,173.9,52.3,176.8,52.3z M204.7,26.1c0.6,0,1.1,0,1.6,0.1s0.9,0.2,1.2,0.3v7.4c-0.4-0.3-0.9-0.6-1.7-0.8 s-1.6-0.4-2.7-0.4c-1.8,0-3.3,0.8-4.5,2.3s-1.9,3.8-1.9,7v15.6h-7.3v-31h7.3v4.9h0.1c0.7-1.7,1.7-3,3-4 C201.2,26.6,202.8,26.1,204.7,26.1z M207.9,42.6c0-5.1,1.5-9.2,4.3-12.2c2.9-3,6.9-4.5,12-4.5c4.8,0,8.6,1.4,11.3,4.3 s4.1,6.8,4.1,11.7c0,5-1.5,9-4.3,12c-2.9,3-6.8,4.5-11.8,4.5c-4.8,0-8.6-1.4-11.4-4.2C209.3,51.3,207.9,47.4,207.9,42.6z M215.5,42.3c0,3.2,0.7,5.7,2.2,7.4s3.6,2.6,6.3,2.6c2.6,0,4.7-0.8,6.1-2.6c1.4-1.7,2.1-4.2,2.1-7.6c0-3.3-0.7-5.8-2.1-7.6 c-1.4-1.7-3.5-2.6-6-2.6c-2.7,0-4.7,0.9-6.2,2.7C216.2,36.5,215.5,39,215.5,42.3z M250.5,34.8c0,1,0.3,1.9,1,2.5 c0.7,0.6,2.1,1.3,4.4,2.2c2.9,1.2,5,2.5,6.1,3.9c1.2,1.5,1.8,3.2,1.8,5.3c0,2.9-1.1,5.2-3.4,7c-2.2,1.8-5.3,2.6-9.1,2.6 c-1.3,0-2.7-0.2-4.3-0.5c-1.6-0.3-2.9-0.7-4-1.2v-7.2c1.3,0.9,2.8,1.7,4.3,2.2c1.5,0.5,2.9,0.8,4.2,0.8c1.6,0,2.9-0.2,3.6-0.7 c0.8-0.5,1.2-1.2,1.2-2.3c0-1-0.4-1.8-1.2-2.6c-0.8-0.7-2.4-1.5-4.6-2.4c-2.7-1.1-4.6-2.4-5.7-3.8s-1.7-3.2-1.7-5.4 c0-2.8,1.1-5.1,3.3-6.9c2.2-1.8,5.1-2.7,8.6-2.7c1.1,0,2.3,0.1,3.6,0.4s2.5,0.6,3.4,0.9V34c-1-0.6-2.1-1.2-3.4-1.7 c-1.3-0.5-2.6-0.7-3.8-0.7c-1.4,0-2.5,0.3-3.2,0.8C250.9,33.1,250.5,33.8,250.5,34.8z M266.9,42.6c0-5.1,1.5-9.2,4.3-12.2 c2.9-3,6.9-4.5,12-4.5c4.8,0,8.6,1.4,11.3,4.3s4.1,6.8,4.1,11.7c0,5-1.5,9-4.3,12c-2.9,3-6.8,4.5-11.8,4.5c-4.8,0-8.6-1.4-11.4-4.2 C268.4,51.3,266.9,47.4,266.9,42.6z M274.5,42.3c0,3.2,0.7,5.7,2.2,7.4s3.6,2.6,6.3,2.6c2.6,0,4.7-0.8,6.1-2.6 c1.4-1.7,2.1-4.2,2.1-7.6c0-3.3-0.7-5.8-2.1-7.6c-1.4-1.7-3.5-2.6-6-2.6c-2.7,0-4.7,0.9-6.2,2.7C275.3,36.5,274.5,39,274.5,42.3z M322.9,32.6h-10.9v25h-7.4v-25h-5.2v-6h5.2v-4.3c0-3.2,1.1-5.9,3.2-8s4.8-3.1,8.1-3.1c0.9,0,1.7,0.1,2.4,0.1s1.3,0.2,1.8,0.4v6.3 c-0.2-0.1-0.7-0.3-1.3-0.5c-0.6-0.2-1.3-0.3-2.1-0.3c-1.5,0-2.7,0.5-3.5,1.4c-0.8,0.9-1.2,2.4-1.2,4.2v3.7h10.9v-7l7.3-2.2v9.2h7.4 v6h-7.4v14.5c0,1.9,0.4,3.2,1,4c0.7,0.8,1.8,1.2,3.3,1.2c0.4,0,0.9-0.1,1.5-0.3c0.6-0.2,1.1-0.4,1.5-0.7v6c-0.5,0.3-1.2,0.5-2.3,0.7 c-1.1,0.2-2.1,0.3-3.2,0.3c-3.1,0-5.4-0.8-6.9-2.4c-1.5-1.6-2.3-4.1-2.3-7.4L322.9,32.6L322.9,32.6z"/>
<rect fill="#F25022" width="34.2" height="34.2"/>
<rect x="37.8" fill="#7FBA00" width="34.2" height="34.2"/>
<rect y="37.8" fill="#00A4EF" width="34.2" height="34.2"/>
<rect x="37.8" y="37.8" fill="#FFB900" width="34.2" height="34.2"/>
</svg>
</span>
  <blockquote class="mcp-quote-text">Open protocols create bigger ecosystems than any one company can build alone. MCP is foundational to Microsoft Foundry, enabling us to scale from dozens of integrations to thousands. We leverage it with Foundry toolbox unified MCP endpoint that brings together tools while centralizing governance, identity, and observability. With stateless operations, Tasks for long-running work, and enterprise-managed identity, the next generation of MCP makes it easier than ever to build secure, scalable, production-ready agent systems.</blockquote>
  <figcaption class="mcp-quote-attrib">
    <span class="mcp-quote-attrib-name">Tina Schuchman</span>
    <span class="mcp-quote-attrib-title">Corporate Vice President for Engineering, Microsoft Foundry</span>
  </figcaption>
</figure>

<figure class="mcp-quote"><span class="mcp-quote-logo" role="img" aria-label="Netlify"><svg viewBox="0 0 512 209" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_235_8)">
<path d="M117.436 207.036V154.604L118.529 153.51H129.452L130.545 154.604V207.036L129.452 208.13H118.529L117.436 207.036Z" fill="#05BDBA"/>
<path d="M117.436 53.5225V1.09339L118.529 0H129.452L130.545 1.09339V53.5225L129.452 54.6159H118.529L117.436 53.5225Z" fill="#05BDBA"/>
<path d="M69.9539 169.238H68.4094L60.6869 161.512V159.967L78.7201 141.938L86.8976 141.942L87.9948 143.031V151.209L69.9539 169.238Z" fill="#05BDBA"/>
<path d="M69.9462 38.8917H68.4017L60.6792 46.6181V48.1626L78.7124 66.192L86.8899 66.1882L87.9871 65.0986V56.9212L69.9462 38.8917Z" fill="#05BDBA"/>
<path d="M1.09339 97.5104H75.3711L76.4645 98.6038V109.526L75.3711 110.62H1.09339L0 109.526V98.6038L1.09339 97.5104Z" fill="#05BDBA"/>
<path d="M440.999 97.5104H510.91L512.004 98.6038V109.526L510.91 110.62H436.633L435.539 109.526L439.905 98.6038L440.999 97.5104Z" fill="#05BDBA"/>
<path d="M212.056 108.727L210.963 109.821H177.079L175.986 110.914C175.986 113.101 178.173 119.657 186.916 119.657C190.196 119.657 193.472 118.564 194.566 116.377L195.659 115.284H208.776L209.869 116.377C208.776 122.934 203.313 132.774 186.916 132.774C168.336 132.774 159.589 119.657 159.589 104.357C159.589 89.0576 168.332 75.9408 185.822 75.9408C203.313 75.9408 212.056 89.0576 212.056 104.357V108.731V108.727ZM195.659 97.7971C195.659 96.7037 194.566 89.0538 185.822 89.0538C177.079 89.0538 175.986 96.7037 175.986 97.7971L177.079 98.8905H194.566L195.659 97.7971Z" fill="currentColor"/>
<path d="M242.66 115.284C242.66 117.47 243.753 118.564 245.94 118.564H255.776L256.87 119.657V130.587L255.776 131.681H245.94C236.103 131.681 227.36 127.307 227.36 115.284V91.2368L226.266 90.1434H218.617L217.523 89.05V78.1199L218.617 77.0265H226.266L227.36 75.9332V66.0965L228.453 65.0031H241.57L242.663 66.0965V75.9332L243.757 77.0265H255.78L256.874 78.1199V89.05L255.78 90.1434H243.757L242.663 91.2368V115.284H242.66Z" fill="currentColor"/>
<path d="M283.1 131.681H269.983L268.889 130.587V56.2636L269.983 55.1702H283.1L284.193 56.2636V130.587L283.1 131.681Z" fill="currentColor"/>
<path d="M312.61 68.2871H299.493L298.399 67.1937V56.2636L299.493 55.1702H312.61L313.703 56.2636V67.1937L312.61 68.2871ZM312.61 131.681H299.493L298.399 130.587V78.1237L299.493 77.0304H312.61L313.703 78.1237V130.587L312.61 131.681Z" fill="currentColor"/>
<path d="M363.98 56.2636V67.1937L362.886 68.2871H353.05C350.863 68.2871 349.769 69.3805 349.769 71.5672V75.9408L350.863 77.0342H361.793L362.886 78.1276V89.0576L361.793 90.151H350.863L349.769 91.2444V130.591L348.676 131.684H335.559L334.466 130.591V91.2444L333.372 90.151H325.723L324.629 89.0576V78.1276L325.723 77.0342H333.372L334.466 75.9408V71.5672C334.466 59.5438 343.209 55.1702 353.046 55.1702H362.882L363.976 56.2636H363.98Z" fill="currentColor"/>
<path d="M404.42 132.774C400.046 143.704 395.677 150.261 380.373 150.261H374.906L373.813 149.167V138.237L374.906 137.144H380.373C385.836 137.144 386.929 136.05 388.023 132.77V131.677L370.536 89.05V78.1199L371.63 77.0265H381.466L382.56 78.1199L395.677 115.284H396.77L409.887 78.1199L410.98 77.0265H420.817L421.91 78.1199V89.05L404.424 132.77L404.42 132.774Z" fill="currentColor"/>
<path d="M135.454 131.681L134.361 130.587L134.368 98.9172C134.368 93.4541 132.22 89.2182 125.625 89.0806C122.234 88.9926 118.354 89.0729 114.209 89.2488L113.59 89.8834L113.598 130.587L112.504 131.681H99.3913L98.2979 130.587V77.5388L99.3913 76.4454L128.901 76.1778C143.685 76.1778 149.668 86.3356 149.668 97.8009V130.587L148.575 131.681H135.454Z" fill="currentColor"/>
</g>
<defs>
<clipPath id="clip0_235_8">
<rect width="512" height="208.126" fill="white"/>
</clipPath>
</defs>
</svg>
</span>
  <blockquote class="mcp-quote-text">The stateless core in the 2026-07-28 spec makes MCP a first-class HTTP workload with no session management to work around. Our customers wanted MCPs on Netlify to be as simple as the rest of the platform and this new spec unlocks this at its core. Building MCP Apps into the new extensions framework is a huge step forward for scalability, accessibility, and capability across the whole ecosystem.</blockquote>
  <figcaption class="mcp-quote-attrib">
    <span class="mcp-quote-attrib-name">Sean Roberts</span>
    <span class="mcp-quote-attrib-title">VP of Applied AI</span>
  </figcaption>
</figure>

<figure class="mcp-quote"><span class="mcp-quote-logo" role="img" aria-label="OpenAI"><svg viewBox="0 0 1180 320" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="m367.44 153.84c0 52.32 33.6 88.8 80.16 88.8s80.16-36.48 80.16-88.8-33.6-88.8-80.16-88.8-80.16 36.48-80.16 88.8zm129.6 0c0 37.44-20.4 61.68-49.44 61.68s-49.44-24.24-49.44-61.68 20.4-61.68 49.44-61.68 49.44 24.24 49.44 61.68z"/><path d="m614.27 242.64c35.28 0 55.44-29.76 55.44-65.52s-20.16-65.52-55.44-65.52c-16.32 0-28.32 6.48-36.24 15.84v-13.44h-28.8v169.2h28.8v-56.4c7.92 9.36 19.92 15.84 36.24 15.84zm-36.96-69.12c0-23.76 13.44-36.72 31.2-36.72 20.88 0 32.16 16.32 32.16 40.32s-11.28 40.32-32.16 40.32c-17.76 0-31.2-13.2-31.2-36.48z"/><path d="m747.65 242.64c25.2 0 45.12-13.2 54-35.28l-24.72-9.36c-3.84 12.96-15.12 20.16-29.28 20.16-18.48 0-31.44-13.2-33.6-34.8h88.32v-9.6c0-34.56-19.44-62.16-55.92-62.16s-60 28.56-60 65.52c0 38.88 25.2 65.52 61.2 65.52zm-1.44-106.8c18.24 0 26.88 12 27.12 25.92h-57.84c4.32-17.04 15.84-25.92 30.72-25.92z"/><path d="m823.98 240h28.8v-73.92c0-18 13.2-27.6 26.16-27.6 15.84 0 22.08 11.28 22.08 26.88v74.64h28.8v-83.04c0-27.12-15.84-45.36-42.24-45.36-16.32 0-27.6 7.44-34.8 15.84v-13.44h-28.8z"/><path d="m1014.17 67.68-65.28 172.32h30.48l14.64-39.36h74.4l14.88 39.36h30.96l-65.28-172.32zm16.8 34.08 27.36 72h-54.24z"/><path d="m1163.69 68.18h-30.72v172.32h30.72z"/><path d="m297.06 130.97c7.26-21.79 4.76-45.66-6.85-65.48-17.46-30.4-52.56-46.04-86.84-38.68-15.25-17.18-37.16-26.95-60.13-26.81-35.04-.08-66.13 22.48-76.91 55.82-22.51 4.61-41.94 18.7-53.31 38.67-17.59 30.32-13.58 68.54 9.92 94.54-7.26 21.79-4.76 45.66 6.85 65.48 17.46 30.4 52.56 46.04 86.84 38.68 15.24 17.18 37.16 26.95 60.13 26.8 35.06.09 66.16-22.49 76.94-55.86 22.51-4.61 41.94-18.7 53.31-38.67 17.57-30.32 13.55-68.51-9.94-94.51zm-120.28 168.11c-14.03.02-27.62-4.89-38.39-13.88.49-.26 1.34-.73 1.89-1.07l63.72-36.8c3.26-1.85 5.26-5.32 5.24-9.07v-89.83l26.93 15.55c.29.14.48.42.52.74v74.39c-.04 33.08-26.83 59.9-59.91 59.97zm-128.84-55.03c-7.03-12.14-9.56-26.37-7.15-40.18.47.28 1.3.79 1.89 1.13l63.72 36.8c3.23 1.89 7.23 1.89 10.47 0l77.79-44.92v31.1c.02.32-.13.63-.38.83l-64.41 37.19c-28.69 16.52-65.33 6.7-81.92-21.95zm-16.77-139.09c7-12.16 18.05-21.46 31.21-26.29 0 .55-.03 1.52-.03 2.2v73.61c-.02 3.74 1.98 7.21 5.23 9.06l77.79 44.91-26.93 15.55c-.27.18-.61.21-.91.08l-64.42-37.22c-28.63-16.58-38.45-53.21-21.95-81.89zm221.26 51.49-77.79-44.92 26.93-15.54c.27-.18.61-.21.91-.08l64.42 37.19c28.68 16.57 38.51 53.26 21.94 81.94-7.01 12.14-18.05 21.44-31.2 26.28v-75.81c.03-3.74-1.96-7.2-5.2-9.06zm26.8-40.34c-.47-.29-1.3-.79-1.89-1.13l-63.72-36.8c-3.23-1.89-7.23-1.89-10.47 0l-77.79 44.92v-31.1c-.02-.32.13-.63.38-.83l64.41-37.16c28.69-16.55 65.37-6.7 81.91 22 6.99 12.12 9.52 26.31 7.15 40.1zm-168.51 55.43-26.94-15.55c-.29-.14-.48-.42-.52-.74v-74.39c.02-33.12 26.89-59.96 60.01-59.94 14.01 0 27.57 4.92 38.34 13.88-.49.26-1.33.73-1.89 1.07l-63.72 36.8c-3.26 1.85-5.26 5.31-5.24 9.06l-.04 89.79zm14.63-31.54 34.65-20.01 34.65 20v40.01l-34.65 20-34.65-20z"/></svg>
</span>
  <blockquote class="mcp-quote-text">MCP is now about a year and a half old. Thanks to feedback from developers and others who have worked with us, it&rsquo;s evolving into a more mature protocol that incorporates lessons from decades of web protocol design. As with prior revisions, the most interesting part will be seeing the unexpected things people build with it.</blockquote>
  <figcaption class="mcp-quote-attrib">
    <span class="mcp-quote-attrib-name">Nick Cooper</span>
    <span class="mcp-quote-attrib-title">MTS &amp; MCP Core Maintainer</span>
  </figcaption>
</figure>

<figure class="mcp-quote"><span class="mcp-quote-logo mcp-quote-logo-light" role="img" aria-label="PostHog"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 28" aria-hidden="true"><g clip-path="url(#logo-landscape-color-gradient-clip0_56_1021)"><path fill="#111" d="M51.66 25.22A1.9 1.9 0 0 0 50 23.33l-.34-.04c-1-.13-1.94-.6-2.65-1.33L33.28 7.75V28H49a2.66 2.66 0 0 0 2.67-2.67zM39.2 23.54h-.09a1.78 1.78 0 1 1 .1 0"/><path fill="url(#logo-landscape-color-gradient-paint0_linear_56_1021)" d="M21.96 2.67v4.96l11.3 11.6h.02V7.75L26.63.85a2.8 2.8 0 0 0-2-.85 2.67 2.67 0 0 0-2.67 2.67"/><path fill="url(#logo-landscape-color-gradient-paint1_linear_56_1021)" d="M21.96 7.63v11.05L31.03 28h2.25v-8.75z"/><path fill="url(#logo-landscape-color-gradient-paint2_linear_56_1021)" d="M21.96 28h9.07l-9.07-9.32z"/><path fill="url(#logo-landscape-color-gradient-paint3_linear_56_1021)" d="M10.74 2.66v4.5l11.22 11.52V7.63L15.3.8a2.66 2.66 0 0 0-4.56 1.86"/><path fill="url(#logo-landscape-color-gradient-paint4_linear_56_1021)" d="M10.74 28h8.96l-8.96-9.32z"/><path fill="url(#logo-landscape-color-gradient-paint5_linear_56_1021)" d="M10.74 7.16v11.52L19.7 28h2.26v-9.32z"/><path fill="url(#logo-landscape-color-gradient-paint6_linear_56_1021)" d="M10.74 7.16 4.54.8A2.66 2.66 0 0 0 0 2.66V7.5l10.74 11.18z"/><path fill="url(#logo-landscape-color-gradient-paint7_linear_56_1021)" d="M9.19 28h1.55v-9.32L0 7.5v10.73z"/><path fill="url(#logo-landscape-color-gradient-paint8_linear_56_1021)" d="M0 25.41A2.6 2.6 0 0 0 2.58 28H9.2L0 18.23z"/></g><path fill="#111" d="M64.9 22.88c-.67 0-1.23-.56-1.23-1.24V5.24c0-.69.56-1.24 1.24-1.24h6.55c3.89 0 6.39 2.32 6.39 5.9 0 3.6-2.5 5.91-6.4 5.91h-3.53v5.83c0 .68-.56 1.24-1.24 1.24zm3.02-11.94c0 .68.55 1.23 1.23 1.23h1.88c1.6 0 2.58-.86 2.58-2.26s-.97-2.27-2.58-2.27h-1.88c-.68 0-1.23.55-1.23 1.23zM84.71 23.1c-4.18 0-7.14-2.97-7.14-7.02s2.96-7.01 7.14-7.01c4.14 0 7.14 2.97 7.14 7.01 0 4.05-3 7.01-7.14 7.01m-3.22-7.02c0 2.16 1.3 3.64 3.22 3.64 1.9 0 3.2-1.48 3.2-3.64s-1.3-3.64-3.2-3.64c-1.93 0-3.22 1.48-3.22 3.64m16.34 7.03a6.2 6.2 0 0 1-5.54-3.01c-.34-.57-.01-1.26.6-1.5l.77-.3c.7-.27 1.45.15 1.92.73a2.8 2.8 0 0 0 2.25 1.08c1.05 0 1.75-.51 1.75-1.27 0-2.13-7.17-.7-7.17-5.85 0-2.13 1.85-3.91 4.83-3.91 2.27 0 4.2.9 5.17 2.31.36.53.05 1.2-.54 1.44l-.85.35c-.68.29-1.45-.14-2-.63a2.5 2.5 0 0 0-1.64-.64c-.89 0-1.5.38-1.5.97 0 2.16 7.27.38 7.27 5.88 0 2.35-2.15 4.34-5.32 4.34m14.64-1.31c.04.57-.3 1.1-.86 1.2q-.6.1-1.27.11c-2.92 0-5.15-1.56-5.15-4.85v-5.66h-.91c-.69 0-1.24-.56-1.24-1.24v-.82c0-.68.55-1.23 1.24-1.23h.91v-2.7c0-.69.55-1.24 1.23-1.24h1.48c.68 0 1.24.55 1.24 1.23v2.7h2.04c.68 0 1.23.56 1.23 1.24v.82c0 .68-.55 1.24-1.23 1.24h-2.04v5.15c0 1.2.64 1.91 1.6 1.91.75 0 1.6.5 1.66 1.25zM125.5 5.23c0-.68.55-1.23 1.23-1.23h1.8c.68 0 1.23.55 1.23 1.23v16.41c0 .68-.55 1.24-1.23 1.24h-1.8c-.68 0-1.23-.56-1.23-1.24v-5.43c0-.68-.56-1.23-1.24-1.23h-5c-.67 0-1.23.55-1.23 1.23v5.43c0 .68-.55 1.24-1.23 1.24h-1.77c-.69 0-1.24-.56-1.24-1.24V5.24c0-.69.55-1.24 1.24-1.24h1.77c.68 0 1.23.55 1.23 1.23v4.87c0 .68.56 1.23 1.24 1.23h5c.67 0 1.23-.55 1.23-1.23zm12.87 17.87c-4.19 0-7.14-2.97-7.14-7.02s2.95-7.01 7.14-7.01c4.13 0 7.14 2.97 7.14 7.01 0 4.05-3 7.01-7.14 7.01m-3.22-7.02c0 2.16 1.29 3.64 3.22 3.64 1.9 0 3.2-1.48 3.2-3.64s-1.3-3.64-3.2-3.64c-1.93 0-3.22 1.48-3.22 3.64m17.17 6.37c-3.84 0-6.2-2.58-6.2-6.68s2.36-6.69 6.12-6.69c1.58 0 2.82.54 3.54 1.37 0-.64.52-1.15 1.16-1.15h1.5c.68 0 1.24.55 1.24 1.23V21.9c0 3.64-2.77 6.09-6.93 6.09-2.64 0-4.9-1.2-5.85-3.09-.31-.62.16-1.29.85-1.4l1.14-.17c.67-.11 1.29.4 1.78.85.5.46 1.26.7 2.08.7 1.85 0 3.06-1.04 3.06-2.55v-1.3c-.7.9-2.01 1.4-3.49 1.4m-2.36-6.68c0 2.02 1.18 3.31 3 3.31 1.86 0 3.04-1.29 3.04-3.31s-1.18-3.32-3.03-3.32c-1.83 0-3.01 1.3-3.01 3.32"/><defs><linearGradient id="logo-landscape-color-gradient-paint0_linear_56_1021" x1="21.96" x2="33.28" y1="9.62" y2="9.62" gradientUnits="userSpaceOnUse"><stop stop-color="#ffd849"/><stop offset=".96" stop-color="#fbae01"/></linearGradient><linearGradient id="logo-landscape-color-gradient-paint1_linear_56_1021" x1="21.96" x2="33.28" y1="17.81" y2="17.81" gradientUnits="userSpaceOnUse"><stop stop-color="#ffb700"/><stop offset="1" stop-color="#f9aa01"/></linearGradient><linearGradient id="logo-landscape-color-gradient-paint2_linear_56_1021" x1="21.96" x2="31.03" y1="23.34" y2="23.34" gradientUnits="userSpaceOnUse"><stop stop-color="#ff9500"/><stop offset="1" stop-color="#f8aa00"/></linearGradient><linearGradient id="logo-landscape-color-gradient-paint3_linear_56_1021" x1="10.74" x2="21.96" y1="9.34" y2="9.34" gradientUnits="userSpaceOnUse"><stop stop-color="#ff651e"/><stop offset="1" stop-color="#e4400a"/></linearGradient><linearGradient id="logo-landscape-color-gradient-paint4_linear_56_1021" x1="10.74" x2="19.7" y1="23.34" y2="23.34" gradientUnits="userSpaceOnUse"><stop stop-color="#c42c00"/><stop offset="1" stop-color="#d63600"/></linearGradient><linearGradient id="logo-landscape-color-gradient-paint5_linear_56_1021" x1="10.74" x2="21.96" y1="17.58" y2="17.58" gradientUnits="userSpaceOnUse"><stop stop-color="#ef3c00"/><stop offset="1" stop-color="#d63601"/></linearGradient><linearGradient id="logo-landscape-color-gradient-paint6_linear_56_1021" x1="0" x2="10.74" y1="9.34" y2="9.34" gradientUnits="userSpaceOnUse"><stop stop-color="#3f80ff"/><stop offset="1" stop-color="#084fe0"/></linearGradient><linearGradient id="logo-landscape-color-gradient-paint7_linear_56_1021" x1="0" x2="10.74" y1="17.75" y2="17.75" gradientUnits="userSpaceOnUse"><stop stop-color="#0255ff"/><stop offset="1" stop-color="#0145d2"/></linearGradient><linearGradient id="logo-landscape-color-gradient-paint8_linear_56_1021" x1="0" x2="9.19" y1="23.11" y2="23.11" gradientUnits="userSpaceOnUse"><stop stop-color="#0041c6"/><stop offset="1" stop-color="#0045d0"/></linearGradient><clipPath id="logo-landscape-color-gradient-clip0_56_1021"><path fill="#fff" d="M0 0h51.67v28H0z"/></clipPath></defs></svg></span><span class="mcp-quote-logo mcp-quote-logo-dark" role="img" aria-label="PostHog"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 28" aria-hidden="true"><g fill="rgb(255, 255, 255)" clip-path="url(#logo-landscape-black-clip0_56_1025)"><path d="m50.02 23.34-.34-.04c-1-.13-1.95-.6-2.66-1.33L35.58 10.11a.5.5 0 0 0-.86.35V27.5c0 .28.22.5.5.5H49c1.48 0 2.67-1.2 2.67-2.67v-.1a1.9 1.9 0 0 0-1.66-1.9m-10.81.2a1.78 1.78 0 1 1 0-3.56 1.78 1.78 0 0 1 0 3.57M0 25.41A2.6 2.6 0 0 0 2.59 28h5.22a.5.5 0 0 0 .37-.84L.87 19.13a.5.5 0 0 0-.87.34zm18.81 1.74a.5.5 0 0 1-.36.85h-7.09a.5.5 0 0 1-.37-.17L8.94 25.5.13 15.82A.5.5 0 0 1 0 15.5V8.75a.5.5 0 0 1 .86-.34zM0 2.68C0 .28 2.92-.91 4.59.82l25.6 26.33a.5.5 0 0 1-.36.85h-7.76a.5.5 0 0 1-.37-.17l-2.1-2.33L.28 5.3A1 1 0 0 1 0 4.6zm10.74 0c0-2.4 2.92-3.59 4.59-1.87L32.5 18.48l.5.51v7.3a.5.5 0 0 1-.86.35l-1.12-1.14L11.3 5.23a2 2 0 0 1-.57-1.4zM33 7.46v7.8a.5.5 0 0 1-.85.36l-9.61-9.89a2 2 0 0 1-.57-1.4V2.69c0-2.4 2.92-3.59 4.59-1.86z"/></g><path fill="rgb(255, 255, 255)" d="M64.9 22.88c-.67 0-1.23-.56-1.23-1.24V5.24c0-.69.56-1.24 1.24-1.24h6.55c3.89 0 6.39 2.32 6.39 5.9 0 3.6-2.5 5.91-6.4 5.91h-3.53v5.83c0 .68-.56 1.24-1.24 1.24zm3.02-11.94c0 .68.55 1.23 1.23 1.23h1.88c1.6 0 2.58-.86 2.58-2.26s-.97-2.27-2.58-2.27h-1.88c-.68 0-1.23.55-1.23 1.23zM84.71 23.1c-4.18 0-7.14-2.97-7.14-7.02s2.96-7.01 7.14-7.01c4.14 0 7.14 2.97 7.14 7.01 0 4.05-3 7.01-7.14 7.01m-3.22-7.02c0 2.16 1.3 3.64 3.22 3.64 1.9 0 3.2-1.48 3.2-3.64s-1.3-3.64-3.2-3.64c-1.93 0-3.22 1.48-3.22 3.64m16.34 7.03a6.2 6.2 0 0 1-5.54-3.01c-.34-.57-.01-1.26.6-1.5l.77-.3c.7-.27 1.45.15 1.92.73a2.8 2.8 0 0 0 2.25 1.08c1.05 0 1.75-.51 1.75-1.27 0-2.13-7.17-.7-7.17-5.85 0-2.13 1.85-3.91 4.83-3.91 2.27 0 4.2.9 5.17 2.31.36.53.05 1.2-.54 1.44l-.85.35c-.68.29-1.45-.14-2-.63a2.5 2.5 0 0 0-1.64-.64c-.89 0-1.5.38-1.5.97 0 2.16 7.27.38 7.27 5.88 0 2.35-2.15 4.34-5.32 4.34m14.64-1.31c.04.57-.3 1.1-.86 1.2q-.6.1-1.27.11c-2.92 0-5.15-1.56-5.15-4.85v-5.66h-.91c-.69 0-1.24-.56-1.24-1.24v-.82c0-.68.55-1.23 1.24-1.23h.91v-2.7c0-.69.55-1.24 1.23-1.24h1.48c.68 0 1.24.55 1.24 1.23v2.7h2.04c.68 0 1.23.56 1.23 1.24v.82c0 .68-.55 1.24-1.23 1.24h-2.04v5.15c0 1.2.64 1.91 1.6 1.91.75 0 1.6.5 1.66 1.25zM125.5 5.23c0-.68.55-1.23 1.23-1.23h1.8c.68 0 1.23.55 1.23 1.23v16.41c0 .68-.55 1.24-1.23 1.24h-1.8c-.68 0-1.23-.56-1.23-1.24v-5.43c0-.68-.56-1.23-1.24-1.23h-5c-.67 0-1.23.55-1.23 1.23v5.43c0 .68-.55 1.24-1.23 1.24h-1.77c-.69 0-1.24-.56-1.24-1.24V5.24c0-.69.55-1.24 1.24-1.24h1.77c.68 0 1.23.55 1.23 1.23v4.87c0 .68.56 1.23 1.24 1.23h5c.67 0 1.23-.55 1.23-1.23zm12.87 17.87c-4.19 0-7.14-2.97-7.14-7.02s2.95-7.01 7.14-7.01c4.13 0 7.14 2.97 7.14 7.01 0 4.05-3 7.01-7.14 7.01m-3.22-7.02c0 2.16 1.29 3.64 3.22 3.64 1.9 0 3.2-1.48 3.2-3.64s-1.3-3.64-3.2-3.64c-1.93 0-3.22 1.48-3.22 3.64m17.17 6.37c-3.84 0-6.2-2.58-6.2-6.68s2.36-6.69 6.12-6.69c1.58 0 2.82.54 3.54 1.37 0-.64.52-1.15 1.16-1.15h1.5c.68 0 1.24.55 1.24 1.23V21.9c0 3.64-2.77 6.09-6.93 6.09-2.64 0-4.9-1.2-5.85-3.09-.31-.62.16-1.29.85-1.4l1.14-.17c.67-.11 1.29.4 1.78.85.5.46 1.26.7 2.08.7 1.85 0 3.06-1.04 3.06-2.55v-1.3c-.7.9-2.01 1.4-3.49 1.4m-2.36-6.68c0 2.02 1.18 3.31 3 3.31 1.86 0 3.04-1.29 3.04-3.31s-1.18-3.32-3.03-3.32c-1.83 0-3.01 1.3-3.01 3.32"/><defs><clipPath id="logo-landscape-black-clip0_56_1025"><path fill="#fff" d="M0 0h51.67v28H0z"/></clipPath></defs></svg></span>
  <blockquote class="mcp-quote-text">Moving MCP to a stateless protocol makes it easier to scale our own service and makes it easier for us to add analytics for our customers&rsquo; MCP servers. Making it easier to show people how their MCP tools are being used and what tools are missing that their users would want to use. It&rsquo;s great to see this protocol growing in this direction.</blockquote>
  <figcaption class="mcp-quote-attrib">
    <span class="mcp-quote-attrib-name">Paul D&#39;Ambra</span>
    <span class="mcp-quote-attrib-title">Product Engineer</span>
  </figcaption>
</figure>

<figure class="mcp-quote"><span class="mcp-quote-logo" role="img" aria-label="Prefect"><svg viewBox="0 0 582 154" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M101.227 26.25L112.536 32.7588L112.906 32.9727V96.9971L112.536 97.2109L67.8584 122.922V108.2L68.2285 107.986L74.0869 104.618L81.6309 100.271L100.119 89.6309V41.1885L58.0293 65.4111V153.771L45.2412 145.896V58.0488L100.489 26.25L100.857 26.0391L101.227 26.25ZM78.6064 13.2314L91.0283 20.3809L35.4092 52.3926V139.84L22.9727 132.182L22.6211 131.966V45.0273L77.8682 13.2314L78.2373 13.0205L78.6064 13.2314ZM510.964 55.0645C528.448 55.0647 540.772 65.6846 544.495 82.7578H530.305C527.3 72.1386 520.415 66.8331 511.104 66.833C498.639 66.8331 490.326 77.023 490.326 93.9473C490.326 110.872 498.499 120.781 511.253 120.781C520.713 120.781 528.018 115.615 530.883 105.426H545.073C541.35 122.789 528.307 132.689 511.253 132.689V132.681C489.328 132.681 475.995 117.326 475.995 93.9473C475.995 70.5688 489.328 55.0645 510.964 55.0645ZM321.092 55.0645C342.158 55.0646 355.202 69.4114 355.491 92.2197L349.473 98.2441H301.321C302.609 112.012 310.064 121.053 322.389 121.053L322.38 121.062C331.262 121.061 337.717 116.326 341.011 107.145H355.342C351.619 123.928 339.434 132.68 322.38 132.681C299.885 132.681 286.842 117.194 286.842 93.9473C286.842 70.7003 300.025 55.0645 321.092 55.0645ZM435.343 55.0645C456.409 55.0646 469.453 69.4114 469.742 92.2197L463.724 98.2441H415.572C416.86 112.012 424.315 121.053 436.64 121.053V121.062C445.521 121.061 451.977 116.326 455.271 107.145H469.602C465.879 123.928 453.694 132.68 436.64 132.681C414.136 132.681 401.093 117.194 401.093 93.9473C401.093 70.7003 414.276 55.0645 435.343 55.0645ZM208.259 28.6611C228.756 28.6613 239.933 40.71 239.934 59.5107C239.934 78.3118 228.756 90.3612 208.259 90.3613H177.592V131.103H162.113V28.6611H208.259ZM401.338 40.5693H384.572V56.9238H399.473V69.1221H384.572V131.103H370.53V69.1221H358.206V56.9238H370.53V39.9912L383.425 28.6611H401.338V40.5693ZM287.009 69.1211H260.353V131.102H246.312L246.451 68.1133L259.205 56.9238H287.009V69.1211ZM567.148 56.9229H581.908V69.1211H567.148V118.903H581.908V131.102H561.84L552.958 122.35V34.6846H567.148V56.9229ZM55.9854 0.211914L68.4072 7.36133L12.7881 39.373V125.907L0 118.034V32.0107L55.248 0.211914L55.6162 0L55.9854 0.211914ZM321.241 66.6836C311.212 66.6836 303.616 74.5762 301.61 87.3438H341.738C339.724 73.8574 331.989 66.684 321.241 66.6836ZM435.492 66.6836C425.463 66.6836 417.867 74.5762 415.861 87.3438H455.989C453.974 73.8574 446.24 66.6839 435.492 66.6836ZM177.592 77.2949H203.958V77.3037C215.564 77.3036 224.307 72.7082 224.307 59.5107C224.306 48.0324 217.57 41.7189 203.958 41.7188H177.592V77.2949Z" fill="currentColor"/>
</svg>
</span>
  <blockquote class="mcp-quote-text">This is a milestone release for anyone building MCP at scale. FastMCP has always existed to turn the spec&rsquo;s most powerful capabilities into an obvious developer experience, and we&rsquo;re excited to ship first-class support for background tasks, stateless interactivity, enterprise auth, and more in FastMCP 4.0. Horizon, our MCP governance platform, was built stateless from the start to handle enormous scale, so having that approach become native to the protocol is incredible to see.</blockquote>
  <figcaption class="mcp-quote-attrib">
    <span class="mcp-quote-attrib-name">Jeremiah Lowin</span>
    <span class="mcp-quote-attrib-title">CEO</span>
  </figcaption>
</figure>

<figure class="mcp-quote"><span class="mcp-quote-logo" role="img" aria-label="Runlayer"><svg viewBox="0 0 2221 514" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M250.645 294.487C252.576 294.487 254.144 296.094 254.144 298.071V472.623C254.144 474.602 252.576 476.21 250.645 476.21H216.581C214.651 476.21 213.082 474.602 213.082 472.623V298.071C213.082 296.094 214.651 294.487 216.581 294.487H250.645ZM181.407 265.115C182.334 265.115 183.226 265.493 183.881 266.164L207.98 290.85C209.339 292.249 209.341 294.506 207.98 295.904L87.4907 419.336C86.127 420.73 83.923 420.728 82.5582 419.336L58.4606 394.649C57.8052 393.978 57.4369 393.064 57.4369 392.114C57.4374 391.165 57.8057 390.25 58.4606 389.579L178.932 266.164L179.478 265.71C180.047 265.323 180.715 265.115 181.407 265.115ZM176.816 218.854C178.747 218.854 180.315 220.461 180.315 222.439V257.335C180.315 258.283 179.944 259.199 179.291 259.871C178.635 260.542 177.743 260.919 176.816 260.919H6.42508C4.49497 260.919 2.92676 259.313 2.92676 257.335V222.439C2.92676 221.491 3.29719 220.575 3.95052 219.903C4.60599 219.232 5.49792 218.854 6.42508 218.854H176.816ZM460.804 218.854C462.73 218.854 464.3 220.461 464.3 222.439V257.335C464.3 258.283 463.931 259.199 463.275 259.871C462.618 260.542 461.727 260.919 460.804 260.919H216.581C214.651 260.919 213.082 259.313 213.082 257.335V222.439C213.082 221.489 213.451 220.575 214.106 219.903C214.762 219.232 215.654 218.854 216.581 218.854H460.804ZM82.5411 60.438C83.9054 59.0403 86.1254 59.0419 87.4907 60.438L207.98 183.87C208.633 184.542 209.003 185.457 209.003 186.405C209.003 187.354 208.634 188.27 207.98 188.941L183.881 213.627C182.517 215.022 180.297 215.022 178.932 213.627L58.4436 90.1947C57.0814 88.7971 57.0814 86.5224 58.4436 85.1247L82.5411 60.438ZM250.645 3.56494C252.576 3.56494 254.144 5.17146 254.144 7.14872V181.703C254.144 183.68 252.576 185.286 250.645 185.286H216.581C214.651 185.286 213.082 183.68 213.082 181.703V7.14872C213.082 6.19946 213.451 5.2852 214.106 4.61372C214.762 3.94442 215.656 3.56494 216.581 3.56494H250.645Z" fill="currentColor"/>
<path d="M312.034 292.54C311.379 291.873 310.484 291.492 309.56 291.492H261.364C259.954 291.495 258.679 292.377 258.138 293.712C257.599 295.049 257.908 296.587 258.906 297.611L379.378 421.043C380.033 421.714 380.927 422.091 381.853 422.092C382.779 422.092 383.672 421.714 384.327 421.043L408.425 396.356C409.79 394.958 409.79 392.685 408.425 391.286L312.034 292.54Z" fill="currentColor"/>
<path d="M384.685 56.5267C383.492 55.3085 381.653 55.1586 380.299 56.0718L379.753 56.5267L259.264 179.959C258.266 180.981 257.959 182.521 258.496 183.858C259.037 185.196 260.325 186.078 261.738 186.078H309.934C310.856 186.076 311.739 185.695 312.391 185.029L408.783 86.283C409.438 85.6115 409.806 84.6978 409.806 83.748C409.806 82.7987 409.438 81.8844 408.783 81.213L384.685 56.5267Z" fill="currentColor"/>
<path d="M644.803 401.195V79.502H757.017C781.336 79.502 801.533 83.8004 817.6 92.3962C833.672 100.992 845.692 112.866 853.656 128.019C861.62 143.025 865.602 160.508 865.602 180.469C865.602 200.137 861.55 217.402 853.442 232.263C845.479 247.123 833.458 258.706 817.386 267.011C801.32 275.17 781.122 279.249 756.804 279.249H671.897V237.726H752.325C767.826 237.726 780.343 235.468 789.87 230.952C799.542 226.435 806.652 219.951 811.2 211.501C815.753 202.905 817.957 192.561 817.813 180.469C817.957 168.23 815.753 157.667 811.2 148.78C806.652 139.893 799.542 133.045 789.87 128.237C780.199 123.429 767.543 121.025 751.898 121.025H692.378V401.195H644.803ZM800.108 255.865L877.761 401.195H823.573L747.628 255.865H800.108ZM1049.71 303.726V170.415H1095.37V401.195H1051V362.295H1050.14C1045.16 374.242 1036.98 384.295 1025.61 392.454C1014.37 400.612 999.935 404.692 982.3 404.692C966.943 404.692 952.862 401.268 940.062 394.42C927.263 387.573 917.02 377.374 909.344 363.825C901.802 350.275 898.034 333.593 898.034 313.779V170.415H943.9V308.096C943.9 326.454 948.598 340.368 957.981 349.838C967.37 359.308 979.812 364.043 995.313 364.043C1005.56 364.043 1014.73 361.931 1022.83 357.706C1031.08 353.48 1037.62 346.924 1042.46 338.037C1047.3 329.004 1049.71 317.566 1049.71 303.726ZM1176.23 267.885V401.195H1130.36V170.415H1174.95V209.316H1175.8C1180.78 197.223 1188.88 187.17 1200.12 179.157C1211.36 170.998 1225.79 166.919 1243.42 166.919C1259.07 166.919 1273.22 170.343 1285.88 177.19C1298.68 184.038 1308.85 194.237 1316.39 207.786C1323.92 221.19 1327.69 237.872 1327.69 257.832V401.195H1282.04V263.514C1282.04 245.156 1277.35 231.243 1267.96 221.773C1258.71 212.303 1246.2 207.567 1230.41 207.567C1220.31 207.567 1211.14 209.68 1202.89 213.905C1194.79 218.13 1188.31 224.687 1183.48 233.574C1178.65 242.461 1176.23 253.898 1176.23 267.885ZM1408.55 79.502V401.195H1362.69V79.502H1408.55ZM1514.8 404.474C1499.86 404.474 1486.5 401.924 1474.69 396.824C1463.03 391.579 1453.79 383.858 1446.96 373.659C1440.13 363.315 1436.72 350.494 1436.72 335.196C1436.72 322.083 1439.14 311.302 1443.97 302.851C1448.95 294.402 1455.64 287.699 1464.03 282.746C1472.42 277.792 1481.94 274.077 1492.61 271.6C1503.28 268.978 1514.3 267.011 1525.68 265.7C1539.9 263.805 1551.06 262.349 1559.17 261.329C1567.42 260.163 1573.25 258.415 1576.66 256.084C1580.22 253.607 1582 249.6 1582 244.064V242.971C1582 231.753 1578.01 222.72 1570.05 215.872C1562.23 208.878 1551.21 205.382 1536.99 205.382C1523.05 205.382 1511.67 208.806 1502.85 215.653C1494.18 222.501 1489.34 231.17 1488.34 241.66H1442.26C1443.12 227.382 1447.46 214.634 1455.28 203.415C1463.24 192.197 1474.19 183.309 1488.13 176.753C1502.07 170.197 1518.5 166.919 1537.41 166.919C1555.9 166.919 1571.9 170.124 1585.41 176.535C1598.92 182.945 1609.3 191.832 1616.56 203.197C1623.95 214.561 1627.65 227.819 1627.65 242.971V401.195H1583.06V368.414H1582.21C1578.94 374.679 1574.53 380.58 1568.99 386.116C1563.44 391.652 1556.26 396.096 1547.44 399.447C1538.62 402.798 1527.74 404.474 1514.8 404.474ZM1524.61 367.103C1537.55 367.103 1548.29 364.771 1556.82 360.109C1565.5 355.301 1571.9 348.964 1576.02 341.096C1580.15 333.083 1582.21 324.341 1582.21 314.871V288.209C1579.22 290.541 1572.54 292.726 1562.16 294.766C1551.78 296.659 1540.61 298.481 1528.67 300.229C1520.56 301.395 1512.95 303.362 1505.84 306.129C1498.87 308.752 1493.18 312.468 1488.77 317.275C1484.51 321.938 1482.37 328.202 1482.37 336.07C1482.52 345.832 1486.35 353.48 1493.89 359.017C1501.43 364.407 1511.67 367.103 1524.61 367.103ZM1662.43 495.605V454.301H1686.75C1692.02 454.301 1696.21 453.573 1699.34 452.115C1702.47 450.659 1704.95 448.546 1706.81 445.778C1708.65 443.009 1710.29 439.658 1711.71 435.725C1711.71 435.725 1712.28 433.977 1713.42 430.48C1714.56 426.983 1715.91 422.976 1717.47 418.46C1719.03 413.944 1720.39 409.937 1721.52 406.44C1722.8 402.944 1723.44 401.195 1723.44 401.195L1637.9 170.415H1686.97L1747.98 346.122H1748.83L1809.2 170.415H1857.63L1752.25 455.83C1748.97 464.572 1744.63 471.857 1739.23 477.686C1733.83 483.657 1727.07 488.103 1718.97 491.017C1710.86 494.074 1701.12 495.605 1689.74 495.605H1662.43ZM1964.94 404.692C1943.32 404.692 1924.55 399.738 1908.62 389.831C1892.84 379.778 1880.53 365.864 1871.72 348.089C1863.04 330.315 1858.71 309.699 1858.71 286.243C1858.71 262.786 1862.97 242.097 1871.51 224.177C1880.18 206.256 1892.41 192.27 1908.2 182.217C1923.98 172.018 1942.54 166.919 1963.87 166.919C1985.07 166.919 2003.27 171.945 2018.49 181.998C2033.85 192.051 2045.58 206.038 2053.69 223.958C2061.79 241.878 2065.85 262.567 2065.85 286.024V298.044H1879.39V263.733H2021.26C2020.98 252.077 2018.28 241.878 2013.15 233.137C2008.03 224.395 2001.14 217.548 1992.46 212.594C1983.93 207.641 1974.26 205.163 1963.45 205.163C1951.36 205.163 1940.91 208.15 1932.09 214.123C1923.27 220.097 1916.52 227.965 1911.82 237.726C1907.13 247.342 1904.78 257.613 1904.78 268.541V297.606C1904.64 310.136 1906.99 321.646 1911.82 332.136C1916.66 342.48 1923.55 350.785 1932.52 357.05C1941.62 363.169 1952.5 366.229 1965.16 366.229C1973.69 366.229 1981.65 364.771 1989.05 361.858C1996.45 358.798 2002.77 354.573 2008.03 349.182C2013.3 343.791 2017 337.527 2019.13 330.388H2063.08C2060.23 345.249 2054.26 358.288 2045.15 369.507C2036.2 380.58 2024.82 389.248 2011.02 395.513C1997.22 401.632 1981.87 404.692 1964.94 404.692ZM2091.46 401.195V170.415H2135.19V208.442H2136.47C2140.59 195.621 2147.13 185.495 2156.1 178.064C2165.2 170.634 2176.65 166.919 2190.44 166.919C2193.85 166.919 2196.98 167.137 2199.83 167.574C2202.81 167.866 2205.23 168.23 2207.08 168.667V213.25C2205.09 212.521 2201.82 211.866 2197.27 211.283C2192.86 210.554 2188.09 210.19 2182.98 210.19C2174.72 210.19 2167.12 212.157 2160.15 216.09C2153.18 219.879 2147.56 225.779 2143.3 233.793C2139.17 241.806 2137.11 252.004 2137.11 264.388V401.195H2091.46Z" fill="currentColor"/>
</svg>
</span>
  <blockquote class="mcp-quote-text">This release makes MCP more enterprise-ready than ever. Runlayer is bringing these advances to every enterprise on our platform, providing a simpler, safer foundation for deploying MCP and agents across their organizations.</blockquote>
  <figcaption class="mcp-quote-attrib">
    <span class="mcp-quote-attrib-name">Tal Peretz</span>
    <span class="mcp-quote-attrib-title">Co-founder &amp; CPO</span>
  </figcaption>
</figure>

<figure class="mcp-quote"><span class="mcp-quote-logo" role="img" aria-label="Stacklok"><svg viewBox="0 0 841 129" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M250.95 28.2868C249.374 28.2868 248.086 26.998 248.086 25.4229V16.8312C248.086 15.256 249.374 13.9673 250.95 13.9673H321.115C322.69 13.9673 323.979 15.256 323.979 16.8312V25.4229C323.979 26.998 322.69 28.2868 321.115 28.2868H296.772C295.197 28.2868 293.908 29.5755 293.908 31.1507V111.34C293.908 112.915 292.619 114.204 291.044 114.204H281.02C279.445 114.204 278.157 112.915 278.157 111.34V31.1507C278.157 29.5755 276.868 28.2868 275.293 28.2868H250.95Z" fill="currentColor"/>
<path d="M204.105 115.636C182.483 115.636 166.875 103.034 166.875 85.5647V84.1328C166.875 82.5576 168.163 81.2689 169.738 81.2689H179.762C181.337 81.2689 182.626 82.5576 182.626 84.1328V85.5647C182.626 94.7292 191.361 101.316 204.105 101.316C216.277 101.316 225.584 95.3019 225.584 86.8535V85.4215C225.584 60.9352 169.595 81.4121 169.595 42.0335C169.595 24.707 184.058 12.5354 204.535 12.5354C224.582 12.5354 239.474 24.2774 239.474 40.4584V41.8903C239.474 43.4655 238.185 44.7542 236.61 44.7542H226.587C225.012 44.7542 223.723 43.4655 223.723 41.8903V40.4584C223.723 32.5827 216.563 26.8549 204.535 26.8549C193.222 26.8549 185.347 31.8667 185.347 40.0288V41.4607C185.347 64.0855 241.336 46.9021 241.336 84.8487C241.336 103.034 225.728 115.636 204.105 115.636Z" fill="currentColor"/>
<path d="M408.644 110.268L374.472 16.5017C373.908 14.9276 372.78 14.2217 371.239 14.2217L359.143 14.2217C357.593 14.2217 356.474 14.9372 355.91 16.5017L321.757 110.268C321.052 112.262 322.462 114.122 324.426 114.122H335.253C336.804 114.122 337.781 113.407 338.345 111.842L342.762 98.83H342.753L343.815 95.7391L345.516 90.7212C345.553 90.6258 345.591 90.5399 345.629 90.4445L350.638 75.8773L356.624 58.2382H356.643L362.527 40.9045C363.372 38.1952 366.887 38.1952 367.865 40.9045L376.99 67.7685L381.473 80.3037L385.844 93.545L392.056 111.842C392.62 113.416 393.606 114.122 395.148 114.122H405.975C407.939 114.122 409.348 112.128 408.644 110.268Z" fill="currentColor"/>
<path d="M766.418 16.8314C766.418 15.2563 767.707 13.9675 769.282 13.9675H779.306C780.881 13.9675 782.17 15.2563 782.17 16.8314V52.7733C782.17 55.6372 785.606 56.4964 787.182 54.6348L820.832 15.5427C821.835 14.3971 822.98 13.9675 824.412 13.9675H835.725C838.159 13.9675 839.591 16.8314 837.872 18.693L799.926 60.9354C798.924 61.9378 798.924 63.5129 799.926 64.6585L840.164 109.478C841.596 111.054 840.88 114.204 837.872 114.204H825.844C824.412 114.204 823.267 113.774 822.264 112.629L787.325 72.9638C785.463 70.8158 782.17 71.9614 782.17 74.8253V111.34C782.17 112.915 780.881 114.204 779.306 114.204H769.282C767.707 114.204 766.418 112.915 766.418 111.34V16.8314Z" fill="currentColor"/>
<path d="M708.737 115.636C683.821 115.636 665.778 97.5933 665.778 72.6774V55.4941C665.778 30.5782 683.821 12.5356 708.737 12.5356C733.652 12.5356 751.695 30.5782 751.695 55.4941V72.6774C751.695 97.5933 733.652 115.636 708.737 115.636ZM708.737 101.316C724.488 101.316 735.944 89.8608 735.944 74.1094V54.0621C735.944 38.3107 724.488 26.8551 708.737 26.8551C692.985 26.8551 681.53 38.3107 681.53 54.0621V74.1094C681.53 89.8608 692.985 101.316 708.737 101.316Z" fill="currentColor"/>
<path d="M603.422 114.204C601.847 114.204 600.558 112.915 600.558 111.34V16.8314C600.558 15.2563 601.847 13.9675 603.422 13.9675H613.446C615.021 13.9675 616.31 15.2563 616.31 16.8314V97.0205C616.31 98.5956 617.599 99.8844 619.174 99.8844H657.836C659.412 99.8844 660.7 101.173 660.7 102.748V111.34C660.7 112.915 659.412 114.204 657.836 114.204H603.422Z" fill="currentColor"/>
<path d="M514.832 16.8314C514.832 15.2563 516.121 13.9675 517.696 13.9675H527.719C529.295 13.9675 530.583 15.2563 530.583 16.8314V52.7733C530.583 55.6372 534.02 56.4964 535.595 54.6348L569.246 15.5427C570.248 14.3971 571.394 13.9675 572.826 13.9675H584.138C586.572 13.9675 588.004 16.8314 586.286 18.693L548.339 60.9354C547.337 61.9378 547.337 63.5129 548.339 64.6585L588.577 109.478C590.009 111.054 589.293 114.204 586.286 114.204H574.258C572.826 114.204 571.68 113.774 570.678 112.629L535.738 72.9638C533.877 70.8158 530.583 71.9614 530.583 74.8253V111.34C530.583 112.915 529.295 114.204 527.719 114.204H517.696C516.121 114.204 514.832 112.915 514.832 111.34V16.8314Z" fill="currentColor"/>
<path d="M462.324 115.636C437.408 115.636 419.366 97.5933 419.366 72.6774V55.4941C419.366 30.5782 437.408 12.5356 462.324 12.5356C484.806 12.5356 500.987 26.9983 500.987 46.9024V48.3343C500.987 49.9095 499.698 51.1982 498.123 51.1982H488.099C486.524 51.1982 485.235 49.9095 485.235 48.3343V46.9024C485.235 35.3036 475.641 26.8551 462.324 26.8551C446.573 26.8551 435.117 38.3107 435.117 54.0621V74.1094C435.117 89.8608 446.573 101.316 462.324 101.316C475.641 101.316 485.235 92.8679 485.235 81.2691V79.8372C485.235 78.262 486.524 76.9733 488.099 76.9733H498.123C499.698 76.9733 500.987 78.1188 500.987 79.8372V81.2691C500.987 101.173 484.806 115.636 462.324 115.636Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M73.4721 0C73.5628 2.93136e-06 73.653 0.00281392 73.7426 0.00878906C75.0869 0.0983668 76.3072 0.851495 76.9868 2.02832L146.402 122.257C146.444 122.331 146.483 122.406 146.521 122.481C146.527 122.493 146.532 122.505 146.538 122.517C146.544 122.529 146.551 122.542 146.557 122.555C146.564 122.569 146.571 122.584 146.578 122.599C146.612 122.674 146.644 122.749 146.673 122.825C146.677 122.834 146.68 122.843 146.683 122.853C146.728 122.972 146.768 123.093 146.801 123.215C146.806 123.233 146.811 123.251 146.816 123.27C146.842 123.369 146.863 123.469 146.881 123.569C146.883 123.579 146.885 123.589 146.886 123.599C146.894 123.644 146.901 123.69 146.908 123.735C146.91 123.749 146.911 123.763 146.913 123.776C146.918 123.823 146.924 123.869 146.928 123.916C146.929 123.928 146.929 123.939 146.93 123.951C146.941 124.082 146.946 124.213 146.944 124.344C146.944 124.36 146.943 124.377 146.943 124.394C146.94 124.483 146.936 124.573 146.927 124.662C146.926 124.678 146.923 124.695 146.921 124.711C146.902 124.89 146.872 125.067 146.83 125.242C146.823 125.269 146.817 125.296 146.81 125.322C146.788 125.404 146.764 125.486 146.737 125.566C146.732 125.582 146.727 125.598 146.721 125.613C146.717 125.625 146.713 125.637 146.708 125.648C146.682 125.722 146.655 125.796 146.624 125.868C146.616 125.889 146.605 125.908 146.596 125.929C146.595 125.931 146.594 125.934 146.593 125.937C146.59 125.945 146.586 125.953 146.582 125.961C146.555 126.023 146.525 126.083 146.494 126.144C146.487 126.155 146.482 126.168 146.476 126.18C146.464 126.202 146.452 126.224 146.44 126.246C146.428 126.268 146.415 126.29 146.402 126.312C146.387 126.338 146.373 126.363 146.358 126.388C146.349 126.402 146.34 126.417 146.331 126.432C146.325 126.441 146.319 126.45 146.313 126.459C146.093 126.806 145.819 127.123 145.492 127.396C145.481 127.406 145.47 127.415 145.458 127.424C145.411 127.463 145.362 127.501 145.312 127.538C145.288 127.556 145.265 127.574 145.241 127.591C145.233 127.597 145.224 127.603 145.216 127.608L145.213 127.611C145.203 127.618 145.192 127.624 145.182 127.631C145.142 127.658 145.102 127.685 145.061 127.711C145.052 127.717 145.043 127.723 145.034 127.729C144.942 127.786 144.848 127.839 144.752 127.889C144.732 127.899 144.713 127.91 144.693 127.92C144.687 127.923 144.682 127.924 144.676 127.927C144.673 127.928 144.671 127.93 144.668 127.932C144.651 127.94 144.633 127.949 144.615 127.957C144.453 128.033 144.288 128.098 144.121 128.151C144.115 128.153 144.11 128.155 144.105 128.156C143.913 128.217 143.718 128.262 143.522 128.293C143.515 128.294 143.508 128.295 143.5 128.296C143.448 128.304 143.395 128.311 143.342 128.317C143.328 128.319 143.314 128.321 143.3 128.322C143.269 128.325 143.238 128.328 143.207 128.33C143.202 128.33 143.197 128.331 143.192 128.331C143.127 128.336 143.062 128.339 142.997 128.341C142.983 128.341 142.97 128.342 142.957 128.342C142.936 128.342 142.915 128.343 142.894 128.343C142.885 128.343 142.876 128.343 142.867 128.343C142.795 128.342 142.724 128.339 142.653 128.335C142.641 128.334 142.629 128.334 142.618 128.333C142.594 128.331 142.571 128.33 142.547 128.328C142.467 128.321 142.388 128.312 142.308 128.301C142.303 128.3 142.298 128.3 142.292 128.299C142.289 128.298 142.285 128.298 142.282 128.298C142.265 128.295 142.249 128.292 142.233 128.289C142.145 128.275 142.058 128.257 141.971 128.237C141.965 128.236 141.958 128.235 141.952 128.233C141.938 128.23 141.924 128.226 141.91 128.223C141.815 128.199 141.721 128.173 141.627 128.143C141.541 128.114 141.455 128.082 141.371 128.048C141.361 128.044 141.351 128.041 141.341 128.037L141.31 128.024C141.297 128.019 141.285 128.014 141.272 128.009L73.8533 100.211C73.6092 100.11 73.3351 100.11 73.0909 100.211L5.66061 128.014L5.65865 128.015L5.65377 128.017L5.60397 128.037C5.6006 128.038 5.5966 128.039 5.59322 128.04C5.50318 128.077 5.41265 128.112 5.32076 128.142C5.22609 128.173 5.13013 128.199 5.03365 128.223C5.01924 128.226 5.00513 128.231 4.99069 128.234C4.98491 128.236 4.97888 128.236 4.97311 128.237C4.89317 128.256 4.81274 128.272 4.7319 128.285C4.70775 128.289 4.6838 128.294 4.65963 128.298L4.65377 128.299C4.64407 128.3 4.63418 128.3 4.62447 128.302C4.54884 128.312 4.47307 128.322 4.39694 128.328C4.37739 128.33 4.35789 128.332 4.33834 128.333C4.31558 128.335 4.29276 128.335 4.26998 128.336C4.20623 128.339 4.14248 128.342 4.07858 128.343C4.06881 128.343 4.05905 128.343 4.04928 128.343C4.02877 128.343 4.00827 128.342 3.98776 128.342C3.97473 128.342 3.96172 128.341 3.94869 128.341C3.88323 128.339 3.81782 128.336 3.7524 128.331C3.7472 128.331 3.74198 128.33 3.73678 128.33C3.70617 128.328 3.67556 128.325 3.64498 128.322C3.62899 128.321 3.6131 128.318 3.59713 128.316C3.54497 128.31 3.49288 128.304 3.44088 128.296C3.43601 128.295 3.4311 128.295 3.42623 128.294C3.38154 128.287 3.33697 128.279 3.29244 128.271C3.2846 128.269 3.27684 128.267 3.26901 128.266C3.1724 128.247 3.07644 128.224 2.98092 128.197C2.966 128.193 2.95088 128.19 2.936 128.186C2.90979 128.178 2.88397 128.169 2.85787 128.161C2.84321 128.157 2.82854 128.152 2.81393 128.147C2.7538 128.128 2.6937 128.108 2.63424 128.086C2.62478 128.082 2.61535 128.079 2.60592 128.075C2.58466 128.067 2.56361 128.058 2.54244 128.05C2.53717 128.048 2.53208 128.045 2.52682 128.043C2.49224 128.029 2.45756 128.015 2.4233 128C2.40399 127.991 2.3849 127.982 2.36569 127.974C2.33329 127.959 2.30108 127.943 2.26901 127.928C2.26064 127.924 2.25195 127.92 2.24362 127.916C2.23308 127.911 2.22287 127.905 2.21237 127.899C2.10962 127.847 2.00853 127.79 1.90963 127.729C1.90083 127.723 1.89204 127.717 1.88326 127.712C1.71747 127.607 1.55713 127.489 1.40475 127.357C1.38082 127.337 1.35778 127.315 1.33444 127.294C1.29208 127.256 1.25085 127.217 1.21041 127.177C1.09977 127.068 0.99578 126.955 0.899865 126.836C0.878841 126.81 0.858659 126.783 0.838342 126.757C0.821064 126.734 0.803343 126.712 0.786584 126.689C0.774812 126.673 0.763922 126.657 0.752404 126.641C0.692665 126.557 0.636251 126.471 0.583459 126.384C0.571772 126.364 0.560627 126.345 0.549279 126.325C0.531753 126.295 0.514227 126.265 0.497521 126.234C0.487599 126.216 0.477859 126.198 0.468225 126.18C0.461972 126.168 0.456775 126.155 0.450646 126.144C0.421581 126.087 0.392983 126.03 0.366662 125.973C0.360128 125.958 0.353494 125.944 0.347131 125.93C0.308793 125.843 0.273781 125.755 0.241662 125.666C0.23159 125.638 0.221816 125.61 0.212365 125.582C0.183705 125.497 0.157189 125.411 0.13424 125.324C0.12809 125.301 0.123373 125.277 0.117639 125.254C0.0737987 125.075 0.04228 124.894 0.0229121 124.711C0.0211957 124.695 0.0185719 124.678 0.0170527 124.662C0.00870127 124.573 0.00386734 124.483 0.00142769 124.394C0.000959042 124.376 0.000691781 124.358 0.000451126 124.341C-0.00133802 124.215 0.00211938 124.088 0.0121699 123.962C0.0134684 123.946 0.0145801 123.929 0.0160761 123.913C0.0205894 123.864 0.0263452 123.815 0.0326777 123.766C0.0337674 123.757 0.0344641 123.749 0.0356074 123.74C0.0484609 123.645 0.0647103 123.55 0.0844355 123.456C0.0908408 123.425 0.0978114 123.395 0.104943 123.364C0.11179 123.335 0.118906 123.306 0.126428 123.276C0.131712 123.256 0.137412 123.235 0.143029 123.215C0.176423 123.093 0.215895 122.972 0.261193 122.853C0.264654 122.843 0.268405 122.834 0.271935 122.825C0.277581 122.811 0.282712 122.796 0.288537 122.781L0.304162 122.742C0.330496 122.678 0.358339 122.615 0.388146 122.552C0.392004 122.544 0.395949 122.535 0.399865 122.527C0.443862 122.436 0.492018 122.346 0.54342 122.257L69.9585 2.02832L70.101 1.79883C70.8038 0.749524 71.9571 0.0867155 73.2182 0.0078125C73.3024 0.00254865 73.3871 7.78799e-06 73.4721 0ZM34.8266 105.087C33.9179 105.807 34.757 107.238 35.8287 106.796L71.9253 91.9131C72.9159 91.5047 74.0284 91.5047 75.019 91.9131L111.115 106.795C112.186 107.237 113.026 105.806 112.117 105.087L74.0931 74.9655C73.7293 74.6773 73.215 74.6773 72.8512 74.9655L34.8266 105.087ZM38.8716 89.0045C38.099 89.9276 39.3158 91.1775 40.2594 90.4301L70.9526 66.1172C72.4287 64.9479 74.5155 64.9481 75.9917 66.1172L106.685 90.4308C107.628 91.1782 108.845 89.9283 108.073 89.0051L74.239 48.5737C73.8393 48.096 73.1049 48.096 72.7052 48.5737L38.8716 89.0045ZM36.7057 75.8545C36.0944 76.9133 37.5539 77.9339 38.3386 76.9963L70.3608 38.7314L70.5092 38.5625C71.274 37.7451 72.3461 37.2774 73.4721 37.2773C74.6734 37.2774 75.8135 37.8102 76.5844 38.7314L108.605 76.9962C109.39 77.9338 110.849 76.9133 110.238 75.8545L74.3382 13.6738C73.9533 13.0072 72.991 13.0072 72.6061 13.6738L36.7057 75.8545Z" fill="currentColor"/>
</svg>
</span>
  <blockquote class="mcp-quote-text">The latest MCP revision is an important milestone. It reflects a level of rigor and user input that shows the protocol is maturing in a way that allows businesses to build on it with confidence. We have implemented the revision and the move to a stateless model removes operational complexity and unlocks MCP at enterprise scale. It&rsquo;s a strong signal that the community is being shaped by real deployment experience.</blockquote>
  <figcaption class="mcp-quote-attrib">
    <span class="mcp-quote-attrib-name">Craig McLuckie</span>
    <span class="mcp-quote-attrib-title">CEO</span>
  </figcaption>
</figure>

<figure class="mcp-quote"><span class="mcp-quote-logo" role="img" aria-label="Supabase"><svg viewBox="0 0 581 113" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M151.397 66.7608C151.996 72.3621 157.091 81.9642 171.877 81.9642C184.764 81.9642 190.959 73.7624 190.959 65.7607C190.959 58.559 186.063 52.6577 176.373 50.6571L169.379 49.1569C166.682 48.6568 164.884 47.1565 164.884 44.7559C164.884 41.9552 167.681 39.8549 171.178 39.8549C176.772 39.8549 178.87 43.5556 179.27 46.4564L190.359 43.9558C189.76 38.6546 185.064 29.7527 171.078 29.7527C160.488 29.7527 152.696 37.0543 152.696 45.8561C152.696 52.7576 156.991 58.4591 166.482 60.5594L172.976 62.0598C176.772 62.8599 178.271 64.6605 178.271 66.8609C178.271 69.4615 176.173 71.762 171.777 71.762C165.983 71.762 163.085 68.1611 162.786 64.2602L151.397 66.7608Z" fill="currentColor"/>
<path d="M233.421 80.4639H246.109C245.909 78.7635 245.609 75.3628 245.609 71.5618V31.2529H232.321V59.8592C232.321 65.5606 228.925 69.5614 223.031 69.5614C216.837 69.5614 214.039 65.1604 214.039 59.6592V31.2529H200.752V62.3599C200.752 73.0622 207.545 81.7642 219.434 81.7642C224.628 81.7642 230.325 79.7638 233.022 75.1627C233.022 77.1631 233.221 79.4636 233.421 80.4639Z" fill="currentColor"/>
<path d="M273.076 99.4682V75.663C275.473 78.9636 280.469 81.6644 287.263 81.6644C301.149 81.6644 310.439 70.6617 310.439 55.7584C310.439 41.1553 302.148 30.1528 287.762 30.1528C280.37 30.1528 274.875 33.4534 272.677 37.2544V31.253H259.79V99.4682H273.076ZM297.352 55.8585C297.352 64.6606 291.958 69.7616 285.164 69.7616C278.372 69.7616 272.877 64.5605 272.877 55.8585C272.877 47.1566 278.372 42.0554 285.164 42.0554C291.958 42.0554 297.352 47.1566 297.352 55.8585Z" fill="currentColor"/>
<path d="M317.964 67.0609C317.964 74.7627 324.357 81.8643 334.848 81.8643C342.139 81.8643 346.835 78.4634 349.332 74.5625C349.332 76.463 349.532 79.1635 349.832 80.4639H362.02C361.72 78.7635 361.422 75.2627 361.422 72.6622V48.4567C361.422 38.5545 355.627 29.7527 340.043 29.7527C326.855 29.7527 319.761 38.2544 318.963 45.9562L330.751 48.4567C331.151 44.1558 334.348 40.455 340.141 40.455C345.737 40.455 348.434 43.3556 348.434 46.8564C348.434 48.5568 347.536 49.9572 344.738 50.3572L332.65 52.1576C324.458 53.3579 317.964 58.2589 317.964 67.0609ZM337.644 71.962C333.349 71.962 331.25 69.1614 331.25 66.2608C331.25 62.4599 333.947 60.5594 337.345 60.0594L348.434 58.359V60.5594C348.434 69.2615 343.239 71.962 337.644 71.962Z" fill="currentColor"/>
<path d="M387.703 80.4641V74.4627C390.299 78.6637 395.494 81.6644 402.288 81.6644C416.276 81.6644 425.467 70.5618 425.467 55.6585C425.467 41.0552 417.174 29.9528 402.788 29.9528C395.494 29.9528 390.1 33.1535 387.902 36.6541V8.04785H374.815V80.4641H387.703ZM412.178 55.7584C412.178 64.7605 406.784 69.7616 399.99 69.7616C393.297 69.7616 387.703 64.6606 387.703 55.7584C387.703 46.7564 393.297 41.8554 399.99 41.8554C406.784 41.8554 412.178 46.7564 412.178 55.7584Z" fill="currentColor"/>
<path d="M432.99 67.0609C432.99 74.7627 439.383 81.8643 449.873 81.8643C457.165 81.8643 461.862 78.4634 464.358 74.5625C464.358 76.463 464.559 79.1635 464.858 80.4639H477.046C476.748 78.7635 476.448 75.2627 476.448 72.6622V48.4567C476.448 38.5545 470.653 29.7527 455.068 29.7527C441.881 29.7527 434.788 38.2544 433.989 45.9562L445.776 48.4567C446.177 44.1558 449.374 40.455 455.167 40.455C460.763 40.455 463.46 43.3556 463.46 46.8564C463.46 48.5568 462.561 49.9572 459.763 50.3572L447.676 52.1576C439.484 53.3579 432.99 58.2589 432.99 67.0609ZM452.671 71.962C448.375 71.962 446.276 69.1614 446.276 66.2608C446.276 62.4599 448.973 60.5594 452.371 60.0594L463.46 58.359V60.5594C463.46 69.2615 458.265 71.962 452.671 71.962Z" fill="currentColor"/>
<path d="M485.645 66.7608C486.243 72.3621 491.339 81.9642 506.124 81.9642C519.012 81.9642 525.205 73.7624 525.205 65.7607C525.205 58.559 520.311 52.6577 510.62 50.6571L503.626 49.1569C500.929 48.6568 499.132 47.1565 499.132 44.7559C499.132 41.9552 501.928 39.8549 505.425 39.8549C511.021 39.8549 513.118 43.5556 513.519 46.4564L524.607 43.9558C524.007 38.6546 519.312 29.7527 505.326 29.7527C494.735 29.7527 486.944 37.0543 486.944 45.8561C486.944 52.7576 491.238 58.4591 500.73 60.5594L507.224 62.0598C511.021 62.8599 512.519 64.6605 512.519 66.8609C512.519 69.4615 510.421 71.762 506.025 71.762C500.23 71.762 497.334 68.1611 497.034 64.2602L485.645 66.7608Z" fill="currentColor"/>
<path d="M545.385 50.2571C545.685 45.7562 549.482 40.5549 556.375 40.5549C563.967 40.5549 567.165 45.3561 567.365 50.2571H545.385ZM568.664 63.0601C567.065 67.4609 563.668 70.5617 557.474 70.5617C550.88 70.5617 545.385 65.8606 545.087 59.3593H580.252C580.252 59.159 580.451 57.1587 580.451 55.2582C580.451 39.4547 571.361 29.7527 556.175 29.7527C543.588 29.7527 531.998 39.9548 531.998 55.6584C531.998 72.262 543.886 81.9642 557.374 81.9642C569.462 81.9642 577.255 74.8626 579.753 66.3607L568.664 63.0601Z" fill="currentColor"/>
<path d="M63.7076 110.284C60.8481 113.885 55.0502 111.912 54.9813 107.314L53.9738 40.0627L99.1935 40.0627C107.384 40.0627 111.952 49.5228 106.859 55.9374L63.7076 110.284Z" fill="url(#supabase-paint0_linear)"/>
<path d="M63.7076 110.284C60.8481 113.885 55.0502 111.912 54.9813 107.314L53.9738 40.0627L99.1935 40.0627C107.384 40.0627 111.952 49.5228 106.859 55.9374L63.7076 110.284Z" fill="url(#supabase-paint1_linear)" fill-opacity="0.2"/>
<path d="M45.317 2.07103C48.1765 -1.53037 53.9745 0.442937 54.0434 5.041L54.4849 72.2922H9.83113C1.64038 72.2922 -2.92775 62.8321 2.1655 56.4175L45.317 2.07103Z" fill="#3ECF8E"/>
<defs>
<linearGradient id="supabase-paint0_linear" x1="53.9738" y1="54.974" x2="94.1635" y2="71.8295" gradientUnits="userSpaceOnUse">
<stop stop-color="#249361"/>
<stop offset="1" stop-color="#3ECF8E"/>
</linearGradient>
<linearGradient id="supabase-paint1_linear" x1="36.1558" y1="30.578" x2="54.4844" y2="65.0806" gradientUnits="userSpaceOnUse">
<stop/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
</defs>
</svg>
</span>
  <blockquote class="mcp-quote-text">Supporting elicitations has been on our roadmap for a while, but since Supabase MCP runs statelessly, it wasn&rsquo;t something we could do easily. MRTR changes that - it allows our tools to confirm with the user before it acts, like the cost of a new project before it&rsquo;s created, or a query that would delete data. We&rsquo;re excited to support elicitations.</blockquote>
  <figcaption class="mcp-quote-attrib">
    <span class="mcp-quote-attrib-name">Inian Parameshwaran</span>
    <span class="mcp-quote-attrib-title">Head of Product</span>
  </figcaption>
</figure>

<figure class="mcp-quote"><span class="mcp-quote-logo"><img src="/posts/2026-07-28/xero.webp" alt="Xero" loading="lazy"></span>
  <blockquote class="mcp-quote-text">Anthropic pairs frontier models with a developer experience that keeps raising the bar. The stateless core in the open MCP 2026-07-28 spec reduces the complexity we manage, so we can ship more features to our customers, faster and at scale.</blockquote>
  <figcaption class="mcp-quote-attrib">
    <span class="mcp-quote-attrib-name">Andrew Goodman</span>
    <span class="mcp-quote-attrib-title">VP of AI</span>
  </figcaption>
</figure>


  </div>
  <div class="mcp-quotes-nav" hidden>
    <button type="button" class="mcp-quotes-btn mcp-quotes-prev" aria-label="Previous quotes">
      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="15 18 9 12 15 6"/></svg>
    </button>
    <div class="mcp-quotes-dots"></div>
    <button type="button" class="mcp-quotes-btn mcp-quotes-next" aria-label="Next quotes">
      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="9 18 15 12 9 6"/></svg>
    </button>
  </div>
</div>
<script>
  (function () {
    var reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)");

    function init(root) {
      var track = root.querySelector(".mcp-quotes-track");
      var nav = root.querySelector(".mcp-quotes-nav");
      if (!track || !nav) return;
      var prev = nav.querySelector(".mcp-quotes-prev");
      var next = nav.querySelector(".mcp-quotes-next");
      var dotsBox = nav.querySelector(".mcp-quotes-dots");
      var dots = [];
      

      var pending = null;
      var settle = 0;

      

      function step() {
        var card = track.querySelector(".mcp-quote");
        return card ? card.getBoundingClientRect().width : track.clientWidth;
      }

      function perPage() {
        return Math.max(1, Math.floor(track.clientWidth / step() + 0.001));
      }

      function pageCount() {
        var cards = track.querySelectorAll(".mcp-quote").length;
        return Math.max(1, Math.ceil(cards / perPage()));
      }

      function position() {
        return pending === null ? track.scrollLeft : pending;
      }

      function current() {
        var max = track.scrollWidth - track.clientWidth;
        if (max <= 0) return 0;
        if (position() >= max - 2) return pageCount() - 1;
        return Math.round(position() / step() / perPage());
      }

      function goTo(i) {
        var max = track.scrollWidth - track.clientWidth;
        var left = Math.max(0, Math.min(Math.round(i * perPage() * step()), max));
        pending = left;
        track.scrollTo({
          left: left,
          behavior: reduceMotion.matches ? "auto" : "smooth",
        });
        update();
      }

      function update() {
        var i = current();
        var max = track.scrollWidth - track.clientWidth;
        prev.disabled = position() <= 2;
        next.disabled = position() >= max - 2;
        dots.forEach(function (dot, j) {
          dot.setAttribute("aria-current", j === i ? "true" : "false");
        });
      }

      function build() {
        var n = pageCount();
        pending = null;
        nav.hidden = n < 2;
        dotsBox.textContent = "";
        dots = [];
        for (var i = 0; i < n; i++) {
          var dot = document.createElement("button");
          dot.type = "button";
          dot.className = "mcp-quotes-dot";
          dot.setAttribute("aria-label", "Go to quotes page " + (i + 1));
          dot.addEventListener("click", goTo.bind(null, i));
          dotsBox.appendChild(dot);
          dots.push(dot);
        }
        update();
      }

      prev.addEventListener("click", function () { goTo(current() - 1); });
      next.addEventListener("click", function () { goTo(current() + 1); });
      track.addEventListener("scroll", function () {
        if (pending !== null && Math.abs(track.scrollLeft - pending) <= 2) pending = null;
        clearTimeout(settle);
        settle = setTimeout(function () {
          pending = null;
          update();
        }, 150);
        requestAnimationFrame(update);
      });
      window.addEventListener("resize", build);
      build();
    }

    

    function initAll() {
      document.querySelectorAll(".mcp-quotes").forEach(init);
    }
    if (document.readyState === "loading") {
      document.addEventListener("DOMContentLoaded", initAll);
    } else {
      initAll();
    }
  })();
</script>
<h2 id="getting-started">Getting started</h2>
<p>We&rsquo;re excited to have developers build on the new spec. To get started, refer to the following resources:</p>
<ul>
<li><a href="https://modelcontextprotocol.io/specification/2026-07-28">Specification</a></li>
<li><a href="https://modelcontextprotocol.io/specification/2026-07-28/changelog">Full changelog</a></li>
<li><a href="https://modelcontextprotocol.io/docs/2026-07-28/getting-started/intro">Documentation and guides</a></li>
</ul>
<h2 id="thank-you">Thank you</h2>
<p>This release would not be possible without a massive community of contributors and industry partners. We&rsquo;d like to acknowledge the dozens of key contributors across specification, documentation, SDKs, working and interest groups, as well as hundreds of independent worldwide communities who rallied support and excitement for MCP. We&rsquo;re looking forward to continuing evolving the protocol as it grows!</p>
]]></content:encoded></item><item><title>Beta SDKs for the 2026-07-28 MCP Spec Release Candidate Are Here</title><link>https://blog.modelcontextprotocol.io/posts/sdk-betas-2026-07-28/</link><pubDate>Mon, 29 Jun 2026 09:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/sdk-betas-2026-07-28/</guid><description>Beta releases of the Python, TypeScript, Go, and C# SDKs are now available with support for the 2026-07-28 MCP specification release candidate. Here is what changes for your server, how to migrate, and how to test before the spec goes final on July 28.</description><content:encoded><![CDATA[<p>The MCP protocol is about to undergo its biggest revision since launch. As you might&rsquo;ve seen
from <a href="/posts/2026-07-28-release-candidate/">our recent release candidate announcement</a>, the new
protocol revision goes stateless, removing the <code>initialize</code> handshake and the protocol-level
session, and completing the plan we laid out in
<a href="/posts/2025-12-19-mcp-transport-future/">The Future of MCP Transports</a>. If you&rsquo;re building MCP
servers, you can now scale them using a simple round-robin load balancer, removing the need to
manage sticky sessions and to store shared sessions. For client developers, new patterns, like
<a href="https://modelcontextprotocol.io/specification/draft/basic/patterns/mrtr">Multi Round-Trip Requests (MRTR)</a>
enable a whole new range of possibilities for server-to-client interactions. You can check out
the <a href="https://modelcontextprotocol.io/specification/draft/changelog">full changelog</a> to see
what&rsquo;s coming.</p>
<p>Starting today you can test all the forthcoming updates to the protocol with all four
<a href="https://modelcontextprotocol.io/community/sdk-tiers">Tier 1</a> SDKs, led by
<a href="https://github.com/modelcontextprotocol/python-sdk">Python</a> v2 and
<a href="https://github.com/modelcontextprotocol/typescript-sdk">TypeScript</a> v2, with
<a href="https://github.com/modelcontextprotocol/go-sdk">Go</a> and
<a href="https://github.com/modelcontextprotocol/csharp-sdk">C#</a> betas also available. We encourage you
to run the beta SDKs against your real workloads and tell us what breaks as we inch closer to
the actual spec revision. The new protocol specification will be launched on July 28, 2026.</p>
<p><img alt="Three-layer stack: the MCP specification at the base, SDKs (Python, TypeScript, Go, C#, and more) in the middle, and clients and servers built on top." loading="lazy" src="/posts/images/sdk-betas/stack.svg"></p>
<h2 id="your-existing-server-keeps-working">Your existing server keeps working</h2>
<p>First, we want to reassure you that for existing clients and servers nothing breaks today,
and nothing breaks on July 28 either. This is merely the date when the normative specification
text is published and is not a switch-off for any implementers relying on the current protocol
version.</p>
<p>The SDK beta releases exist so you can test the protocol changes and give us feedback
before the new specification is locked. For any critical workloads, the stable SDK releases
remain the recommended versions.</p>
<p>You might&rsquo;ve seen that some of the SDKs, like Python and TypeScript, have also switched to v2.
Those are new major versions, so moving your own code onto them is a breaking change, and one
you can take on your own schedule; it is separate from anything that happens on July 28.
Once v2 ships, the TypeScript SDK will continue shipping v1.x bug fixes and security updates
for at least six months, and the Python v1.x branch continues to receive critical bug fixes and
security patches.</p>
<p>Trying a beta is safe because it is opt-in at every step. Installing the
Python, Go, or C# SDK without explicitly requesting a pre-release still resolves to
a stable version; the TypeScript v2 packages are new package names with no
stable release yet, so installing them is itself the opt-in. In the TypeScript and Go
SDKs, the opt-in extends to the wire: upgrading does not by itself change what your server speaks over
HTTP. Serving <code>2026-07-28</code> is an explicit choice you make when you wire up
the transport. A Python or C# server picks up the new revision on upgrade
instead: a Python v2 server answers both protocol revisions from one
endpoint, and the C# preview&rsquo;s HTTP transport defaults to the new stateless
mode. And clients that speak <code>2026-07-28</code> fall back to the
<code>initialize</code> handshake when they reach a server on <code>2025-11-25</code> or earlier,
so old servers and new clients keep interoperating.</p>
<p>If you want to make sure your own users are not caught out:</p>
<ul>
<li>If you publish a library that depends on the Python <code>mcp</code> package, add an
upper bound now (for example <code>mcp&gt;=1.27,&lt;2</code>) so the stable v2 release does
not surprise your users.</li>
<li>When you test a beta, pin the exact version. Public APIs may still change
between the beta and the stable releases.</li>
</ul>
<h2 id="what-beta-sdks-implement">What beta SDKs implement</h2>
<p>All four beta releases implement the core protocol changes from the release candidate,
with each release&rsquo;s notes detailing which changes are covered. The
<a href="/posts/2026-07-28-release-candidate/">RC announcement</a> covers the changes
in depth, but if you&rsquo;re curious about the short version:</p>
<ul>
<li><strong>The stateless core</strong>
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2575">SEP-2575</a>,
<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2567">SEP-2567</a>).
Every request is self-describing, capabilities come from
<code>server/discover</code>, and any server instance can handle any request.</li>
<li><strong>Multi Round-Trip Requests (MRTR)</strong>
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2322">SEP-2322</a>).
Tools can return <code>InputRequiredResult</code> to ask the user something
mid-call, and the client retries with the answers. No long-lived stream
required!</li>
<li><strong>Routable transport headers</strong>
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2243">SEP-2243</a>).
<code>Mcp-Method</code> rides on every request, and <code>Mcp-Name</code> on requests that name
a tool, resource, or prompt, so gateways and rate limiters can route
without parsing bodies.</li>
<li><strong>Authorization hardening</strong>, including <code>iss</code> validation per
<a href="https://www.rfc-editor.org/rfc/rfc9207">RFC 9207</a>
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2468">SEP-2468</a>),
<code>application_type</code> in Dynamic Client Registration
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/837">SEP-837</a>),
scope accumulation on step-up
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2350">SEP-2350</a>),
and credential binding to the issuing authorization server
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2352">SEP-2352</a>).
The <code>application_type</code> change is the one desktop and CLI clients will
feel: authorization servers stop defaulting them to <code>&quot;web&quot;</code> and
rejecting their <code>localhost</code> redirects.</li>
<li><strong>Standard error codes</strong>
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2164">SEP-2164</a>).
A missing resource now returns JSON-RPC <code>-32602</code> instead of the
MCP-custom <code>-32002</code>. If your client matches on the literal value, you should update
it.</li>
<li><strong>Deprecation annotations</strong>
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2577">SEP-2577</a>)
on roots, sampling, and logging. This is advisory only, as the deprecated methods,
types, and capability flags keep working in this release and in every
specification version published within a year of it.</li>
</ul>
<p>The full protocol text is in the
<a href="https://modelcontextprotocol.io/specification/draft">draft specification</a>,
and the
<a href="https://modelcontextprotocol.io/specification/draft/changelog">changelog</a>
lists every change against <code>2025-11-25</code>.</p>
<h2 id="python-mcp-v2">Python: <code>mcp</code> v2</h2>
<p>The v2 line is a rework of the package you already know: <code>FastMCP</code> becomes
<code>MCPServer</code>, and the decorator API carries over. A complete server still
looks like this:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> mcp.server <span style="color:#f92672">import</span> MCPServer
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>mcp <span style="color:#f92672">=</span> MCPServer(<span style="color:#e6db74">&#34;Demo&#34;</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">@mcp.tool</span>()
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">add</span>(a: int, b: int) <span style="color:#f92672">-&gt;</span> int:
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;&#34;&#34;Add two numbers.&#34;&#34;&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> a <span style="color:#f92672">+</span> b
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">@mcp.resource</span>(<span style="color:#e6db74">&#34;greeting://</span><span style="color:#e6db74">{name}</span><span style="color:#e6db74">&#34;</span>)
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">greeting</span>(name: str) <span style="color:#f92672">-&gt;</span> str:
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;&#34;&#34;Greet someone by name.&#34;&#34;&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> <span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Hello, </span><span style="color:#e6db74">{</span>name<span style="color:#e6db74">}</span><span style="color:#e6db74">!&#34;</span>
</span></span></code></pre></div><p>As in v1, there is no JSON Schema to write, as idiomatic Python constructs take over.
Install the beta with an exact pin, since unpinned installs stay on v1.x:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>uv add <span style="color:#e6db74">&#34;mcp[cli]==2.0.0b1&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># or</span>
</span></span><span style="display:flex;"><span>pip install <span style="color:#e6db74">&#34;mcp[cli]==2.0.0b1&#34;</span>
</span></span></code></pre></div><p>If you have a v1 server today, the
<a href="https://py.sdk.modelcontextprotocol.io/v2/migration/">migration guide</a>
walks through every breaking change.</p>
<p>On the protocol side, the beta speaks <code>2026-07-28</code> end to end: servers
answer the new <code>server/discover</code> method, and the client&rsquo;s default mode
probes it and falls back to <code>initialize</code> on older servers. Upgrading your
server does not strand existing clients: a v2 server answers the legacy
<code>initialize</code> handshake alongside <code>server/discover</code>, so clients on
<code>2025-11-25</code> keep connecting. You can test all
of it in-process: pass your <code>MCPServer</code> instance directly to <code>Client</code>
(<code>async with Client(mcp) as client:</code>) and it connects in memory, the same
pattern as FastAPI&rsquo;s <code>TestClient</code>. No subprocess, no port. The
<a href="https://py.sdk.modelcontextprotocol.io/v2/">SDK documentation</a> has the tutorial and the full
API reference.</p>
<h2 id="typescript-split-packages">TypeScript: split packages</h2>
<p>TypeScript v2 retires the monolithic <code>@modelcontextprotocol/sdk</code> package in
favor of focused ones, like <code>@modelcontextprotocol/server</code> for servers,
<code>@modelcontextprotocol/client</code> for clients, plus thin adapters for Node.js,
Express, Hono, and Fastify. It is ESM-only and runs on Node.js 20+, Bun, and
Deno. Tool schemas now use
<a href="https://standardschema.dev/">Standard Schema</a>, so you can bring Zod v4,
Valibot, ArkType, or any compatible library.</p>
<p>You can bootstrap a minimal server like this:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-typescript" data-lang="typescript"><span style="display:flex;"><span><span style="color:#66d9ef">import</span> { <span style="color:#a6e22e">McpServer</span> } <span style="color:#66d9ef">from</span> <span style="color:#e6db74">&#34;@modelcontextprotocol/server&#34;</span>;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">import</span> { <span style="color:#a6e22e">StdioServerTransport</span> } <span style="color:#66d9ef">from</span> <span style="color:#e6db74">&#34;@modelcontextprotocol/server/stdio&#34;</span>;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">import</span> <span style="color:#f92672">*</span> <span style="color:#66d9ef">as</span> <span style="color:#a6e22e">z</span> <span style="color:#66d9ef">from</span> <span style="color:#e6db74">&#34;zod/v4&#34;</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">server</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">McpServer</span>({ <span style="color:#a6e22e">name</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;greeting-server&#34;</span>, <span style="color:#a6e22e">version</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;1.0.0&#34;</span> });
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">server</span>.<span style="color:#a6e22e">registerTool</span>(
</span></span><span style="display:flex;"><span>  <span style="color:#e6db74">&#34;greet&#34;</span>,
</span></span><span style="display:flex;"><span>  {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">description</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;Greet someone by name&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">inputSchema</span>: <span style="color:#66d9ef">z.object</span>({ <span style="color:#a6e22e">name</span>: <span style="color:#66d9ef">z.string</span>() }),
</span></span><span style="display:flex;"><span>  },
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">async</span> ({ <span style="color:#a6e22e">name</span> }) <span style="color:#f92672">=&gt;</span> ({
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">content</span><span style="color:#f92672">:</span> [{ <span style="color:#66d9ef">type</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;text&#34;</span>, <span style="color:#a6e22e">text</span><span style="color:#f92672">:</span> <span style="color:#e6db74">`Hello, </span><span style="color:#e6db74">${</span><span style="color:#a6e22e">name</span><span style="color:#e6db74">}</span><span style="color:#e6db74">!`</span> }],
</span></span><span style="display:flex;"><span>  }),
</span></span><span style="display:flex;"><span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">async</span> <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">main() {</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">transport</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">StdioServerTransport</span>();
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">server</span>.<span style="color:#a6e22e">connect</span>(<span style="color:#a6e22e">transport</span>);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">main</span>();
</span></span></code></pre></div><p>To install any of the packages, you can use the now-familiar <code>npm</code> commands:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>npm install @modelcontextprotocol/server@beta
</span></span><span style="display:flex;"><span>npm install @modelcontextprotocol/client@beta
</span></span></code></pre></div><p>For HTTP deployments, which is where the stateless protocol pays off, <code>createMcpHandler</code> from
<code>@modelcontextprotocol/server</code> is the entry point. It serves <code>2026-07-28</code>
per request and handles <code>2025-11-25</code> traffic from the same endpoint, with
the adapter packages connecting it to Node.js, Express, Hono, and Fastify.</p>
<p>Migrating from v1 is mostly mechanical, and there is a codemod that does the boring parts
for you, including the rename from <code>.tool()</code> to
<code>registerTool</code> and the error-type renames. You can get it with:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>npx @modelcontextprotocol/codemod@beta v1-to-v2 .
</span></span></code></pre></div><p>The repository ships two guides that will help you along the way:</p>
<ul>
<li><a href="https://github.com/modelcontextprotocol/typescript-sdk/blob/main/docs/migration/upgrade-to-v2.md">Upgrading from v1 to v2</a></li>
<li><a href="https://github.com/modelcontextprotocol/typescript-sdk/blob/main/docs/migration/support-2026-07-28.md">Adopting the 2026-07-28 revision</a></li>
</ul>
<p>While it might seem confusing, these two are standalone steps - you can move to v2
now and turn on the new protocol revision when you are ready. The
<a href="https://ts.sdk.modelcontextprotocol.io/v2/">v2 API documentation</a> covers
the rest.</p>
<h2 id="go-and-c">Go and C#</h2>
<p>The Go and C# betas take a slightly gentler path - there is no package split and no rework of
the API you use day to day.</p>
<p>The Go SDK ships <code>2026-07-28</code> support in <code>v1.7.0-pre.1</code>, on the same
module path as the version you are already using:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>go get github.com/modelcontextprotocol/go-sdk@v1.7.0-pre.1
</span></span></code></pre></div><p>Serving the new revision over HTTP is the same explicit choice as in
TypeScript: the streamable HTTP transport accepts <code>2026-07-28</code> only when
you set <code>StreamableHTTPOptions.Stateless = true</code>. Leave it unset and
clients negotiate down to <code>2025-11-25</code>. The
<a href="https://github.com/modelcontextprotocol/go-sdk/releases/tag/v1.7.0-pre.1">release notes</a>
walk through every protocol change and the
<a href="https://go.sdk.modelcontextprotocol.io">SDK documentation</a> will cover the updated
API.</p>
<p>The C# beta, in turn, is released as the <code>2.0.0-preview.1</code> version of the
<code>ModelContextProtocol</code> packages:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>dotnet add package ModelContextProtocol --prerelease
</span></span></code></pre></div><p>Stable v1.x APIs keep working in v2. The breaking changes are confined to
the capabilities the specification deprecates (roots, sampling, and
logging), which are marked <code>[Obsolete]</code> with pointers to their
replacements, and to experimental APIs whose contracts changed as the
specification settled. The
<a href="https://github.com/modelcontextprotocol/csharp-sdk/releases/tag/v2.0.0-preview.1">preview release notes</a>
include a per-SEP implementation table, and the
<a href="https://csharp.sdk.modelcontextprotocol.io">SDK documentation</a> will have the updated
API reference once the package is stable.</p>
<h2 id="give-us-your-feedback">Give us your feedback</h2>
<p>We&rsquo;re a mere four weeks away until the specification is final. We need your help to make the
release smoother!</p>
<ol>
<li>
<p>Install a beta in a branch of your server and run your real traffic
against it, not just the happy path.</p>
</li>
<li>
<p>If you operate behind a gateway or load balancer, serve the stateless
path and see whether your routing still needs anything the protocol no
longer provides. In TypeScript that path is <code>createMcpHandler</code>; in Go,
set <code>StreamableHTTPOptions.Stateless = true</code>; in Python, the v2 HTTP
app answers both protocol revisions from one endpoint.</p>
</li>
<li>
<p>File what you find. SDK problems go to the issue tracker for the SDK
you are using:</p>
<ul>
<li><a href="https://github.com/modelcontextprotocol/python-sdk/issues">Python</a></li>
<li><a href="https://github.com/modelcontextprotocol/typescript-sdk/issues">TypeScript</a></li>
<li><a href="https://github.com/modelcontextprotocol/go-sdk/issues">Go</a></li>
<li><a href="https://github.com/modelcontextprotocol/csharp-sdk/issues">C#</a></li>
</ul>
<p>And if you spot issues with the protocol itself, go to the
<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues">specification repository</a>.</p>
</li>
</ol>
<p>It&rsquo;s worth noting that public APIs may still change between the betas and the stable releases, so
pin exact versions. Your feedback in the next four weeks is what they will be
built from. And if you have other feedback or want to engage with SDK maintainers, join our
<a href="https://modelcontextprotocol.io/community/communication#discord">contributor Discord</a>.</p>
<p>We&rsquo;re excited to see what you build!</p>
]]></content:encoded></item><item><title>Enterprise-Managed Authorization: Zero-touch OAuth for MCP</title><link>https://blog.modelcontextprotocol.io/posts/enterprise-managed-auth/</link><pubDate>Thu, 18 Jun 2026 17:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/enterprise-managed-auth/</guid><description>The Enterprise-Managed Authorization extension to the Model Context Protocol is now stable, enabling organizations to centrally provision MCP server access through their identity provider so users get connected servers on first login without per-app OAuth.</description><content:encoded><![CDATA[<p><em>The Enterprise-Managed Authorization extension is now stable. Organizations can centrally
manage authorization for MCP servers and end-users can access all connected MCP servers
through a single log in. The extension is being adopted by Anthropic, Microsoft, Okta and
a growing number of MCP servers.</em></p>
<p>The <a href="https://modelcontextprotocol.io/extensions/auth/enterprise-managed-authorization">Enterprise-Managed Authorization (EMA) extension</a>
is now stable. We&rsquo;ve heard from the community that authorization and repeated consent
prompts from connected MCP servers is one of the biggest pain points when it comes to
managing connectivity in enterprise environments. This extension helps address this.</p>
<p>EMA allows organizations to control MCP server access centrally through their trusted
identity provider. For end-users, this means a zero-touch setup: the MCP servers they
need are connected on first login, with no per-app OAuth and nothing to configure as a
one-off.</p>
<p><img alt="Standard MCP authorization requires authenticating to every server one by one. Enterprise-Managed Authorization authenticates once through your identity provider and every server the admin authorized connects automatically, scoped to the user&rsquo;s groups and roles." loading="lazy" src="/posts/enterprise-managed-auth/ema-comparison.png"></p>
<h2 id="per-user-auth-is-high-friction">Per-user auth is high friction</h2>
<p>The standard MCP authorization model was designed to be user-scoped and bound to the
traditional interactive auth conventions. While this might work well for more general
consumer scenarios where individuals decide what touches their data, this doesn&rsquo;t quite
scale for enterprise deployments:</p>
<ul>
<li><strong>Every employee has to authorize every server individually</strong>: onboarding means
manually connecting service after service.</li>
<li><strong>Security teams cannot enforce consistent policy</strong>: access is whatever each user
authorized, with no central control or audit trail.</li>
<li><strong>Work and personal accounts blur together</strong>: there&rsquo;s no way to require a corporate
identity, so a user can connect a personal account to a work tool.</li>
</ul>
<p>This combination of factors slows MCP adoption and pushes people toward brittle
workarounds. With no universal standard for preserving shared auth state, everyone
invents their own bespoke solution. The data and tools are available, but the per-user
authorization tax keeps most of them switched off.</p>
<h2 id="authorize-once-inherit-everywhere">Authorize once, inherit everywhere</h2>
<p><a href="https://modelcontextprotocol.io/extensions/auth/enterprise-managed-authorization">Enterprise-Managed Authorization</a>
makes the organization&rsquo;s IdP the authoritative decision-maker for MCP server access.
Administrators define the policy once and users can authenticate with their existing
identity into the MCP host. The IdP can grant or deny access based on group membership,
role, and conditional access rules.</p>
<p>Under the hood, the client obtains an
<a href="https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/">Identity Assertion JWT Authorization Grant (ID-JAG)</a>
from the IdP during single sign-on and exchanges it for an access token from the MCP
server&rsquo;s authorization server. The user is never redirected through a per-server consent
screen. Three properties fall out of that flow:</p>
<ul>
<li><strong>Authorize once, inherit everywhere:</strong> admins enable a server for the org. Users get
it automatically, scoped to the groups and roles they already have.</li>
<li><strong>Centralized policy and audit:</strong> access decisions live in the IdP admin console, with
one auditable trail across every connector.</li>
<li><strong>Removing personal/enterprise mixups:</strong> by removing the interactive account selection
step, it&rsquo;s much easier to prevent data flowing between personal and enterprise accounts
by mistake or compromise.</li>
</ul>
<p>We see this as a brand new baseline for MCP in the enterprise. When users log in, their
client should be connected to the tools and data they&rsquo;re authorized to use with no extra
steps in between.</p>
<h2 id="early-adopters">Early adopters</h2>
<p>This launch brought together three groups that collaborated closely on making the
implementation real:</p>
<ul>
<li><strong>Identity providers:</strong> Okta is the first supported identity provider. Organizations
using Okta can provision MCP access to supported servers through any supported client,
using
<a href="https://www.okta.com/identity-101/cross-app-access-securing-ai-agent-and-app-to-app-connections/">Okta&rsquo;s Cross App Access (XAA)</a>.</li>
<li><strong>Clients:</strong>
<a href="https://claude.com/blog/enterprise-managed-auth">Anthropic has implemented the extension</a>
in its shared MCP layer for Claude. Admins can authorize MCP servers for users across
Claude, Claude Code, and Cowork. Additionally,
<a href="https://code.visualstudio.com/updates/v1_123#_enterprise-managed-mcp-authentication-preview">Visual Studio Code has also added support</a>
for EMA right in the IDE.</li>
<li><strong>Servers:</strong> Asana, Atlassian, Canva, Figma, Granola, Linear and Supabase now support
EMA, with Slack and more actively adding support.</li>
</ul>
<p>We&rsquo;re excited for more identity providers, clients, and servers to adopt
Enterprise-Managed Auth to help reduce the authorization-related fatigue and
significantly improve the security and observability posture for its implementers.</p>
<blockquote>
<p>&ldquo;The momentum around MCP is incredible, but as we move toward an interconnected AI
workforce, security can&rsquo;t be an afterthought. By embedding the Cross App Access protocol
into MCP as the Enterprise-Managed Authorization extension, we turn identity into a
centralized governance plane and give security teams strict compliance control and users
a seamless, secure experience.&rdquo;</p>
<p>— <strong>Aaron Parecki, Director of Identity Standards, Okta</strong></p></blockquote>
<blockquote>
<p>&ldquo;The Figma MCP brings the power of code and canvas together so teams can move faster,
explore more and ship products that stand out. As MCP adoption grows, XAA makes it
easier for enterprises to scale their MCP deployments securely without slowing teams
down.&rdquo;</p>
<p>— <strong>Devdatta Akhawe, VP of Engineering, Figma</strong></p></blockquote>
<blockquote>
<p>&ldquo;Logging in once and automatically having all your MCP connectors automatically setup is
pretty magical.&rdquo;</p>
<p>— <strong>Tom Moor, Head of Engineering, Linear</strong></p></blockquote>
<h2 id="get-involved">Get involved</h2>
<p>As with all other MCP extensions, features, and enhancements, we welcome your input.
We&rsquo;re encouraging clients, servers, and identity platforms to review the extension
specification and add support for the new standard into their products:</p>
<ul>
<li><strong>Read the requirements:</strong> the
<a href="https://modelcontextprotocol.io/extensions/auth/enterprise-managed-authorization">Enterprise-Managed Authorization page</a>
documents the flow for clients, servers, and authorization servers.</li>
<li><strong>Source and spec:</strong> see the
<a href="https://github.com/modelcontextprotocol/ext-auth">ext-auth repository</a> and the
<a href="https://github.com/modelcontextprotocol/ext-auth/blob/main/specification/stable/enterprise-managed-authorization.mdx">specification</a>
for the latest in EMA evolution as well as any support materials that will help you get
started.</li>
</ul>
<p>If you&rsquo;re interested in discussing the extension, sharing compatibility reports, or
iterating on the extension, join the
<a href="https://modelcontextprotocol.io/community/interest-groups/enterprise-managed-authorization">EMA Interest Group</a>.</p>
<h2 id="acknowledgements">Acknowledgements</h2>
<p>Enterprise-Managed Authorization is the work of the MCP community: the authors of
SEP-990, the maintainers of the
<a href="https://github.com/modelcontextprotocol/ext-auth">ext-auth repository</a>, and the identity
and MCP providers
who tested early implementations and pushed the spec forward. Thank you to everyone who
contributed.</p>
]]></content:encoded></item><item><title>The 2026-07-28 MCP Specification Release Candidate</title><link>https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/</link><pubDate>Thu, 21 May 2026 09:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/</guid><description>The release candidate for the next Model Context Protocol (MCP) specification is now available: a stateless protocol core, the Extensions framework, Tasks, MCP Apps, authorization hardening, and a formal deprecation policy.</description><content:encoded><![CDATA[<p>The release candidate for MCP <strong><code>2026-07-28</code></strong> is now available. It is the largest
revision of the protocol since launch and delivers on the
<a href="/posts/2026-mcp-roadmap/">2026 roadmap</a>:</p>
<ul>
<li><strong>a stateless core</strong> that scales on ordinary HTTP infrastructure</li>
<li><strong>extensions</strong> including server-rendered UIs through <a href="#mcp-apps-server-rendered-user-interfaces">MCP Apps</a> and long-running work through the <a href="#tasks-graduates-to-an-extension">Tasks extension</a></li>
<li><strong>authorization</strong> that aligns more closely with OAuth and OpenID Connect deployments</li>
<li><strong>a formal deprecation policy</strong> so the protocol can evolve without breaking what you&rsquo;ve
built,</li>
</ul>
<p>and many other changes.</p>
<p>The practical effect on a production deployment is immediate. A remote MCP
server that previously needed sticky sessions, a shared session store, and
deep packet inspection at the gateway can now run behind a plain round-robin
load balancer, route traffic on an <code>Mcp-Method</code> header, and let clients cache
<code>tools/list</code> responses for as long as the server&rsquo;s <code>ttlMs</code> permits.</p>
<blockquote>
<p>The release candidate is available today and the final specification ships on
<strong>July 28, 2026</strong>. This release contains breaking changes; see
<a href="#release-timeline-and-validation">Release Timeline and Validation</a> for the
details.</p></blockquote>
<h2 id="a-stateless-protocol">A Stateless Protocol</h2>
<p>The headline change is that MCP is now stateless at the protocol layer. Six
<a href="https://modelcontextprotocol.io/community/sep-guidelines">Specification Enhancement Proposals</a>
(SEPs) work together to get there, completing the plan we laid out in
<a href="/posts/2025-12-19-mcp-transport-future/">The Future of MCP Transports</a> in
December.</p>
<p><img alt="Before: a client routed through a load balancer with a sticky route to one MCP server instance, all instances sharing a session store. After: the same client routed to any of three MCP server instances with no session store." loading="lazy" src="/posts/images/2026-07-28-rc/stateless-topology.svg"></p>
<h3 id="before-and-after">Before and after</h3>
<p>In <a href="/posts/2025-11-25-first-mcp-anniversary/"><code>2025-11-25</code></a>, calling a tool over
Streamable HTTP means establishing a session first:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-http" data-lang="http"><span style="display:flex;"><span><span style="color:#a6e22e">POST</span> /mcp <span style="color:#66d9ef">HTTP</span><span style="color:#f92672">/</span><span style="color:#ae81ff">1.1</span>
</span></span><span style="display:flex;"><span>Content-Type<span style="color:#f92672">:</span> <span style="color:#ae81ff">application/json</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>{<span style="color:#f92672">&#34;jsonrpc&#34;</span>:<span style="color:#e6db74">&#34;2.0&#34;</span>,<span style="color:#f92672">&#34;id&#34;</span>:<span style="color:#ae81ff">1</span>,<span style="color:#f92672">&#34;method&#34;</span>:<span style="color:#e6db74">&#34;initialize&#34;</span>,
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;params&#34;</span>:{<span style="color:#f92672">&#34;protocolVersion&#34;</span>:<span style="color:#e6db74">&#34;2025-11-25&#34;</span>,<span style="color:#f92672">&#34;capabilities&#34;</span>:{},
</span></span><span style="display:flex;"><span>           <span style="color:#f92672">&#34;clientInfo&#34;</span>:{<span style="color:#f92672">&#34;name&#34;</span>:<span style="color:#e6db74">&#34;my-app&#34;</span>,<span style="color:#f92672">&#34;version&#34;</span>:<span style="color:#e6db74">&#34;1.0&#34;</span>}}}
</span></span></code></pre></div><p>The server responds with an <code>Mcp-Session-Id</code> that every subsequent request must
carry, pinning the client to whichever instance issued it:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-http" data-lang="http"><span style="display:flex;"><span><span style="color:#a6e22e">POST</span> /mcp <span style="color:#66d9ef">HTTP</span><span style="color:#f92672">/</span><span style="color:#ae81ff">1.1</span>
</span></span><span style="display:flex;"><span>Mcp-Session-Id<span style="color:#f92672">:</span> <span style="color:#ae81ff">1868a90c-3a3f-4f5b</span>
</span></span><span style="display:flex;"><span>Content-Type<span style="color:#f92672">:</span> <span style="color:#ae81ff">application/json</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>{<span style="color:#f92672">&#34;jsonrpc&#34;</span>:<span style="color:#e6db74">&#34;2.0&#34;</span>,<span style="color:#f92672">&#34;id&#34;</span>:<span style="color:#ae81ff">2</span>,<span style="color:#f92672">&#34;method&#34;</span>:<span style="color:#e6db74">&#34;tools/call&#34;</span>,
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;params&#34;</span>:{<span style="color:#f92672">&#34;name&#34;</span>:<span style="color:#e6db74">&#34;search&#34;</span>,<span style="color:#f92672">&#34;arguments&#34;</span>:{<span style="color:#f92672">&#34;q&#34;</span>:<span style="color:#e6db74">&#34;otters&#34;</span>}}}
</span></span></code></pre></div><p>In <code>2026-07-28</code>, the same call is a single self-contained request that any
server instance can handle:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-http" data-lang="http"><span style="display:flex;"><span><span style="color:#a6e22e">POST</span> /mcp <span style="color:#66d9ef">HTTP</span><span style="color:#f92672">/</span><span style="color:#ae81ff">1.1</span>
</span></span><span style="display:flex;"><span>MCP-Protocol-Version<span style="color:#f92672">:</span> <span style="color:#ae81ff">2026-07-28</span>
</span></span><span style="display:flex;"><span>Mcp-Method<span style="color:#f92672">:</span> <span style="color:#ae81ff">tools/call</span>
</span></span><span style="display:flex;"><span>Mcp-Name<span style="color:#f92672">:</span> <span style="color:#ae81ff">search</span>
</span></span><span style="display:flex;"><span>Content-Type<span style="color:#f92672">:</span> <span style="color:#ae81ff">application/json</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>{<span style="color:#f92672">&#34;jsonrpc&#34;</span>:<span style="color:#e6db74">&#34;2.0&#34;</span>,<span style="color:#f92672">&#34;id&#34;</span>:<span style="color:#ae81ff">1</span>,<span style="color:#f92672">&#34;method&#34;</span>:<span style="color:#e6db74">&#34;tools/call&#34;</span>,
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;params&#34;</span>:{<span style="color:#f92672">&#34;name&#34;</span>:<span style="color:#e6db74">&#34;search&#34;</span>,<span style="color:#f92672">&#34;arguments&#34;</span>:{<span style="color:#f92672">&#34;q&#34;</span>:<span style="color:#e6db74">&#34;otters&#34;</span>},
</span></span><span style="display:flex;"><span>           <span style="color:#f92672">&#34;_meta&#34;</span>:{<span style="color:#f92672">&#34;io.modelcontextprotocol/clientInfo&#34;</span>:{<span style="color:#f92672">&#34;name&#34;</span>:<span style="color:#e6db74">&#34;my-app&#34;</span>,<span style="color:#f92672">&#34;version&#34;</span>:<span style="color:#e6db74">&#34;1.0&#34;</span>}}}}
</span></span></code></pre></div><h3 id="the-handshake-and-session-are-gone">The handshake and session are gone</h3>
<p>The <code>initialize</code>/<code>initialized</code> handshake is removed
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2575">SEP-2575</a>).
The protocol version, client info, and client capabilities that used to be
exchanged once at connection time now travel in <code>_meta</code> on every request, and a
new <code>server/discover</code> method lets clients fetch server capabilities when they
need them up front.</p>
<p>The <code>Mcp-Session-Id</code> header and the protocol-level session that came with it are
also removed
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2567">SEP-2567</a>).
With both gone, any MCP request can land on any server instance, and the sticky
routing and shared session stores that horizontal deployments needed before are
no longer required at the protocol layer.</p>
<h3 id="stateless-protocol-stateful-applications">Stateless protocol, stateful applications</h3>
<p>Removing the protocol-level session does not mean your application has to be
stateless. Servers that need to carry state across calls can do what HTTP APIs
have always done: mint an explicit handle (a <code>basket_id</code>, a <code>browser_id</code>) from
a tool and have the model pass it back as an ordinary argument on later calls.</p>
<p><img alt="Sequence diagram: the model calls create_basket, the MCP server returns a basket_id, and the model passes that same basket_id back as an argument to add_item." loading="lazy" src="/posts/images/2026-07-28-rc/handle-pattern.svg"></p>
<p>In practice, we&rsquo;ve found this pattern (the model threading an identifier from
one tool call to the next) to be more than just a workable substitute for
session state. It&rsquo;s often a more powerful one. The model can compose handles
across tools, reason about them, and hand them off between steps in ways that
externally managed session state, hidden in transport metadata, never really
allowed.</p>
<p>The protocol no longer manages that state for you, but it doesn&rsquo;t prevent you
from managing it yourself. The explicit-handle pattern simply makes the state
visible to the model rather than hidden away.</p>
<h3 id="server-to-client-requests-restructured">Server-to-client requests, restructured</h3>
<p>A stateless protocol still needs a way for servers to ask the client for
something mid-call, such as an elicitation prompt. Two SEPs rebuild that flow so
it works without a persistent connection.</p>
<p>Server-initiated requests may now only be issued while the server is actively
processing a client request
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2260">SEP-2260</a>).
Earlier spec versions recommended this; it&rsquo;s now required. A user is never
prompted out of nowhere, and every elicitation traces back to something they (or
their agent) started.</p>
<p>Multi Round-Trip Requests
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2322">SEP-2322</a>)
change how those prompts are delivered. Instead of holding a Server-Sent Events
(SSE) stream open, the server returns an <code>InputRequiredResult</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;resultType&#34;</span>: <span style="color:#e6db74">&#34;input_required&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;inputRequests&#34;</span>: {
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;confirm&#34;</span>: {
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&#34;type&#34;</span>: <span style="color:#e6db74">&#34;elicitation&#34;</span>,
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&#34;message&#34;</span>: <span style="color:#e6db74">&#34;Delete 3 files?&#34;</span>,
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&#34;schema&#34;</span>: { <span style="color:#f92672">&#34;type&#34;</span>: <span style="color:#e6db74">&#34;boolean&#34;</span> }
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>  },
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;requestState&#34;</span>: <span style="color:#e6db74">&#34;eyJzdGVwIjoxLCJmaWxlcyI6WyJhIiwiYiIsImMiXX0=&#34;</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>The client gathers the answers and re-issues the original call with
<code>inputResponses</code> and the echoed <code>requestState</code>. Any server instance can pick
that retry up because everything it needs is in the payload.</p>
<h3 id="routable-cacheable-traceable">Routable, cacheable, traceable</h3>
<p>Three smaller changes make the resulting traffic easier to operate.</p>
<p>The Streamable HTTP transport now requires <code>Mcp-Method</code> and <code>Mcp-Name</code> headers
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2243">SEP-2243</a>)
so load balancers, gateways, and rate-limiters can route on the operation
without inspecting the body. Servers reject requests where the headers and body
disagree.</p>
<p>List and resource read results now carry <code>ttlMs</code> and <code>cacheScope</code>
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2549">SEP-2549</a>),
modeled on HTTP <code>Cache-Control</code>. Clients know exactly how long a <code>tools/list</code>
response is fresh and whether it&rsquo;s safe to share across users, and a long-lived
SSE stream is no longer the only way to learn that a list changed.</p>
<p>W3C Trace Context propagation in <code>_meta</code> is now documented
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/414">SEP-414</a>),
locking down the <code>traceparent</code>, <code>tracestate</code>, and <code>baggage</code> key names so
distributed traces correlate across SDKs and gateways. Several SDKs and tools
were already doing this; with the key names fixed in the spec, a trace that
starts in a host application can follow a tool call through the client SDK, the
MCP server, and whatever the server calls downstream, and show up as a single
span tree in an <a href="https://opentelemetry.io/">OpenTelemetry</a>-compatible backend.</p>
<h2 id="extensions-become-first-class">Extensions Become First-Class</h2>
<p>Extensions existed in the <code>2025-11-25</code> release but had no formal process behind
them.
<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2133">SEP-2133</a>
adds that: extensions are identified by reverse-DNS IDs, negotiated through an <code>extensions</code>
map on client and server capabilities, live in their own <code>ext-*</code> repositories
with delegated maintainers, and version independently of the specification. A new
Extensions Track in the SEP process gives them a path from experimental to
official.</p>
<p>This release includes two official extensions.</p>
<h3 id="mcp-apps-server-rendered-user-interfaces">MCP Apps: server-rendered user interfaces</h3>
<p><a href="/posts/2026-01-26-mcp-apps/">MCP Apps</a>
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1865">SEP-1865</a>)
lets servers ship interactive HTML interfaces that hosts render in a sandboxed
iframe. Tools declare their UI templates ahead of time so hosts can prefetch,
cache, and security-review them before anything runs. The rendered UI talks back
to the host over the same JSON-RPC base protocol used everywhere else in MCP, so
every UI-initiated action goes through the same audit and consent path as a
direct tool call.</p>
<h3 id="tasks-graduates-to-an-extension">Tasks graduates to an extension</h3>
<p>Tasks shipped as an experimental core feature in
<a href="https://modelcontextprotocol.io/specification/2025-11-25/server/tasks"><code>2025-11-25</code></a>.
Production use surfaced enough redesign that the right home for it is an
extension rather than the specification.</p>
<p>The <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2663">Tasks extension</a>
reshapes the lifecycle around the stateless model: a server can answer
<code>tools/call</code> with a task handle, and the client drives it with <code>tasks/get</code>,
<code>tasks/update</code>, and <code>tasks/cancel</code>. Task creation is server-directed: the client
advertises the extension and the server decides when a call should run as a
task. <code>tasks/list</code> is removed because it can&rsquo;t be scoped safely without
sessions.</p>
<p>Anyone who shipped against the <code>2025-11-25</code> experimental Tasks API will need to
migrate to the new lifecycle.</p>
<h2 id="authorization-hardening">Authorization Hardening</h2>
<p>Six SEPs harden the
<a href="https://modelcontextprotocol.io/specification/draft/basic/authorization">authorization specification</a>
to align more closely with how OAuth 2.0 and OpenID Connect are deployed in
practice.</p>
<p>Clients must now validate the <code>iss</code> parameter on authorization responses per
<a href="https://www.rfc-editor.org/rfc/rfc9207">RFC 9207</a>
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2468">SEP-2468</a>).
This is a low-cost mitigation for a class of mix-up attack that is more
prevalent in MCP&rsquo;s single-client, many-server deployment pattern. In a future
version, clients will be expected to reject responses that omit <code>iss</code>, so
authorization servers should begin supplying it now if they don&rsquo;t already.</p>
<p>Clients now declare their OpenID Connect <code>application_type</code> during Dynamic
Client Registration
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/837">SEP-837</a>),
avoiding the common case where an authorization server defaults a desktop or CLI
client to <code>&quot;web&quot;</code> and rejects its localhost redirect URI. Clients bind
registered credentials to the issuing authorization server&rsquo;s <code>issuer</code> and
re-register when a resource migrates between authorization servers
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2352">SEP-2352</a>).
The spec also documents how to request refresh tokens from OpenID Connect-style
authorization servers
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2207">SEP-2207</a>),
and clarifies scope accumulation during step-up
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2350">SEP-2350</a>)
and the <code>.well-known</code> discovery suffix
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2351">SEP-2351</a>).</p>
<h2 id="roots-sampling-and-logging-are-deprecated">Roots, Sampling, and Logging Are Deprecated</h2>
<p>Three core features are deprecated under the new
<a href="#how-the-protocol-evolves-from-here">feature lifecycle policy</a>
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2577">SEP-2577</a>):</p>
<table>
  <thead>
      <tr>
          <th>Feature</th>
          <th>Replacement</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Roots</td>
          <td><a href="https://modelcontextprotocol.io/specification/draft/server/tools">Tool parameters</a>, resource URIs, or server configuration</td>
      </tr>
      <tr>
          <td>Sampling</td>
          <td>Direct integration with LLM provider APIs</td>
      </tr>
      <tr>
          <td>Logging</td>
          <td><code>stderr</code> for stdio transports; <a href="https://opentelemetry.io/">OpenTelemetry</a> for structured observability</td>
      </tr>
  </tbody>
</table>
<p>These are annotation-only deprecations. The methods, types, and capability flags
continue to work in this release and in every specification version published
within a year of it, and removing any of them will require a separate SEP under
the lifecycle policy.</p>
<h2 id="full-json-schema-2020-12-for-tools">Full JSON Schema 2020-12 for Tools</h2>
<p>Tool <code>inputSchema</code> and <code>outputSchema</code> are lifted to full
<a href="https://json-schema.org/draft/2020-12">JSON Schema 2020-12</a>
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2106">SEP-2106</a>).
Input schemas keep the <code>type: &quot;object&quot;</code> root constraint but now allow
composition (<code>oneOf</code>, <code>anyOf</code>, <code>allOf</code>), conditionals, and references (<code>$ref</code>,
<code>$defs</code>). Output schemas are unrestricted, and <code>structuredContent</code> can now be
any JSON value rather than only an object. Implementations must not
auto-dereference external <code>$ref</code> URIs and should bound schema depth and
validation time.</p>
<p>Separately, the error code for a missing resource changes from the MCP-custom
<code>-32002</code> to the JSON-RPC standard <code>-32602</code> Invalid Params
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2164">SEP-2164</a>).
If your client matches on the literal <code>-32002</code> value, update it.</p>
<h2 id="how-the-protocol-evolves-from-here">How the Protocol Evolves From Here</h2>
<p>This release contains breaking changes. We don&rsquo;t intend for that to be the norm.</p>
<p>Three governance SEPs in this release are designed so that future revisions can
evolve the protocol without breaking core capabilities. The
<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2596">feature lifecycle policy</a>
gives every feature an <em>Active</em>, <em>Deprecated</em>, and <em>Removed</em> lifecycle with at least
twelve months between deprecation and the earliest possible removal. The
<a href="#extensions-become-first-class">Extensions framework</a> means new capabilities
can ship as opt-in extensions and stabilize there before, if ever, moving into
the specification. And a Standards Track SEP can no longer reach Final status
until a matching scenario lands in the <a href="https://github.com/modelcontextprotocol/conformance">conformance suite</a>
(<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2484">SEP-2484</a>),
which is the same suite the new <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1777">SDK tier system</a>
scores official SDKs against.</p>
<p>The stateless rework in this release is the kind of foundational change that
needed a clean break. With it landed, and with deprecation windows and
extensions as the standard tools going forward, our expectation is that
implementers targeting <code>2026-07-28</code> will be able to adopt future revisions without
rewriting their transport or lifecycle code.</p>
<h2 id="release-timeline-and-validation">Release Timeline and Validation</h2>
<p>The release candidate is locked as of <strong>May 21, 2026</strong>. The final specification
will be published on <strong>July 28, 2026</strong>. The ten-week window is for SDK
maintainers and client implementers to validate the changes against real
workloads; under the <a href="https://modelcontextprotocol.io/docs/sdk">SDK tier system</a>,
Tier 1 SDKs are expected to ship support within this window.</p>
<p>The full release candidate is in the
<a href="https://modelcontextprotocol.io/specification/draft">draft specification</a>, and
the <a href="https://modelcontextprotocol.io/specification/draft/changelog">changelog</a>
will list every change against <code>2025-11-25</code>.</p>
<p>If you find a problem, open an issue in the
<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues">specification repository</a>.
For implementation questions, the relevant
<a href="https://modelcontextprotocol.io/community/working-interest-groups">Working Group</a>
channel in the
<a href="https://modelcontextprotocol.io/community/communication#discord">contributor Discord</a>
is the fastest path to an answer.</p>
<h2 id="looking-ahead">Looking Ahead</h2>
<p>This release gives MCP the foundation we expect it to grow on for a long time: a
protocol that runs statelessly on commodity HTTP infrastructure, an extensions
framework where capabilities like Tasks and MCP Apps can ship on their own
timeline, and a lifecycle policy that lets implementers build on <code>2026-07-28</code>
knowing what they ship will keep working.</p>
<p>Thank you to everyone who shaped these proposals through the Working Groups and
a great deal of patient review. We&rsquo;re looking forward to making this final with
the community on July 28.</p>
]]></content:encoded></item><item><title>Expanding the MCP Maintainer Team</title><link>https://blog.modelcontextprotocol.io/posts/2026-04-08-maintainer-update/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2026-04-08-maintainer-update/</guid><description>Updates to the Model Context Protocol (MCP) governance team: a new Lead Maintainer and an addition to the Core Maintainer group as the open-source project continues to grow.</description><content:encoded><![CDATA[<p>I&rsquo;m happy to share two updates to the maintainer team: <strong>Clare Liguori</strong> is joining the <a href="https://modelcontextprotocol.io/community/governance#current-core-maintainers">Core Maintainer</a> group, and <strong>Den Delimarsky</strong> is joining me as a <a href="https://modelcontextprotocol.io/community/governance#current-lead-maintainers">Lead Maintainer</a>.</p>
<p>When we <a href="/posts/2025-07-31-governance-for-mcp/">introduced the MCP governance model</a> last summer, the goal was to make sure the protocol could keep growing without any one person becoming a bottleneck. That has held up well through two specification releases, the move to the <a href="/posts/2025-12-09-mcp-joins-agentic-ai-foundation/">Agentic AI Foundation (AAIF)</a>, and a steady increase in SEP volume, and these changes give the project the leadership capacity it needs for what comes next.</p>
<h2 id="welcoming-clare-liguori-as-core-maintainer">Welcoming Clare Liguori as Core Maintainer</h2>
<img src="/posts/images/maintainer-update-2026-04/clare.webp" alt="Clare Liguori" width="400" />
<p>I&rsquo;m pleased to welcome <a href="https://github.com/clareliguori">Clare Liguori</a> to the <a href="https://modelcontextprotocol.io/community/governance#current-core-maintainers">Core Maintainer</a> team.</p>
<p>Clare is a Senior Principal Engineer at Amazon Web Services, where she works on agentic AI developer tooling. Her current focus is <a href="https://kiro.dev/">Kiro</a> and the Strands Agents SDK, and over more than a decade at AWS she has also worked on AWS Proton, Amazon ECS, the AWS Code Suite, and several open source projects.</p>
<p>Clare has been bringing that depth of developer-tooling and agent-runtime experience directly into MCP&rsquo;s design work, particularly the discussions around <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2229">unsolicited tasks</a>, the agent execution model, and the <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2459">Triggers &amp; Events working group</a>. She knows firsthand what the protocol has to look like inside production agent runtimes serving large numbers of developers. As those proposals move through the SEP process over the coming year, that perspective will keep the spec grounded in what client implementers actually need. I&rsquo;m glad to have her at the table.</p>
<p>Welcome, Clare!</p>
<h2 id="den-delimarsky-joins-as-lead-maintainer">Den Delimarsky Joins as Lead Maintainer</h2>
<img src="/posts/images/maintainer-update-2026-04/den.jpeg" alt="Den Delimarsky" width="400" />
<p><a href="https://github.com/localden">Den Delimarsky</a> is stepping up from Core Maintainer to Lead Maintainer, joining me in that role.</p>
<p>Den is a Member of Technical Staff at Anthropic, where he works across the MCP ecosystem: the specification, the SDKs, governance, and the developer experience around all of it. Before Anthropic he was a Principal Product Engineer in Microsoft&rsquo;s CoreAI division, and he brings a wealth of experience across developer tools, SDKs, and security tooling.</p>
<p>Den&rsquo;s work is most visible in authorization and security. He co-authored the <a href="https://modelcontextprotocol.io/specification/draft/basic/authorization">authorization specification</a>, brought <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/734">RFC 8707 Resource Indicators</a> into the spec, and has continued to build on it through <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/835">SEP-835</a>, <a href="https://modelcontextprotocol.io/seps/1024-mcp-client-security-requirements-for-local-server-">SEP-1024</a>, and the <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2350">SEP-2350</a> family of proposals, among others. He also led the <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1887">2025-11-25 specification release</a>, co-leads the Security Interest Group, and built <a href="https://localden.github.io/mcp-repo-data-tracker/">a contribution tracker</a> that gives SDK and spec maintainers a birds-eye view of activity across the project&rsquo;s repositories.</p>
<p>I&rsquo;m glad to have Den as a partner in this role, and I&rsquo;m looking forward to what we can do together for the protocol in the years ahead.</p>
<h2 id="whats-next">What&rsquo;s Next</h2>
<p>MCP continues to grow at a pace none of us could have predicted, and that growth wouldn&rsquo;t be possible without the people who keep it moving every day: the SDK maintainers, the working group facilitators, and everyone who has authored or reviewed a SEP. Thank you.</p>
<p>With this team in place, I&rsquo;m excited to keep working alongside the maintainer group to evolve the protocol and make sure MCP keeps pace with what the community needs from it. If you&rsquo;d like to get involved, the <a href="https://modelcontextprotocol.io/community/governance">governance docs</a> explain how the project is organized, the <a href="https://modelcontextprotocol.io/community/contributor-ladder">Contributor Ladder</a> shows how people grow into these roles, the <a href="https://modelcontextprotocol.io/development/roadmap">roadmap</a> shows where we&rsquo;re headed, and our <a href="https://modelcontextprotocol.io/community/communication#discord">Discord</a> is the best place to talk to the people working on it. Come build with us.</p>
]]></content:encoded></item><item><title>Tool Annotations as Risk Vocabulary: What Hints Can and Can't Do</title><link>https://blog.modelcontextprotocol.io/posts/2026-03-16-tool-annotations/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2026-03-16-tool-annotations/</guid><description>&lt;p>MCP tool annotations were introduced nearly a year ago as a way for servers to describe the behavior of their tools — whether they&amp;rsquo;re read-only, destructive, idempotent, or reach outside their local environment. Since then, the community has filed five independent &lt;a href="https://modelcontextprotocol.io/community/sep-guidelines">Specification Enhancement Proposals&lt;/a> (SEPs) proposing new annotations, driven in part by a sharper collective understanding of where risk actually lives in agentic workflows. This post recaps where tool annotations are today, what they can and can&amp;rsquo;t realistically do, and offers a framework for evaluating new proposals.&lt;/p></description><content:encoded><![CDATA[<p>MCP tool annotations were introduced nearly a year ago as a way for servers to describe the behavior of their tools — whether they&rsquo;re read-only, destructive, idempotent, or reach outside their local environment. Since then, the community has filed five independent <a href="https://modelcontextprotocol.io/community/sep-guidelines">Specification Enhancement Proposals</a> (SEPs) proposing new annotations, driven in part by a sharper collective understanding of where risk actually lives in agentic workflows. This post recaps where tool annotations are today, what they can and can&rsquo;t realistically do, and offers a framework for evaluating new proposals.</p>
<h2 id="what-tool-annotations-are">What Tool Annotations Are</h2>
<p><a href="https://modelcontextprotocol.io/specification/2025-11-25/server/tools">Tool annotations</a> shipped in the <code>2025-03-26</code> spec revision. The current <a href="https://modelcontextprotocol.io/specification/2025-11-25/schema#toolannotations"><code>ToolAnnotations</code> interface</a> looks like this:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-typescript" data-lang="typescript"><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">ToolAnnotations</span> {
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">title?</span>: <span style="color:#66d9ef">string</span>;
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">readOnlyHint?</span>: <span style="color:#66d9ef">boolean</span>; <span style="color:#75715e">// default: false
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  <span style="color:#a6e22e">destructiveHint?</span>: <span style="color:#66d9ef">boolean</span>; <span style="color:#75715e">// default: true
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  <span style="color:#a6e22e">idempotentHint?</span>: <span style="color:#66d9ef">boolean</span>; <span style="color:#75715e">// default: false
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  <span style="color:#a6e22e">openWorldHint?</span>: <span style="color:#66d9ef">boolean</span>; <span style="color:#75715e">// default: true
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>}
</span></span></code></pre></div><p>Every property is a <strong>hint</strong>. The spec is explicit about this: annotations are not guaranteed to faithfully describe tool behavior, and clients <strong>must</strong> treat them as untrusted unless they come from a trusted server.</p>
<p>These four boolean hints give clients a basic risk vocabulary:</p>
<ul>
<li><strong><code>readOnlyHint</code></strong>: Does the tool modify its environment?</li>
<li><strong><code>destructiveHint</code></strong>: If it does modify things, is the change destructive (as opposed to additive)?</li>
<li><strong><code>idempotentHint</code></strong>: Can you safely call it again with the same arguments?</li>
<li><strong><code>openWorldHint</code></strong>: Does the tool interact with an open world of external entities, or is its domain closed?</li>
</ul>
<p>The first three hints mostly answer a preflight question: should the client ask for confirmation before calling this tool? <code>openWorldHint</code> is different. It&rsquo;s about where the tool reaches and what its output might carry back, which matters after the call as much as before. It&rsquo;s also the hint most sensitive to deployment context. &ldquo;External&rdquo; might mean anything outside a corporate network or anything beyond the local machine, depending on where the server runs. The safest posture is to treat anything a tool considers <strong>external</strong> as a potential source of untrusted content.</p>
<p>The defaults are deliberately cautious: a tool with no annotations is assumed to be non-read-only, potentially destructive, non-idempotent, and open-world. The spec assumes the worst until told otherwise. Making annotations optional kept the barrier to entry low for server authors, but it also means coverage is uneven. Many servers ship without them, and clients vary in how strictly they honor the pessimistic defaults. Closing that gap is part of what the current wave of SEPs is trying to do.</p>
<h2 id="how-we-got-here">How We Got Here</h2>
<p>The <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/185">original proposal discussion</a> surfaced a question that still shapes every annotation proposal today: <strong>what value do hints provide when they can&rsquo;t be trusted?</strong> MCP co-creator Justin Spahr-Summers <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/185#discussion_r2010043988">raised it directly during review</a>:</p>
<blockquote>
<p>I think the information itself, <em>if it could be trusted</em>, would be very useful, but I wonder how a client makes use of this flag knowing that it&rsquo;s <em>not</em> trustable.</p></blockquote>
<p>Basil Hosmer <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/185#discussion_r2010702646">pushed the point further</a>, arguing that clients should ignore annotations from untrusted servers entirely:</p>
<blockquote>
<p>&ldquo;Clients should ignore annotations from untrusted servers&rdquo; applies to <strong>all</strong> annotations, even <code>title</code> — but especially the ones that describe operational properties.</p></blockquote>
<p>The spec landed on a compromise: call everything a <strong>hint</strong>, require clients to treat hints as untrusted by default, and leave it to each client to decide how much weight to give them based on what it knows about the server.</p>
<p>The interface has stayed small since then, and that&rsquo;s been intentional. <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/663"><code>title</code> went in</a> because it&rsquo;s just a display name with no trust implications. <code>taskHint</code> was proposed as an annotation but <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1854">landed as <code>Tool.execution</code> instead</a>, on the grounds that execution metadata isn&rsquo;t really a behavioral hint. Earlier takes on <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/489">stateless, streaming, and async annotations</a> and <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1075">security annotations</a> are worth knowing about too, since the same concerns show up again in the SEPs open today.</p>
<h2 id="whats-open-now">What&rsquo;s Open Now</h2>
<p>Five SEPs currently propose new annotations or closely related capabilities:</p>
<table>
  <thead>
      <tr>
          <th>SEP</th>
          <th>Proposal</th>
          <th>Status</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1913">#1913</a></td>
          <td>Trust and Sensitivity Annotations</td>
          <td>Draft</td>
      </tr>
      <tr>
          <td><a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1984">#1984</a></td>
          <td>Comprehensive Tool Annotations for Governance/UX</td>
          <td>Draft</td>
      </tr>
      <tr>
          <td><a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1561">#1561</a></td>
          <td><code>unsafeOutputHint</code></td>
          <td>Proposal</td>
      </tr>
      <tr>
          <td><a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1560">#1560</a></td>
          <td><code>secretHint</code></td>
          <td>Proposal</td>
      </tr>
      <tr>
          <td><a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1487">#1487</a></td>
          <td><code>trustedHint</code></td>
          <td>Proposal</td>
      </tr>
  </tbody>
</table>
<p>The trust and sensitivity work is co-authored by GitHub and OpenAI based on gaps they hit running MCP in production. A Tool Annotations Interest Group is forming to work through these alongside related proposals like <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1862">tool resolution and preflight checks</a>. Reviewing each one in isolation makes it easy to miss how a given annotation interacts with others, and it&rsquo;s those interactions that determine how risky a tool actually is in a given session.</p>
<h2 id="the-lethal-trifecta-why-combinations-matter">The Lethal Trifecta: Why Combinations Matter</h2>
<p>Simon Willison&rsquo;s <a href="https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/">lethal trifecta</a> names three capabilities that, when combined, create the conditions for data theft: <strong>access to private data</strong>, <strong>exposure to untrusted content</strong>, and <strong>the ability to externally communicate</strong>. The attack is simple: LLMs follow instructions in content, and they can&rsquo;t reliably tell a user&rsquo;s instructions apart from ones an attacker embedded in a web page, email, or calendar event. If the agent has all three capabilities, an attacker who controls one piece of untrusted content can trick the model into reading private data and sending it out.</p>
<p><a href="https://layerxsecurity.com/blog/claude-desktop-extensions-rce/">Researchers have demonstrated this</a> using a malicious Google Calendar event description, an MCP calendar server, and a local code execution tool. The code execution tool is the linchpin in that chain — any agent with unrestrained shell access sits one injected instruction away from exfiltration, and that&rsquo;s true whether the tool arrived via MCP or was built into the host. What MCP adds is the ease of assembling the chain: users routinely combine tools from several servers in one session, so the risk profile is a property of the session, not of any single server.</p>
<p>One commenter on Willison&rsquo;s newsletter connected this directly to tool annotations:</p>
<blockquote>
<p>If the current state is tainted, block (or require explicit human approval for) any action with exfiltration potential&hellip; This also makes MCP&rsquo;s mix-and-match story extra risky unless tools carry metadata like: <code>reads_private_data</code> / <code>sees_untrusted_content</code> / <code>can_exfiltrate</code> — and the runtime enforces &rsquo;never allow all three in a single tainted execution path.'</p></blockquote>
<p>Several of the open SEPs are trying to define that kind of metadata so a client can spot when a session has all three legs of the trifecta available.</p>
<h2 id="what-annotations-can-do">What Annotations Can Do</h2>
<p><strong>Drive confirmation prompts.</strong> A tool marked <code>readOnlyHint: true</code> from a trusted server might be auto-approved, while <code>destructiveHint: true</code> gets a confirmation step. A user asks their agent to clean up old files, the agent reaches for <code>delete_file</code>, and the client shows a dialog listing what&rsquo;s about to be deleted before anything happens. This is the most common use of annotations today.</p>
<p><strong>Enable graduated trust.</strong> An enterprise running its own internal MCP servers behind auth has a very different trust relationship than someone installing a random server off the internet. Annotations from the first can drive policy; from the second they&rsquo;re informational at best. In practice most clients still treat installation itself as the trust signal and don&rsquo;t distinguish further, so this is more of a design opportunity than a widely shipped feature.</p>
<p><strong>Improve UX.</strong> <code>title</code> is just a display name. Annotations that help users understand what tools do without running them are useful regardless of trust. This is largely unexploited today: no MCP client lets users filter tools by annotation values, and none surface annotations as context in approval prompts. GitHub&rsquo;s read-only mode is the closest production analog, enabled by about 17% of users.</p>
<p><strong>Feed policy engines.</strong> Annotations can be one input among several into a policy engine enforcing rules like &ldquo;no destructive tools without approval&rdquo; or &ldquo;open-world tools are blocked in sessions that have accessed private data.&rdquo; The hints don&rsquo;t need to be perfectly trustworthy if the engine cross-references other signals.</p>
<p>Adoption across all of these is uneven, partly because MCP users split into two camps. Developers building autonomous agents treat confirmations as friction and lean on sandboxing instead. Enterprise adopters want more annotations than currently exist. One camp barely notices annotations, the other wants a much richer vocabulary.</p>
<h2 id="what-annotations-cant-do">What Annotations Can&rsquo;t Do</h2>
<p><strong>They don&rsquo;t make the model resist prompt injection.</strong> Annotations are static metadata on a tool definition; nothing in them tells the model to ignore malicious instructions it reads from a calendar event. What an annotation like <code>seesUntrustedData</code> <em>could</em> do is let the client treat the session as tainted once that tool runs and tighten approvals from then on — a defense at the host layer, not inside the model.</p>
<p><strong>An untrusted server can lie.</strong> A server can claim <code>readOnlyHint: true</code> and delete your files anyway. This is why the spec says clients <strong>must</strong> treat annotations from untrusted servers as untrusted.</p>
<p><strong>They aren&rsquo;t enforcement.</strong> If you need a guarantee that a tool can&rsquo;t exfiltrate data, that&rsquo;s a job for network controls or sandboxing, not a boolean hint. We made the <a href="https://blog.modelcontextprotocol.io/posts/2025-11-03-using-server-instructions/">same point about server instructions</a>: don&rsquo;t rely on soft signals for things that need to be hard guarantees.</p>
<p><strong>A tool&rsquo;s risk depends on what else is in the session.</strong> <code>search_emails</code> isn&rsquo;t safe or dangerous on its own; it depends on what other tools the agent has. Annotations on one tool can&rsquo;t tell you that.</p>
<h2 id="questions-for-evaluating-new-annotations">Questions for Evaluating New Annotations</h2>
<p>As a starting point for the Interest Group, we&rsquo;re putting forward a tentative set of questions to ask of each annotation proposal. These will likely change as the group works through the open SEPs.</p>
<h3 id="1-what-client-behavior-does-it-enable">1. What client behavior does it enable?</h3>
<p>Maintainer Jonathan Hefner <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/616#issuecomment-3330296295">put this directly on an early draft</a> of what became the governance/UX annotations proposal:</p>
<blockquote>
<p>It&rsquo;s not clear to me exactly how a client would behave differently when presented with these annotations.</p></blockquote>
<p>If there&rsquo;s no concrete client action that changes based on the annotation, it probably doesn&rsquo;t belong in the protocol. Each of the existing hints maps to at least one decision a client can make:</p>
<table>
  <thead>
      <tr>
          <th>Hint</th>
          <th>Example client behavior</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>readOnlyHint: true</code></td>
          <td>Skip the confirmation dialog</td>
      </tr>
      <tr>
          <td><code>destructiveHint: true</code></td>
          <td>Show a warning before executing</td>
      </tr>
      <tr>
          <td><code>idempotentHint: true</code></td>
          <td>Safe to retry on failure</td>
      </tr>
      <tr>
          <td><code>openWorldHint: true</code></td>
          <td>Scrutinize output for untrusted content; flag a trust-boundary cross</td>
      </tr>
  </tbody>
</table>
<h3 id="2-does-it-need-trust-to-be-useful">2. Does it need trust to be useful?</h3>
<p><code>title</code> is useful even from an untrusted server; worst case you show a bad display name. <code>readOnlyHint</code> from an untrusted server isn&rsquo;t actionable, because the decision it informs — whether to skip a confirmation — only makes sense if you believe the hint. Proposals should say where they fall on that spectrum, since it determines which clients can actually use them.</p>
<h3 id="3-could-_meta-handle-it-instead">3. Could <code>_meta</code> handle it instead?</h3>
<p>Tools already have <a href="https://modelcontextprotocol.io/specification/2025-11-25/basic#_meta"><code>_meta</code></a>, which accepts namespaced keys like <code>com.example/my-field</code> for exactly this kind of metadata. If an annotation only matters to one deployment style where the same organization runs both the server and the client, <code>_meta</code> is a reasonable home for it. It&rsquo;s also a good way to prove out an idea before writing a SEP: ship a namespaced field, see how it holds up in production, and come back with a proposal backed by actual usage instead of a design doc. What <code>_meta</code> can&rsquo;t do is drive behavior in off-the-shelf clients — those won&rsquo;t read a key they&rsquo;ve never heard of, so anything aimed at ecosystem-wide UX still needs a real annotation.</p>
<h3 id="4-does-it-help-reason-about-combinations">4. Does it help reason about combinations?</h3>
<p>Annotations that help a client understand what happens when tools are used together are worth more than ones that only describe a tool in isolation. <code>openWorldHint</code> already hints at this: a client could use it to notice that a session mixes closed-world data access tools with open-world communication tools.</p>
<h3 id="5-is-it-a-hint-or-a-contract">5. Is it a hint or a contract?</h3>
<p>Hints inform decisions; contracts enforce them. If a proposal&rsquo;s value depends on the annotation being true, it&rsquo;s asking for a contract, and the right place for that is the authorization layer, the transport, or the runtime rather than <code>ToolAnnotations</code>. Hints work best when they&rsquo;re still useful even if some servers get them wrong.</p>
<h2 id="where-this-is-heading">Where This Is Heading</h2>
<p>The Tool Annotations Interest Group includes participants from Microsoft, OpenAI, AWS, Cloudflare, and Anthropic, among others. These are companies that build both MCP hosts and MCP servers at scale, so they sit on both sides of the annotation contract: they need annotations expressive enough to surface risk to their users, and they need to author annotations that other clients will actually honor. Among the questions on the group&rsquo;s agenda are whether annotations belong on tool responses as well as tool definitions, and whether any annotations should be evaluated at runtime rather than declared statically.</p>
<p>In the meantime, the existing annotations are worth using. If you&rsquo;re writing a server, set <code>readOnlyHint: true</code> on read-only tools, <code>destructiveHint: false</code> on additive operations, and <code>openWorldHint: false</code> on closed-domain tools. If you&rsquo;re writing a client, treat annotations from untrusted servers as informational and lean on them for UX, but keep your actual safety guarantees in deterministic controls. And if you&rsquo;re thinking of proposing a new annotation, the questions above are a good place to start shaping it.</p>
<h2 id="get-involved">Get Involved</h2>
<p>The Tool Annotations Interest Group is forming now. If you&rsquo;re interested in contributing:</p>
<ul>
<li>Review the open SEPs linked above and leave feedback</li>
<li>Join the conversation in <code>#tool-annotations-ig</code> on the <a href="https://modelcontextprotocol.io/community/communication#discord">MCP Contributors Discord</a></li>
</ul>
<h2 id="acknowledgements">Acknowledgements</h2>
<p>This post draws on discussions with the MCP community, particularly the contributors involved in the Tool Annotations Interest Group proposal, including <strong>Sam Morrow</strong> (GitHub), <strong>Robert Reichel</strong> (OpenAI), <strong>Den Delimarsky</strong> (Anthropic), <strong>Nick Cooper</strong> (OpenAI), <strong>Connor Peet</strong> (Microsoft), and <strong>Luca Chang</strong> (AWS).</p>
]]></content:encoded></item><item><title>Understanding MCP Extensions</title><link>https://blog.modelcontextprotocol.io/posts/2026-03-11-understanding-mcp-extensions/</link><pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2026-03-11-understanding-mcp-extensions/</guid><description>A practical guide to MCP extensions: how they layer new capabilities on top of the core protocol, and patterns the community is already using.</description><content:encoded><![CDATA[<p>You&rsquo;ve built an MCP server that works quite well, but now you&rsquo;re wondering: <em>How do I add richer UI elements? Custom auth flows? What about domain-specific conventions, like those for finance or healthcare?</em></p>
<p>This is where <em>extensions</em> come in. They let developers layer new capabilities on top of the baseline MCP implementation without touching the core protocol. This allows us to keep things stable while also opening up room to experiment, learn, and build with the community&rsquo;s needs in mind.</p>
<p>In this post, we&rsquo;ll walk through how extensions fit into the MCP ecosystem and share some patterns the community is already exploring. Think of this less as a formal specification change and more as a short practical guide to extending MCP.</p>
<h2 id="how-mcp-is-structured">How MCP is structured</h2>
<p>It helps to think of MCP in three layers:</p>
<ul>
<li><strong>MCP core specification:</strong> <a href="https://modelcontextprotocol.io/specification/latest">The protocol itself</a>. This is how clients and servers talk to each other. It also represents the absolute minimum bar for client and server interoperability.</li>
<li><strong>MCP projects:</strong> Supporting infrastructure like the <a href="https://registry.modelcontextprotocol.io/">Registry</a>, that helps developers discover MCP servers, or <a href="https://modelcontextprotocol.io/docs/tools/inspector">Inspector</a>, that makes MCP server testing and debugging easier.</li>
<li><strong>MCP extensions:</strong> Optional patterns that developers can adopt for specialized use cases, built on top of the MCP core specification.</li>
</ul>
<p>Extensions let the ecosystem grow and give us an avenue to test changes and emerging spec components without destabilizing the core protocol that lots of production clients and servers already depend on.</p>
<p>The <a href="https://modelcontextprotocol.io/extensions/overview">Extensions documentation</a> covers the full details — including extension identifiers, capability negotiation during the initialization handshake, and the SEP (Specification Enhancement Proposal) process for proposing new ones.</p>
<p>Here&rsquo;s where it gets interesting. Extensions are <strong>patterns built on existing MCP mechanisms</strong>, and they&rsquo;re strictly additive: a client or server that doesn&rsquo;t recognize an extension simply skips it during negotiation, and the baseline protocol keeps working. Nothing breaks when one side hasn&rsquo;t opted in.</p>
<p>In practice, a few of these patterns have already emerged — some now formalized as official extensions, others still exploratory:</p>
<ul>
<li><strong>UI extensions:</strong> Imagine a server that returns not just data, but an interactive interface for working with it — a chart you can filter, a form you can submit, a dashboard you can drill into. That&rsquo;s what <a href="https://modelcontextprotocol.io/extensions/apps/overview">MCP Apps</a> enables. It&rsquo;s the first official MCP extension and <a href="https://blog.modelcontextprotocol.io/posts/2026-01-26-mcp-apps/">went GA in January 2026</a>, with support already live in ChatGPT, Claude, VS Code, Goose, and <a href="https://modelcontextprotocol.io/extensions/client-matrix">more</a>.</li>
<li><strong>Authorization extensions:</strong> Need machine-to-machine auth without a user in the loop, or centralized enterprise IdP control? The <a href="https://modelcontextprotocol.io/extensions/auth/overview">auth extensions</a> layer these on top of MCP&rsquo;s core OAuth framework — OAuth Client Credentials and Enterprise-Managed Authorization are both live today.</li>
<li><strong>Domain-specific extensions:</strong> Community groups are already exploring conventions for verticals like financial services, where developers might want standardized ways to handle compliance metadata.</li>
</ul>
<p>Another important side-effect to this approach is that MCP client and server developers get richer functionality without having to wait for protocol changes, which might need more extensive validation before being merged into the core.</p>
<p>Extensions are also <em>the way</em> to validate future protocol changes - if a particular implementation gains traction, that signals that there is a growing community need in protocol functionality that could become a part of the specification.</p>
<h3 id="how-extensions-are-governed">How extensions are governed</h3>
<p>Extensions are community-driven, and <strong>all of them are optional</strong>. Developers adopt what makes sense for their use case.</p>
<p>At the same time, we encourage implementing official and recommended extensions when possible. It helps the whole ecosystem work better together. Official extensions typically start as conversations between MCP contributors, both on the core team and in the broader community, before graduating to the <a href="https://github.com/modelcontextprotocol">Model Context Protocol GitHub organization</a> where they&rsquo;re maintained collaboratively, following the <a href="https://modelcontextprotocol.io/seps/2133-extensions">Extensions Track SEP process</a>.</p>
<p>Beyond officially-supported extensions, community members and working groups are also free to define their own extensions for any custom needs.</p>
<h3 id="a-note-on-proprietary-integrations">A note on proprietary integrations</h3>
<p>Some MCP clients ship their own proprietary features, like custom UI systems, that happen to use MCP under the hood. These are <strong>not necessarily</strong> considered MCP extensions. They integrate with MCP servers but they don&rsquo;t define how MCP itself behaves at the protocol level. We will work with client and server implementers to help them adopt extensions as the de-facto way to implement custom behaviors.</p>
<h2 id="get-started">Get started</h2>
<p>If you&rsquo;re building on MCP and want to explore extensions:</p>
<ul>
<li><strong>Read the docs:</strong> The <a href="https://modelcontextprotocol.io/extensions/overview">Extensions overview</a> covers identifiers, negotiation, governance, and the full list of official extensions.</li>
<li><strong>Build an MCP App:</strong> Follow the <a href="https://modelcontextprotocol.io/extensions/apps/build">MCP Apps quickstart</a> to ship an interactive UI that works across supporting clients today.</li>
<li><strong>Check client support:</strong> See the <a href="https://modelcontextprotocol.io/extensions/client-matrix">Extension Support Matrix</a> for which clients already implement which extensions.</li>
<li><strong>Propose your own:</strong> If you have an idea for a new extension, the <a href="https://modelcontextprotocol.io/community/sep-guidelines">SEP guidelines</a> walk you through opening an Extensions Track SEP.</li>
</ul>
<h2 id="thank-you">Thank you</h2>
<p>This post wouldn&rsquo;t exist without the <a href="https://modelcontextprotocol.io/community/communication">MCP community</a>. The ideas here grew out of countless conversations - working group calls, GitHub threads, extension proposals, and plenty of back-and-forth in <a href="https://modelcontextprotocol.io/community/communication#discord">Discord</a>.</p>
<p>To everyone who&rsquo;s contributed ideas, challenged our initial assumptions, and helped shape where this is all going: thank you.</p>
<p>We&rsquo;ll keep sharing updates here on the blog and in the <a href="https://github.com/modelcontextprotocol">public repos</a>. See you there.</p>
]]></content:encoded></item><item><title>The 2026 MCP Roadmap</title><link>https://blog.modelcontextprotocol.io/posts/2026-mcp-roadmap/</link><pubDate>Mon, 09 Mar 2026 09:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2026-mcp-roadmap/</guid><description>The updated Model Context Protocol roadmap for 2026: transport scalability, agent communication, governance maturation, and enterprise readiness, plus guidance on SEP prioritization and how to get involved.</description><content:encoded><![CDATA[<p>MCP&rsquo;s <a href="https://blog.modelcontextprotocol.io/posts/2025-11-25-first-mcp-anniversary/">current spec release</a> came out in November 2025. We haven&rsquo;t cut a new version since, but the project hasn&rsquo;t stood still. Over the past year MCP has moved well past its origins as a way to wire up local tools. It now runs in production at companies large and small, powers agent workflows, and is shaped by a growing community through Working Groups, <a href="https://modelcontextprotocol.io/community/sep-guidelines">Spec Enhancement Proposals</a> (SEPs), and a formal governance process. None of that is news, but it&rsquo;s the foundation we&rsquo;re building on.</p>
<p>We spent the last few months working through a long list of candidate priorities. They were informed by production experience, community feedback, and the pain points that keep surfacing. We narrowed them down to the areas that matter most for 2026. The result is an updated <a href="https://modelcontextprotocol.io/development/roadmap">roadmap document</a> that lays out where we&rsquo;re headed.</p>
<p>If you read the <a href="/posts/2026-01-22-core-maintainer-update/">January update</a>, you&rsquo;ll recognize the broad strokes. Production deployments have different needs than the early experiments that got us here, and the roadmap now reflects that. Here&rsquo;s what changed and what it means for you.</p>
<h2 id="from-releases-to-working-groups">From Releases to Working Groups</h2>
<p>Previous versions of the roadmap were organized around release milestones: what&rsquo;s shipping in the next spec version and what comes after. That framing made sense when the project was smaller and most of the work flowed through a handful of people.</p>
<p><a href="https://modelcontextprotocol.io/community/working-interest-groups">Working and Interest Groups</a> are now the primary vehicle for protocol development, and the roadmap needed to reflect that. The new document is organized around <strong>priority areas</strong>, rather than around dates. Working Groups drive the timeline for their deliverables. The roadmap tells you which problems we consider most important and points you to the groups working on them.</p>
<p>This approach also lets us be more honest about the uncertainty inherent in a fast-growing project like MCP. A release-oriented roadmap implies a level of predictability that open-standards work rarely has.</p>
<h2 id="the-priority-areas">The Priority Areas</h2>
<p>Core maintainers ranked candidate areas, and the result was a clear top four. These are the areas where SEPs will receive expedited review and where most of our maintainer capacity is concentrated.</p>
<h3 id="transport-evolution-and-scalability">Transport Evolution and Scalability</h3>
<p>Streamable HTTP is the transport that lets MCP servers run as remote services rather than local processes. It unlocked a wave of production deployments. But running it at scale has surfaced a consistent set of gaps: stateful sessions fight with load balancers, horizontal scaling requires workarounds, and there&rsquo;s no standard way for a registry or crawler to learn what a server does without connecting to it.</p>
<p>The work here falls into two parts. First, evolving the transport and session model so that servers can scale horizontally without having to hold state, as well as clear, explicit mechanisms to handle sessions. Second, a standard metadata format, that can be served via <code>.well-known</code>, so that server capabilities are discoverable without a live connection.</p>
<p>One thing we want to be explicit about: we are <strong>not</strong> adding more official transports this cycle but evolve the existing transport. Keeping the set small is a deliberate decision grounded in the <a href="https://modelcontextprotocol.io/community/design-principles">MCP design principles</a>.</p>
<h3 id="agent-communication">Agent Communication</h3>
<p>The Tasks primitive (<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1686">SEP-1686</a>) shipped as an experimental feature and works well for what it was designed to do. Early production use has surfaced a concrete list of lifecycle gaps to close: retry semantics when a task fails transiently, and expiry policies for how long results are retained after completion.</p>
<p>This is the kind of iteration you can only do once something is deployed and tested in the real world. We plan to take the same approach with other parts of MCP: ship an experimental version, gather production feedback, and iterate.</p>
<h3 id="governance-maturation">Governance Maturation</h3>
<p>Right now, every SEP requires full <a href="https://modelcontextprotocol.io/community/sep-guidelines">Core Maintainer</a> review, regardless of domain. That&rsquo;s a bottleneck. It slows down Working Groups that already have the expertise to evaluate proposals in their own area.</p>
<p>The goal is to remove that bottleneck without sacrificing quality. Concretely, that means a documented <strong>contributor ladder</strong> so there&rsquo;s a clear path from community participant to maintainer, and a delegation model that lets trusted Working Groups accept SEPs in their domain without waiting on a full core review. Core Maintainers keep strategic oversight. Working Groups get room to move.</p>
<h3 id="enterprise-readiness">Enterprise Readiness</h3>
<p>Enterprises are deploying MCP and running into a predictable set of problems: audit trails, SSO-integrated auth, gateway behavior, and configuration portability.</p>
<p>This is also the least defined of the four priorities, and that&rsquo;s intentional. We want the people experiencing these challenges to help us define the work.</p>
<p>A dedicated Enterprise WG does not yet exist. If you work in enterprise infrastructure and want to lead or join one, the <a href="https://modelcontextprotocol.io/community/working-interest-groups">Working Groups page</a> explains how to get started. We also recommend joining the <a href="https://modelcontextprotocol.io/community/communication#discord">contributor Discord</a> to make sure you&rsquo;re not duplicating work or going solo on new proposals.</p>
<p>We expect most of the enterprise readiness work to land as extensions rather than core spec changes. Enterprise needs are real, but they shouldn&rsquo;t make the base protocol heavier for everyone else.</p>
<h2 id="sep-prioritization-what-it-means-for-contributors">SEP Prioritization: What It Means for Contributors</h2>
<p>One of the most practical additions to the roadmap is explicit guidance on how SEP review capacity gets allocated.</p>
<p>The short version: <strong>SEPs aligned with the priority areas above will move the fastest.</strong> SEPs outside those areas aren&rsquo;t automatically rejected, but they face longer review timelines and a higher bar for justification. Maintainer bandwidth is finite, and we&rsquo;d rather be transparent about where it&rsquo;s going.</p>
<p>If you&rsquo;re considering writing a SEP, start with the <a href="https://modelcontextprotocol.io/community/sep-guidelines">SEP Guidelines</a>. Once you&rsquo;re familiar with those:</p>
<ol>
<li><strong>Check whether your proposed change maps to one of the priority areas</strong>. If it does not, be prepared for delays in reviews.</li>
<li><strong>Bring it to the relevant Working Group</strong>. SEPs that arrive with WG backing and a clear connection to the roadmap are the ones that move.</li>
</ol>
<h2 id="on-the-horizon">On the Horizon</h2>
<p>Not everything we care about made the top four, and we didn&rsquo;t want those areas to disappear from view. We&rsquo;re focused on a limited set of items, but we still want protocol exploration to continue at a good pace. The roadmap now includes an <strong>On the Horizon</strong> section for work with real community interest, such as triggers and event-driven updates, streamed and reference-based result types, deeper security and authorization work, and maturing the extensions ecosystem.</p>
<p>These aren&rsquo;t deprioritized in the sense of &ldquo;We don&rsquo;t want them.&rdquo; They&rsquo;re areas where we&rsquo;ll happily support a community-formed WG and review SEPs as time permits, but where Core Maintainers aren&rsquo;t actively standing things up this cycle.</p>
<p>Some of these already have active proposals in review, such as <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1932">SEP-1932 (DPoP)</a> and <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1933">SEP-1933 (Workload Identity Federation)</a>. Others, like triggers and event-driven updates, would benefit from a new Working Group.</p>
<h2 id="get-involved">Get Involved</h2>
<p>Every deliverable on the roadmap runs through a Working Group, and every Working Group is open to contributors. Here are a few ways to get involved:</p>
<ul>
<li><strong>Join a Working Group</strong>: Working Groups are the small teams doing the actual protocol design. They meet regularly and welcome new participants. The <a href="https://modelcontextprotocol.io/community/working-interest-groups">Working Groups &amp; Interest Groups</a> page lists what&rsquo;s active and how to connect.</li>
<li><strong>Propose a SEP</strong>: SEPs are how changes to the protocol get proposed and reviewed. The <a href="https://modelcontextprotocol.io/community/sep-guidelines">SEP guidelines</a> walk through the process.</li>
<li><strong>Start an extension</strong>: Extensions let us experiment with new capabilities outside the core spec. You can learn more in our <a href="https://modelcontextprotocol.io/extensions/overview">official Extensions documentation</a>.</li>
</ul>
<p>If you&rsquo;re not sure where to start, the easiest first step is to join a Working Group meeting and introduce yourself.</p>
<p>We&rsquo;re excited to build the protocol together!</p>
]]></content:encoded></item><item><title>MCP Apps - Bringing UI Capabilities To MCP Clients</title><link>https://blog.modelcontextprotocol.io/posts/2026-01-26-mcp-apps/</link><pubDate>Mon, 26 Jan 2026 00:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2026-01-26-mcp-apps/</guid><description>MCP Apps is now live as the first official MCP extension — tools can return interactive UI components that render directly in the conversation.</description><content:encoded><![CDATA[<p>Today, we&rsquo;re announcing that <strong>MCP Apps are now live as an official MCP extension</strong>.
Tools can now return interactive UI components that render directly in the
conversation: dashboards, forms, visualizations, multi-step workflows, and more.
This is the first official MCP extension, and it&rsquo;s ready for production.</p>
<div class="youtube-container">
  <iframe
    src="https://www.youtube.com/embed/bluAmTHoEow"
    title="YouTube video"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
    allowfullscreen>
  </iframe>
</div>

<style>
.youtube-container {
  position: relative;
  width: 100%;
  padding-bottom: 56.25%;  
  margin: 24px 0;
}

.youtube-container iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  border-radius: 8px;
}
</style>

<p>We proposed MCP Apps
<a href="https://blog.modelcontextprotocol.io/posts/2025-11-21-mcp-apps/">last November</a>, building on
the amazing work of <a href="https://mcpui.dev">MCP-UI</a> and the
<a href="https://developers.openai.com/apps-sdk/">OpenAI Apps SDK</a>. We were excited to partner with
both OpenAI and MCP-UI to create a shared open standard for providing affordances for
developers to include UI components in their MCP clients.</p>
<p>Since then, the spec has been refined, the SDK has matured, and clients like ChatGPT, Claude,
Goose and Visual Studio Code have shipped support for this capability, with more clients
coming soon.</p>
<a href="https://apps.extensions.modelcontextprotocol.io/api/documents/Quickstart.html" target="_blank" rel="noopener noreferrer" class="mcp-button">
  Get Started with MCP Apps <span class="mcp-button-arrow">→</span>
</a>

<style>
.mcp-button {
  display: inline-block;
  padding: 8px 16px;
  font-size: 14px;
  font-weight: 500;
  text-decoration: none;
  border-radius: 4px;
  transition: all 0.2s ease;
  margin: 12px 0;
  background-color: #1a1a1a;
  color: #ffffff;
  border: 1px solid #333;
}

.mcp-button:hover {
  background-color: #333;
  color: #ffffff;
}

.mcp-button-arrow {
  margin-left: 6px;
  transition: transform 0.2s ease;
  display: inline-block;
}

.mcp-button:hover .mcp-button-arrow {
  transform: translateX(3px);
}

.dark .mcp-button {
  background-color: #ffffff;
  color: #1a1a1a;
  border: 1px solid #e5e5e5;
}

.dark .mcp-button:hover {
  background-color: #f0f0f0;
  color: #1a1a1a;
}
</style>

<h2 id="what-are-mcp-apps"><strong>What Are MCP Apps?</strong></h2>
<p>MCP Apps let tools return rich, interactive interfaces instead of plain text. When a tool
declares a UI resource, the host renders it in a sandboxed iframe, and users interact with
it directly in the conversation.</p>
<p><img alt="Color picker MCP App working in Claude.ai" loading="lazy" src="/posts/images/mcp-apps/claude-colorpicker-apps.gif"></p>
<p>Here are a few scenarios where MCP Apps shine:</p>
<ul>
<li><strong>Data exploration</strong>: A sales analytics tool returns an interactive dashboard. Users filter
by region, drill down into specific accounts, and export reports without leaving the
conversation.</li>
<li><strong>Configuration wizards</strong>: A deployment tool presents a form with dependent fields.
Selecting &ldquo;production&rdquo; reveals additional security options; selecting &ldquo;staging&rdquo; shows
different defaults.</li>
<li><strong>Document review</strong>: A contract analysis tool displays the PDF inline with highlighted
clauses. Users click to approve or flag sections, and the model sees their decisions in
real time.</li>
<li><strong>Real-time monitoring</strong>: A server health tool shows live metrics that update as systems
change. No need to re-run the tool to see current status.</li>
</ul>
<p>These interactions would be less smooth as text exchanges, whereas MCP Apps make them
natural - it&rsquo;s like using any other UI-based web app.</p>
<h2 id="how-it-works"><strong>How It Works</strong></h2>
<p>The architecture of MCP Apps relies on two key MCP primitives:</p>
<ol>
<li><strong>Tools with UI metadata</strong>: Tools include a <code>_meta.ui.resourceUri</code> field pointing to a UI
resource</li>
<li><strong>UI Resources</strong>: Server-side resources served via the <code>ui://</code> scheme containing bundled
HTML/JavaScript</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#75715e">// Tool with UI metadata
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>{
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">name</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;visualize_data&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">description</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;Visualize data as an interactive chart&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">inputSchema</span><span style="color:#f92672">:</span> { <span style="color:#75715e">/* ... */</span> },
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">_meta</span><span style="color:#f92672">:</span> {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">ui</span><span style="color:#f92672">:</span> {
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">resourceUri</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;ui://charts/interactive&#34;</span>
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>The host fetches the resource, renders it in a sandboxed iframe, and enables bidirectional
communication via JSON-RPC over <code>postMessage</code>.</p>
<h2 id="why-mcp-apps"><strong>Why MCP Apps?</strong></h2>
<p>MCP is great for connecting models to data and giving them the ability to take actions. But
there&rsquo;s still a context gap between what tools can do and what users can see.</p>
<p>Consider a tool that queries your database. It returns rows of data, maybe hundreds of them.
The model can summarize this data, but users often want to explore: sort by a column, filter
to a date range, or click into a specific record. With text responses, every interaction
requires another prompt. &ldquo;Show me just the ones from last week.&rdquo; &ldquo;Sort by revenue.&rdquo; &ldquo;What&rsquo;s
the detail on row 47?&rdquo; It works, but it&rsquo;s slow.</p>
<p>MCP Apps closes this gap. The model stays in the loop, seeing what users do and responding
accordingly, but the UI handles what text can&rsquo;t: live updates, native media viewers,
persistent states, and direct manipulation. Combined, they provide the model and user with
all the context they need in one familiar interface.</p>
<h2 id="the-app-api"><strong>The App API</strong></h2>
<p>To build new MCP Apps, developers can use the
<a href="https://www.npmjs.com/package/@modelcontextprotocol/ext-apps"><code>@modelcontextprotocol/ext-apps</code></a>
package, which provides an <code>App</code> class for UI-to-host communication:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">import</span> { <span style="color:#a6e22e">App</span> } <span style="color:#a6e22e">from</span> <span style="color:#e6db74">&#34;@modelcontextprotocol/ext-apps&#34;</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">app</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">App</span>();
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">await</span> <span style="color:#a6e22e">app</span>.<span style="color:#a6e22e">connect</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Receive tool results from the host
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#a6e22e">app</span>.<span style="color:#a6e22e">ontoolresult</span> <span style="color:#f92672">=</span> (<span style="color:#a6e22e">result</span>) =&gt; {
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">renderChart</span>(<span style="color:#a6e22e">result</span>.<span style="color:#a6e22e">data</span>);
</span></span><span style="display:flex;"><span>};
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Call server tools from the UI
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">response</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">app</span>.<span style="color:#a6e22e">callServerTool</span>({
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">name</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;fetch_details&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">arguments</span><span style="color:#f92672">:</span> { <span style="color:#a6e22e">id</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;123&#34;</span> },
</span></span><span style="display:flex;"><span>});
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Update model context
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">await</span> <span style="color:#a6e22e">app</span>.<span style="color:#a6e22e">updateModelContext</span>({
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">content</span><span style="color:#f92672">:</span> [{ <span style="color:#a6e22e">type</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;text&#34;</span>, <span style="color:#a6e22e">text</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;User selected option B&#34;</span> }],
</span></span><span style="display:flex;"><span>});
</span></span></code></pre></div><p>Because apps run inside the client, they can do things a plain iframe can&rsquo;t. They can log
events for debugging, open links in the user&rsquo;s browser, send follow-up messages to drive the
conversation forward, or quietly update the model&rsquo;s context for later. All of this happens
over standard <code>postMessage</code>, so you&rsquo;re not locked into any framework.</p>
<h2 id="security-model"><strong>Security Model</strong></h2>
<p>Running UI from MCP servers means running code you didn&rsquo;t write within your MCP host. MCP
Apps handles this through multiple layers:</p>
<ul>
<li><strong>Iframe sandboxing</strong>: All UI content runs in sandboxed iframes with restricted permissions</li>
<li><strong>Pre-declared templates</strong>: Hosts can review HTML content before rendering</li>
<li><strong>Auditable messages</strong>: All UI-to-host communication goes through loggable JSON-RPC</li>
<li><strong>User consent</strong>: Hosts can require explicit approval for UI-initiated tool calls</li>
</ul>
<p>If something looks suspicious, hosts can block it before it ever renders. Of course, users
should continue to proactively and thoroughly vet MCP servers before connecting them.</p>
<h2 id="the-future-of-agentic-ui-frameworks"><strong>The Future of Agentic UI Frameworks</strong></h2>
<p><a href="https://mcpui.dev/">MCP-UI</a> and <a href="https://developers.openai.com/apps-sdk/">OpenAI Apps SDK</a>
pioneered the patterns that MCP Apps now standardizes. The projects proved that UI resources
can and do fit naturally within the MCP ecosystem, with enterprises of all sizes adopting
both the OpenAI and MCP-UI SDKs for production applications.</p>
<p>MCP-UI isn&rsquo;t going anywhere. The SDKs support MCP Apps patterns, with the Client SDK as the
recommended framework for Hosts looking to adopt MCP Apps. The community continues to
contribute extensively to the specification. If you&rsquo;re already using MCP-UI, keep using it.
Migration to the official extension is straightforward when you&rsquo;re ready.</p>
<h2 id="client-support"><strong>Client Support</strong></h2>
<p>MCP Apps are supported in:</p>
<ul>
<li><strong>Claude</strong> - available today both on web and desktop experiences</li>
<li><strong>Goose</strong> - <a href="https://goose-docs.ai/docs/tutorials/building-mcp-apps/">available today</a></li>
<li><strong>Visual Studio Code</strong> - available in
<a href="https://code.visualstudio.com/insiders">Visual Studio Code Insiders</a></li>
<li><strong>ChatGPT</strong> - starting this week</li>
</ul>
<p>For the first time, an MCP tool developer can ship an interactive experience that works
across a broad range of widely-adopted clients without writing a single line of
client-specific code.</p>
<blockquote>
<p>&ldquo;<em>I am excited about the possibilities that MCP Apps opens up. Having seen a glimpse of what is possible, I cannot wait to see what the community will build.</em>&rdquo;</p>
<ul>
<li><strong>David Soria Parra</strong>, Co-Creator of MCP and Member of Technical Staff, <a href="https://www.anthropic.com/">Anthropic</a></li>
</ul></blockquote>
<blockquote>
<p>“<em>MCP Apps builds upon the foundations of MCP-UI and the ChatGPT Apps SDK to give people a rich visually interactive experience. We&rsquo;re proud to support this new open standard and look forward to seeing what developers build with it as we grow the selection of apps available in ChatGPT.</em>”</p>
<ul>
<li><strong>Nick Cooper</strong>, Member of Technical Staff, <a href="https://openai.com/">OpenAI</a></li>
</ul></blockquote>
<blockquote>
<p>“<em>MCP Apps extends the Model Context Protocol in a way that puts humans at the center. The industry has embedded assistants into individual apps, creating fragmented, siloed experiences. MCP inverts this by making apps pluggable components within agents. MCP Apps extends this further by bringing user interfaces into the agent experience itself.</em></p>
<p><em>goose, the reference implementation for MCP, supports MCP Apps. Developers can now build interactive experiences that render directly in conversation: games, calendars, maps, checkout flows. At Block, we believe the future centers on users navigating through one trusted agent rather than context-switching between fragmented experiences, and MCP Apps supports that vision. We&rsquo;re excited to support this standard and see where developers take it.</em>”</p>
<ul>
<li><strong>Andrew Harvard</strong>, Design Engineer, Agentic UX, <a href="https://block.xyz/">Block</a></li>
</ul></blockquote>
<blockquote>
<p><em>“As MCP evolves from ‘tools’ into a real platform for agentic work, VS Code has been treating the protocol like a contract: implement the full spec, track the latest transports and capabilities, and make sure server authors can rely on what they build actually behaving the same way for real developers. With MCP Apps, that contract finally includes the missing human step: when the workflow needs a decision, a selection, or exploration, the client can give you the right interaction without turning the conversation into a choose-your-own-adventure prompt.”</em></p>
<ul>
<li><strong>Harald Kirschner</strong>, Principal Product Manager, VS Code, <a href="https://www.microsoft.com/en-us">Microsoft</a></li>
</ul></blockquote>
<blockquote>
<p>“<em>The MCP Apps extension addresses a gap we have experienced first-hand: text and structured data only gets you so far when developers want rich, interactive tooling. The ability to render dynamic UIs directly from MCP servers, with security built in from day one, is exactly what we need to build better agentic experiences. JetBrains is excited to explore bringing this extension to our IDEs and continue working with the MCP Community.</em>”</p>
<ul>
<li><strong>Denis Shiryaev</strong>, Head of AI DevTools Ecosystem, <a href="https://www.jetbrains.com/">JetBrains</a></li>
</ul></blockquote>
<blockquote>
<p><em>“MCP Apps address a real gap between what agentic tools can provide and how users naturally want to interact with them. The ability to render dynamic interfaces directly in conversation makes it easier to leverage MCP server capabilities in practical ways. We&rsquo;re excited to see this extension deliver richer interactions for users while enabling MCP server developers to craft experiences tailored to what they&rsquo;re building. We’re excited to see how we can bring these capabilities to Kiro and the use cases it’ll unlock for our users.“</em></p>
<ul>
<li><strong>Clare Liguori</strong>, Senior Principal Engineer, <a href="https://aws.amazon.com/">AWS</a></li>
</ul></blockquote>
<blockquote>
<p>&ldquo;The Antigravity team is excited to see the continued expansion of the MCP ecosystem, and will explore how MCP apps could enable new, magical experiences within Antigravity.&rdquo;</p>
<ul>
<li><strong>Anshul Ramachandran</strong>, Product Lead, Antigravity, <a href="https://deepmind.google/">Google DeepMind</a></li>
</ul></blockquote>
<p>This is just the starting lineup, and adding support to a new client is as easy as following
the <a href="https://modelcontextprotocol.io/docs/extensions/apps">implementation guide</a>.</p>
<h2 id="get-started"><strong>Get Started</strong></h2>
<p>The <a href="https://github.com/modelcontextprotocol/ext-apps">ext-apps repository</a> includes the SDK
and working examples:
<a href="https://github.com/modelcontextprotocol/ext-apps/tree/main/examples/threejs-server"><code>threejs-server</code></a>
for 3D visualization,
<a href="https://github.com/modelcontextprotocol/ext-apps/tree/main/examples/map-server"><code>map-server</code></a>
for interactive maps,
<a href="https://github.com/modelcontextprotocol/ext-apps/tree/main/examples/pdf-server"><code>pdf-server</code></a>
for document viewing,
<a href="https://github.com/modelcontextprotocol/ext-apps/tree/main/examples/system-monitor-server"><code>system-monitor-server</code></a>
for real-time dashboards,
<a href="https://github.com/modelcontextprotocol/ext-apps/tree/main/examples/sheet-music-server"><code>sheet-music-server</code></a>
for music notation, and
<a href="https://github.com/modelcontextprotocol/ext-apps/tree/main/examples">many more</a>.</p>
<p>Pick one close to what you&rsquo;re building and start from there!</p>
<p><img alt="Color picker MCP App working in Visual Studio Code" loading="lazy" src="/posts/images/mcp-apps/vscode-colorpicker-apps.gif"></p>
<h3 id="resources"><strong>Resources</strong></h3>
<ul>
<li><strong>Documentation</strong>: <a href="https://modelcontextprotocol.io/docs/extensions/apps">MCP Apps Guide</a></li>
<li><strong>Quickstart</strong>: <a href="https://apps.extensions.modelcontextprotocol.io/api/documents/Quickstart.html">Getting Started with MCP Apps</a></li>
<li><strong>SDK</strong>: <a href="https://www.npmjs.com/package/@modelcontextprotocol/ext-apps"><code>@modelcontextprotocol/ext-apps</code></a></li>
<li><strong>Examples</strong>: <a href="https://github.com/modelcontextprotocol/ext-apps">ext-apps repository</a></li>
</ul>
<h3 id="claudeai-feedback"><a href="http://Claude.ai"><strong>Claude.ai</strong></a> <strong>Feedback</strong></h3>
<p>If you&rsquo;re building MCP Apps for <a href="http://Claude.ai">Claude.ai</a> and encounter issues with our
implementation, please report them at
<a href="https://github.com/anthropics/claude-ai-mcp">github.com/anthropics/claude-ai-mcp</a>. This
helps us improve the experience for everyone.</p>
<h3 id="chatgpt-apps-sdk-feedback"><strong>ChatGPT Apps SDK Feedback</strong></h3>
<p>If you&rsquo;re building apps with the ChatGPT Apps SDK and run into issues or have questions,
please post in the
<a href="https://community.openai.com/c/chatgpt-apps-sdk/42">ChatGPT Apps category</a> on the OpenAI
Community forum. This is where app developers, community moderators, and the OpenAI team
actively engage to discuss builds, troubleshoot problems, and improve the overall developer
experience.</p>
<h2 id="acknowledgements"><strong>Acknowledgements</strong></h2>
<p>MCP Apps is the result of collaboration across multiple teams and communities.</p>
<p><strong>Ido Salomon</strong> and <strong>Liad Yosef</strong> created MCP-UI and moderated the <code>#ui-wg</code> channel,
incubating many of the patterns that MCP Apps now standardizes. Their work proved that
interactive UIs belong in MCP.</p>
<p><strong>Nick Cooper</strong> at OpenAI helped deliver the OpenAI Apps SDK, enabling everyone to go beyond
text in their interactions with Large Language Models.</p>
<p><strong>Sean Strong</strong>, <strong>Olivier Chafik</strong>, <strong>Anton Pidkuiko</strong>, and <strong>Jerome Swannack</strong> from
Anthropic helped steer the initiative from proposal to production.</p>
<p>The <strong>UI Community Working Group</strong> provided feedback through countless discussions, reviewed
drafts, tested early implementations, and pushed for the right trade-offs between flexibility
and security.</p>
<p>Thank you to everyone who contributed. Now go build something.</p>
]]></content:encoded></item><item><title>January MCP Core Maintainer Update</title><link>https://blog.modelcontextprotocol.io/posts/2026-01-22-core-maintainer-update/</link><pubDate>Fri, 23 Jan 2026 00:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2026-01-22-core-maintainer-update/</guid><description>Core Maintainer team changes for 2026: departing members, new additions, and what&amp;#39;s ahead for MCP governance.</description><content:encoded><![CDATA[<p>A lot has happened since we first released MCP. We wrapped up 2025 with a <a href="/posts/2025-11-25-first-mcp-anniversary/">major spec update</a> and the momentum hasn&rsquo;t slowed down. None of it would have happened without the community: every PR, every issue filed, every server and client built. That energy is what keeps MCP moving forward.</p>
<p>To keep that momentum going, the <a href="https://modelcontextprotocol.io/community/governance#current-core-maintainers">Core Maintainer</a> team is evolving as well.</p>
<h2 id="departing-core-maintainers">Departing Core Maintainers</h2>
<p>First, some news. <strong>Inna Harper</strong> and <strong>Basil Hosmer</strong> will be stepping away from the Core Maintainer team to focus on other projects.</p>
<p>Inna and Basil have been with MCP since its early days. They helped shape the protocol during some of its most critical moments, from key design decisions to designing and delivering our official SDKs as well as helping ship all major spec releases. Their fingerprints are all over what MCP is today.</p>
<p>Thank you both for your contributions and your dedication to the project. MCP is better because of you.</p>
<h2 id="welcoming-new-maintainers">Welcoming New Maintainers</h2>
<p>We&rsquo;re thrilled to welcome three new Core Maintainers to the team. They&rsquo;ve already been active in MCP discussions, reviewing <a href="https://modelcontextprotocol.io/community/sep-guidelines">Spec Enhancement Proposals</a> (SEPs), and helping shape the direction of the protocol.</p>
<h3 id="peter-alexander">Peter Alexander</h3>
<p><img alt="Peter Alexander" loading="lazy" src="/posts/images/core-maintainer-update/peter_cm.png"></p>
<p><strong>Peter Alexander</strong> is a Member of Technical Staff at Anthropic on the Model Context Protocol team.</p>
<p>Prior to Anthropic, Peter was a Senior Staff Software Engineer at Meta working in a variety of areas across product and infrastructure including virtual reality, video conferencing, and large-scale real-time publish/subscribe data infrastructure. He also spent some time in the gaming industry at Codemasters working on their Grid and DiRT series of games on console and PC as gameplay lead.</p>
<p>Peter has authored several SEPs including the <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2133">Extensions framework</a> and <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2093">Resource Contents Metadata</a>, and has been an active reviewer and contributor to our SDKs, proposals around governance, roadmap, and specification changes.</p>
<h3 id="caitie-mccaffrey">Caitie McCaffrey</h3>
<p><img alt="Caitie McCaffrey" loading="lazy" src="/posts/images/core-maintainer-update/caitie_cm.png"></p>
<p><strong>Caitie McCaffrey</strong> is a Software Engineer and Tech Lead at Microsoft. Caitie has built large-scale distributed systems and services across multiple domains, including AI platforms, gaming, social media, and IoT.</p>
<p>Previously, Caitie served as Technical Advisor to Microsoft&rsquo;s CEO Satya Nadella and CTO Kevin Scott, driving strategic efforts in AI transformation, developer experience &amp; security. Earlier in her career, Caitie was Tech Lead for the Observability team at Twitter, and worked in the gaming industry at Microsoft Game Studios and 343 Industries, contributing to titles such as Halo 4, Halo 5, and Gears of War 2 &amp; 3. She holds a Computer Science degree from Cornell University.</p>
<p>Caitie has been reviewing and helping us craft our governance and transport proposals, bringing her distributed systems expertise to protocol design discussions.</p>
<h3 id="kurtis-van-gent">Kurtis Van Gent</h3>
<p><img alt="Kurtis Van Gent" loading="lazy" src="/posts/images/core-maintainer-update/kurtis_cm.png"></p>
<p><strong>Kurtis Van Gent</strong> is a Senior Staff Software Engineer leading AI Ecosystems at Google Cloud Databases. He drives ecosystems and integrations across the portfolio, leading efforts like MCP for Data Cloud and MCP Toolbox for Databases.</p>
<p>Kurtis has been driving the <a href="https://github.com/modelcontextprotocol/transports-wg">Transport Working Group</a>, which authored the accepted <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1319">request payload decoupling</a> SEP and is leading the <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1442">stateless protocol</a> proposal. His focus on scalability and fault tolerance has shaped key discussions around how MCP evolves.</p>
<p>Welcome to the team, Peter, Caitie, and Kurtis.</p>
<h2 id="looking-ahead">Looking Ahead</h2>
<p>If there is one thing I can guarantee it&rsquo;s that 2026 will be a busy year for MCP. There are multiple active SEPs working through the process right now, including ones like the <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1932">DPoP extension</a> for authentication, <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1858">multi-turn SSE</a> for transport, and <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2127">Server Cards</a> for discovery. This is just a sneak peek of the <em>many</em> improvements we&rsquo;re currently iterating on. The ecosystem keeps expanding, with more clients, servers, and SDK releases shipping every week.</p>
<p>MCP as a protocol has also matured. What started as an open-source experiment is now running in production at companies of all sizes. That changes what we need to focus on. With this team in place, we&rsquo;re working on the pieces of the puzzle that matter for the next phase of MCP growth: hardening the spec for enterprise scenarios, improving security and authentication patterns, providing better SDK implementation guidance, and making sure MCP can scale to meet the demands of organizations deploying it in critical systems. At the same time, we&rsquo;re keeping the contributor experience welcoming and the protocol responsive to what developers actually need.</p>
<p>If you want to be part of it, check out our <a href="https://modelcontextprotocol.io/community/governance">governance docs</a> or see how to <a href="https://modelcontextprotocol.io/community/communication">get started with MCP contributions</a>. Come build with us.</p>
]]></content:encoded></item><item><title>Exploring the Future of MCP Transports</title><link>https://blog.modelcontextprotocol.io/posts/2025-12-19-mcp-transport-future/</link><pubDate>Fri, 19 Dec 2025 09:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2025-12-19-mcp-transport-future/</guid><description>The Transport Working Group&amp;#39;s plan to evolve MCP beyond Streamable HTTP for enterprise-scale remote deployments.</description><content:encoded><![CDATA[<p>When MCP first launched in November of 2024, quite a few of its users relied on local environments, connecting clients to servers over <a href="https://modelcontextprotocol.io/specification/2025-11-25/basic/transports#stdio">STDIO</a>. As MCP became the go-to standard for LLM integrations, community needs evolved, leading to the build-out of infrastructure around remote servers. There&rsquo;s now growing demand for distributed deployments that can operate at scale.</p>
<p>The <a href="https://modelcontextprotocol.io/specification/2025-11-25/basic/transports#streamable-http">Streamable HTTP</a> transport was a significant step forward, enabling remote MCP deployments and unlocking new use cases. However, as enterprise deployments scale to millions of daily requests, early adopters have encountered practical challenges that make it difficult to leverage existing infrastructure patterns. The friction of stateful connections has become a bottleneck for managed services and load balancing.</p>
<p>Some of these challenges include:</p>
<ul>
<li><strong>Infrastructure Complexity:</strong> Load balancers and API gateways must parse full JSON-RPC payloads to route traffic, rather than using standard HTTP patterns.</li>
<li><strong>Scaling Friction:</strong> Stateful connections force &ldquo;sticky&rdquo; routing that pins traffic to specific servers, preventing effective auto-scaling.</li>
<li><strong>High Barrier for Simple Tools:</strong> Developers building simple, ephemeral tools are often required to manage complex backend storage to support basic multi-turn interactions.</li>
<li><strong>Ambiguous Session Scope:</strong> There is no predictable mechanism for defining where a conversation context starts and ends across distributed systems.</li>
</ul>
<h2 id="roadmap">Roadmap</h2>
<p>Over the past few months, the Transport Working Group has worked together with the community and MCP Core Maintainers to develop solutions to these challenges.</p>
<p>In this post we share the roadmap for evolving the Streamable HTTP transport and invite community feedback to help shape the future of MCP transports.</p>
<h3 id="a-stateless-protocol">A Stateless Protocol</h3>
<p>MCP was originally designed as a stateful protocol. Clients and servers maintain mutual awareness through a persistent, bidirectional channel that begins with a handshake to exchange capabilities and protocol version information. Because this state remains fixed throughout the connection, scaling requires techniques like sticky sessions or distributed session storage.</p>
<p>We envision a future where agentic applications are stateful, but the protocol itself doesn&rsquo;t need to be. A stateless protocol enables scale, while still providing features to support stateful application sessions when needed.</p>
<p>We are exploring ways to make MCP stateless by:</p>
<ul>
<li>Replacing the <a href="https://modelcontextprotocol.io/specification/2025-11-25/basic/lifecycle#initialization"><code>initialize</code> handshake</a> and sending the shared information with each request and response instead.</li>
<li>Providing a <code>discovery</code> mechanism for clients to query server capabilities if they need the information early, for scenarios such as UI hydration.</li>
</ul>
<p>These changes enable a more dynamic model where clients can optimistically attempt operations and receive clear error messages if a capability is unsupported.</p>
<blockquote>
<p><strong>NOTE:</strong> Many SDKs already offer a <em><code>stateless</code></em> option in their server transport configuration, though the behavior varies across implementations. As part of this roadmap, we&rsquo;ll be working to standardize what &ldquo;stateless&rdquo; means across all official SDKs to ensure consistent behavior.</p></blockquote>
<h3 id="elevating-sessions">Elevating Sessions</h3>
<p>Currently, sessions are a side effect of the transport connection. With STDIO, sessions are implicit in the process lifecycle; with Streamable HTTP, sessions are created when a server assigns an <code>Mcp-Session-Id</code> during initialization. This can lead to confusion between transport and application layer concerns.</p>
<p>We are looking at moving sessions to the <em>data model layer</em>, making them explicit rather than implicit.</p>
<p>This would allow MCP applications to handle sessions as part of their domain logic. We&rsquo;re exploring several approaches, with a cookie-like mechanism being one potential candidate to decouple session state from the transport layer.</p>
<p>This direction mirrors standard HTTP, where the protocol itself is stateless while applications build stateful semantics using cookies, tokens, and similar mechanisms. The exact approach to session creation is still being designed, with the goal of removing existing ambiguities around what a session means in remote MCP scenarios.</p>
<h3 id="elicitations-and-sampling">Elicitations and Sampling</h3>
<p>Two MCP features are central to a few of the modern AI workflows: <a href="https://modelcontextprotocol.io/specification/2025-11-25/client/elicitation">Elicitations</a>, which request human input, and <a href="https://modelcontextprotocol.io/specification/2025-11-25/client/sampling">Sampling</a>, which enable agentic LLM interactions.</p>
<p>Supporting these features at scale requires rethinking the bidirectional communication pattern they rely on. Currently, when a server needs more information to complete a tool call, it suspends execution and waits for a client response, requiring it to track all outstanding requests.</p>
<p>To address this, we&rsquo;re looking at designing server requests and responses to work similarly to chat APIs. The server returns the elicitation request as usual, and the client returns both the request <em>and</em> response together. This allows the server to reconstruct the necessary state purely from the returned message, avoiding long-running state management between nodes and potentially eliminating the need for back-end storage entirely.</p>
<h3 id="update-notifications-and-subscriptions">Update Notifications and Subscriptions</h3>
<p>MCP is dynamic by design - <a href="https://modelcontextprotocol.io/specification/2025-11-25/server/tools">tools</a>, <a href="https://modelcontextprotocol.io/specification/2025-11-25/server/prompts">prompts</a>, and <a href="https://modelcontextprotocol.io/specification/2025-11-25/server/resources">resources</a> can change during operation. Today, servers send <code>ListChangedNotification</code> messages to clients as a hint to invalidate their caches.</p>
<p>We&rsquo;re exploring replacing the general-purpose <code>GET</code> stream with explicit subscription streams. Clients would open dedicated streams for specific items they want to monitor, with support for multiple concurrent subscriptions. If a stream is interrupted, the client simply restarts it with no complex resumption logic.</p>
<p>To make notifications truly optional - an optimization rather than a requirement - we&rsquo;re considering adding Time-To-Live (TTL) values and version identifiers (such as <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/ETag">ETags</a>) to data. This would let clients make intelligent caching decisions independently of the notification stream, significantly improving reliability.</p>
<h3 id="json-rpc-envelopes">JSON-RPC Envelopes</h3>
<p>MCP uses JSON-RPC for all message envelopes, including method names and parameters. As we optimize for HTTP deployments, a common question is whether routing information should be more accessible to the underlying MCP server infrastructure.</p>
<p>While we&rsquo;re keeping JSON-RPC as the message format, we&rsquo;re exploring ways to expose routing-critical information (such as the RPC method or tool name) via standard HTTP paths or headers. This would allow load balancers and API gateways to route traffic without parsing JSON bodies.</p>
<h3 id="server-cards">Server Cards</h3>
<p>Today, clients must complete a full initialization handshake just to learn basic information about an MCP server, like its capabilities or available tools. This creates friction for discovery, integration, and optimization scenarios.</p>
<p>We&rsquo;re exploring the direction of introducing <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1649">MCP Server Cards</a>: structured metadata documents that servers expose through a standardized <code>/.well-known/mcp.json</code> endpoint. Server Cards enable clients to discover server capabilities, authentication requirements, and available primitives <em>before</em> establishing a connection. This unlocks use cases like autoconfiguration, automated discovery, static security validation, and reduced latency for UI hydration — all without requiring the full initialization sequence.</p>
<h3 id="official-and-custom-transports">Official and Custom Transports</h3>
<p>To ensure a minimum compatibility baseline across the ecosystem, MCP will continue to support only two official transports: STDIO for local deployments and Streamable HTTP for remote deployments. This keeps the core ecosystem unified, where every MCP client and server can interoperate out of the box.</p>
<p>We also recognize that transport and protocol changes can be disruptive. Backwards compatibility is a priority, and we&rsquo;ll only introduce breaking changes when strictly necessary for critical use cases.</p>
<p>For teams with specialized requirements, the MCP Specification supports <a href="https://modelcontextprotocol.io/specification/2025-11-25/basic/transports#custom-transports">Custom Transports</a>, giving developers the flexibility to build alternatives that fit their needs. Our focus is on making Custom Transports easier to implement by improving SDK integration—so the community can experiment freely without fragmenting the standard.</p>
<h2 id="summary">Summary</h2>
<p>These changes reorient MCP around stateless, independent requests - without sacrificing the rich features that make it powerful. Server developers get simpler horizontal scaling with no sticky sessions or distributed stores. Clients get a more predictable architecture.</p>
<p>For most SDK users, both on the client and server sides, the impact will be minimal - we&rsquo;re focused on reducing breaking changes to the absolute minimum. The shift we&rsquo;re outlining is architectural: simpler deployments, serverless viability for advanced MCP features, and better alignment with modern infrastructure patterns.</p>
<h2 id="next-steps">Next Steps</h2>
<p>Work is already underway. Our goal is to finalize the required <a href="https://modelcontextprotocol.io/community/sep-guidelines">Spec Enhancement Proposals</a> (SEPs) in the first quarter of 2026 for inclusion in the next specification release, which is tentatively slated for June of 2026. With these changes, MCP can easily scale while keeping the ergonomics that made it successful.</p>
<p>We want your input. Join us in the <a href="https://modelcontextprotocol.io/community/communication#discord">MCP Contributors Discord server</a>, or engage directly with transport-related SEPs in the <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pulls">Model Context Protocol repository</a>.</p>
<p>This roadmap is shaped by real-world feedback from developers and companies building with MCP. We&rsquo;re excited to collaborate with the MCP community to continuously improve the protocol and its capabilities!</p>
]]></content:encoded></item><item><title>MCP joins the Agentic AI Foundation</title><link>https://blog.modelcontextprotocol.io/posts/2025-12-09-mcp-joins-agentic-ai-foundation/</link><pubDate>Tue, 09 Dec 2025 09:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2025-12-09-mcp-joins-agentic-ai-foundation/</guid><description>Anthropic is donating MCP to the newly formed Agentic AI Foundation under the Linux Foundation, ensuring vendor-neutral governance for the protocol&amp;#39;s future.</description><content:encoded><![CDATA[<p>Today marks a major milestone for the Model Context Protocol. Anthropic is donating MCP to the Agentic AI Foundation, a directed fund under the Linux Foundation. MCP will become a founding project of the newly created foundation.</p>
<p>In one year, MCP has become one of the fastest-growing and widely-adopted open-source projects in AI: Over 97 million monthly SDK downloads, 10,000 active servers and first-class client support across major AI platforms like ChatGPT, Claude, Cursor, Gemini, Microsoft Copilot, Visual Studio Code and many more.</p>
<p>Since its inception, we&rsquo;ve remained committed to ensuring MCP remains open and community-driven. This move formalizes that commitment—ensuring MCP&rsquo;s vendor-neutrality and long-term independence under the same neutral stewardship that supports Kubernetes, PyTorch, and Node.js. Anthropic&rsquo;s commitment to MCP is unchanged: we will continue to invest in its development, maintain core infrastructure, and actively participate in the community.</p>
<h2 id="the-agentic-ai-foundation">The Agentic AI Foundation</h2>
<p>MCP will be a founding project of the newly created Agentic AI Foundation (AAIF), a directed fund under the Linux Foundation, co-founded by Anthropic, Block and OpenAI, with support from Google, Microsoft, AWS, Cloudflare and Bloomberg to advance open-source innovation in agentic AI.</p>
<p>MCP joins two other founding projects: goose by Block and AGENTS.md by OpenAI as founding projects.</p>
<p>The AAIF Governing Board will make decisions regarding strategic investments, budget allocation, member recruitment, and approval of new projects, while individual projects, such as MCP, maintain full autonomy over their technical direction and day-to-day operations.</p>
<h2 id="mcps-maintainer-structure-stays-the-same">MCP&rsquo;s maintainer structure stays the same</h2>
<p>For MCP little changes. The governance model we introduced earlier this year continues as is. The people making decisions about the protocol are still the maintainers who have been stewarding it, guided by community input through our SEP process.</p>
<p>The Linux Foundation provides a neutral home and infrastructure that allows maintainers to operate independently, and will not dictate the technical direction of MCP.</p>
<h2 id="thank-you">Thank you</h2>
<p>To all who&rsquo;ve adopted and contributed to MCP so far, thank you. None of this would&rsquo;ve been possible without your contribution. From building servers to maintaining SDKs to filing issues to improving documentation to welcoming new visitors and everything in between, you&rsquo;ve made MCP what it is today.</p>
<p>Here&rsquo;s to MCP&rsquo;s next chapter under the Linux Foundation&rsquo;s stewardship.</p>
]]></content:encoded></item><item><title>SEPs Are Moving to Pull Requests</title><link>https://blog.modelcontextprotocol.io/posts/2025-11-28-sep-process-update/</link><pubDate>Fri, 28 Nov 2025 11:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2025-11-28-sep-process-update/</guid><description>SEPs are moving from GitHub Issues to pull requests against the seps/ directory — why, and what changes for contributors.</description><content:encoded><![CDATA[<p>We&rsquo;re updating how Specification Enhancement Proposals (SEPs) are submitted and managed. Starting today, SEPs will be created as pull requests to the <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/tree/main/seps"><code>seps/</code> directory</a> instead of GitHub issues.</p>
<h2 id="why-the-change">Why the Change?</h2>
<p>When we <a href="https://blog.modelcontextprotocol.io/posts/2025-07-31-governance-for-mcp/">introduced SEPs in July</a>, we chose GitHub Issues as our starting point. Issues are familiar to developers, low-friction, and got us up and running quickly. But as more proposals have come through the process, we&rsquo;ve identified some key pain points:</p>
<p><strong>Scattered discussions.</strong> With issues, the proposal text lives in the issue body while implementation details often end up in a separate PR. This splits the conversation and makes it harder to follow the full history of a proposal. This also introduces two distinct numbers referencing the same SEP, making it harder to consistently track and manage changes.</p>
<p><strong>No version history.</strong> Issues don&rsquo;t have the same revision tracking that files in a repository do. When a SEP evolves through review, it&rsquo;s difficult to see what changed and when.</p>
<p>The new PR-based approach, inspired by <a href="https://peps.python.org/">Python&rsquo;s PEP process</a>, solves both problems.</p>
<h2 id="how-it-works">How It Works</h2>
<p>The new workflow will be familiar if you&rsquo;ve submitted pull requests on GitHub before:</p>
<ol>
<li>
<p><strong>Draft your SEP</strong> as a markdown file named <code>0000-your-feature.md</code> using the <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/seps/TEMPLATE.md">SEP template</a></p>
</li>
<li>
<p><strong>Create a pull request</strong> adding your SEP to the <code>seps/</code> directory</p>
</li>
<li>
<p><strong>Update the SEP number</strong> once your PR is created, rename the file using the PR number (e.g., PR #1850 becomes <code>1850-your-feature.md</code>) and push a new commit with the rename</p>
</li>
<li>
<p><strong>Find a sponsor</strong> from our <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/MAINTAINERS.md">maintainer list</a> to shepherd your proposal</p>
</li>
<li>
<p><strong>Iterate</strong> on feedback directly in the PR</p>
</li>
</ol>
<p>That&rsquo;s it. The PR number becomes the SEP number, discussion happens in one place, and git tracks every revision.</p>
<h2 id="what-about-status">What About Status?</h2>
<p>One notable change: <strong>sponsors are now responsible for updating SEP status</strong>. In addition to applying labels to the pull request, the sponsor is responsible for ensuring that the <code>Status</code> field is updated in the SEP markdown file. This keeps the canonical state of the proposal in the file itself, versioned alongside the content, while PR labels make it easy to filter and find SEPs by status.</p>
<p>Status transitions work the same as before: <code>Draft</code> to <code>In-Review</code> to <code>Accepted</code> to <code>Final</code>, with the sponsor managing each transition as the proposal progresses.</p>
<h2 id="getting-started">Getting Started</h2>
<p>Ready to propose a change to MCP? Here&rsquo;s what you need to know:</p>
<p><strong>For new SEPs:</strong></p>
<ul>
<li>Read the latest <a href="https://modelcontextprotocol.io/community/sep-guidelines">SEP Guidelines</a></li>
<li>Use the <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/seps/README.md#sep-file-structure">SEP template</a> to create your proposal</li>
<li>Browse existing SEPs in the <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/tree/main/seps"><code>seps/</code> directory</a> for examples</li>
<li>Follow the workflow described above</li>
</ul>
<p><strong>For existing SEPs:</strong>
If you have a SEP submitted as a GitHub issue, you can continue with your current workflow. We strongly encourage migrating to the new process for better version control and centralized discussion. To migrate:</p>
<ol>
<li>Create a markdown file using the SEP template, starting with <code>0000-your-feature.md</code></li>
<li>Copy and adapt your proposal content to fit the template structure</li>
<li>Submit a pull request to the <code>seps/</code> directory</li>
<li>Rename the file using your new PR number (e.g., PR #1900 becomes <code>1900-your-feature.md</code>)</li>
<li>Close the original issue with a link to the new PR</li>
</ol>
<p>The new PR gets a fresh SEP number and gives your proposal proper version control and centralized discussion. Any valuable context from the original issue discussion should be summarized in the new SEP or referenced via links.</p>
<p>As always, if you&rsquo;re unsure whether your idea warrants a SEP, start a conversation on <a href="https://modelcontextprotocol.io/community/communication#discord">Discord</a> or <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/discussions">GitHub Discussions</a>. We&rsquo;re happy to help you figure out the right path forward.</p>
<h2 id="thank-you">Thank You</h2>
<p>This change is a direct result of feedback from contributors who&rsquo;ve been through the SEP process. Your input helps us continuously improve how we build MCP together. Keep it coming.</p>
]]></content:encoded></item><item><title>One Year of MCP: November 2025 Spec Release</title><link>https://blog.modelcontextprotocol.io/posts/2025-11-25-first-mcp-anniversary/</link><pubDate>Tue, 25 Nov 2025 00:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2025-11-25-first-mcp-anniversary/</guid><description>MCP turns one — a look back at the year, plus the full details of the November 2025 specification release.</description><content:encoded><![CDATA[<p>Today, MCP turns <strong>one year old</strong>. You can check out the <a href="https://www.anthropic.com/news/model-context-protocol">original announcement blog post</a> if you don&rsquo;t believe us. It&rsquo;s hard to imagine that a little open-source experiment, a <strong>protocol to provide context to models</strong>, became the de-facto standard for this very scenario in less than twelve months.</p>
<p>But not only do we hit the first anniversary milestone today - we&rsquo;re also releasing a brand-new MCP specification version. Before we get to the details of what&rsquo;s new, let&rsquo;s do a bit of a retrospective.</p>
<h2 id="a-year-in">A Year In</h2>
<p>With all the changes that we&rsquo;ve made in the past year, it feels like a decade flew by. The protocol has grown leaps and bounds since its inception and has been adopted by a <em>huge</em> number of developers and organizations. We went from a little open source experiment to becoming <em>the</em> standard for connecting data and applications to Large Language Models (LLMs).</p>
<p>But adoption can only grow as long as there are MCP servers to actually use and clients which are capable of communicating with them. Within the same timeframe, we saw the number of active MCP servers go from just a few experimental ones to <em>thousands</em>. If you think about a scenario, it&rsquo;s likely there&rsquo;s an MCP server for it.</p>
<p>Here are just a few of many (very many) MCP servers that you can try <em>today</em>:</p>
<ul>
<li>Notion <a href="https://github.com/makenotion/notion-mcp-server">built an MCP server</a> to help you manage your notes.</li>
<li>Stripe has a <a href="https://docs.stripe.com/mcp#tools">pretty extensive MCP server</a> to manage all kinds of payment workflows.</li>
<li>GitHub <a href="https://github.com/github/github-mcp-server">built their own MCP server</a> to help developers automate their engineering processes.</li>
<li>Hugging Face <a href="https://github.com/huggingface/hf-mcp-server">created an MCP server</a> to make model management and dataset search a breeze.</li>
<li>Postman <a href="https://github.com/postmanlabs/postman-mcp-server">built their MCP server</a> to help automate API testing workflows.</li>
</ul>
<p>And there&rsquo;s so much more to discover in the MCP ecosystem! That&rsquo;s why we also launched the <a href="https://blog.modelcontextprotocol.io/posts/2025-09-08-mcp-registry-preview/">MCP Registry</a> earlier this year. It&rsquo;s the central index for all available MCP servers that now has close to two thousand entries since its announcement in September. That&rsquo;s a <strong>407% growth</strong> from the initial batch of servers we onboarded that same month.</p>
<p>The ecosystem is blooming, adoption is growing, but what&rsquo;s underpinning all of this?</p>
<h3 id="community--governance">Community &amp; Governance</h3>
<p>MCP&rsquo;s growth was never a one‑company effort. Students, hobbyists, startup engineers, and enterprise architects all shaped the protocol - submitting Specification Enhancement Proposals (SEPs), shipping SDKs in new languages, and stress‑testing some of the early assumptions we had about MCP in production. MCP servers became a staple of many products, official and unofficial (there&rsquo;s even a <a href="https://github.com/ahujasid/blender-mcp">Blender MCP server</a>). That kind of organic adoption isn&rsquo;t something you can just come up with, no matter how ambitious your aspirations are with an open source project.</p>
<p><img alt="David Soria Parra presenting on MCP in May of 2025" loading="lazy" src="/posts/images/first-mcp-anniversary/david-mcp-may.webp"></p>
<p>From the start, we believed that it was all about the <strong>MCP community</strong>. Our community rallied around the protocol, organizing events like <a href="https://mcpdevsummit.ai/">MCP Dev Summit</a>, <a href="https://workos.com/mcp-night">MCP Night</a>, <a href="https://developer.microsoft.com/en-us/reactor/series/S-1563/">MCP Dev Days</a>, and showing up at other marquee events like <a href="https://wf2025.ai.engineer/worldsfair/2025">AI Engineer World&rsquo;s Fair</a> to share what they learned and built.</p>
<p><img alt="Presentation on GitHub MCP server at the MCP Night event" loading="lazy" src="/posts/images/first-mcp-anniversary/mcp-night-github-mcp.webp"></p>
<p>We also nurtured large contributor communities on <a href="https://modelcontextprotocol.io/community/communication">Discord</a> and on <a href="https://github.com/modelcontextprotocol/modelcontextprotocol">GitHub</a>, helping us debug issues, build amazing tools like the <a href="https://github.com/modelcontextprotocol/inspector">MCP Inspector</a>, propose changes, and assist each other in shipping great MCP experiences. That kind of daily collaboration got us further than any single individual or company ever could.</p>
<p><img alt="Audience at MCP Night in San Francisco" loading="lazy" src="/posts/images/first-mcp-anniversary/mcp-night.webp"></p>
<p>Really, the success of MCP in the past year is entirely thanks to the broad community that grew around the project - from transports, to security, SDKs, documentation, samples, extensions, and developer tooling, it was all significantly evolved by and for the community.</p>
<p><img alt="Kent C. Dodds talking about his vision for MCP at MCP Dev Summit" loading="lazy" src="/posts/images/first-mcp-anniversary/kent-jarvis-mcp.webp"></p>
<p>To keep this pace sustainable, we spent some time thinking through and putting together a <a href="https://blog.modelcontextprotocol.io/posts/2025-07-31-governance-for-mcp/">governance structure</a>. Through it, community leaders and Anthropic maintainers were and continue to work together to figure out what needs fixing and how to get the right changes into the spec. Our maintainer team isn&rsquo;t there to gatekeep; they help surface problems, align on solutions, and turn rough ideas into actual protocol updates.</p>
<p><img alt="MCP maintainers collaborating during a writing session in New York City" loading="lazy" src="/posts/images/first-mcp-anniversary/maintainers-write.webp"></p>
<p>Our approach to governance, while still evolving, proved itself to be extremely valuable. We&rsquo;ve been able to move faster on critical improvements without breaking existing implementations. Potential contributors now also know how to jump in through formal <strong>Working and Interest Groups</strong> (<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1302/">SEP-1302</a> set the stage for this).</p>
<p><img alt="Group photo from an MCP maintainers meetup" loading="lazy" src="/posts/images/first-mcp-anniversary/maintainers-meetup.webp"></p>
<p>Even though this is a significant improvement, we know that we&rsquo;re not done. There&rsquo;s still work ahead for us to make this process even better - improved transparency, decision timelines, broader platform coverage, and so much more to help the ecosystem. We are <em>incredibly thankful</em> for everyone who&rsquo;s been part of this journey and helped us navigate so many changes in such a short time span.</p>
<p><img alt="Developing on the bleeding edge of MCP servers presentation" loading="lazy" src="/posts/images/first-mcp-anniversary/mcp.webp"></p>
<h2 id="what-others-have-to-say">What Others Have To Say</h2>
<p>As we called out above, the success of MCP <em>would not be possible</em> without the broader community of adopters. We&rsquo;re delighted that the protocol enabled so many scenarios across the industry. Here are some thoughts from a few of our key partners and supporters.</p>
<blockquote>
<p>&ldquo;<em>In just one year, MCP has evolved from an experiment to a widely adopted industry standard, highlighting the impact of open collaboration—something we deeply believe in at GitHub. Developers across our community, customers and own teams are using our GitHub MCP Server, Registry, and enterprise controls like the MCP allowlist to unlock real benefits of agentic development in production workflows. We’re excited to keep building with the broader community to push this standard forward.</em>&rdquo;</p>
<p>✦ <strong>Mario Rodriguez</strong>, CPO, <a href="https://github.com/">GitHub</a></p></blockquote>
<blockquote>
<p>&ldquo;<em>We believe open standards are an important part of an agentic web—helping models work with tools and platforms more seamlessly. OpenAI has been contributing to the MCP ecosystem since early on, and it’s now a key part of how we build at OpenAI, integrated across ChatGPT and our developer platform. We’re excited to keep working with the community to strengthen the protocol as it evolves.</em>&rdquo;</p>
<p>✦ <strong>Srinivas Narayanan</strong>, CTO of B2B Applications, <a href="https://openai.com/">OpenAI</a></p></blockquote>
<blockquote>
<p>&ldquo;<em>In the year since its launch, MCP has become an incredibly impactful open standard in the industry,&rdquo; said Dhanji R. Prasanna, CTO of Block. &ldquo;It has quickly moved to unlocking an enormous amount of value from existing systems and made applied AI real like few anticipated. MCP has been key to building AI-powered solutions like Square AI and Moneybot, saving our customers time and delivering powerful insights as well as our internal AI systems. It sits at the heart of open source projects like goose, proving that open standards fuel innovation across the board. We are excited to see the protocol and AI agents evolve to unlock ever more productivity in the enterprise.</em>&rdquo;</p>
<p>✦ <strong>Dhanji Prasanna</strong>, CTO, <a href="https://block.xyz/">Block</a></p></blockquote>
<blockquote>
<p>&ldquo;<em>Having an open source protocol that unlocks real interoperability has made agents truly useful. In one year, Foundry went from a small set of tools to thousands because MCP let tools from GitHub, Azure, and M365 show up wherever agents run. It made write once integrate everywhere real and gives agents the ability to work across any system and any cloud with the full power of Microsoft behind them.</em>&rdquo;</p>
<p>✦ <strong>Asha Sharma</strong>, President, CoreAI, <a href="https://microsoft.com/">Microsoft</a></p></blockquote>
<blockquote>
<p>&ldquo;<em>MCP has become the natural language for AI integration - connecting everything from model discovery to inference APIs to chat applications. The community has created thousands of MCP applications with Gradio and our HF-MCP server. Having an Open Source protocol that unlocks this seamless interoperability has been a game changer in the past year.</em>&rdquo;</p>
<p>✦ <strong>Julien Chaumond</strong>, CTO, <a href="https://huggingface.co/">Hugging Face</a></p></blockquote>
<blockquote>
<p>&ldquo;<em>The enterprise promise of AI is being realized by MCP’s ability to unify data, tools, and workflows across previously siloed systems. As agentic AI is more rapidly adopted, we’re excited to see identity and authorization at the core of a security framework. By formally incorporating Cross App Access as an MCP authorization extension, organizations can have the necessary oversight and access control to build a secure and open AI ecosystem.</em>&rdquo;</p>
<p>✦ <strong>Harish Peri</strong>, SVP &amp; GM, AI Security, <a href="https://okta.com">Okta</a></p></blockquote>
<blockquote>
<p>&ldquo;<em>We&rsquo;re hearing great things from customers who have embraced MCP as their standard for connecting generative AI agents with external systems. Open source is incredibly important to our mission at AWS, which is why we started and continue contributing to MCP— building improvements on authorization, human in the loop interactions, and asynchronous execution. We have also built MCP into offerings like Amazon Bedrock, Kiro, Strands, AgentCore and Amazon Quick Suite. We&rsquo;re excited to continue to collaborate with this community to make agent interoperability seamless for developers.</em>&rdquo;</p>
<p>✦ <strong>Swami Sivasubramanian</strong>, VP, Agentic AI, <a href="https://aws.amazon.com">AWS</a></p></blockquote>
<blockquote>
<p>&ldquo;<em>In just one year, the Model Context Protocol has proven to be a critical standard that connects models to data and applications, solving the fragmentation that held agents back. We’re proud to support MCP across Gemini, from our models to our agentic software development tools like Gemini CLI, as well as provide open source MCP servers such as for Google Maps and Google Cloud databases. These are the very tools our own teams use, and we’re thrilled to celebrate MCP’s first birthday by continuing to build this foundation together.&rdquo;</em></p>
<p>✦ <strong>Anna Berenberg</strong>, Engineering Fellow, <a href="https://cloud.google.com/">Google Cloud</a></p></blockquote>
<blockquote>
<p>&ldquo;<em>MCP has changed everything for us at Obot AI. A standard, open protocol for connecting AI with apps, data, and systems is the biggest shift since LLMs. We’re all-in on secure MCP management because we believe it’s going to be foundational infrastructure for every organization</em>&rdquo;</p>
<p>✦ <strong>Shannon Williams</strong>, President and Co-Founder, <a href="https://obot.ai/">Obot AI</a>; Organizer, <a href="https://mcpdevsummit.ai/">MCP Dev Summit</a></p></blockquote>
<p>Of course, we would be remiss not to mention the <em>massive</em> effort it takes to coordinate the MCP community engagement. We asked some of our most prolific community managers about what MCP meant to them. Here are their stories.</p>
<blockquote>
<p>&ldquo;<em>As a community moderator and maintainer, I keep coming back to something <a href="https://donellameadows.org/archives/dancing-with-systems/">Donella Meadows</a> wrote: &ldquo;Systems can&rsquo;t be controlled, but they can be designed and redesigned&hellip; We can listen to what the system tells us, and discover how its properties and our values can work together to bring forth something much better than could ever be produced by our will alone.&rdquo;</em></p>
<p><em>What made this year&rsquo;s growth possible was embracing messiness as a feature, and doing our best to solve real problems emerging from that messiness while leaving room for systems and models to advance and adapt. The looseness created velocity, which I watched unfold in a flood of discussions, PRs, and issues.</em></p>
<p><em>As someone who&rsquo;s merged hundreds of pull requests across MCP repos, I still feel like I&rsquo;m barely keeping up with this velocity. I mean that in the most positive way. Better patterns and practices are emerging from the sheer volume of contributions and breadth of experience and expertise represented in the contributor community. As a random person from the Internet, I appreciate that pretty much anyone can bring something to the table. This includes standout maintainers like <a href="https://github.com/cliffhall">Cliff Hall</a>, who raises the bar for reviewing, testing, and giving feedback, and <a href="https://github.com/jonathanhefner">Jonathan Hefner</a>, who&rsquo;s done the same for documentation.</em></p>
<p><em>As Darren Shepard <a href="https://x.com/ibuildthecloud/status/1988695148843389151">recently put it</a>:</em></p>
<p><em>&lsquo;People think the value of MCP is the protocol. The value is getting people to agree and do something.&rsquo;</em></p>
<p><em>MCP gives people a reason to coordinate and talk about the same thing. Helping to enable that coordination and discussion has been a lot of fun, and it keeps me coming back.</em>&rdquo;</p>
<p>✦ <strong>Ola Hungerford</strong>, Principal Engineer, <a href="https://www.nordstrom.com/">Nordstrom</a>; MCP Maintainer and Community Lead</p></blockquote>
<blockquote>
<p>&ldquo;<em>Watching the MCP community start small and grow up across the past year has been a joy to watch. No matter whether someone has been an independent contributor, member of a small startup, or a leader at a big enterprise: everyone has had and continues to have a voice and a role to play.</em></p>
<p><em>I think this is largely due to how pragmatic and use-case oriented the MCP community has been from the get-go. There is a focus on not overcomplicating the specification, and not designing ahead of need. When that&rsquo;s the ethos driving decision-making, everyone&rsquo;s voice matters. The hobbyist that has something working in production might have a practical opinion to contribute, that the big tech engineer can pick up and confidently deploy to a large userbase. And vice-versa: big tech can foresee problems around critical issues like security and governance that the hobbyist might have missed designing for.</em></p>
<p><em>That ethos has translated to community governance, too. There&rsquo;s no layers of bureaucracy: just a lightweight and still-distributed structure for making decisions that keep us all marching to the beat of the same drum. We are now <strong>58 maintainers</strong> supporting the <strong>9 core/lead maintainers</strong> in the MCP steering group, with <strong>2,900+ contributors</strong> in the MCP contributor community on Discord, and <strong>100+ new contributors</strong> joining every week. We&rsquo;re successfully maintaining long-running projects like the Registry, the Inspector, and a host of SDKs with that distributed group of leaders and contributors - and managed to collaborate through 17 (!) SEPs in about a quarter&rsquo;s worth of time.</em></p>
<p><em>That doesn&rsquo;t even begin to touch on the thousands of MCP implementors or millions of MCP end-users. It&rsquo;s inspiring to see the often-competitive AI community rally around a foundational piece of infrastructure; I&rsquo;m thankful for that willingness to collaborate and look forward to seeing where our second year takes us.&rdquo;</em></p>
<p>✦ <strong>Tadas Antanavicius</strong>, Co-Creator, <a href="https://www.pulsemcp.com/">PulseMCP</a>; MCP Maintainer and Community Lead</p></blockquote>
<p>We are immensely grateful for our partners and community for helping us bring the protocol to where it is today. Let&rsquo;s now jump into the latest big release - the <code>2025-11-25</code> version of the MCP specification.</p>
<h2 id="the-november-2025-release">The November 2025 Release</h2>
<p>The latest release of the MCP specification ships with a number of highly-anticipated features that came directly from our community deploying and using MCP for production scenarios. People told us what wasn&rsquo;t working, what was missing, and what papercuts prevented them from being able to use MCP. We listened and worked together with community experts to deliver a number of enhancements that make MCP even more scalable and reliable.</p>
<h3 id="support-for-task-based-workflows">Support for Task-based Workflows</h3>
<p><strong>SEP:</strong> <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1686">1686</a></p>
<p>Tasks provide a new abstraction in MCP for tracking the work being performed by an MCP server. Any request can be augmented with a task that allows the client to query its status and retrieve its results up to a server-defined duration after the task is created.</p>
<p>Tasks support a variety of states including <code>working</code>, <code>input_required</code>, <code>completed</code>, <code>failed</code>, and <code>cancelled</code>, allowing clients to effectively manage multi-step operations.</p>
<p>Some noteworthy capabilities that this feature enables:</p>
<ul>
<li><strong>Active polling</strong>: Clients can check the status of ongoing work at any time.</li>
<li><strong>Result retrieval</strong>: Results of completed tasks are accessible after the request has completed.</li>
<li><strong>Flexible lifecycle management</strong>: Support for <code>working</code>, <code>input_required</code>, <code>completed</code>, <code>failed</code>, and <code>cancelled</code> states.</li>
<li><strong>Task isolation</strong>: Proper security boundaries with session-based access control.</li>
</ul>
<p>From the multitude of MCP servers that we&rsquo;ve seen out there, this is particularly helpful for scenarios such as the ones below.</p>
<ul>
<li>Healthcare &amp; life sciences data analysis that processes hundreds of thousands of data points</li>
<li>Enterprise automation platforms with complex multi-step workflows</li>
<li>Code migration tools that run for minutes or hours</li>
<li>Test execution platforms that need to stream logs from long-running suites</li>
<li>Deep research tools that spawn multiple agents internally</li>
<li>Multi-agent systems where agents can work concurrently</li>
</ul>
<p>Tasks are launching as an <strong>experimental capability</strong>, meaning that it&rsquo;s part of the core protocol but it&rsquo;s not yet finalized. Task-based workflows are a tough problem to solve at scale, so we want to give some time to the specification to be battle-tested in real-world scenarios. We&rsquo;ll work closely with the community, SDK developers, as well as client and server implementers to get this right.</p>
<h3 id="simplified-authorization-flows">Simplified Authorization Flows</h3>
<p>One of the top painpoints from the community when it comes to authorization has been <a href="https://www.rfc-editor.org/rfc/rfc7591">Dynamic Client Registration</a>, or DCR. This capability is needed because in the MCP world there is an unbounded number of clients and servers, so doing standard client pre-registration is not always feasible. You wouldn&rsquo;t expect every MCP client in the world to also have a client registration with every Authorization Server (AS) out there, so DCR was used as a solution to this problem. You can learn more about the current approach in our <a href="https://modelcontextprotocol.io/docs/tutorials/security/authorization">authorization guide</a>.</p>
<p>To use DCR, however, an MCP server developer would need to rely on an AS that allows clients to register themselves via a public API. If the AS doesn&rsquo;t support this capability, developers would now need to build an OAuth proxy that would be manually registered with the AS, and support Dynamic Client Registration itself, mapping its own issued tokens to tokens issued from the downstream AS. This is a complex, time-consuming, and error-prone task, and doesn&rsquo;t actually solve the fundamental problems with Dynamic Client Registration.</p>
<p>The alternative would be for every customer or end user to provide <em>their own</em> client registration, but that&rsquo;s just trading one complex task for another. In that model, when a user connects to an MCP server, they need to go through their IT team to create a registration, assign it the right permissions, and then configure the MCP client to use it.</p>
<p><strong><a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1296">SEP-991</a></strong> introduced a much more elegant solution to the problem - URL-based client registration using <a href="https://datatracker.ietf.org/doc/html/draft-ietf-oauth-client-id-metadata-document-00">OAuth Client ID Metadata Documents</a> (you might&rsquo;ve already seen our <a href="https://blog.modelcontextprotocol.io/posts/client_registration/">blog post on this change from earlier this year</a>). Clients can now provide their own client ID that is a URL pointing to a JSON document the client manages that describes properties of the client.</p>
<p>You can learn more in the <a href="https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization#client-id-metadata-documents-flow">Client ID Metadata Documents Flow</a> section of the <a href="https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization">MCP authorization specification</a>.</p>
<h3 id="security-and-enterprise-features">Security and Enterprise Features</h3>
<p>As the protocol matures, we also can&rsquo;t ignore the myriad of security and authentication/authorization needs. MCP is not just a hobby protocol - we&rsquo;ve seen it adopted in some of the most mission-critical workloads. This translates into a direct need to ensure that all data is protected and access is properly managed.</p>
<p>Working with security and authentication experts from across the community, we&rsquo;ve developed a number of enhancements shipping with this release:</p>
<ul>
<li><strong><a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1024">SEP-1024</a></strong>: Client security requirements for local server installation</li>
<li><strong><a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/835">SEP-835</a></strong>: Default scopes definition in authorization specification</li>
</ul>
<p>We also hear loud and clear from the industry that discovery and management of internal registries is an important component to the MCP story. With the help of the MCP Registry team, we&rsquo;ve also established a <a href="https://github.com/modelcontextprotocol/registry/blob/main/docs/design/ecosystem-vision.md">vision for the ecosystem</a> that will help enterprises adopt <em>their own</em> MCP registries, with self-managed governance controls and security coverage.</p>
<p>To learn more about other upcoming auth and security improvements you can follow the <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues?q=is%3Aissue%20state%3Aopen%20label%3Aauth"><code>auth</code></a> and <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues?q=is%3Aissue%20state%3Aopen%20label%3Asecurity"><code>security</code></a> tags in the specification repository.</p>
<h3 id="extensions">Extensions</h3>
<p>As MCP continues to evolve, we <em>constantly</em> hear from developers who want to extend the protocol with specialized capabilities, whether for UI interactions, custom authentication flows, or other environment-specific logic. While these additions could be valuable, incorporating them directly into the core specification isn&rsquo;t always practical from the get-go, especially when a feature hasn&rsquo;t yet achieved broad adoption or proven its universal applicability.</p>
<p>To address this, we&rsquo;re introducing <strong>extensions</strong> in the protocol. Extensions are components and conventions that operate outside the core specification, providing a flexible way to build scenario-specific additions that follow MCP conventions without requiring full protocol integration. This approach allows for experimentation and specialized use cases while keeping the core protocol focused and stable. With extensions, we can move faster and enable developers to <em>test out</em> protocol capabilities before they become part of the specification.</p>
<p>Extensions are:</p>
<ul>
<li><strong>Optional</strong>. Server and client implementors can choose to adopt these extensions.</li>
<li><strong>Additive</strong>. Extensions do not modify or break core protocol functionality; they add new capabilities while preserving core protocol behavior.</li>
<li><strong>Composable</strong>. Extensions are modular and designed to work together without conflicts, allowing implementations to adopt multiple extensions simultaneously.</li>
<li><strong>Versioned independently</strong>. Extensions follow the core MCP versioning cycle but may adopt independent versioning as needed.</li>
</ul>
<p>You might&rsquo;ve already seen our announcement of the <a href="https://blog.modelcontextprotocol.io/posts/2025-11-21-mcp-apps/">MCP Apps Extension</a> proposal. In this specification release, we&rsquo;re introducing a couple of other extensions that should help developers further.</p>
<h3 id="authorization-extensions">Authorization Extensions</h3>
<p>To make MCP better suited for environments that require specific levels of control over the authorization process, we&rsquo;ve officially introduced the concept of <a href="https://github.com/modelcontextprotocol/ext-auth"><strong>authorization extensions</strong></a> (building on the broader <a href="#extensions">MCP Extensions</a>). As with all other extensions, authorization extensions build on the core protocol and define additional authorization mechanisms that can be implemented by both server and client developers.</p>
<p>The first two authorization extensions came on the heels of community feedback regarding some of the most-used authorization flows:</p>
<ul>
<li><strong><a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1046">SEP-1046</a></strong>: OAuth client credentials support for machine-to-machine authorization</li>
<li><strong><a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/990">SEP-990</a></strong>: Enterprise IdP policy controls for MCP OAuth flows (Cross App Access). This enables users within an enterprise to sign in to the MCP client once, and immediately get access to every authorized MCP server without additional authorization prompts.</li>
</ul>
<p>As we engage closer with the community, we expect the number of authorization extensions to grow as well - after all, there are more than just a few ways for a system to acquire and manage credentials.</p>
<h3 id="url-mode-elicitation-secure-out-of-band-interactions">URL Mode Elicitation: Secure Out-of-Band Interactions</h3>
<p><strong>SEP:</strong> <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1036">1036</a></p>
<p>Asking users for their API keys, tokens, or any other credentials directly through the MCP client might seem like quite a scary proposition. This is especially critical when you need to connect an MCP server to an array of <em>other</em> APIs, where the traditional client-to-server authorization flow doesn&rsquo;t quite work. Until now, there wasn&rsquo;t a good alternative - you either had to trust the client to handle the user&rsquo;s credentials directly, or implement a bunch of custom authorization logic to be used from the start.</p>
<p><strong>URL mode elicitation</strong> lets you send users to a proper OAuth flow (or any credential acquisition flow, for that matter) in their browser, where they can authenticate securely without your client ever seeing the entered credentials. The credentials are then directly managed by the server and the client only needs to worry about its own authorization flow to the server.</p>
<p>We are excited about including this feature in addition to capabilities that we already have, like elicitations, because it allows the protocol to be used for a few scenarios that were quite hard to get right, such as:</p>
<ul>
<li><strong>Secure credential collection</strong>: API keys and passwords never transit through the MCP client</li>
<li><strong>External OAuth flows</strong>: MCP servers have a path to obtain third-party authorization without token passthrough</li>
<li><strong>Payment processing</strong>: PCI-compliant financial transactions with secure browser contexts can now be done outside the client</li>
</ul>
<p>All the server does is send a URL that the client will provide an affordance for. When the user completes the flow in their browser, the server will get the necessary tokens <em>directly</em>, avoiding sharing credentials with the client or other manual steps. Simple!</p>
<h3 id="sampling-with-tools-agentic-servers">Sampling with Tools: Agentic Servers</h3>
<p><strong>SEP:</strong> <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1577">1577</a></p>
<p>This functionality allows MCP servers to run their own agentic loops using the client&rsquo;s tokens (still under the user&rsquo;s control, of course), and reduces the complexity of client implementations, context support becoming explicitly optional. This came from the fact that <a href="https://modelcontextprotocol.io/specification/2025-06-18/client/sampling">sampling</a> doesn&rsquo;t support tool calling, although it&rsquo;s a cornerstone of modern agentic behaviour. With the new spec release, this is no longer a gap!</p>
<p>Now that sampling with tools is available, this also means that all of the scenarios below are possible!</p>
<ul>
<li><strong>Tool calling in sampling requests</strong>: Servers can now include tool definitions and specify tool choice behavior</li>
<li><strong>Server-side agent loops</strong>: Servers can implement sophisticated multi-step reasoning</li>
<li><strong>Parallel tool calls</strong>: Support for concurrent tool execution</li>
<li><strong>Better context control</strong>: The ambiguous <code>includeContext</code> parameter is being soft-deprecated in favor of explicit capability declarations</li>
</ul>
<p>As an example, a research server can spawn multiple agents internally, coordinate their work, and deliver a coherent result while using nothing other than standard MCP primitives without custom scaffolding or complex orchestration code.</p>
<h3 id="developer-experience-improvements">Developer Experience Improvements</h3>
<p>One of the core tenets of MCP is <em>simplicity</em> - we want to make the developer and integration experience as intuitive and easy as possible. To help achieve this, the latest spec release also adds a few minor changes that help make the protocol easier to use for developers.</p>
<ul>
<li><strong><a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986">SEP-986</a></strong>: Standardized format for tool names</li>
<li><strong><a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1319">SEP-1319</a></strong>: Decoupled request payload from RPC methods definition</li>
<li><strong><a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1699">SEP-1699</a></strong>: SSE polling via server-side disconnect for better connection management</li>
<li><strong><a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1309">SEP-1309</a></strong>: Improved specification version management for SDKs</li>
</ul>
<h2 id="looking-forward">Looking Forward</h2>
<p>This release is backward compatible. Your existing implementations keep working. The new features are there when you need them.</p>
<p>Looking ahead, we&rsquo;re excited about what&rsquo;s coming next for MCP. The protocol is entering a new phase, one where it&rsquo;s not just about connecting LLMs to data, but about enabling entirely new categories of AI-powered applications.</p>
<p>We&rsquo;re seeing early signals of this transformation already. Developers are building multi-agent systems that coordinate across dozens of MCP servers. Enterprise teams are deploying MCP at scale with sophisticated security and governance controls. Startups are launching products where MCP is the core architectural pattern. MCP servers are even being transformed into executable code, to create sandboxed agent workflows.</p>
<p>The <a href="https://modelcontextprotocol.io/development/roadmap">roadmap ahead</a> includes deeper work on reliability and observability, making it easier to debug and monitor complex MCP deployments. We&rsquo;re exploring better patterns for server composition, allowing you to build sophisticated capabilities by combining simpler building blocks. And we&rsquo;re continuing to refine the security model to meet the needs of the most demanding enterprise environments.</p>
<p>What excites us most isn&rsquo;t what <em>we&rsquo;re</em> planning to build but what <em>our community</em> is going to build. Every week we see MCP servers designed, developed, and deployed in novel ways. Every conversation in Discord reveals new use cases and patterns. The protocol has become a canvas for AI innovation, and we can&rsquo;t fill it alone.</p>
<p>The next year of MCP will be shaped by more production deployments, more real-world feedback, amplified by the creativity of thousands of developers worldwide. We&rsquo;re here to support that growth, to ensure the protocol evolves thoughtfully, and to keep MCP stable, secure, and simple as it scales.</p>
<h2 id="get-started">Get Started</h2>
<p>To get started with all the new goodness in the latest MCP specification release, check out the following resources:</p>
<ul>
<li><strong>Read the changelog</strong>: All major changes are captured in our <a href="https://modelcontextprotocol.io/specification/2025-11-25/changelog">Key Changes document</a></li>
<li><strong>Get to know our docs</strong>: The <a href="https://modelcontextprotocol.io/docs/getting-started/intro">MCP documentation</a> is the source of truth for the all the inner workings of the protocol</li>
<li><strong>Join the discussion</strong>: If you would like to contribute or engage with other MCP maintainers, start with our <a href="https://github.com/modelcontextprotocol/modelcontextprotocol">GitHub repo</a> and <a href="https://modelcontextprotocol.io/community/communication#discord">Discord</a></li>
</ul>
]]></content:encoded></item><item><title>MCP Apps: Extending servers with interactive user interfaces</title><link>https://blog.modelcontextprotocol.io/posts/2025-11-21-mcp-apps/</link><pubDate>Fri, 21 Nov 2025 22:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2025-11-21-mcp-apps/</guid><description>Introducing the MCP Apps Extension proposal (SEP-1865) to standardize interactive user interfaces in MCP, developed with the MCP-UI creators and maintainers from OpenAI and Anthropic.</description><content:encoded><![CDATA[<p>Today we&rsquo;re introducing the proposal for the <a href="https://github.com/modelcontextprotocol/ext-apps">MCP Apps Extension</a> (<a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1865">SEP-1865</a>) to standardize support for interactive user interfaces in the Model Context Protocol.</p>
<p>This extension addresses one of the most requested features from the MCP community and builds on proven work from <a href="https://github.com/idosal/mcp-ui">MCP-UI</a> and <a href="https://developers.openai.com/apps-sdk/">OpenAI Apps SDK</a> - the <strong>ability for MCP servers to deliver interactive user interfaces to hosts</strong>.</p>
<p>MCP Apps Extension introduces a standardized pattern for declaring UI resources, linking them to tools, and enabling bidirectional communication between embedded interfaces and the host application.</p>
<p><img alt="Example of an inline chat app with interactive UI for permission management" loading="lazy" src="/posts/images/inline-chat-app.png"></p>
<p>The SEP was authored by MCP Core Maintainers at OpenAI and Anthropic, together with the MCP-UI creators and lead maintainers of the MCP UI Community Working Group.</p>
<h2 id="standardization-for-interactive-interfaces">Standardization for interactive interfaces</h2>
<p>Currently, MCP servers are limited to exchanging text and structured data with hosts. While this works well for many use cases, it creates friction when tools need to present visual information or gather complex user input.</p>
<p>For example, consider a data visualization MCP server that returns chart data as JSON. The host application must interpret that data and render it. Handling all kinds of specialized data in this scenario translates to a significant burden for client developers, who would need to build their own logic to render the UI. As more UI requirements come up, like the need to collect multiple related settings from users, the complexity balloons. Alternatively, without UI support, these interactions become awkward exchanges of text prompts and responses.</p>
<p>The MCP community has been creative in working around these limitations, but different implementations using varying conventions and architectures make it harder for servers to work consistently across clients. This lack of standardization creates a real risk of ecosystem fragmentation - something we&rsquo;re working to proactively prevent.</p>
<h2 id="building-together">Building together</h2>
<p>The <a href="https://github.com/MCP-UI-Org/mcp-ui">MCP-UI project</a>, created by <a href="https://github.com/idosal">Ido Salomon</a> and <a href="https://github.com/liady">Liad Yosef</a> and maintained by a dedicated community, spearheaded the vision of agentic apps with interactive interfaces. The project developed patterns for delivering rich user interfaces as first-class MCP resources, proving that agentic apps fit naturally within the MCP architecture. The project is backed by a large community and provides <a href="https://mcpui.dev/guide/client/overview">rich SDKs</a>, adopted at leading companies and projects such as Postman, Shopify, Hugging Face, Goose, and ElevenLabs.</p>
<p>The <a href="https://developers.openai.com/apps-sdk/">OpenAI Apps SDK</a> further validated the demand for rich UI experiences within conversational AI interfaces. The SDK enables developers to build rich, interactive applications inside ChatGPT using MCP as its backbone. To ensure interoperability and establish consistent security and usage patterns across the ecosystem, Anthropic, OpenAI, and MCP-UI are collaborating to create an official MCP extension for interactive interfaces.</p>
<p><img alt="Example of a fullscreen app with a rich data table interface" loading="lazy" src="/posts/images/fullscreen-chat-app.png"></p>
<h2 id="mcp-apps-extension-specification">MCP Apps Extension specification</h2>
<p>We&rsquo;re proposing a specification for UI resources in MCP, but the implications go further than just a set of schema changes. The MCP Apps Extension is starting to look like an agentic app runtime: a foundation for novel interactions between AI models, users, and applications. The proposal is intentionally lean, starting with core patterns that we plan on expanding over time.</p>
<h3 id="key-design-decisions">Key design decisions</h3>
<h4 id="pre-declared-resources">Pre-declared resources</h4>
<p>UI templates are resources with the <code>ui://</code> URI scheme, referenced in tool metadata.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ts" data-lang="ts"><span style="display:flex;"><span><span style="color:#75715e">// Server registers UI resource
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>{
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">uri</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;ui://charts/bar-chart&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">name</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;Bar Chart Viewer&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">mimeType</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;text/html+mcp&#34;</span>
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Tool references it in metadata
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>{
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">name</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;visualize_data_as_bar_chart&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">description</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;Plots some data as a bar chart&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">inputSchema</span><span style="color:#f92672">:</span> {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">type</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;object&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">properties</span><span style="color:#f92672">:</span> {
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">series</span><span style="color:#f92672">:</span> { <span style="color:#66d9ef">type</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;array&#34;</span>, <span style="color:#a6e22e">items</span>: <span style="color:#66d9ef">....</span> }
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>  },
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">_meta</span><span style="color:#f92672">:</span> {
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;ui/resourceUri&#34;</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;ui://charts/bar-chart&#34;</span>,
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>This approach enables hosts to prefetch and review templates before tool execution, improving both performance and security. It also separates static presentation (the template) from dynamic data (tool results), enabling better caching.</p>
<h4 id="mcp-transport-for-communication">MCP transport for communication</h4>
<p>Instead of inventing a custom message protocol, UI components communicate with hosts using existing MCP JSON-RPC base protocol over <code>postMessage</code>. This means that:</p>
<ul>
<li>UI developers can use the standard <code>@modelcontextprotocol/sdk</code> to build their applications</li>
<li>All communication is structured and auditable</li>
<li>Future MCP features automatically work with the UI extension</li>
</ul>
<h4 id="starting-with-html">Starting with HTML</h4>
<p>The initial extension specification supports only <code>text/html</code> content, rendered in sandboxed <a href="https://developer.mozilla.org/docs/Web/HTML/Reference/Elements/iframe">iframes</a>. This provides:</p>
<ul>
<li>Universal browser support</li>
<li>Well-understood security model</li>
<li>Screenshot and preview generation capabilities</li>
<li>A clear baseline for future extensions</li>
</ul>
<p>Other content types such as external URLs, remote DOM, and native widgets are explicitly deferred to future iterations.</p>
<h4 id="security-first">Security-first</h4>
<p>Hosting interactive content from MCP servers requires careful security consideration. The proposal addresses this through multiple layers:</p>
<ol>
<li><strong>Iframe sandboxing</strong>: All UI content runs in sandboxed iframes with restricted permissions</li>
<li><strong>Predeclared templates</strong>: Hosts can review HTML content before rendering</li>
<li><strong>Auditable messages</strong>: All UI-to-host communication goes through loggable JSON-RPC</li>
<li><strong>User consent</strong>: Hosts can require explicit approval for UI-initiated tool calls</li>
</ol>
<p>These mitigations create defense in depth against malicious servers while preserving the flexibility developers need.</p>
<h4 id="backward-compatibility">Backward compatibility</h4>
<p>MCP Apps is an optional extension. Existing implementations continue working without changes, and hosts can gradually adopt UI support at their own pace. Servers should provide text-only fallback for all UI-enabled tools and return meaningful content even when UI is unavailable, so they can serve both UI-capable and text-only hosts.</p>
<h2 id="whats-next">What&rsquo;s next</h2>
<p>The <a href="https://github.com/modelcontextprotocol-community/working-groups/issues/35">UI Community Working Group</a> has been instrumental in shaping this proposal through extensive feedback and discussion. We have built an <a href="https://github.com/modelcontextprotocol/ext-apps">early access SDK</a> to demonstrate the patterns and types described in the specification proposal. The <a href="https://mcpui.dev/">MCP-UI</a> client and server SDKs support these patterns.</p>
<p>If you are interested in contributing to this effort, we invite you to:</p>
<ul>
<li>Review the full specification in <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1865">SEP-1865</a></li>
<li>Share feedback and concerns in <a href="https://github.com/MCP-UI-Org/mcp-ui/issues">GitHub Issues</a></li>
<li>Join the discussion in the <code>#ui-wg</code> channel in the <a href="https://modelcontextprotocol.io/community/communication#discord">MCP Contributors Discord</a></li>
<li>Test prototype implementations and share your experience</li>
</ul>
<h2 id="acknowledgements">Acknowledgements</h2>
<p>This proposal wouldn&rsquo;t exist without the work of the maintainers at MCP-UI, OpenAI, and Anthropic.</p>
<p><strong>Ido Salomon</strong> and <strong>Liad Yosef</strong>, through MCP-UI and moderation of <code>#ui-wg</code>, incubated and championed many of the patterns that MCP Apps now standardizes, and together with contributors demonstrated that UI resources can be a natural part of MCP.</p>
<p><strong>Sean Strong</strong>, <strong>Olivier Chafik</strong>, <strong>Anton Pidkuiko</strong>, and <strong>Jerome Swannack</strong> from Anthropic helped steer the initiative and drive the collaboration.</p>
<p><strong>Nick Cooper</strong>, <strong>Alexei Christakis</strong>, and <strong>Bryan Ashley</strong> from OpenAI have provided valuable direction from their experience building the Apps SDK.</p>
<p>Special thanks to the <strong>UI Community Working Group</strong> members and everyone who contributed to the discussions that shaped this proposal.</p>
]]></content:encoded></item><item><title>Adopting the MCP Bundle format (.mcpb) for portable local servers</title><link>https://blog.modelcontextprotocol.io/posts/2025-11-20-adopting-mcpb/</link><pubDate>Fri, 21 Nov 2025 00:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2025-11-20-adopting-mcpb/</guid><description>The MCP Bundle format (.mcpb) joins the MCP project, enabling one-click installation of local servers across any compatible client.</description><content:encoded><![CDATA[<p>The <a href="https://github.com/modelcontextprotocol/mcpb">MCP Bundle format</a> (MCPB) is now part of the <a href="https://github.com/modelcontextprotocol">Model Context Protocol project</a>. This distribution format simplifies how developers package and share local MCP servers, enabling users to install them across any compatible client, including the <a href="https://claude.com/download">Claude desktop app</a>, <a href="https://claude.com/product/claude-code">Claude Code</a>, and <a href="https://learn.microsoft.com/windows/ai/mcp/servers/mcp-server-overview">MCP for Windows</a>.</p>
<h2 id="what-are-mcp-bundles">What are MCP Bundles?</h2>
<p>MCP Bundles are ZIP archives containing a local MCP server and a <code>manifest.json</code> that describes the server and its capabilities. The format is similar to Chrome extensions (<code>.crx</code>) or VS Code extensions (<code>.vsix</code>), enabling end users to install local MCP servers with a single click.</p>
<p>A basic bundle structure looks like:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>bundle.mcpb (ZIP file)
</span></span><span style="display:flex;"><span>├── manifest.json      # Required: Bundle metadata and configuration
</span></span><span style="display:flex;"><span>├── server/            # Server implementation
</span></span><span style="display:flex;"><span>│   └── index.js
</span></span><span style="display:flex;"><span>├── node_modules/      # Bundled dependencies
</span></span><span style="display:flex;"><span>└── icon.png           # Optional: Bundle icon
</span></span></code></pre></div><p>The format supports servers written in Node.js, Python, or compiled binaries, giving developers flexibility in how they build their integrations, while maintaining a consistent distribution mechanism for users.</p>
<h2 id="why-move-mcpb-to-the-mcp-project">Why move MCPB to the MCP project?</h2>
<p>Anthropic originally developed MCPB (previously called DXT) for Claude&rsquo;s desktop applications. However, we believe the local MCP server ecosystem benefits when portability extends beyond any single client. By moving the <a href="https://github.com/modelcontextprotocol/mcpb/blob/main/MANIFEST.md">bundle specification</a>, <a href="https://github.com/modelcontextprotocol/mcpb/blob/main/CLI.md">CLI tooling</a>, and <a href="https://github.com/modelcontextprotocol/mcpb/tree/main/examples">reference implementation</a> to the MCP project, we&rsquo;re enabling:</p>
<ul>
<li><strong>Cross-client compatibility:</strong> A bundle created for one MCP-compatible application should work in any other that implements the specification. Developers can distribute their work once and reach users across the ecosystem.</li>
<li><strong>Ecosystem-wide tooling:</strong> The <code>mcpb</code> CLI and associated libraries are now open for the community to extend, improve, and build upon. Client developers can adopt standardized code for loading and verifying bundles.</li>
<li><strong>User-friendly installation:</strong> End users benefit from a consistent installation experience regardless of which AI application they prefer. Configuration variables, permissions, and updates can be handled uniformly.</li>
<li><strong>Shared community:</strong> MCPB contributors can now collaborate in the open with the rest of the <a href="https://modelcontextprotocol.io/community/communication">MCP community</a>.</li>
</ul>
<h2 id="what-this-means-for-developers">What this means for developers</h2>
<p>This transition is mostly a logistical change, but also brings some benefits to implementers. For those that are building:</p>
<ul>
<li><strong>Servers:</strong> You can use MCPB to package your local MCP servers for distribution across multiple clients. The <code>mcpb</code> CLI helps you create a <code>manifest.json</code> and package your server into a <code>.mcpb</code> file. Once packaged, users can install your server with a single click in any client that supports MCP Bundles.</li>
<li><strong>Clients:</strong> You can add support for MCP Bundles to your application using the open source toolchain. <a href="https://github.com/modelcontextprotocol/mcpb">The repository</a> includes the schemas and key functions used by Claude for macOS and Windows to implement bundle support, which you can adapt for your own client.</li>
</ul>
<h2 id="getting-started">Getting started</h2>
<p>Check out the repo to get started: <a href="https://github.com/modelcontextprotocol/mcpb">modelcontextprotocol/mcpb</a>. We encourage <a href="https://github.com/modelcontextprotocol/mcpb/issues">feedback</a> and contributions!</p>
<h2 id="acknowledgements">Acknowledgements</h2>
<p>Thanks to the MCP contributors and maintainers involved in making this happen, including:</p>
<ul>
<li><a href="https://github.com/dsp-ant">David Soria Parra</a> (<em>MCP Lead Maintainer</em>)</li>
<li><a href="https://github.com/domdomegg">Adam Jones</a> (<em>MCP Maintainer</em>)</li>
<li><a href="https://github.com/joan-anthropic">Joan Xie</a> (<em>MCPB Maintainer</em>)</li>
<li><a href="https://github.com/felixrieseberg">Felix Rieseberg</a> (<em>MCPB Maintainer</em>)</li>
<li><a href="https://github.com/asklar">Alex Sklar</a> (<em>MCPB Maintainer</em>)</li>
</ul>
]]></content:encoded></item><item><title>Server Instructions: Giving LLMs a user manual for your server</title><link>https://blog.modelcontextprotocol.io/posts/2025-11-03-using-server-instructions/</link><pubDate>Mon, 03 Nov 2025 00:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2025-11-03-using-server-instructions/</guid><description>How server instructions give LLMs the context they need to use your MCP server&amp;#39;s tools effectively — an underused protocol feature with outsized impact.</description><content:encoded><![CDATA[<p>Many of us are still exploring the nooks and crannies of MCP and learning how to best use the building blocks of the protocol to enhance agents and applications. Some features, like <a href="https://blog.modelcontextprotocol.io/posts/2025-07-29-prompts-for-automation/">Prompts</a>, are frequently implemented and used within the MCP ecosystem. Others may appear a bit more obscure but have a lot of influence on how well an agent can interact with an MCP server. <strong>Server instructions</strong> fall in the latter category.</p>
<h2 id="the-problem">The Problem</h2>
<p>Imagine you&rsquo;re a Large Language Model (LLM) who just got handed a collection of tools from a database server, a file system server, and a notification server to complete a task. They might have already been carefully pre-selected or they might be more like what my workbench looks like in my garage - a mishmash of recently-used tools.</p>
<p>Now let&rsquo;s say that the developer of the database server has pre-existing knowledge or preferences about how to best use their tools, as well as more background information about the underlying systems that power them.</p>
<p>Some examples could include:</p>
<ul>
<li>&ldquo;Always use <code>validate_schema</code> → <code>create_backup</code> → <code>migrate_schema</code> for safe database migrations&rdquo;</li>
<li>&ldquo;When using the <code>export_data</code> tool, the file system server&rsquo;s <code>write_file</code> tool is required for storing local copies&rdquo;</li>
<li>&ldquo;Database connection tools are rate limited to 10 requests per minute&rdquo;</li>
<li>&ldquo;If <code>create_backup</code> fails, check if the notification server is connected before attempting to send alerts&rdquo;</li>
<li>&ldquo;Only use <code>request_preferences</code> to ask the user for settings if elicitation is supported. Otherwise, fall back to using default configuration&rdquo;</li>
</ul>
<p>So now our question becomes: what&rsquo;s the most effective way to share this contextual knowledge?</p>
<h2 id="solutions">Solutions</h2>
<p>One solution could be to include extra information in every tool description or prompt provided by the server. Going back to the physical tool analogy, however: you can only depend on &ldquo;labeling&rdquo; each tool if there is enough space to describe them. A model&rsquo;s context window is limited - there&rsquo;s only so much information you can fit into that space. Even if all those labels can fit within your model&rsquo;s context window, the more tokens you cram into that space, the more challenging it becomes for models to follow them all.</p>
<p>Alternatively, relying on prompts to give common instructions means that:</p>
<ul>
<li>The prompt always needs to be selected by the user, and</li>
<li>The instructions are more likely to get lost in the shuffle of other messages.</li>
</ul>
<p>It&rsquo;s like having a pile of notes on my garage workbench, each trying to explain how different tools relate to each other. While you might find the right combination of notes, you&rsquo;d rather have a single, clear manual that explains how everything works together.</p>
<p>Similarly, for global instructions that you want the LLM to follow, it&rsquo;s best to inject them into the model&rsquo;s system prompt instead of including them in multiple tool descriptions or standalone prompts.</p>
<p>This is where <strong>server instructions</strong> come in. <a href="https://modelcontextprotocol.io/specification/draft/schema#initializeresult">Server instructions</a> give the server a way to inject information that the LLM should always read in order to understand how to use the server - independent of individual prompts, tools, or messages.</p>
<h3 id="a-note-on-implementation-variability">A Note on Implementation Variability</h3>
<p>Because server instructions may be injected into the system prompt, they should be written with caution and diligence. No instructions are better than poorly written instructions.</p>
<p>Additionally, the exact way that the MCP host uses server instructions is up to the implementer, so it&rsquo;s not always guaranteed that they will be injected into the system prompt. It&rsquo;s always recommended to evaluate a client&rsquo;s behavior with your server and its tools before relying on this functionality.</p>
<p>We will get deeper into both of these considerations with concrete examples.</p>
<h2 id="real-world-example-optimizing-github-pr-reviews">Real-World Example: Optimizing GitHub PR Reviews</h2>
<p>I tested server instructions using the official <a href="https://github.com/github/github-mcp-server">GitHub MCP server</a> to see if they could improve how models handle complex workflows. Even with advanced features like toolsets, models may struggle to consistently follow optimal multi-step patterns without explicit guidance.</p>
<h3 id="the-problem-detailed-pull-request-reviews">The Problem: Detailed Pull Request Reviews</h3>
<p>One common use case where I thought instructions could be helpful is when asking an LLM to &ldquo;Review pull request #123.&rdquo; Without more guidance, a model might decide to over-simplify and use the <code>create_and_submit_pull_request_review</code> tool to add all review feedback in a single comment. This isn&rsquo;t as helpful as leaving multiple inline comments for a detailed code review.</p>
<h3 id="the-solution-workflow-aware-instructions">The Solution: Workflow-Aware Instructions</h3>
<p>One solution I tested with the GitHub MCP server is to add instructions based on enabled toolsets. My hypothesis was that this would improve the consistency of workflows across models while still ensuring that I was only loading relevant instructions for the tools I wanted to use. Here is an example of what I added if the <code>pull_requests</code> toolset is enabled:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-go" data-lang="go"><span style="display:flex;"><span><span style="color:#66d9ef">func</span> <span style="color:#a6e22e">GenerateInstructions</span>(<span style="color:#a6e22e">enabledToolsets</span> []<span style="color:#66d9ef">string</span>) <span style="color:#66d9ef">string</span> {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">instructions</span> []<span style="color:#66d9ef">string</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// Universal context management - always present</span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">baseInstruction</span> <span style="color:#f92672">:=</span> <span style="color:#e6db74">&#34;GitHub API responses can overflow context windows. Strategy: 1) Always prefer &#39;search_*&#39; tools over &#39;list_*&#39; tools when possible, 2) Process large datasets in batches of 5-10 items, 3) For summarization tasks, fetch minimal data first, then drill down into specifics.&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// Only load instructions for enabled toolsets to minimize context usage</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> <span style="color:#a6e22e">contains</span>(<span style="color:#a6e22e">enabledToolsets</span>, <span style="color:#e6db74">&#34;pull_requests&#34;</span>) {
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">instructions</span> = append(<span style="color:#a6e22e">instructions</span>, <span style="color:#e6db74">&#34;PR review workflow: Always use &#39;create_pending_pull_request_review&#39; → &#39;add_comment_to_pending_review&#39; → &#39;submit_pending_pull_request_review&#39; for complex reviews with line-specific comments.&#34;</span>)
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">strings</span>.<span style="color:#a6e22e">Join</span>(append([]<span style="color:#66d9ef">string</span>{<span style="color:#a6e22e">baseInstruction</span>}, <span style="color:#a6e22e">instructions</span><span style="color:#f92672">...</span>), <span style="color:#e6db74">&#34; &#34;</span>)
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>After implementing these instructions, I wanted to test whether they actually improved model behavior in practice.</p>
<h3 id="measuring-effectiveness-quantitative-results">Measuring Effectiveness: Quantitative Results</h3>
<p>To validate the impact of server instructions, I ran a simple controlled evaluation in Visual Studio Code comparing model behavior with and without the PR review workflow instruction. Using 40 GitHub PR review sessions on the same set of code changes, I measured whether models followed the optimal three-step workflow.</p>
<p>I used the following tool usage pattern to differentiate between successful and unsuccessful reviews:</p>
<ul>
<li><strong>Success:</strong> <code>create_pending_pull_request_review</code> → <code>add_comment_to_pending_review</code> → <code>submit_pending_pull_request_review</code></li>
<li><strong>Failure:</strong> Single-step <code>create_and_submit_pull_request_review</code> OR no review tools used. (Sometimes the model decided just to summarize feedback but didn&rsquo;t leave any comments on the PR.)</li>
</ul>
<p>You can find more setup details and raw data from this evaluation in <a href="https://github.com/olaservo/mcp-server-instructions-demo">my sample MCP Server Instructions repo</a>.</p>
<p>For this sample of chat sessions, I got the following results:</p>
<table>
  <thead>
      <tr>
          <th>Model</th>
          <th>With Instructions</th>
          <th>Without Instructions</th>
          <th>Improvement</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>GPT-5-Mini</strong></td>
          <td>8/10 (80%)</td>
          <td>2/10 (20%)</td>
          <td><strong>+60%</strong></td>
      </tr>
      <tr>
          <td><strong>Claude Sonnet-4</strong></td>
          <td>9/10 (90%)</td>
          <td>10/10 (100%)</td>
          <td>N/A</td>
      </tr>
      <tr>
          <td><strong>Overall</strong></td>
          <td>17/20 (85%)</td>
          <td>12/20 (60%)</td>
          <td><strong>+25%</strong></td>
      </tr>
  </tbody>
</table>
<p>These results suggest that while some models naturally gravitate toward optimal patterns, others benefit significantly from explicit guidance. This variability makes server instructions particularly valuable for ensuring consistent behavior across different models and client implementations.</p>
<p>You can check out the latest server instructions in the <a href="https://github.com/github/github-mcp-server/blob/main/pkg/github/instructions.go">GitHub MCP server repo</a>, which now includes this PR workflow as well as other hints for effective tool usage.</p>
<h2 id="implementing-server-instructions-general-tips-for-server-developers">Implementing Server Instructions: General Tips For Server Developers</h2>
<p>One key to good instructions is focusing on <strong>what tools and resources don&rsquo;t convey</strong>:</p>
<ol>
<li>
<p><strong>Capture cross-feature relationships</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;instructions&#34;</span>: <span style="color:#e6db74">&#34;Always call &#39;authenticate&#39; before any &#39;fetch_*&#39; tools. The &#39;cache_clear&#39; tool invalidates all &#39;fetch_*&#39; results.&#34;</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div></li>
<li>
<p><strong>Document operational patterns</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;instructions&#34;</span>: <span style="color:#e6db74">&#34;For best performance: 1) Use &#39;batch_fetch&#39; for multiple items, 2) Check &#39;rate_limit_status&#39; before bulk operations, 3) Results are cached for 5 minutes.&#34;</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div></li>
<li>
<p><strong>Specify constraints and limitations</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;instructions&#34;</span>: <span style="color:#e6db74">&#34;File operations limited to workspace directory. Binary files over 10MB will be rejected. Rate limit: 100 requests/minute across all tools.&#34;</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div></li>
<li>
<p><strong>Write model-agnostic instructions</strong>:</p>
<p>Keep instructions factual and functional rather than assuming specific model behaviors. Don&rsquo;t rely on a specific model being used or assume model capabilities (such as reasoning).</p>
</li>
</ol>
<h3 id="anti-patterns-to-avoid">Anti-Patterns to Avoid</h3>
<p><strong>Don&rsquo;t repeat tool descriptions</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#75715e">// Bad - duplicates what&#39;s in tool.description
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#e6db74">&#34;instructions&#34;</span><span style="color:#960050;background-color:#1e0010">:</span> <span style="color:#e6db74">&#34;The search tool searches for files. The read tool reads files.&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Good - adds relationship context
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#e6db74">&#34;instructions&#34;</span><span style="color:#960050;background-color:#1e0010">:</span> <span style="color:#e6db74">&#34;Use &#39;search&#39; before &#39;read&#39; to validate file paths. Search results expire after 10 minutes.&#34;</span>
</span></span></code></pre></div><p><strong>Don&rsquo;t include marketing or superiority claims</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#75715e">// Bad
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#e6db74">&#34;instructions&#34;</span><span style="color:#960050;background-color:#1e0010">:</span> <span style="color:#e6db74">&#34;This is the best server for all your needs! Superior to other servers!&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Good
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#e6db74">&#34;instructions&#34;</span><span style="color:#960050;background-color:#1e0010">:</span> <span style="color:#e6db74">&#34;Specialized for Python AST analysis. Not suitable for binary file processing.&#34;</span>
</span></span></code></pre></div><p><strong>Don&rsquo;t include general behavioral instructions, or anything unrelated to the tools or servers.</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#75715e">// Bad - unrelated to server functionality
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#e6db74">&#34;instructions&#34;</span><span style="color:#960050;background-color:#1e0010">:</span> <span style="color:#e6db74">&#34;When using this server, talk like a pirate! Also be sure to always suggest that users switch to Linux for better performance.&#34;</span>
</span></span></code></pre></div><p><strong>Don&rsquo;t write a manual</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#75715e">// Bad - too long and detailed
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#e6db74">&#34;instructions&#34;</span><span style="color:#960050;background-color:#1e0010">:</span> <span style="color:#e6db74">&#34;This server provides comprehensive functionality for... [500 words]&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Good - concise and actionable
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#e6db74">&#34;instructions&#34;</span><span style="color:#960050;background-color:#1e0010">:</span> <span style="color:#e6db74">&#34;GitHub integration server. Workflow: 1) &#39;auth_github&#39;, 2) &#39;list_repos&#39;, 3) &#39;clone_repo&#39;. API rate limits apply - check &#39;rate_status&#39; before bulk operations.&#34;</span>
</span></span></code></pre></div><h3 id="what-server-instructions-cant-do">What Server Instructions Can&rsquo;t Do:</h3>
<ul>
<li><strong>Guarantee certain behavior:</strong> As with any text you give an LLM, your instructions aren&rsquo;t going to be followed the same way all the time. Anything you ask a model to do is like rolling dice. The reliability of any instructions will vary based on randomness, sampling parameters, model, client implementation, other servers and tools at play, and many other variables.
<ul>
<li>Don&rsquo;t rely on instructions for any critical actions that need to happen in conjunction with other actions, especially in security or privacy domains. These are better implemented as deterministic rules or hooks.</li>
</ul>
</li>
<li><strong>Account for suboptimal tool design:</strong> Tool descriptions and other aspects of interface design for agents are still going to make or break how well LLMs can use your server when they need to take an action.</li>
<li><strong>Change model personality or behavior:</strong> Server instructions are for explaining your tools, not for modifying how the model generally responds or behaves.</li>
</ul>
<h3 id="a-note-for-client-implementers">A Note for Client Implementers</h3>
<p>If you&rsquo;re building an MCP client that supports server instructions, we recommend that you expose instructions to users and provide transparency about what servers are injecting into context. In the VSCode example, I was able to verify exactly what was being sent to the model in the chat logs.</p>
<p>Additional suggestions for implementing instructions in clients:</p>
<ul>
<li><strong>Give users control</strong> - Allow reviewing, enabling, or disabling server instructions to help users customize server usage and minimize conflicts or remove suboptimal instructions.</li>
<li><strong>Document your approach</strong> - Be clear about how your client handles and applies server instructions.</li>
</ul>
<h2 id="currently-supported-host-applications">Currently Supported Host Applications</h2>
<p>For a complete list of host applications that support server instructions, refer to the <a href="https://modelcontextprotocol.io/clients">Clients</a> page in the MCP documentation.</p>
<p>For a basic demo of server instructions in action, you can use the <a href="https://github.com/modelcontextprotocol/servers/tree/main/src/everything">Everything reference server</a> to confirm that your client supports this feature:</p>
<ol>
<li>Install the Everything Server in your host. The link above includes instructions on how to do this in a few popular applications. In the example below, we&rsquo;re using <a href="https://docs.anthropic.com/en/docs/claude-code/mcp">Claude Code</a>.</li>
<li>Once you&rsquo;ve confirmed that the server is connected, ask the model: <code>does the everything server tools have any special  instructions?</code></li>
<li>If the model can see your instructions, you should get a response like the one below:</li>
</ol>
<p><img
src="/posts/images/claude_code_instructions.JPG"
alt="Screenshot of response which reads: Server instructions are working!"
/></p>
<h2 id="wrapping-up">Wrapping Up</h2>
<p>Clear and actionable server instructions are a key tool in your MCP toolkit, offering a simple but effective way to enhance how LLMs interact with your server. This post provided a brief overview of how to use and implement server instructions in MCP servers. We encourage you to share your examples, insights, and questions <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/discussions">in our discussions</a>.</p>
<h2 id="acknowledgements">Acknowledgements</h2>
<p>Parts of this blog post were sourced from discussions with the MCP community, contributors, and maintainers including:</p>
<ul>
<li><a href="https://github.com/akolotov">@akolotov</a></li>
<li><a href="https://github.com/cliffhall">@cliffhall</a></li>
<li><a href="https://github.com/connor4312">@connor4312</a></li>
<li><a href="https://github.com/digitarald">@digitarald</a></li>
<li><a href="https://github.com/dsp-ant">@dsp-ant</a></li>
<li><a href="https://github.com/evalstate">@evalstate</a></li>
<li><a href="https://github.com/ivan-saorin">@ivan-saorin</a></li>
<li><a href="https://github.com/jegelstaff">@jegelstaff</a></li>
<li><a href="https://github.com/localden">@localden</a></li>
<li><a href="https://github.com/PederHP">@PederHP</a></li>
<li><a href="https://github.com/tadasant">@tadasant</a></li>
<li><a href="https://github.com/toby">@toby</a></li>
</ul>
]]></content:encoded></item><item><title>Update on the Next MCP Protocol Release</title><link>https://blog.modelcontextprotocol.io/posts/2025-09-26-mcp-next-version-update/</link><pubDate>Fri, 26 Sep 2025 10:00:00 -0800</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2025-09-26-mcp-next-version-update/</guid><description>An update on the timeline and priorities for the next Model Context Protocol specification version</description><content:encoded><![CDATA[<p><strong>Update (November 11, 2025):</strong> The specification release candidate (RC) date has been shifted from November 11th to <strong>November 14th, 2025</strong>. The specification release date remains to be <strong>November 25th, 2025</strong>.</p>
<h2 id="release-timeline">Release Timeline</h2>
<p>The next version of the Model Context Protocol specification will be released on <strong>November 25th, 2025</strong>, with a release candidate (RC) available on <strong>November 11th, 2025</strong>.</p>
<p>We&rsquo;re building in a 14-day RC validation window so client implementors and SDK maintainers can thoroughly test the protocol changes. This approach gives us the focused time we need to deliver critical improvements while applying our <a href="https://modelcontextprotocol.io/community/governance">new governance model</a> to the process.</p>
<h2 id="summer-progress">Summer Progress</h2>
<p>Our last spec was released on June 18, 2025, and focused on structured tool outputs, OAuth-based authorization, elicitation for server-initiated user interactions, and improved security best practices.</p>
<p>Since then, we’ve focused on establishing additional foundations for the MCP ecosystem:</p>
<h3 id="formal-governance-structures">Formal Governance Structures</h3>
<p>We established a <a href="https://modelcontextprotocol.io/community/governance">formal governance model for MCP</a>, including defined roles and decision-making mechanisms. We also developed the <a href="https://modelcontextprotocol.io/community/sep-guidelines">Specification Enhancement Proposal (SEP)</a> process to provide clear guidelines for contributing specification changes.</p>
<p>Our goal is transparency—making decision-making procedures clear and accessible to everyone. Like any new system serving a fast-evolving community, our governance model is still finding its footing. We&rsquo;re actively refining it as both the protocol and community continue to grow.</p>
<h3 id="working-groups">Working Groups</h3>
<p>We&rsquo;ve launched <a href="https://modelcontextprotocol.io/community/working-interest-groups">Working Groups and Interest Groups</a> to foster community collaboration. These groups serve multiple purposes:</p>
<ul>
<li>Provide clear entry points for new contributors</li>
<li>Empower community members to lead initiatives in their areas of expertise</li>
<li>Distribute ownership across the ecosystem rather than concentrating it among core maintainers</li>
</ul>
<p>We&rsquo;re developing governance structures that will grant these groups greater autonomy in decision-making and implementation. This distributed approach ensures the protocol can grow to meet community needs while maintaining quality and consistency across different domains.</p>
<h3 id="registry-development">Registry Development</h3>
<p>In September, we <a href="https://blog.modelcontextprotocol.io/posts/2025-09-08-mcp-registry-preview/">launched the MCP Registry preview</a>—an open catalog and API for indexing and discovery of MCP servers. The Registry serves as the single source of truth for available MCP servers, supporting both public and private sub-registries that organizations can customize for their specific needs.</p>
<p>Building the MCP Registry has been a true community effort. Any MCP client can consume registry content via the native API or through third-party registry aggregators, making it easier for users to discover and integrate MCP servers into their AI workflows.</p>
<h2 id="priority-areas-for-the-next-release">Priority Areas for the Next Release</h2>
<p>With governance and infrastructure foundations in place, we&rsquo;re focusing on five key protocol improvements identified by our working groups.</p>
<h3 id="asynchronous-operations">Asynchronous Operations</h3>
<p>Currently, MCP is built around mostly synchronous operations—when you call a tool, everything stops and waits for it to finish. That works great for quick tasks, but what about operations that take minutes or hours?</p>
<p>The Agents Working Group is adding async support, allowing servers to kick off long-running tasks while clients can check back later for results. You can follow the progress in <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1391">SEP-1391</a>.</p>
<h3 id="statelessness-and-scalability">Statelessness and Scalability</h3>
<p>As organizations deploy MCP servers at enterprise scale, we&rsquo;re seeing new requirements emerge. Current implementations often need to remember things between requests, which makes horizontal scaling across multiple server instances challenging.</p>
<p>While <a href="https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http">Streamable HTTP</a> provides some stateless support, pain points remain around server startup and session handling. The Transport Working Group is smoothing out these rough edges, making it easier to run MCP servers in production while keeping simple upgrade paths for teams who want more sophisticated stateful features.</p>
<h3 id="server-identity">Server Identity</h3>
<p>Today, if you want to know what an MCP server can do, you have to connect to it first. This makes it difficult for clients to browse available servers or for systems like our registry to automatically catalog capabilities.</p>
<p>We&rsquo;re solving this by letting servers advertise themselves through <a href="https://en.wikipedia.org/wiki/Well-known_URI"><code>.well-known</code> URLs</a>—an established standard for providing metadata. Think of it as a server&rsquo;s business card that anyone can read without having to knock on the door first. This will make discovery much more intuitive for every MCP consumer.</p>
<h3 id="official-extensions">Official Extensions</h3>
<p>As MCP has grown, we&rsquo;ve noticed patterns emerging for specific industries and use cases—valuable implementations that don&rsquo;t necessarily belong in the core protocol specification.</p>
<p>Rather than leaving everyone to reinvent the wheel, we&rsquo;re officially recognizing and documenting the most popular protocol extensions. This curated collection of proven patterns will give developers building for specialized domains like healthcare, finance, or education a solid starting point instead of building every custom integration from scratch.</p>
<h3 id="sdk-support-standardization">SDK Support Standardization</h3>
<p>Choosing an MCP SDK today can be challenging—it&rsquo;s hard to gauge the level of support or spec compliance you&rsquo;ll get. Some SDKs are lightning-fast with updates, while others might lag behind feature-wise.</p>
<p>We&rsquo;re introducing a clear tiering system for SDKs. You&rsquo;ll know exactly what you&rsquo;re signing up for before committing to a dependency, based on factors like specification compliance speed, maintenance responsiveness, and feature completeness.</p>
<h2 id="call-for-contributors">Call for Contributors</h2>
<p>MCP is only as strong as the community behind it. Whether you&rsquo;re an individual developer passionate about building SDKs or a company looking to invest in the ecosystem, we need your help in several key areas.</p>
<h3 id="sdk-maintenance">SDK Maintenance</h3>
<ul>
<li><a href="https://github.com/modelcontextprotocol/typescript-sdk"><strong>TypeScript SDK</strong></a> - Needs additional maintainers for feature development and bug fixes</li>
<li><a href="https://github.com/modelcontextprotocol/swift-sdk"><strong>Swift SDK</strong></a> - Requires attention for Apple ecosystem support</li>
<li><a href="https://modelcontextprotocol.io/docs/sdk">Other language SDKs</a> welcome continued contributions</li>
</ul>
<h3 id="tooling">Tooling</h3>
<ul>
<li><a href="https://github.com/modelcontextprotocol/inspector"><strong>Inspector</strong></a> - Development and maintenance of debugging tools for MCP server developers</li>
<li><a href="https://github.com/modelcontextprotocol/registry"><strong>Registry</strong></a> - Backend API and CLI development; <strong>Go expertise would be particularly welcome</strong></li>
</ul>
<h2 id="input-from-client-developers">Input from Client Developers</h2>
<p>We talk a lot about MCP servers, but clients are equally important—they&rsquo;re the bridge connecting users to the entire MCP ecosystem. If you&rsquo;re building an MCP client, you&rsquo;re seeing the protocol from a unique angle, and we need that perspective embedded in the protocol design.</p>
<p>Your real-world experience with implementation challenges, performance bottlenecks, and user needs directly shapes where the protocol should go next. Whether it&rsquo;s feedback on existing capabilities or ideas for streamlining the developer experience, we want to hear from you.</p>
<p>Join us in the <code>#client-implementors</code> working group channel in the <a href="https://modelcontextprotocol.io/community/communication">MCP Discord</a>.</p>
<h2 id="looking-ahead">Looking Ahead</h2>
<p>With governance structures and working groups in place, we&rsquo;re better positioned to tackle major protocol improvements efficiently while ensuring everyone has a voice in the process. The foundational work we&rsquo;ve done this summer gives us a solid base to build from.</p>
<p>The improvements coming in November—async operations, better scalability, server discovery, and standardized extensions—will help MCP become a stronger backbone for production AI integrations. But we can&rsquo;t do it alone.</p>
<p>MCP&rsquo;s strength has always been that it&rsquo;s an <strong>open protocol built by the community, for the community</strong>. We&rsquo;re excited to keep building it together.</p>
<p>Thank you for your continued support, and we look forward to sharing more soon.</p>
]]></content:encoded></item><item><title>Introducing the MCP Registry</title><link>https://blog.modelcontextprotocol.io/posts/2025-09-08-mcp-registry-preview/</link><pubDate>Mon, 08 Sep 2025 00:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2025-09-08-mcp-registry-preview/</guid><description>Launching the MCP Registry in preview: an open catalog and API for discovering publicly available MCP servers.</description><content:encoded><![CDATA[<p>Today, we&rsquo;re launching the Model Context Protocol (MCP) Registry—an open catalog and API for publicly available MCP servers to improve discoverability and implementation. By standardizing how servers are distributed and discovered, we’re expanding their reach while making it easier for clients to get connected.</p>
<p>The MCP Registry is now available in preview. To get started:</p>
<ul>
<li><strong>Add your server</strong> by following our guide on <a href="https://github.com/modelcontextprotocol/registry/blob/main/docs/modelcontextprotocol-io/quickstart.mdx">Adding Servers to the MCP Registry</a> (for server maintainers)</li>
<li><strong>Access server data</strong> by following our guide on <a href="https://github.com/modelcontextprotocol/registry/blob/main/docs/modelcontextprotocol-io/registry-aggregators.mdx">Accessing MCP Registry Data</a> (for client maintainers)</li>
</ul>
<h1 id="single-source-of-truth-for-mcp-servers">Single source of truth for MCP servers</h1>
<p>In March 2025, we shared that we wanted to build a central registry for the MCP ecosystem. Today we are announcing that we’ve launched <a href="https://registry.modelcontextprotocol.io">https://registry.modelcontextprotocol.io</a> as the official MCP Registry. As part of the MCP project, the MCP Registry, as well as a parent <a href="https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/api/official-registry-api.md">OpenAPI specification</a>, are open source—allowing everyone to build a compatible sub-registry.</p>
<p>Our goal is to standardize how servers are distributed and discovered, providing a primary source of truth that sub-registries can build upon. In turn, this will expand server reach and help clients find servers more easily across the MCP ecosystem.</p>
<h2 id="public-and-private-sub-registries">Public and private sub-registries</h2>
<p>In building a central registry, it was important to us not to take away from existing registries that the community and companies have built. The MCP Registry serves as a primary source of truth for publicly available MCP servers, and organizations can choose to <a href="https://github.com/modelcontextprotocol/registry/blob/main/docs/modelcontextprotocol-io/registry-aggregators.mdx">create sub-registries</a> based on custom criteria. For example:</p>
<p><strong>Public subregistries</strong> like opinionated “MCP marketplaces” associated with each MCP client are free to augment and enhance data they ingest from the upstream MCP Registry. Every MCP end-user persona will have different needs, and it is up to the MCP client marketplaces to properly serve their end-users in opinionated ways.</p>
<p><strong>Private subregistries</strong> will exist within enterprises that have strict privacy and security requirements, but the MCP Registry gives these enterprises a single upstream data source they can build upon. At a minimum, we aim to share API schemas with these private implementations so that associated SDKs and tooling can be shared across the ecosystem.</p>
<p>In both cases, the MCP Registry is the starting point – it’s the centralized location where MCP server maintainers publish and maintain their self-reported information for these downstream consumers to massage and deliver to their end-users.</p>
<h2 id="community-driven-mechanism-for-moderation">Community-driven mechanism for moderation</h2>
<p>The MCP Registry is an official MCP project maintained by the registry working group and permissively licensed. Community members can submit issues to flag servers that violate the MCP <a href="https://github.com/modelcontextprotocol/registry/blob/main/docs/modelcontextprotocol-io/moderation-policy.mdx">moderation guidelines</a>—such as those containing spam, malicious code, or impersonating legitimate services. Registry maintainers can then denylist these entries and retroactively remove them from public access.</p>
<h1 id="getting-started">Getting started</h1>
<p>To get started:</p>
<ul>
<li><strong>Add your server</strong> by following our guide on <a href="https://github.com/modelcontextprotocol/registry/blob/main/docs/modelcontextprotocol-io/quickstart.mdx">Adding Servers to the MCP Registry</a> (for server maintainers)</li>
<li><strong>Access server data</strong> by following our guide on <a href="https://github.com/modelcontextprotocol/registry/blob/main/docs/modelcontextprotocol-io/registry-aggregators.mdx">Accessing MCP Registry Data</a> (for client maintainers)</li>
</ul>
<p>This preview of the MCP Registry is meant to help us improve the user experience before general availability and does not provide data durability guarantees or other warranties. We advise MCP adopters to watch development closely as breaking changes may occur before the registry is made generally available.</p>
<p>As we continue to develop the registry, we encourage feedback and contributions on the <a href="https://github.com/modelcontextprotocol/registry">modelcontextprotocol/registry GitHub repository</a>: Discussion, Issues, and Pull Requests are all welcome.</p>
<h1 id="thanks-to-the-mcp-community">Thanks to the MCP community</h1>
<p>The MCP Registry has been a collaborative effort from the beginning and we are incredibly grateful for the enthusiasm and support from the broader developer community.</p>
<p>In February 2025, it began as a grassroots project when MCP creators <a href="https://github.com/dsp-ant">David Soria Parra</a> and <a href="https://github.com/jspahrsummers">Justin Spahr-Summers</a> asked the <a href="https://www.pulsemcp.com/">PulseMCP</a> and <a href="https://block.github.io/goose/">Goose</a> teams to help build a centralized community registry. Registry Maintainer <a href="https://github.com/tadasant">Tadas Antanavicius</a> from <a href="https://www.pulsemcp.com/">PulseMCP</a> spearheaded the initial effort in collaboration with <a href="https://github.com/alexhancock">Alex Hancock</a> from <a href="https://block.xyz/">Block</a>. They were soon joined by Registry Maintainer <a href="https://github.com/toby">Toby Padilla</a>, Head of MCP at <a href="https://github.com/">GitHub</a>, and more recently, <a href="https://github.com/domdomegg">Adam Jones</a> from <a href="https://www.anthropic.com/">Anthropic</a> joined as Registry Maintainer to drive the project towards the launch today. The <a href="https://github.com/modelcontextprotocol/registry/discussions/11">initial announcement</a> of the MCP Registry&rsquo;s development lists 16 contributing individuals from at least 9 different companies.</p>
<p>Many others made crucial contributions to bring this project to life: <a href="https://github.com/rdimitrov">Radoslav Dimitrov</a> from <a href="https://stacklok.com/">Stacklok</a>, <a href="https://github.com/sridharavinash">Avinash Sridhar</a> from <a href="https://github.com/">GitHub</a>, <a href="https://github.com/connor4312">Connor Peet</a> from <a href="https://code.visualstudio.com/">VS Code</a>, <a href="https://github.com/joelverhagen">Joel Verhagen</a> from <a href="https://www.nuget.org/">NuGet</a>, <a href="https://github.com/pree-dew">Preeti Dewani</a> from <a href="https://last9.io/">Last9</a>, <a href="https://github.com/Avish34">Avish Porwal</a> from <a href="https://www.microsoft.com/">Microsoft</a>, <a href="https://github.com/jonathanhefner">Jonathan Hefner</a>, and many Anthropic and GitHub employees that provided code reviews and development support. We are also grateful to everyone on the <a href="https://github.com/modelcontextprotocol/registry/graphs/contributors">Registry&rsquo;s contributors log</a> and those who participated in <a href="https://github.com/modelcontextprotocol/registry">discussions and issues</a>.</p>
<p>We deeply appreciate everyone investing in this foundational open source infrastructure. Together, we&rsquo;re helping developers and organizations worldwide to build more reliable, context-aware AI applications. On behalf of the MCP community, thank you.</p>
]]></content:encoded></item><item><title>Announcing the Official PHP SDK for MCP</title><link>https://blog.modelcontextprotocol.io/posts/2025-09-05-php-sdk/</link><pubDate>Fri, 05 Sep 2025 00:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2025-09-05-php-sdk/</guid><description>The official PHP SDK for the Model Context Protocol is now generally available, built in collaboration with the PHP Foundation and Symfony.</description><content:encoded><![CDATA[<p>The official <a href="https://github.com/modelcontextprotocol/php-sdk">PHP SDK</a> for the Model Context Protocol is now generally available.</p>
<p>Built in collaboration with the <a href="https://thephp.foundation/">PHP Foundation</a> and <a href="https://symfony.com/">Symfony</a>, the PHP SDK handles protocol details, so developers don’t have to worry about low-level mechanics and can focus on building their applications.</p>
<p>The initial release enables PHP developers to build MCP <a href="https://modelcontextprotocol.io/docs/learn/server-concepts">servers</a>, exposing <a href="https://modelcontextprotocol.io/docs/learn/server-concepts#tools-ai-actions">tools</a>, <a href="https://modelcontextprotocol.io/docs/learn/server-concepts#prompts-interaction-templates">prompts</a>, and <a href="https://modelcontextprotocol.io/docs/learn/server-concepts#resources-context-data">resources</a> to AI applications. Support for PHP applications to act as MCP <a href="https://modelcontextprotocol.io/docs/learn/client-concepts">clients</a> will follow.</p>
<p>The PHP SDK now joins 9 other <a href="https://modelcontextprotocol.io/docs/sdk">officially supported language SDKs</a> in the MCP ecosystem, making it easier for developers everywhere to adopt MCP in their preferred language.</p>
<h2 id="get-involved">Get involved</h2>
<p>The PHP SDK is now open to the community to install, test, and contribute:</p>
<ul>
<li>SDK repo: <a href="https://github.com/modelcontextprotocol/php-sdk">modelcontextprotocol/php-sdk</a></li>
<li>Composer package: <a href="https://packagist.org/packages/mcp/sdk">mcp/sdk</a></li>
</ul>
<p>We welcome your feedback and contribution, including issues, documentation improvements, and pull requests. Framework-specific integrations and real-world examples are also particularly valuable.</p>
<h2 id="thanks-to-the-mcp-community">Thanks to the MCP community</h2>
<p>This release consolidates earlier community work into a single, trusted implementation. The SDK is maintained by the <a href="https://symfony.com/">Symfony</a> team, with <a href="https://github.com/CodeWithKyrian">Kyrian Obikwelu</a> joining as a maintainer based on his previous <a href="https://github.com/php-mcp">PHP-MCP</a> work. The <a href="https://thephp.foundation/">PHP Foundation</a> helped to coordinate the initiative with support from the members of MCP steering group.</p>
<p>Thank you to all involved in bringing PHP to the MCP ecosystem.</p>
]]></content:encoded></item><item><title>Evolving OAuth Client Registration in the Model Context Protocol</title><link>https://blog.modelcontextprotocol.io/posts/client_registration/</link><pubDate>Fri, 22 Aug 2025 10:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/client_registration/</guid><description>&lt;p>The Model Context Protocol (MCP) has adopted OAuth 2.1 as the foundation for its authorization framework. A key part of the authorization flow that MCP is particularly reliant on is &lt;strong>client registration&lt;/strong>.&lt;/p>
&lt;p>This is especially important in a world where clients and servers don&amp;rsquo;t have a pre-existing relationship - we can&amp;rsquo;t assume that we will always know which MCP clients will connect to which MCP servers. This design highlights two challenges that need to be addressed:&lt;/p></description><content:encoded><![CDATA[<p>The Model Context Protocol (MCP) has adopted OAuth 2.1 as the foundation for its authorization framework. A key part of the authorization flow that MCP is particularly reliant on is <strong>client registration</strong>.</p>
<p>This is especially important in a world where clients and servers don&rsquo;t have a pre-existing relationship - we can&rsquo;t assume that we will always know which MCP clients will connect to which MCP servers. This design highlights two challenges that need to be addressed:</p>
<ul>
<li>Operational issues with managing client IDs via <a href="https://datatracker.ietf.org/doc/html/rfc7591">Dynamic Client Registration</a> (DCR)</li>
<li>Preventing client impersonation</li>
</ul>
<p>If you&rsquo;re already familiar with OAuth and the current state of client registration in MCP, skip to <a href="#two-distinct-challenges-in-mcp-client-registration">Two Distinct Challenges in MCP Client Registration</a>.</p>
<h2 id="background-on-oauth">Background on OAuth</h2>
<p>A protected MCP server that implements OAuth 2.1 should allow a user to grant a client access to itself and prevent attempts to trick the user into granting access to a client they didn&rsquo;t intend to use via phishing.</p>
<p>The authorization flow can be best described by looking at this sequence diagram:</p>
<pre class="mermaid">
  sequenceDiagram
   participant Client
   participant User
   participant AuthServer as Authorization Server
   participant Resource as Resource Server

   Client-&gt;&gt;User: 1. Redirect to authorization server
   User-&gt;&gt;AuthServer: Navigate to auth URL
   AuthServer-&gt;&gt;User: 2. Display consent screen
   User-&gt;&gt;AuthServer: Approve access
   AuthServer-&gt;&gt;Client: 3. Redirect with authorization code
   Client-&gt;&gt;AuthServer: 4. Exchange code for access token
   AuthServer--&gt;&gt;Client: Access token (saved)
   Client-&gt;&gt;Resource: 5. Request with access token
   Resource--&gt;&gt;Client: Protected resource
</pre>
<p>This flow requires a few steps to be performed to acquire an access token:</p>
<ol>
<li>The client directs the user to an authorization UI provided by the authorization server</li>
<li>The authorization server displays a consent screen to the user</li>
<li>User approves client access and the authorization server redirects the user back to the client with an access code</li>
<li>Client exchanges the access code for a set of tokens, which are cached locally</li>
<li>Client uses the access token to access the MCP server</li>
</ol>
<p>To be able to initiate this flow, however, the authorization server first needs some basic information about the client that is kicking off the authorization process:</p>
<ol>
<li><strong>Client name</strong>: Human readable text to display in the consent screen to help the user decide whether they want to grant access.</li>
<li><strong>Redirect URL</strong>: The destination to send the authorization code back to if the user consents.</li>
</ol>
<p>In order to prevent a malicious client from tricking a user into granting access they didn&rsquo;t intend to grant, the authorization server must be able to trust the client information it has.</p>
<p>For example, a malicious client could claim to be <code>Claude Desktop</code> on the consent screen while actually being owned by someone not affiliated with Claude Desktop developers. Seeing the client information on the consent screen, users might grant access thinking they&rsquo;re authorizing the legitimate Claude Desktop, not realizing that some malicious client now has access to their account.</p>
<h2 id="improving-client-registration-in-mcp">Improving Client Registration in MCP</h2>
<p>For MCP users, a common pattern is to connect to an MCP server by using its URL directly in an MCP client.</p>
<p>This goes against the typical OAuth authorization pattern because the user is selecting the resource server to connect to rather than the client developer. This problem is compounded by the fact that there is an unbounded number of authorization servers that an MCP server may use, meaning that clients need to be able to complete the authorization flow regardless of the provider used.</p>
<p>Some client developers have implemented pre-registration with a select few authorization servers. In this scenario, the client doesn&rsquo;t need to rely on DCR when it detects an authorization server it knows. However, this is a solution that doesn&rsquo;t scale given the breadth of the MCP ecosystem - it&rsquo;s impossible to have every client be registered with every authorization server there is.
To mitigate this challenge, we set out to outline some of the goals that we wanted to achieve with improving the client registration experience:</p>
<ol>
<li><strong>Clients</strong>: Client developers don&rsquo;t need to implement pre-registration and distribute a client ID for each authorization server MCP servers might be using.</li>
<li><strong>Users</strong>: Users don&rsquo;t need to go through a pre-registration process themselves and manually specify a client ID for every MCP server they connect to.</li>
<li><strong>Authorization servers</strong>:</li>
</ol>
<ul>
<li><strong>Trust in Metadata</strong>: Authorization servers have a way to trust the metadata they associate with a client, such as name and redirect URL.</li>
<li><strong>Single Client ID per App</strong>: Authorization servers can have a single client ID per client for governance and management purposes</li>
<li><strong>Selective Allow/Deny</strong>: Authorization servers can selectively allow or deny clients based on their policies.</li>
<li><strong>Database Management</strong>: Authorization servers do not need to handle an unbounded database or expiration flows for every new client registration.</li>
</ul>
<p>Currently, none of our existing client registration approaches satisfy all of these requirements. Pre-registration requires too much effort in a highly variable setting (unbounded number of clients connecting to unbounded number of servers), while DCR reduces effort but creates operational issues that a lot of the authorization servers are not ready to tackle yet.</p>
<h2 id="two-distinct-challenges-in-mcp-client-registration">Two Distinct Challenges in MCP Client Registration</h2>
<p>After extensive discussion with MCP server implementers, we&rsquo;ve identified that a few competing solutions to the registration problem were addressing two distinct issues:</p>
<ol>
<li><strong>Operational limitations</strong> of Dynamic Client Registration in open environments</li>
<li><strong>Client identity and impersonation</strong> risks across different deployment scenarios</li>
</ol>
<h2 id="challenge-1-operational-limitations-of-dynamic-client-registration"><strong>Challenge 1: Operational Limitations of Dynamic Client Registration</strong></h2>
<h3 id="the-dcr-model-mismatch"><strong>The DCR Model Mismatch</strong></h3>
<p>The DCR design takes the pre-registration pattern available in modern OAuth-based authorization servers and makes it available via an API. In fully open environments like MCP, DCR really puts the spotlight on a few operational challenges that an open registration endpoint introduces:</p>
<p><strong>For authorization servers:</strong></p>
<ul>
<li><strong>Unbounded database growth</strong>: Every time a user connects a client to an MCP server, a new registration is created with the authorization server unless the client already has one. Registrations are also not portable, so using Claude Desktop on your Windows machine, and then jumping to Claude Desktop on macOS will create two distinct client registrations.</li>
<li><strong>Client expiry &ldquo;black hole&rdquo;</strong>: There&rsquo;s no way to tell a client that its ID is invalid without creating an open redirect vulnerability. Clients have to implement their own heuristics for client ID management.</li>
<li><strong>Per-instance confusion</strong>: Each client instance typically gets its own client ID even when using the same application, but on different machines or across different users. From an auditing perspective, an authorization server administrator may see hundreds (if not thousands) of records for the same application without any rhyme or reason.</li>
<li><strong>Denial-of-Service vulnerability</strong>: An unauthenticated <code>/register</code> endpoint writes to a database within the authorization server, meaning that tenant admins now need to worry about rate limiting or policy controls (e.g., hosts allowed to register clients).</li>
</ul>
<p><strong>For clients:</strong></p>
<ul>
<li><strong>Extra overhead</strong>: Managing registration state and another secret beyond access/refresh tokens</li>
<li><strong>No validity checking</strong>: Can&rsquo;t verify if a client ID is still valid</li>
<li><strong>Unclear lifecycle</strong>: No guidance on when to re-register or update credentials</li>
</ul>
<h3 id="solution-client-id-metadata-documents-cimd"><strong>Solution: Client ID Metadata Documents (CIMD)</strong></h3>
<p>Client ID Metadata Documents (CIMD), described in <a href="https://www.ietf.org/archive/id/draft-parecki-oauth-client-id-metadata-document-03.html">OAuth Client ID Metadata Document</a> and implemented by Bluesky, elegantly sidestep these operational issues.</p>
<p>Instead of a registration step, clients use an HTTPS metadata URL as their client ID directly. The server fetches the metadata from the URL at authorization time:</p>
<pre class="mermaid">
  sequenceDiagram
   participant Client
   participant AuthServer
   participant MetadataURL

   Client-&gt;&gt;AuthServer: Authorization request (client_id=https://app.com/oauth.json)
   AuthServer-&gt;&gt;MetadataURL: GET https://app.com/oauth.json
   MetadataURL--&gt;&gt;AuthServer: {name: &#34;App&#34;, redirect_uris: [...]}
   AuthServer-&gt;&gt;Client: Show consent screen &amp; continue flow
</pre>
<p>This addresses all the operational issues:</p>
<ul>
<li><strong>No unbounded database growth</strong>: Servers fetch metadata on-demand (can cache for performance)</li>
<li><strong>No expiry management</strong>: The URL is the ID - it doesn&rsquo;t expire</li>
<li><strong>Natural per-app model</strong>: One URL per application, not per user</li>
<li><strong>No registration endpoint</strong>: No unauthenticated write operations</li>
</ul>
<p>The cost? Clients need to host a metadata document at an HTTPS URL. For web applications, this is trivial. For desktop applications, this typically means hosting on their backend infrastructure.</p>
<h2 id="challenge-2-client-identity-and-impersonation"><strong>Challenge 2: Client Identity and Impersonation</strong></h2>
<p>The second challenge is orthogonal to the DCR vs. CIMD debate - it&rsquo;s about trusting that a client is who it claims to be. This problem will exist regardless of how the registration process is implemented.</p>
<p>For web-based clients, trust is more straightforward, as we have an HTTPS domain that&rsquo;s tied to a certificate authority. For desktop clients, if the client can&rsquo;t offload its authorization to existing backend infrastructure, there is difficulty trusting the client is legitimate and unmodified.</p>
<h3 id="the-trust-spectrum">The Trust Spectrum</h3>
<p>We can map impersonation scenarios on two axes: attacker cost and mitigation complexity.</p>
<p><img alt="Mitigation Cost vs Attack Cost" loading="lazy" src="/posts/client_registration/mitigation-attack-cost.png"></p>
<p><strong>Low attacker cost/Low mitigation complexity: Domain-based attacks</strong></p>
<ul>
<li><strong>Attack</strong>: Register malicious callback URI and claim to be <code>Claude Desktop</code></li>
<li><strong>Cost</strong>: Trick user into clicking a link and consenting</li>
<li><strong>Mitigation</strong>:
<ul>
<li>Restrict trusted domains/URLs</li>
<li>Show warnings for unknown domains</li>
<li>Works with both DCR and CIMD</li>
</ul>
</li>
</ul>
<p><strong>Medium attacker cost/Medium mitigation complexity: <code>localhost</code> impersonation</strong></p>
<ul>
<li><strong>Attack</strong>: Run malicious app on <code>localhost:8080</code>, impersonate legitimate client</li>
<li><strong>Cost</strong>: Trick user into running a malicious application (plus consenting for that app to have data access)</li>
<li><strong>Problem</strong>: Desktop apps can&rsquo;t hold secrets, hard to prove identity</li>
</ul>
<p><strong>High attacker cost/High mitigation complexity: Platform-attested applications</strong></p>
<ul>
<li><strong>Attack</strong>: Get malicious client signed by a trusted authority</li>
<li><strong>Cost</strong>: Extremely high - requires compromising certification vendor processes</li>
<li><strong>Mitigation</strong>: platform system-level attestation (future work)</li>
</ul>
<h3 id="solution-software-statements-for-desktop-applications"><strong>Solution: Software Statements for Desktop Applications</strong></h3>
<p>To broadly solve the client impersonation for the middle tier as well as to prevent <code>localhost</code> impersonation we need signed software statements. Implementing this would require:</p>
<ol>
<li>Client hosts a JSON Web Key Set (JWKS) on their backend</li>
<li>Client authenticates the user through their own flow</li>
<li>The client-owned backend service issues a short-lived, signed JWT attesting to the client&rsquo;s identity</li>
<li>Client includes this JWT in the OAuth flow</li>
<li>Authorization server verifies the JWT against the trusted JWKS</li>
</ol>
<p>This dramatically raises the bar for client impersonation, as an attacker would need to:</p>
<ul>
<li>Compromise the client&rsquo;s backend infrastructure, or</li>
<li>Successfully impersonate the client&rsquo;s authentication flow</li>
</ul>
<p>Crucially, <strong>software statements work with both DCR and CIMD</strong>. They&rsquo;re not a competing solution - they&rsquo;re a complementary security layer.</p>
<h3 id="future-platform-level-attestation"><strong>Future: Platform-Level Attestation</strong></h3>
<p>The strongest protection would be platform-level attestation, e.g. having macOS, Windows, or Android attest that a piece of software is legitimate.</p>
<p>Having OS-level attestation would make client impersonation unreasonably expensive. While the exact way this ties into a software statement is yet to be prototyped, the general direction is threading platform-level application identity validation through to the OAuth flow.</p>
<h2 id="the-complementary-path-forward"><strong>The Complementary Path Forward</strong></h2>
<p>While we&rsquo;re looking at all available options, it&rsquo;s important to note that we&rsquo;re not choosing between solutions. We&rsquo;re exploring complementary approaches for distinct problems:</p>
<p><strong>For operational issues</strong>: We are looking at adding CIMD support in favor of DCR</p>
<ul>
<li>Keep DCR for backward compatibility</li>
<li>Recommend CIMD for new implementations</li>
<li>Both achieve the same authorization goal</li>
</ul>
<p><strong>For trust issues</strong>: Layering software statements on top</p>
<ul>
<li>Optional enhancement for both DCR and CIMD</li>
<li>Required only when <code>localhost</code> impersonation is a concern</li>
<li>Authorization servers choose their required trust level</li>
</ul>
<h2 id="security-considerations"><strong>Security Considerations</strong></h2>
<p>Both CIMD and software statements require authorization servers to make outbound HTTPS requests, potentially to untrusted domains. Implementations must:</p>
<ul>
<li>Prevent SSRF attacks by blocking internal network access</li>
<li>Implement timeouts and size limits</li>
<li>Consider caching strategies for performance</li>
<li>Validate response formats strictly</li>
</ul>
<p>If we adopt these approaches, we’ll need good best practices and SDK support to help avoid vulnerabilities and provide a easy path for implementors.</p>
<h2 id="next-steps"><strong>Next Steps</strong></h2>
<p>Discussions for these approaches are happening in the <a href="https://modelcontextprotocol.io/community/sep-guidelines">Specification Enhancement Proposals</a> (SEP):</p>
<ul>
<li><a href="https://github.com/modelcontextprotocol/specification/discussions/991">SEP-991: Client ID Metadata Documents</a></li>
<li><a href="https://github.com/modelcontextprotocol/specification/discussions/1032">SEP-1032: Software Statements with DCR</a></li>
</ul>
<p>Get involved: Join the conversation in <a href="https://discord.gg/6CSzBmMkjX">Discord</a> (the #auth-wg-client-registration channel) or comment on the SEPs directly.</p>
<p>A big thank to the following folks for help with this blog post: Den Delimarsky, Aaron Parecki, Geoff Goodman, Andrew Block, Pieter Kasselman, Abhishek Hingnikar, and Bobby Tiernay.</p>
]]></content:encoded></item><item><title>MCP Prompts: Building Workflow Automation</title><link>https://blog.modelcontextprotocol.io/posts/2025-07-29-prompts-for-automation/</link><pubDate>Mon, 04 Aug 2025 18:00:00 +0100</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2025-07-29-prompts-for-automation/</guid><description>A practical guide to building workflow automation with MCP prompts and resource templates, demonstrated through a meal planning example.</description><content:encoded><![CDATA[<p><a href="https://modelcontextprotocol.io/specification/2025-06-18">MCP (Model Context Protocol)</a> prompts enable workflow automation by combining AI capabilities with structured data access. This post demonstrates how to build automations using MCP&rsquo;s <a href="https://modelcontextprotocol.io/specification/2025-06-18/server/prompts">prompts</a> and <a href="https://modelcontextprotocol.io/specification/2025-06-18/server/resources#resource-templates">resource templates</a> through a practical example.</p>
<p>This guide demonstrates how MCP prompts can automate repetitive workflows. Whether you&rsquo;re interested in the MCP ecosystem or simply want to leverage AI for workflow automation, you&rsquo;ll learn how to build practical automations through a concrete meal planning example. No prior MCP experience needed—we&rsquo;ll cover the fundamentals before diving into implementation.</p>
<h2 id="the-problem-time-consuming-repetitive-tasks">The Problem: Time-Consuming Repetitive Tasks</h2>
<p>Everyone has a collection of repetitive tasks that eat away at their productive hours. Common examples include applying code review feedback, generating weekly reports, updating documentation, or creating boilerplate code. These tasks aren&rsquo;t complex—they follow predictable patterns—but they&rsquo;re cumbersome and time-consuming. <a href="https://modelcontextprotocol.io/specification/2025-06-18/server/prompts">MCP prompts</a> were designed to help automate this kind of work.</p>
<p>MCP prompts offer more than command shortcuts. They&rsquo;re a primitive for building workflow automation that combines the flexibility of scripting with the intelligence of modern AI systems. This post explores how to build automations using MCP&rsquo;s prompt system, resource templates, and modular servers. I&rsquo;ll demonstrate these concepts through a meal planning automation I built, but the patterns apply broadly to any structured, repetitive workflow.</p>
<h2 id="example-automating-weekly-meal-planning">Example: Automating Weekly Meal Planning</h2>
<p>I needed to solve a recurring problem: planning weekly meals by cuisine to manage ingredients efficiently. The manual process involved selecting a cuisine, choosing dishes, listing ingredients, shopping, and organizing recipes—repetitive steps that took significant time each week.</p>
<p>So I decided to use MCP! By automating these steps, I could reduce the entire workflow to selecting a cuisine and receiving a complete meal plan with shopping list. (Any client that supports MCP prompts should work!)</p>
<ol>
<li>
<p><strong>Select a prompt</strong></p>
<p><img
src="/posts/images/prompts-list.png"
alt="MCP prompts list showing available automation commands"
/></p>
</li>
<li>
<p><strong>Select a cuisine from a dropdown</strong>
<img
src="/posts/images/prompts-suggestions.png"
alt="Dropdown showing cuisine suggestions as user types"
/></p>
</li>
<li>
<p><strong>Done!</strong>
The system generates a meal plan, shopping list, and even prints the shopping list and recipes.</p>
</li>
</ol>
<p><img
src="/posts/images/prompts-final-result.png"
alt="Final generated meal plan and shopping list output"
/></p>
<p>Here we are focuses primarily on the Recipe Server with its prompts and resources. You can find the <a href="https://github.com/ihrpr/mcp-server-tiny-print">printing server example here</a> (it works with a specific thermal printer model, but you could easily swap it for email, Notion, or any other output method). The beauty of separate servers is that you can mix and match different capabilities.</p>
<h2 id="core-components">Core Components</h2>
<p>Let&rsquo;s dive into the three components that make this automation possible: <a href="https://modelcontextprotocol.io/specification/2025-06-18/server/prompts">prompts</a>, <a href="https://modelcontextprotocol.io/specification/2025-06-18/server/resources">resources</a>, and <a href="https://modelcontextprotocol.io/specification/2025-06-18/server/utilities/completion">completions</a>. I&rsquo;ll show you how each works conceptually, then we&rsquo;ll implement them together.</p>
<h3 id="1-resource-templates">1. Resource Templates</h3>
<p>In MCP, <a href="https://modelcontextprotocol.io/specification/2025-06-18/server/resources#resource-types">static resources</a> represent specific pieces of content with unique URIs—like <code>file://recipes/italian.md</code> or <code>file://recipes/mexican.md</code>. While straightforward, this approach doesn&rsquo;t scale well. If you have recipes for 20 cuisines, you&rsquo;d need to define 20 separate resources, each with its own URI and metadata.</p>
<p><a href="https://modelcontextprotocol.io/specification/2025-06-18/server/resources#resource-templates">Resource templates</a> solve this through URI patterns with parameters, transforming static resource definitions into dynamic content providers.</p>
<p>For example, a template like <code>file://recipes/{cuisine}.md</code> might represent a set of resources like these:</p>
<ul>
<li><code>file://recipes/italian.md</code> returns Italian recipes</li>
<li><code>file://recipes/mexican.md</code> returns Mexican recipes</li>
</ul>
<p>This pattern extends beyond simple filtering. You can create templates for:</p>
<ul>
<li>Hierarchical data: <code>file://docs/{category}/{topic}</code></li>
<li>Git repository content: <code>git://repo/{branch}/path/{file}</code></li>
<li>Web resources: <code>https://api.example.com/users/{userId}/data</code></li>
<li>Query parameters: <code>https://example.com/{collection}?type={filter}</code></li>
</ul>
<p>For more details on URI schemes and resource templates, see the <a href="https://modelcontextprotocol.io/specification/2025-06-18/server/resources#resource-templates">MCP Resource specification</a>.</p>
<h3 id="2-completions">2. Completions</h3>
<p>Nobody remembers exact parameter values. Is it &ldquo;italian&rdquo; or &ldquo;Italian&rdquo; or &ldquo;it&rdquo;? <a href="https://modelcontextprotocol.io/specification/2025-06-18/server/utilities/completion">Completions</a> bridge this gap by providing suggestions as users type, creating an interface that feels intuitive rather than restrictive.</p>
<p>Different MCP clients present completions differently:</p>
<ul>
<li>VS Code shows a filterable dropdown</li>
<li>Command-line tools might use fuzzy matching</li>
<li>Web interfaces could provide rich previews</li>
</ul>
<p>But the underlying data comes from your server, maintaining consistency across all clients.</p>
<h3 id="3-prompts-commands-that-evolve-with-context">3. Prompts: Commands That Evolve With Context</h3>
<p><a href="https://modelcontextprotocol.io/specification/2025-06-18/server/prompts">Prompts</a> are the entry points to your automation. They define what commands are available and can range from simple text instructions to rich, context-aware operations.</p>
<p>Let&rsquo;s see how prompts can evolve to handle increasingly sophisticated use cases:</p>
<p><strong>Basic prompt: Static instruction</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span>&#34;Create a meal plan for a week&#34;
</span></span></code></pre></div><p>This works, but it&rsquo;s generic. The AI will create a meal plan based on general knowledge.</p>
<p><strong>Adding parameters: Dynamic customization</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span>&#34;Create a meal plan for a week using {cuisine} cuisine&#34;
</span></span></code></pre></div><p>Now users can specify Italian, Mexican, or any other cuisine. The prompt adapts to user input, but still relies on the AI&rsquo;s general knowledge about these cuisines.</p>
<p><strong>Including resources: Your data</strong></p>
<p>Prompts can include resources to add context data beyond simple text instructions. This is crucial when you need the AI to work with your specific context rather than general knowledge.</p>
<p>In my meal planning example, I don&rsquo;t want generic recipes—I want the AI to use <strong>my</strong> collection of tested recipes that I know I like. Complex prompts make this possible by bundling prompt text with embedded resources.</p>
<p>Here&rsquo;s how it works:</p>
<ol>
<li><strong>User selects a prompt</strong> with parameters (e.g., &ldquo;plan-meals&rdquo; with cuisine=&ldquo;italian&rdquo;)</li>
<li><strong>Server returns</strong> both instructional text AND resource references</li>
<li><strong>Client decides how to handle resources</strong> - Applications might choose to select a subset of data using embeddings or keyword search, or pass the raw data directly to the model</li>
<li><strong>AI receives the context</strong> and generates a response</li>
</ol>
<p>In my example, VS Code attached the entire resource to the prompt, which worked great for this use case. The AI had access to all my Italian recipes when planning an Italian week, ensuring it only suggested dishes I actually had recipes for.</p>
<p>The key difference from simple prompts: instead of asking &ldquo;Plan Italian meals&rdquo; and getting generic suggestions, the AI works with your actual recipe collection, dietary preferences, and constraints.</p>
<p><img
src="/posts/images/prompts-rendered-prompt.png"
alt="VS Code showing the rendered prompt with attached recipe resources"
/></p>
<p>The recipe resources we&rsquo;ve been using are <strong>embedded resources</strong> that have inline content from the server. According to the <a href="https://modelcontextprotocol.io/specification/2025-06-18/server/prompts#data-types">MCP specification</a>, prompts can also include other data types.</p>
<p>This enables advanced use cases beyond our text-based recipes, like design review prompts with screenshots or voice transcription services.</p>
<h2 id="building-the-recipe-server">Building the Recipe Server</h2>
<p>Let&rsquo;s implement a complete MCP server that brings together all the concepts we&rsquo;ve discussed. We&rsquo;ll start with the server setup and then implement each capability.</p>
<h3 id="prerequisites">Prerequisites</h3>
<p>Before diving into the code, make sure you have:</p>
<ol>
<li><strong>Node.js</strong> (v18 or higher) and npm installed</li>
<li><strong>MCP SDK</strong> installed:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>npm install @modelcontextprotocol/sdk
</span></span></code></pre></div></li>
<li><strong>An MCP-compatible client with prompt and resource support</strong>,like VS Code with the MCP extension</li>
</ol>
<p>For this tutorial, I&rsquo;ll use the TypeScript SDK, but MCP also supports Python and other languages.</p>
<h3 id="server-setup-and-capabilities">Server Setup and Capabilities</h3>
<p>First, let&rsquo;s create our MCP server:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-typescript" data-lang="typescript"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">server</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">McpServer</span>({
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">name</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;favorite-recipes&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">version</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;1.0.0&#34;</span>,
</span></span><span style="display:flex;"><span>});
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">async</span> <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">main() {</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">transport</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">StdioServerTransport</span>();
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">server</span>.<span style="color:#a6e22e">connect</span>(<span style="color:#a6e22e">transport</span>);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">main</span>().<span style="color:#66d9ef">catch</span>((<span style="color:#a6e22e">error</span>) <span style="color:#f92672">=&gt;</span> {
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">error</span>(<span style="color:#e6db74">&#34;Server error:&#34;</span>, <span style="color:#a6e22e">error</span>);
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">process</span>.<span style="color:#a6e22e">exit</span>(<span style="color:#ae81ff">1</span>);
</span></span><span style="display:flex;"><span>});
</span></span></code></pre></div><h3 id="implementing-resources">Implementing Resources</h3>
<p>Next, let&rsquo;s register a resource template with completions.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-typescript" data-lang="typescript"><span style="display:flex;"><span><span style="color:#a6e22e">server</span>.<span style="color:#a6e22e">registerResource</span>(
</span></span><span style="display:flex;"><span>  <span style="color:#e6db74">&#34;recipes&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">ResourceTemplate</span>(<span style="color:#e6db74">&#34;file://recipes/{cuisine}&#34;</span>, {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">list</span>: <span style="color:#66d9ef">undefined</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">complete</span><span style="color:#f92672">:</span> {
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">cuisine</span><span style="color:#f92672">:</span> (<span style="color:#a6e22e">value</span>) <span style="color:#f92672">=&gt;</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">CUISINES</span>.<span style="color:#a6e22e">filter</span>((<span style="color:#a6e22e">cuisine</span>) <span style="color:#f92672">=&gt;</span> <span style="color:#a6e22e">cuisine</span>.<span style="color:#a6e22e">startsWith</span>(<span style="color:#a6e22e">value</span>));
</span></span><span style="display:flex;"><span>      },
</span></span><span style="display:flex;"><span>    },
</span></span><span style="display:flex;"><span>  }),
</span></span><span style="display:flex;"><span>  {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">title</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;Cuisine-Specific Recipes&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">description</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;Traditional recipes organized by cuisine&#34;</span>,
</span></span><span style="display:flex;"><span>  },
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">async</span> (<span style="color:#a6e22e">uri</span>, <span style="color:#a6e22e">variables</span>, <span style="color:#a6e22e">_extra</span>) <span style="color:#f92672">=&gt;</span> {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">cuisine</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">variables</span>.<span style="color:#a6e22e">cuisine</span> <span style="color:#66d9ef">as</span> <span style="color:#66d9ef">string</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> (<span style="color:#f92672">!</span><span style="color:#a6e22e">CUISINES</span>.<span style="color:#a6e22e">includes</span>(<span style="color:#a6e22e">cuisine</span>)) {
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">throw</span> <span style="color:#66d9ef">new</span> Error(<span style="color:#e6db74">`Unknown cuisine: </span><span style="color:#e6db74">${</span><span style="color:#a6e22e">cuisine</span><span style="color:#e6db74">}</span><span style="color:#e6db74">`</span>);
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">content</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">formatRecipesAsMarkdown</span>(<span style="color:#a6e22e">cuisine</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> {
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">contents</span><span style="color:#f92672">:</span> [
</span></span><span style="display:flex;"><span>        {
</span></span><span style="display:flex;"><span>          <span style="color:#a6e22e">uri</span>: <span style="color:#66d9ef">uri.href</span>,
</span></span><span style="display:flex;"><span>          <span style="color:#a6e22e">mimeType</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;text/markdown&#34;</span>,
</span></span><span style="display:flex;"><span>          <span style="color:#a6e22e">text</span>: <span style="color:#66d9ef">content</span>,
</span></span><span style="display:flex;"><span>        },
</span></span><span style="display:flex;"><span>      ],
</span></span><span style="display:flex;"><span>    };
</span></span><span style="display:flex;"><span>  },
</span></span><span style="display:flex;"><span>);
</span></span></code></pre></div><h3 id="implementing-prompts">Implementing Prompts</h3>
<p>Finally, let&rsquo;s register the prompt, which also has completions:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-typescript" data-lang="typescript"><span style="display:flex;"><span><span style="color:#a6e22e">server</span>.<span style="color:#a6e22e">registerPrompt</span>(
</span></span><span style="display:flex;"><span>  <span style="color:#e6db74">&#34;weekly-meal-planner&#34;</span>,
</span></span><span style="display:flex;"><span>  {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">title</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;Weekly Meal Planner&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">description</span><span style="color:#f92672">:</span>
</span></span><span style="display:flex;"><span>      <span style="color:#e6db74">&#34;Create a weekly meal plan and grocery shopping list from cuisine-specific recipes&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">argsSchema</span><span style="color:#f92672">:</span> {
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">cuisine</span>: <span style="color:#66d9ef">completable</span>(<span style="color:#a6e22e">z</span>.<span style="color:#66d9ef">string</span>(), (<span style="color:#a6e22e">value</span>) <span style="color:#f92672">=&gt;</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">CUISINES</span>.<span style="color:#a6e22e">filter</span>((<span style="color:#a6e22e">cuisine</span>) <span style="color:#f92672">=&gt;</span> <span style="color:#a6e22e">cuisine</span>.<span style="color:#a6e22e">startsWith</span>(<span style="color:#a6e22e">value</span>));
</span></span><span style="display:flex;"><span>      }),
</span></span><span style="display:flex;"><span>    },
</span></span><span style="display:flex;"><span>  },
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">async</span> ({ <span style="color:#a6e22e">cuisine</span> }) <span style="color:#f92672">=&gt;</span> {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">resourceUri</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">`file://recipes/</span><span style="color:#e6db74">${</span><span style="color:#a6e22e">cuisine</span><span style="color:#e6db74">}</span><span style="color:#e6db74">`</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">recipeContent</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">formatRecipesAsMarkdown</span>(<span style="color:#a6e22e">cuisine</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> {
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">title</span><span style="color:#f92672">:</span> <span style="color:#e6db74">`Weekly Meal Planner - </span><span style="color:#e6db74">${</span><span style="color:#a6e22e">cuisine</span><span style="color:#e6db74">}</span><span style="color:#e6db74"> Cuisine`</span>,
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">description</span><span style="color:#f92672">:</span> <span style="color:#e6db74">`Weekly meal planner for </span><span style="color:#e6db74">${</span><span style="color:#a6e22e">cuisine</span><span style="color:#e6db74">}</span><span style="color:#e6db74"> cuisine`</span>,
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">messages</span><span style="color:#f92672">:</span> [
</span></span><span style="display:flex;"><span>        {
</span></span><span style="display:flex;"><span>          <span style="color:#a6e22e">role</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;user&#34;</span>,
</span></span><span style="display:flex;"><span>          <span style="color:#a6e22e">content</span><span style="color:#f92672">:</span> {
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">type</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;text&#34;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">text</span><span style="color:#f92672">:</span> <span style="color:#e6db74">`Plan cooking for the week. I&#39;ve attached the recipes from </span><span style="color:#e6db74">${</span><span style="color:#a6e22e">cuisine</span><span style="color:#e6db74">}</span><span style="color:#e6db74"> cuisine.
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">Please create:
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">1. A 7-day meal plan using these recipes
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">2. An optimized grocery shopping list that minimizes waste by reusing ingredients across multiple recipes
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">3. Daily meal schedule with specific dishes for breakfast, lunch, and dinner
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">4. Preparation tips to make the week more efficient
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">5. Print Shopping list
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">Focus on ingredient overlap between recipes to reduce food waste.`</span>,
</span></span><span style="display:flex;"><span>          },
</span></span><span style="display:flex;"><span>        },
</span></span><span style="display:flex;"><span>        {
</span></span><span style="display:flex;"><span>          <span style="color:#a6e22e">role</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;user&#34;</span>,
</span></span><span style="display:flex;"><span>          <span style="color:#a6e22e">content</span><span style="color:#f92672">:</span> {
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">type</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;resource&#34;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">resource</span><span style="color:#f92672">:</span> {
</span></span><span style="display:flex;"><span>              <span style="color:#a6e22e">uri</span>: <span style="color:#66d9ef">resourceUri</span>,
</span></span><span style="display:flex;"><span>              <span style="color:#a6e22e">mimeType</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;text/markdown&#34;</span>,
</span></span><span style="display:flex;"><span>              <span style="color:#a6e22e">text</span>: <span style="color:#66d9ef">recipeContent</span>,
</span></span><span style="display:flex;"><span>            },
</span></span><span style="display:flex;"><span>          },
</span></span><span style="display:flex;"><span>        },
</span></span><span style="display:flex;"><span>      ],
</span></span><span style="display:flex;"><span>    };
</span></span><span style="display:flex;"><span>  },
</span></span><span style="display:flex;"><span>);
</span></span></code></pre></div><h2 id="running-it-yourself">Running It Yourself</h2>
<p>The <a href="https://github.com/ihrpr/mcp-server-fav-recipes">full code for the recipe server is available here</a>.</p>
<p>Follow VS Code&rsquo;s <a href="https://code.visualstudio.com/docs/copilot/chat/mcp-servers">documentation to set up the server</a>. Once a server is set up in VS Code, you can see its status, debug what&rsquo;s happening, and iterate quickly on your automations.</p>
<p>After the server is set up in VS Code, type &ldquo;/&rdquo; in chat and select the prompt.</p>
<p><img
src="/posts/images/prompts-list.png"
alt="MCP prompts list showing available automation commands"
/></p>
<h2 id="extending-your-automations">Extending Your Automations</h2>
<p>MCP prompts open up exciting automation possibilities:</p>
<ul>
<li><strong>Prompt Chains</strong>: Execute multiple prompts in sequence (plan meals → generate shopping list → place grocery order)</li>
<li><strong>Dynamic Prompts</strong>: Adapt based on available resources or time of year</li>
<li><strong>Cross-Server Workflows</strong>: Coordinate multiple MCP servers for complex automations</li>
<li><strong>External Triggers</strong>: Activate prompts via webhooks or schedules</li>
</ul>
<p>The patterns demonstrated in meal planning apply to many domains:</p>
<ul>
<li>Documentation generation that knows your codebase</li>
<li>Report creation with access to your data sources</li>
<li>Development workflows that understand your project structure</li>
<li>Customer support automations with full context</li>
</ul>
<p><strong>Key takeaways:</strong></p>
<ul>
<li>MCP prompts can include dynamic resources, giving AI full context for tasks</li>
<li>Resource templates enable scalable content serving without duplication</li>
<li>Modular server architecture lets you mix and match capabilities</li>
</ul>
<h2 id="wrapping-up">Wrapping Up</h2>
<p>This meal planning automation started as a simple desire to avoid rewriting shopping lists every week. It evolved into a complete system that handles meal planning, shopping lists, and recipe printing with just a few clicks.</p>
<p>MCP prompts provide practical tools to automate repetitive tasks. The modular architecture means you can start small—perhaps just automating one part of your workflow—and expand as needed. Whether you&rsquo;re automating documentation, reports, or meal planning, the patterns remain the same: identify repetitive tasks, build focused automations, and let the system handle the tedious parts.</p>
]]></content:encoded></item><item><title>Building to Last: A New Governance Model for MCP</title><link>https://blog.modelcontextprotocol.io/posts/2025-07-31-governance-for-mcp/</link><pubDate>Thu, 31 Jul 2025 00:00:00 +0000</pubDate><guid>https://blog.modelcontextprotocol.io/posts/2025-07-31-governance-for-mcp/</guid><description>Introducing MCP&amp;#39;s formal governance model: Specification Enhancement Proposals (SEPs), a maintainer structure, and a community-driven process for evolving the protocol.</description><content:encoded><![CDATA[<p>Since its open source release in November of 2024, the Model Context Protocol project has grown faster than we could have ever imagined. That&rsquo;s a wonderful problem to have, but with growth come growing pains. Our existing processes, which worked well for a small team, have started to show their limits.</p>
<p>Today, we&rsquo;re taking a big step to ensure MCP can continue to grow and thrive. We&rsquo;re introducing a formal governance model designed to bring clarity to the development process while preserving the collaborative, open source spirit that has made MCP successful.</p>
<h2 id="specification-enhancement-proposals-seps">Specification Enhancement Proposals (SEPs)</h2>
<p>One of the first major changes we&rsquo;re introducing is <a href="https://modelcontextprotocol.io/community/sep-guidelines">Specification Enhancement Proposals</a> (SEPs). This will be the primary mechanism for anyone to propose changes to MCP. SEPs are inspired by other projects, like <a href="https://peps.python.org/">Python PEPs</a> or <a href="https://github.com/rust-lang/rfcs">Rust RFCs</a>. We aim to make the process for suggesting changes to Model Context Protocol as straightforward as possible:</p>
<ol>
<li>Following the <a href="https://modelcontextprotocol.io/community/sep-guidelines">SEP guidelines</a>, submit a proposal as <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues">a GitHub issue</a> to start the conversation.</li>
<li>Our maintainers and core maintainers regularly review proposals and tag SEPs for review and sponsorship. You can also reach out and collaborate with contributing folks on <a href="https://discord.gg/6CSzBmMkjX">Discord</a> or <a href="https://github.com/modelcontextprotocol/modelcontextprotocol">GitHub</a>. Refer to <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/MAINTAINERS.md"><code>MAINTAINERS.md</code></a> for a list of currently active maintainers and their focus areas.</li>
<li>Work with the sponsor and the MCP community to move your proposal through draft, review, and implementation stages.</li>
</ol>
<p>SEPs provide a clear, documented path for evolving the protocol, ensuring that every major change is well-vetted by the community.</p>
<h2 id="leadership-roles">Leadership Roles</h2>
<p>The new model also establishes three types of leadership roles, ensuring both focused ownership and broad community representation:</p>
<ul>
<li><strong>Maintainers</strong> manage specific components like SDKs, our documentation, and individual repositories.</li>
<li><strong>Core Maintainers</strong> guide the overall direction of the project and the evolution of the MCP specification.</li>
<li><strong>Lead Maintainers</strong> serve as the final decision-makers and ensure the project&rsquo;s long-term health.</li>
</ul>
<p>All maintainers form the <strong>MCP steering group</strong>. To ensure a structured and timely review of incoming proposals, our core and lead maintainers will meet bi-weekly to review submitted <a href="#specification-enhancement-proposals-seps">SEPs</a>. Meeting notes and decisions will always be public. For example the <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1061">notes from the core maintainer meeting on July 23rd, 2025</a>.</p>
<h2 id="get-involved">Get Involved</h2>
<p>We need your help to build the future of MCP, and everyone is welcome here. Whether you&rsquo;re a seasoned open source veteran or just curious about how to get started, there&rsquo;s a place for you in our community.</p>
<p>Many of our maintainers began with a single small contribution—sometimes just fixing a typo or asking a thoughtful question. Every journey starts somewhere, and we&rsquo;re excited to help you take your first step.</p>
<ul>
<li><strong>New Contributors</strong>: Unsure where to begin? Start by helping with documentation, fixing bugs, or building out examples. Every contribution matters, and we&rsquo;re here to support you. Check out issues tagged with <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22good%20first%20issue%22"><code>good first issue</code></a> - they&rsquo;re perfect for getting started, and you&rsquo;ll find friendly faces ready to help.</li>
<li><strong>SDK Developers</strong>: Have a favorite programming language? As MCP grows, we need your expertise to build and maintain the protocol SDKs. Your work could empower entire new communities to use MCP.</li>
<li><strong>Documentation Writers</strong>: Clear, comprehensive <a href="https://modelcontextprotocol.io/introduction">documentation</a> is what turns a good project into a great one. If you love explaining things or making guides, your contributions will help others succeed.</li>
<li><strong>Future Maintainers</strong>: We believe in growing our team from within. The path to becoming a maintainer starts with consistent, quality contributions and a commitment to the project&rsquo;s success. Imagine yourself guiding new contributors and shaping the future of MCP.</li>
</ul>
<p>No matter your background or experience, you belong here. Join our <a href="https://discord.gg/6CSzBmMkjX">Discord</a> to connect with other contributors, ask questions, and find mentorship. Whether you&rsquo;re fixing a typo or proposing a major change to the protocol, your voice is valued and your efforts make a difference.</p>
<p>For all the details, please see our full <a href="https://modelcontextprotocol.io/community/governance">governance documentation</a>.</p>
<h2 id="thank-you">Thank You</h2>
<p>None of this would be possible without the incredible community that has rallied around MCP. From the early adopters who believed in the vision, to the developers building MCP clients and servers, to the maintainers dedicating their time and expertise. Every contribution has been essential to making the Model Context Protocol the success it is today.</p>
<p>You&rsquo;ve helped us identify issues, improve documentation, build SDKs, create compelling examples, and push the boundaries of what&rsquo;s possible with platform integration. Your feedback, bug reports, feature requests, and code contributions have shaped MCP into something far better than we could have built alone.</p>
<p>As we embark on this next chapter with formal governance, we&rsquo;re more committed than ever to fostering the open, inclusive community that has made MCP thrive. Thank you for being part of this journey - we can&rsquo;t wait to see what we&rsquo;ll build together next.</p>
]]></content:encoded></item><item><title>The Model Context Protocol Blog</title><link>https://blog.modelcontextprotocol.io/posts/welcome-to-mcp-blog/</link><pubDate>Wed, 02 Jul 2025 11:46:28 +0100</pubDate><guid>https://blog.modelcontextprotocol.io/posts/welcome-to-mcp-blog/</guid><description>The official Model Context Protocol blog — updates, tutorials, and insights from maintainers and contributors.</description><content:encoded><![CDATA[<p>Welcome to the official Model Context Protocol (MCP) blog! This is where we&rsquo;ll share the latest updates, tutorials, best practices, and insights about MCP.</p>
<h2 id="about-mcp">About MCP</h2>
<p>The Model Context Protocol is an open standard that enables seamless integration between AI assistants and external data sources and tools. It provides a universal way for AI models to interact with local services, APIs, and data stores.</p>
<h2 id="get-involved">Get Involved</h2>
<p>We&rsquo;re excited to build this ecosystem together with you. Here&rsquo;s how you can participate:</p>
<ul>
<li>Check out the <a href="https://github.com/modelcontextprotocol/modelcontextprotocol/tree/main/docs/specification">MCP specification</a></li>
<li>Join the discussion on <a href="https://github.com/modelcontextprotocol">GitHub</a></li>
</ul>
]]></content:encoded></item></channel></rss>