<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>README — agents-protocols</title>
<link>https://readme.news/tags/agents-protocols/</link>
<atom:link href="https://readme.news/tags/agents-protocols/feed.xml" rel="self" type="application/rss+xml"/>
<description>README pieces tagged agents-protocols.</description>
<language>en-us</language>
<lastBuildDate>Thu, 01 Oct 2026 13:20:31 +0000</lastBuildDate>
<item><title>Reading an RFC</title><link>https://readme.news/reading-an-rfc/</link><guid isPermaLink="true">https://readme.news/reading-an-rfc/</guid><pubDate>Wed, 23 Sep 2026 09:00:00 +0000</pubDate><description>Specifications look impenetrable and follow strict conventions. Knowing the conventions makes them the best documentation available.</description><content:encoded><![CDATA[<p>Most developers have never read a specification end to end. They search for the bit they need, misread it, and implement something that works against one server.</p>
<p>RFCs are dense but they are not difficult, and they follow conventions that make them scannable once you know them.</p>
<h2 id="the-keywords-are-load-bearing">the keywords are load-bearing<a class="anchor" href="#the-keywords-are-load-bearing" aria-label="link to this section">#</a></h2>
<p>RFC 2119 defines a small vocabulary, and in a specification these words are technical terms, not English:</p>
<ul><li><strong>MUST</strong> / <strong>REQUIRED</strong> / <strong>SHALL</strong> — absolute requirement. Violating it makes your implementation non-conforming.</li><li><strong>MUST NOT</strong> / <strong>SHALL NOT</strong> — absolute prohibition.</li><li><strong>SHOULD</strong> / <strong>RECOMMENDED</strong> — there may be valid reasons to ignore this, but understand the implications first. In practice: everyone does it, and if you do not, something will break eventually.</li><li><strong>SHOULD NOT</strong> — same, inverted.</li><li><strong>MAY</strong> / <strong>OPTIONAL</strong> — genuinely optional. Critically: <strong>an implementation that does not do it must interoperate with one that does</strong>, and vice versa.</li></ul>
<p>When reading, look for the capitalised words first. They are the actual requirements; everything around them is explanation. Skimming an RFC by jumping between MUSTs is a legitimate and efficient way to read one.</p>
<h2 id="the-structure-is-consistent">the structure is consistent<a class="anchor" href="#the-structure-is-consistent" aria-label="link to this section">#</a></h2>
<p><strong>Abstract</strong> — one paragraph. Read it to decide whether you want this document.</p>
<p><strong>Introduction / Terminology</strong> — read the terminology. Specifications define ordinary-looking words precisely, and misreading one is the most common source of implementation bugs.</p>
<p><strong>The body</strong> — the actual protocol.</p>
<p><strong>Security Considerations</strong> — mandatory in every RFC and consistently the most interesting section. It is where the authors say what they could not fix, what attacks apply, and what implementers get wrong. If you read one section, read this one.</p>
<p><strong>IANA Considerations</strong> — registries. Where you find the canonical list of registered values, which is often the thing you actually needed.</p>
<p><strong>ABNF grammar</strong> — usually an appendix. The precise syntax, in a formal grammar. If you are writing a parser, this is authoritative and the prose is not.</p>
<h2 id="the-things-that-trip-people-up">the things that trip people up<a class="anchor" href="#the-things-that-trip-people-up" aria-label="link to this section">#</a></h2>
<p><strong>Updated and obsoleted.</strong> An RFC is never edited. It is replaced. Always check the header for "Obsoleted by" — implementing an obsolete specification is a common and embarrassing mistake, and HTTP/1.1 alone has been re-specified several times.</p>
<p><strong>Errata.</strong> Published RFCs have errata filed against them. Check them; some are substantive corrections.</p>
<p><strong>Not all RFCs are standards.</strong> The series includes Informational, Experimental, Best Current Practice, Historic, and April Fools jokes. The status is in the header. "It's an RFC" is not the same as "it's a standard."</p>
<p><strong>The grammar wins over the prose.</strong> Where the ABNF and the description disagree, the ABNF is normative. This is the single most useful thing to know when a specification appears ambiguous.</p>
<h2 id="the-reading-strategy">the reading strategy<a class="anchor" href="#the-reading-strategy" aria-label="link to this section">#</a></h2>
<p>For a specification you need to implement:</p>
<ol><li>Abstract, to confirm it is the right document.</li><li>Check the header for obsoletions, then the errata.</li><li>Terminology section, properly.</li><li>Security Considerations — early, not last. It tells you what the hard parts are before you have written anything.</li><li>Skim for MUST and MUST NOT to get the shape of the requirements.</li><li>Then the relevant sections in detail, with the ABNF beside you.</li></ol>
<p>That is maybe ninety minutes for a substantial specification, and it is dramatically cheaper than the alternative, which is discovering the requirements one interoperability bug at a time.</p>
<h2 id="why-bother">why bother<a class="anchor" href="#why-bother" aria-label="link to this section">#</a></h2>
<p>Because the specification is the only source that is actually authoritative. Blog posts, <a class="xref" href="/stack-overflows-traffic-fell-off-a-cliff-and-it-is-not-coming-back/" title="Stack Overflow&#x27;s traffic fell off a cliff and it is not coming back">Stack Overflow</a> answers and library documentation are all someone's interpretation, and interpretations drift.</p>
<p>When two implementations disagree — and they will — the specification is what settles it. Being the person on the team who can read one and say "we are wrong, section 4.2 says the header is case-insensitive" is a genuinely useful thing to be, and it costs one afternoon of learning the conventions.</p>]]></content:encoded></item><item><title>The joke RFCs are the best documentation</title><link>https://readme.news/the-joke-rfcs-are-the-best-documentation/</link><guid isPermaLink="true">https://readme.news/the-joke-rfcs-are-the-best-documentation/</guid><pubDate>Wed, 01 Apr 2026 09:00:00 +0000</pubDate><description>RFC 1149, RFC 2324, and why the internet&#x27;s funniest specifications are also its clearest.</description><content:encoded><![CDATA[<p>Every April the IETF publishes a joke RFC, a tradition running since 1978. They are funny. They are also, consistently, better written than most serious specifications, and that is worth examining.</p>
<h2 id="the-canon">the canon<a class="anchor" href="#the-canon" aria-label="link to this section">#</a></h2>
<p><strong>RFC 1149</strong> — "A Standard for the Transmission of IP Datagrams on Avian Carriers." IP over carrier pigeon. Specifies encapsulation, MTU, and the failure characteristics. Notably: it was actually implemented and tested in Bergen in 2001, achieving a 55% packet loss rate and ping times measured in hours.</p>
<p><strong>RFC 2324</strong> — the Hyper Text Coffee Pot Control Protocol, which gave the world HTTP 418 "I'm a teapot." Still returned by a nonzero number of production servers and still occasionally proposed for removal, which reliably generates more discussion than any real feature.</p>
<p><strong>RFC 1925</strong> — "The Twelve Networking Truths." Not a joke, exactly. A list of things that are simultaneously funny and among the most useful engineering aphorisms ever written:</p>
<blockquote><p>(3) With sufficient thrust, pigs fly just fine. However, this is not necessarily a good idea.</p></blockquote>
<blockquote><p>(6a) It is always possible to add another level of indirection.</p></blockquote>
<blockquote><p>(11) Every old idea will be proposed again with a different name and a different presentation, regardless of whether it works.</p></blockquote>
<p>Number 11 is the most predictive sentence in computing.</p>
<p><strong>RFC 748</strong> — TELNET RANDOMLY-LOSE Option, the first April Fools RFC, which parodied the specification format so precisely that it reads as a real document until you notice what it specifies.</p>
<h2 id="why-they-are-well-written">why they are well written<a class="anchor" href="#why-they-are-well-written" aria-label="link to this section">#</a></h2>
<p>Here is the thing: a joke specification only works if the reader can follow the technical content exactly. The humor lives in the gap between rigorous form and absurd content, and the gap only exists if the form is genuinely rigorous.</p>
<p>So the author cannot hide behind jargon. Cannot be vague. Cannot leave the <a class="xref" href="/boring-technology-revisited/" title="Boring technology, revisited">failure modes</a> unspecified, because the failure modes are the joke.</p>
<p>RFC 1149 specifies the MTU, the encapsulation, the retransmission behavior, and the security considerations. It is a more complete specification of a transport protocol than a lot of real protocol documents, in one page.</p>
<h2 id="what-to-steal">what to steal<a class="anchor" href="#what-to-steal" aria-label="link to this section">#</a></h2>
<p><strong>Specify the failure modes.</strong> The joke RFCs always do, because failure is funny. Real specifications frequently do not, because failure is embarrassing. Failure is also the part your implementer most needs.</p>
<p><strong>Be short.</strong> Every one of these fits on a page or two. Length is not thoroughness.</p>
<p><strong>Use concrete examples.</strong> The absurd ones are memorable; ordinary concrete ones are just as clear and less funny, which is fine.</p>
<p><strong>Write the security considerations section honestly.</strong> RFC 1149's is a single sentence about the possibility of the carrier being intercepted by a predator. It is more informative than a great many real ones, which say "security considerations are out of scope for this document" — a sentence that should be banned.</p>
<h2 id="the-serious-point">the serious point<a class="anchor" href="#the-serious-point" aria-label="link to this section">#</a></h2>
<p>Technical writing quality is not about vocabulary or formality. It is about whether the reader can reconstruct what you meant.</p>
<p>The joke RFCs are readable because their authors were writing for an audience they wanted to make laugh, which requires being understood. Most specification authors are writing for an audience they want to satisfy, which does not.</p>
<p>If you want to test whether your specification is clear, hand it to someone and ask them to implement it without asking you a question. Every question they need to ask is a defect.</p>
<p>The pigeon RFC would pass that test. Most of what I have written would not.</p>
<h2 id="the-tradition">the tradition<a class="anchor" href="#the-tradition" aria-label="link to this section">#</a></h2>
<p>It continues, annually, and it is one of the better things about a standards organization that could easily have become entirely humorless.</p>
<p>An institution that can laugh at its own form is one that understands the form is a tool rather than a ritual. That is worth more than it sounds.</p>]]></content:encoded></item><item><title>HTTP/3 and QUIC, five years in</title><link>https://readme.news/http3-and-quic-five-years-in/</link><guid isPermaLink="true">https://readme.news/http3-and-quic-five-years-in/</guid><pubDate>Fri, 13 Mar 2026 09:00:00 +0000</pubDate><description>It shipped, it works, most of the web uses it, and almost nobody understands what changed. A practical review.</description><content:encoded><![CDATA[<p>HTTP/3 is now the majority protocol for a large fraction of web traffic, supported by every major browser and CDN. Most developers have never thought about it, which is the correct outcome for a transport protocol.</p>
<p>It is still worth understanding what it actually changed, because a few of the consequences affect how you build.</p>
<h2 id="the-problem-it-solved">the problem it solved<a class="anchor" href="#the-problem-it-solved" aria-label="link to this section">#</a></h2>
<p>HTTP/2 introduced multiplexing: many logical streams over one TCP connection. That fixed head-of-line blocking at the HTTP layer.</p>
<p>It did not fix it at the TCP layer. TCP delivers bytes in order. If one packet is lost, everything behind it waits, including data for streams that were completely unaffected. On a lossy connection — mobile, congested wifi — HTTP/2 could be worse than HTTP/1.1 with six connections, because one loss stalled everything instead of one sixth of everything.</p>
<p>QUIC moves the transport to UDP and implements reliability, ordering, and congestion control per stream. A lost packet stalls only the stream it belonged to.</p>
<h2 id="what-else-came-with-it">what else came with it<a class="anchor" href="#what-else-came-with-it" aria-label="link to this section">#</a></h2>
<p><strong>Encryption is mandatory and integrated.</strong> TLS 1.3 is part of the protocol rather than a layer on top. The handshake is one round trip, or zero for a resumed connection.</p>
<p><strong>Connection migration.</strong> A QUIC connection is identified by a connection ID, not by the four-tuple of IP addresses and ports. Change networks — wifi to cellular — and the connection survives. Your download does not restart.</p>
<p>This is the feature users notice without knowing why. Walking out of a building while a video plays used to stall it.</p>
<p><strong>Better loss recovery.</strong> QUIC distinguishes between packet loss and reordering more accurately than TCP, and its acknowledgment format carries more information. Recovery is faster.</p>
<p><strong>Evolvability.</strong> TCP is implemented in kernels and middleboxes and cannot change, because the internet is full of devices that will drop anything unfamiliar. QUIC is in userspace and encrypted, so its internals are invisible to middleboxes and can actually be updated.</p>
<p>That last point is arguably the most important long-term consequence. Transport protocol ossification was a genuine crisis and QUIC is the <a class="xref" href="/platform-teams-that-dont-get-resented/" title="Platform teams that don&#x27;t get resented">escape hatch</a>.</p>
<h2 id="the-practical-consequences-for-you">the practical consequences for you<a class="anchor" href="#the-practical-consequences-for-you" aria-label="link to this section">#</a></h2>
<p><strong>Domain sharding is now actively harmful.</strong> Splitting assets across <code>static1.example.com</code> and <code>static2.example.com</code> was a workaround for HTTP/1.1's connection limit. Under HTTP/2 it was pointless. Under HTTP/3 it is worse than pointless, because each domain requires a separate connection with a separate handshake and separate congestion state.</p>
<p>One origin. If you still have sharding from a 2014 optimization guide, remove it.</p>
<p><strong>Concatenating and spriting are counterproductive.</strong> Same reasoning. Many small files multiplex fine and cache better individually.</p>
<p><strong>Priority matters and is under-configured.</strong> HTTP/3 has an extensible priority scheme. Most servers use defaults. If you have a page where certain resources are critical, priority hints (<code>fetchpriority</code>) are worth setting and are widely supported.</p>
<p><strong>UDP blocking is real but small.</strong> Some corporate networks block UDP/443. Clients fall back to HTTP/2 automatically, so this is a performance issue rather than a correctness one. Do not build anything that requires HTTP/3.</p>
<p><strong>Your observability may not see it.</strong> A lot of network monitoring tooling was built for TCP. Check whether your tools actually understand QUIC or are silently reporting nothing.</p>
<h2 id="the-parts-that-were-harder-than-expected">the parts that were harder than expected<a class="anchor" href="#the-parts-that-were-harder-than-expected" aria-label="link to this section">#</a></h2>
<p><strong>CPU cost.</strong> QUIC's userspace implementation and per-packet encryption use more CPU than kernel TCP. This has improved substantially with offload support and better implementations, and it is a real cost at high volume.</p>
<p><strong>Middlebox hostility.</strong> Some networks throttle or block UDP because it looks like something they should throttle. This is improving as QUIC becomes normal traffic.</p>
<p><strong>Debugging is harder.</strong> You cannot read a QUIC connection with tcpdump the way you could read HTTP/1.1. <code>qlog</code> and browser devtools help. The tooling is younger.</p>
<h2 id="the-assessment">the assessment<a class="anchor" href="#the-assessment" aria-label="link to this section">#</a></h2>
<p>For a user on a good connection, HTTP/3 is roughly a wash. For a user on a bad connection — mobile, congested, high latency, lossy — it is a substantial improvement, and those users are a large fraction of the world.</p>
<p>That is exactly the right kind of improvement: invisible to the people who were already fine, meaningful to the people who were not.</p>
<p>Enable it, remove your HTTP/1.1-era workarounds, and go back to not thinking about the transport layer.</p>]]></content:encoded></item><item><title>Build 2025: Microsoft open-sources WSL and puts MCP in Windows</title><link>https://readme.news/build-2025-microsoft-open-sources-wsl-and-puts-mcp-in-windows/</link><guid isPermaLink="true">https://readme.news/build-2025-microsoft-open-sources-wsl-and-puts-mcp-in-windows/</guid><pubDate>Tue, 20 May 2025 09:00:00 +0000</pubDate><description>A decade-old request granted, a coding agent in GitHub, and an agent protocol shipped at the OS layer.</description><content:encoded><![CDATA[<p>Microsoft Build ran this week. Three announcements matter to developers and one of them has been requested since 2016.</p>
<h2 id="wsl-is-open-source">WSL is open source<a class="anchor" href="#wsl-is-open-source" aria-label="link to this section">#</a></h2>
<p>The Windows Subsystem for Linux is now open source at <code>github.com/microsoft/WSL</code>. Not all of it — some Windows-side components remain closed — but the substantial majority, including the init system, the networking daemons, and the file sharing layer.</p>
<p>This was the single most requested item on the WSL issue tracker for years. The practical effect is that people can finally debug the parts of WSL that go wrong, which historically meant filing an issue and waiting.</p>
<p>The strategic read: WSL won. It is how a very large number of developers run Linux tooling on a Windows machine, it removed most of the reason to dual-boot, and open-sourcing it costs Microsoft nothing now that the position is secure. It is a mature move from a company that spent the nineties doing the opposite.</p>
<h2 id="github-copilot-coding-agent">GitHub Copilot coding agent<a class="anchor" href="#github-copilot-coding-agent" aria-label="link to this section">#</a></h2>
<p>Copilot gets a delegated mode: assign an issue to it, and it opens a pull request. It runs in GitHub Actions, follows repository instructions in <code>.github/copilot-instructions.md</code>, and its pull requests go through normal review and CI.</p>
<p>Notably it cannot approve its own pull requests and its Actions runs require approval. Those are the correct guardrails and it is good that they shipped with them rather than after an incident.</p>
<p>The integration point is the interesting bit. An agent that operates on issues and pull requests slots into a workflow every team already has, rather than requiring a new one. That is a much lower adoption barrier than "install this IDE."</p>
<h2 id="mcp-in-windows">MCP in Windows<a class="anchor" href="#mcp-in-windows" aria-label="link to this section">#</a></h2>
<p>Windows gets native support for the <a class="xref" href="/openai-adopts-mcp-and-a-protocol-becomes-a-standard/" title="OpenAI adopts MCP, and a protocol becomes a standard">Model Context</a> Protocol: an MCP registry, built-in servers exposing filesystem, windowing, and shell capabilities, and a <a class="xref" href="/nodejs-24-and-the-slow-reinvention-of-the-runtime/" title="Node.js 24 and the slow reinvention of the runtime">permission model</a> gating what an agent can reach.</p>
<p>An operating system vendor adopting a protocol that a model company published six months ago is fast by any standard. It also tells you Microsoft has concluded that the agent-to-system <a class="xref" href="/the-interface-is-the-product/" title="The interface is the product">interface</a> is going to be standardized and would rather be the platform for it than fight it.</p>
<p>The <a class="xref" href="/the-component-model-and-the-plugin-problem/" title="The component model and the plugin problem">security model</a> is where this gets interesting and where I would like to see more detail. An OS-level MCP surface means any agent with the right permission can drive the machine. The consent flow, the scoping granularity, and the audit trail are the whole ballgame, and "there is a permission model" is not yet enough information to evaluate it.</p>
<h2 id="also-announced">also announced<a class="anchor" href="#also-announced" aria-label="link to this section">#</a></h2>
<p><strong>NLWeb</strong>, a project to let websites expose a natural-language query interface with MCP underneath. Positioned as "HTML for the agentic web." Ambitious; adoption is everything and adoption is unknowable.</p>
<p><strong>Edit</strong>, a new command-line text editor for Windows, open source, small. A genuine gap — Windows has had no default CLI editor since <code>edit.com</code> — and filling it is a nice piece of housekeeping.</p>
<p><strong>Windows AI Foundry</strong>, the rebranded local model runtime story, with Foundry Local for running models <a class="xref" href="/pixel-10-and-the-on-device-model-as-a-platform-feature/" title="Pixel 10 and the on-device model as a platform feature">on-device</a>.</p>
<h2 id="the-pattern">the pattern<a class="anchor" href="#the-pattern" aria-label="link to this section">#</a></h2>
<p>Microsoft's developer strategy for a decade has been: meet developers where they are, adopt other people's standards, open-source the layers where control is not worth the friction, and monetize the cloud underneath.</p>
<p>It keeps working. Build 2025 was more of it, executed well.</p>]]></content:encoded></item><item><title>Google Cloud Next: Ironwood, A2A, and a very cheap Gemini</title><link>https://readme.news/google-cloud-next-ironwood-a2a-and-a-very-cheap-gemini/</link><guid isPermaLink="true">https://readme.news/google-cloud-next-ironwood-a2a-and-a-very-cheap-gemini/</guid><pubDate>Thu, 10 Apr 2025 09:00:00 +0000</pubDate><description>A seventh-gen TPU aimed squarely at inference, plus a protocol for agents talking to other agents.</description><content:encoded><![CDATA[<p>Google Cloud Next happened this week. Three things from it will still matter in a year.</p>
<h2 id="ironwood">Ironwood<a class="anchor" href="#ironwood" aria-label="link to this section">#</a></h2>
<p>The seventh-generation TPU, and the first Google has explicitly positioned for inference rather than training. Large HBM capacity per chip, high interconnect bandwidth, deployable in pods of thousands.</p>
<p>The strategic point is not the specs. It is that Google is the only hyperscaler with a mature, decade-old, production-proven alternative to buying Nvidia. AWS has Trainium and Inferentia, which are real but younger. Microsoft has Maia, which is very young. Google has been running TPUs in production since 2015 and has an entire compiler stack (XLA) and framework story (JAX) built around them.</p>
<p>That translates directly into pricing freedom. When Google prices Gemini aggressively, they are not eating a margin on someone else's silicon.</p>
<h2 id="a2a">A2A<a class="anchor" href="#a2a" aria-label="link to this section">#</a></h2>
<p>Agent2Agent: a protocol for agents from different vendors to discover each other and collaborate on tasks. Announced with a long list of partner companies.</p>
<p>The mental model is that MCP connects an agent to <em>tools and data</em>, while A2A connects an agent to <em>other agents</em>. An agent publishes an "agent card" at a well-known URL describing its capabilities; other agents discover it and delegate tasks over a JSON-RPC-ish protocol with support for long-running work and streaming updates.</p>
<p>My honest read: the problem is real, the timing is early, and the number of partner logos on the announcement slide is inversely correlated with how much production usage a protocol has on day one. Multi-agent systems in 2025 mostly do not work well enough to need a standard for interoperating — the hard part is that agents fail in the middle of tasks, not that they cannot find each other.</p>
<p>But standards need to exist before they are needed, and having the conversation now beats having it in 2027 with four incompatible implementations.</p>
<h2 id="gemini-25-flash">Gemini 2.5 Flash<a class="anchor" href="#gemini-25-flash" aria-label="link to this section">#</a></h2>
<p>The cost-efficient reasoning model, with a controllable <a class="xref" href="/gemini-25-goes-generally-available-with-a-thinking-dial/" title="Gemini 2.5 goes generally available with a thinking dial">thinking budget</a>. You set how many tokens the model may spend reasoning, including zero.</p>
<div class="code"><span class="code-lang">python</span><pre><code class="lang-python">config = types.GenerateContentConfig(
    thinking_config=types.ThinkingConfig(thinking_budget=1024)
)</code></pre></div>
<p>This is the right API shape and I expect everyone to converge on it. The decision of how much to think is workload-specific, it is the primary cost lever in a reasoning model, and hiding it inside the model's own judgment takes control away from the person paying the bill.</p>
<p>Set it to zero for classification. Set it high for planning. Measure the quality difference on your own task, because the curve is steeper for some tasks than others and there is no general answer.</p>
<h2 id="the-rest">the rest<a class="anchor" href="#the-rest" aria-label="link to this section">#</a></h2>
<p>A great deal of "agentic" branding applied to existing products, an agent development kit, and a marketplace. Cloud vendor conferences have a genre and this one was firmly in it.</p>
<p>The signal-to-slide ratio was better than most.</p>]]></content:encoded></item><item><title>OpenAI adopts MCP, and a protocol becomes a standard</title><link>https://readme.news/openai-adopts-mcp-and-a-protocol-becomes-a-standard/</link><guid isPermaLink="true">https://readme.news/openai-adopts-mcp-and-a-protocol-becomes-a-standard/</guid><pubDate>Wed, 26 Mar 2025 09:00:00 +0000</pubDate><description>Anthropic&#x27;s Model Context Protocol gets its most important endorsement four months after release.</description><content:encoded><![CDATA[<p>OpenAI announced support for the Model Context Protocol across its products today. Sam Altman posted about it. Four months after Anthropic open-sourced MCP, its primary competitor adopted it.</p>
<p>That is the moment a protocol stops being a vendor's format and starts being infrastructure.</p>
<h2 id="what-mcp-is-briefly">what MCP is, briefly<a class="anchor" href="#what-mcp-is-briefly" aria-label="link to this section">#</a></h2>
<p>A protocol for connecting language models to external context and tools. A server exposes three primitive types:</p>
<ul><li><strong>Resources</strong> — data the model can read (files, database rows, API responses).</li><li><strong>Tools</strong> — functions the model can call, with JSON Schema parameters.</li><li><strong>Prompts</strong> — reusable templates the user can invoke.</li></ul>
<p>The transport is JSON-RPC 2.0 over stdio for local servers or HTTP with server-sent events for remote ones. That is deliberately unexciting; the value is in the shape of the <a class="xref" href="/the-interface-is-the-product/" title="The interface is the product">interface</a>, not the wire format.</p>
<div class="code"><span class="code-lang">json</span><pre><code class="lang-json">{
  "jsonrpc": "2.0", "id": 3, "method": "tools/call",
  "params": {
    "name": "query_db",
    "arguments": { "sql": "select count(*) from orders where day = '2025-03-25'" }
  }
}</code></pre></div>
<h2 id="why-this-mattered-enough-to-win">why this mattered enough to win<a class="anchor" href="#why-this-mattered-enough-to-win" aria-label="link to this section">#</a></h2>
<p>The problem MCP solves is combinatorial. Before it, connecting <code>M</code> AI clients to <code>N</code> data sources meant <code>M × N</code> bespoke integrations, each one a slightly different function-calling schema with slightly different auth. Every new assistant had to rebuild every connector.</p>
<p>MCP makes it <code>M + N</code>. Write one server for your internal ticketing system and every MCP-speaking client can use it. That is the same argument that won for LSP in editors, and it won for the same reason: the integration burden was crushing the ecosystem and everyone knew it.</p>
<p>The LSP comparison is not incidental — MCP's designers cite it explicitly, and the JSON-RPC choice is a direct inheritance.</p>
<h2 id="the-security-part-which-is-underdiscussed">the security part, which is underdiscussed<a class="anchor" href="#the-security-part-which-is-underdiscussed" aria-label="link to this section">#</a></h2>
<p>An MCP server is a program you run that a model can invoke. That is a substantially larger attack surface than it appears.</p>
<ul><li><strong><a class="xref" href="/prompt-injection-is-sql-injection-without-the-fix/" title="Prompt injection is SQL injection without the fix">Prompt injection</a> through resources.</strong> If a server returns content from an untrusted source, that content is now in the model's context and can attempt to influence tool calls. This is the central unsolved problem of the entire agent category and MCP does not fix it.</li><li><strong>Tool description poisoning.</strong> The tool descriptions themselves go into the model's context. A malicious server can write a description that manipulates behavior.</li><li><strong>Over-broad servers.</strong> A filesystem server with root access is a filesystem server with root access. The convenience of "just point it at my home directory" is how this goes wrong.</li></ul>
<p>Practical guidance while the ecosystem matures: run servers with the narrowest possible scope, treat any server you did not write as untrusted code, and do not combine a server that reads untrusted content with a server that can take destructive action in the same session. That last one is the composition hazard and it is easy to walk into.</p>
<h2 id="what-happens-next">what happens next<a class="anchor" href="#what-happens-next" aria-label="link to this section">#</a></h2>
<p>Expect: an official governance structure, a registry, and a fight about authorization semantics. Expect every developer tool company to ship a server within a quarter. Expect at least one significant security incident involving a popular community server, because that is what happens to every successful plugin ecosystem, without exception.</p>
<p>Standards win when the alternative is worse for everyone including the people who would prefer to own the standard. That happened here, unusually fast.</p>]]></content:encoded></item>
</channel>
</rss>
