SYSTEM Cited by 27 sources
Model Context Protocol (MCP)¶
Definition¶
Model Context Protocol (MCP) is an open standard — published at modelcontextprotocol.io — for servers to describe the tools they provide to LLM agents. Each tool advertises a description, parameter schema, and invocation semantics. Clients (Claude Code, Cursor, Goose, Claude Desktop, …) load servers into an agent session and expose their tools to the planner.
Why it exists¶
Before MCP, every agent framework had its own tool-description format. MCP standardizes the protocol so:
- Tool servers are portable across MCP-compatible clients.
- Agent vendors build one integration surface instead of N.
- Enterprise teams can expose one MCP server that every agent in the company (Claude, Cursor, Goose, …) can use uniformly.
What MCP does well¶
- Protocol-level portability — a server written once works in any compliant client.
- Tool-description as first-class artifact — tools are self-describing; agents pick from them dynamically.
- Ecosystem leverage — third-party MCP servers (Backstage, Datadog, Dropbox Dash, GitHub, …) proliferate; an agent can compose across them.
- Local- and remote-server shapes — both stdin/stdout and HTTP/SSE transports supported.
Known limitations (surfaced by production deployments)¶
Multiple sources converge on the same design concerns:
- Tool definitions + parameter schemas consume concepts/context-window-as-token-budget. Every exposed tool's schema sits in context for every turn; tool inventory is a context-budget line item, not just an accuracy concern (Source: sources/2025-11-17-dropbox-how-dash-uses-context-engineering-for-smarter-ai and sources/2026-03-04-datadog-mcp-server-agent-tools).
- Tool-selection accuracy degrades with inventory growth (cited arXiv 2411.15399 in Datadog's post; tool-selection-accuracy).
- Cost + latency implications are real. Dropbox explicitly notes the overall accuracy of Dash degraded for longer-running jobs — context-rot.
- No built-in multi-tenancy / auth pattern. Enterprises layer their own. Two ingested instances, same shape, different substrates:
- Cloudflare's AI Gateway + proxy Worker + AGENTS.md pattern (Source: sources/2026-04-20-cloudflare-internal-ai-engineering-stack).
- Databricks' Unity AI Gateway —
explicitly sells MCP governance as a pillar: "AI Gateway
unifies security governance across coding agents, LLM
interactions and MCP integrations." MCP servers "managed in
Databricks", all audit logs in Unity
Catalog, single-SSO across coding-tool clients
(Cursor, Codex CLI,
Gemini CLI, Claude
Code). See
sources/2026-04-17-databricks-governing-coding-agent-sprawl-with-unity-ai-gateway
+
coding-agent-sprawl +
patterns/central-proxy-choke-point.
2026-05-20 extension (sources/2026-05-20-databricks-governing-ai-agents-at-scale-with-unity-catalog):
Databricks generalises this from coding-agent scope to org-wide agent populations and adds Service Policies — UC functions attached to registered MCPs that evaluate every tool call before execution and return
allow/deny/consent, fail-closed on deny (policy-as-uc-function-attached-to-mcp). MCP servers now also gain explicit OBO integration: "Teams register external MCP servers (GitHub, Jira, Slack, etc.) in Unity Catalog and govern them like any other securable: permissions, credential management, and full audit logging in one place." — first wiki disclosure of the explicit "register an external MCP as a UC securable" model. - Skills vs MCP composition unresolved. Client-side features (Claude Code tool search, Claude skills, Kiro Powers) overlap MCP's tool-advertising role; "still an open question" per Datadog.
Production design patterns that assume MCP¶
Patterns derived from treating MCP tools as a scarce-context surface:
- patterns/tool-surface-minimization — keep exposed tool count low via flexible tools, opt-in toolsets, layering.
- patterns/tool-surface-minimization — one retrieval tool backed by a unified index replaces many per-source tools (Dash / Dash MCP Server).
- token-budget-pagination — return N tokens worth of records + cursor, not fixed record count.
- query-language-as-agent-tool — expose SQL instead of
many
get_Xendpoints. - actionable-error-messages — agents in retry loops re-enter bad context; specific errors break the loop.
MCP Resources (implementer altitude)¶
The MCP specification defines two first-class surfaces on an MCP server: tools (actions, mutations, side effects, calculations) and resources (read-only, addressable, client-cacheable, optionally-subscribable content). Most wiki coverage of MCP above concentrates on the tools surface — the context-budget cost of tool inventories, the accuracy degradation with more tools, the five-pattern Datadog retrospective, the Unity-AI-Gateway-at- Databricks governance layer. The resources surface is less covered in production retrospectives but is canonicalised at implementer altitude by Wix Engineering's 2026-01-08 tutorial (Source: sources/2026-01-08-wix-mcp-resources-all-you-need-to-know).
Canonical sub-primitives:
- mcp-resource — the resource primitive itself.
Three shapes: static (fixed content, one registration),
template (parameterised URI via
RFC 6570 placeholders), and
updating (declares
subscribe: truecapability, emitsnotifications/resources/updatedon content change). - mcp-tool-vs-resource — the decision rule for when to expose behaviour as a tool vs a resource. Rule: resources for read-only cacheable content that both users and agents might want to view directly; tools for actions, mutations, side effects, and calculations.
- resource-link-vs-embedded-resource —
token-budget trade-off when returning a resource from a tool.
resource_link(URI only, client caches) for large or frequently-reused content; embeddedresource(full content inline) only for small one-shot payloads. - resource-subscribe-capability — the
push-update protocol edge. Server declares
capabilities: { resources: { subscribe: true } }; emitssendResourceUpdated({ uri })on change; clients re-read on notification. - resource-annotations — optional per-resource
metadata (
audience,priority,lastModified) used by clients for filtering and sorting in discovery UIs. - mime-type-as-first-class-metadata — always declare MIME types on resources (and by extension on any addressable content) so clients can render without sniffing.
Two integration patterns canonicalised from the resources axis:
- expose-resource-as-tool-for-agent-discoverability —
workaround for MCP-client fragmentation around
resource
discovery. Register a companion tool that returns a
resource_link/resourcecontent type; resources become reachable in every MCP-aware agent flow through tool listing. Creates tension with patterns/tool-surface-minimization — apply judiciously. - subscribe-notify-for-updatable-resource — the
live-logs / live-metrics / live-feeds pattern. Structure the
content as an MCP resource with
subscribe: true; server pushes notifications; clients re-read. Same cache-invalidation economics as server-sent events, riding the MCP transport already established.
Three @modelcontextprotocol/sdk v^1.8.0 production
caveats surfaced by Wix (SDK-specific, not protocol-specific):
- The JavaScript
URLconstructor breaksfile://resource URIs — trailing slash appended, turningfile://example.txtintofile://example.txt/. Fix: use a custom scheme (doc://,log://,git://,resource://). - The SDK does not implement the
subscribemethod. Clients callingsubscribeget "method not found". Server can still emit notifications viasendResourceUpdated. - No subscriber targeting. Every notification fans out to
every connected client regardless of what each client is
interested in — O(N) wasted traffic at scale. Authors needing
filtered fan-out implement
subscribethemselves.
See systems/mcp-typescript-sdk for the full SDK page.
Known MCP servers in this wiki¶
- systems/dash-mcp-server — Dropbox's MCP server, one retrieval tool over the Dash universal search index.
- systems/datadog-mcp-server — Datadog's official MCP server; five-pattern redesign after V1 thin-API-wrapper failed.
- systems/mcp-server-portal — Cloudflare's internal aggregator over internal tool MCP servers (Backstage-driven service-catalog exposure).
- systems/sprites-mcp — Fly.io's vendor-hosted remote MCP
server at
sprites.dev/mcpfor Sprite CRUD. Ships with a three-axis creation guardrail (org scope × Sprite cap × name prefix) and is explicitly framed by Ptacek as the fallback shape for shell-less agents. - systems/meta-capacity-efficiency-platform — Meta's unified platform for hyperscale performance engineering (2026-04-16). Exposes profiling / experiments / configuration history / code search / documentation as MCP tools to in-house agents; pluggable skills encode senior-engineer reasoning patterns over the shared tool layer. Canonical wiki instance of mcp-tools-plus-skills-unified-platform — hyperscaler- internal-infrastructure-tools deployment of MCP, distinct from the SaaS-facing deployments above. Program impact: "hundreds of megawatts of power" recovered; ~10-hour investigations compressed to ~30 minutes.
- Pinterest's MCP ecosystem (2026-03-19) — three named seed servers (Presto, Spark, Knowledge) plus others (Airflow mentioned). All cataloged in a central MCP registry. Canonical wiki instance of hosted MCP ecosystem at the enterprise altitude — 66,000 invocations/month across 844 MAUs, ~7,000 engineer-hours-saved/month (January 2025). See sources/2026-03-19-pinterest-building-an-mcp-ecosystem-at-pinterest.
MCP registry as a protocol-scoped instance of the AI tool registry pattern (MongoDB, 2026-05-11)¶
MongoDB Engineering's 2026-05-11 Fighting Tool Sprawl position post (sources/2026-05-11-mongodb-fighting-tool-sprawl-the-case-for-ai-tool-registries) positions the enterprise AI tool registry as a broader category that subsumes the MCP registry shape: same four functions (discovery + versioning + certification metadata + access control), same dual-surface property (web UI for humans + API for agents), same organisation-internal scope — but extended beyond MCP-compliant servers to any tool an agent can call (REST APIs, internal RPC services, code-execution sandboxes, data accessors).
The post explicitly cites Kong's enterprise MCP Registry launch (February 2026) — "hardcoded and managed tool isolation across teams, fragmented integrations, and limited organization visibility" — as market validation of the registry pattern at the MCP layer. Canonical wiki naming of this generalisation: enterprise-ai-tool-registry (the broader pattern, of which mcp-registry is the protocol-scoped instance) plus patterns/on-behalf-of-agent-authorization (the "Internal Developer Portal one layer up" framing). The tool-sprawl failure mode is what motivates both at their respective scopes.
Seen in¶
- sources/2026-09-29-dropbox-evolving-our-calendar-assistant-reclaim-to-be-ai-native-with-f60d451f — MCP used bidirectionally in one product (client + server). Reclaim, Dropbox's AI calendar assistant, runs an MCP client inside its own agent loop (to consume compatible tools from other services) and also exposes its own tools through an MCP server to external AI clients — Claude and ChatGPT — which use their own models and agent loops but "can call the same tools used within Reclaim." A clean small-scale illustration of MCP's two roles at once: the same tool surface is both something Reclaim's agent calls out to and something external assistants call in to, reusing the shared Schedule Action tools rather than duplicating integration logic (patterns/mcp-as-centralized-integration-proxy).
- sources/2026-09-24-zalando-agentic-platform-open-sourcing-the-agentic-identity-broker RFC 9728 (Protected Resource Metadata), Cross-App Access (XAA), SPIFFE, IETF WIMSE, and the AIMS draft. Architecturally, MCP servers are the downstream tool endpoints on the far side of the agentgateway + Agentic Identity Broker gate: agents reach in-house or third-party MCP servers only via the gateway, which performs token exchange so the MCP server sees a provider token the agent never holds. A core design goal is to keep OAuth 2.0 ceremonies out of MCP servers entirely (they are fronted by the gateway) — the OBO / MCP-as-centralized-integration-proxy shape at the identity layer. "could give an agent the context around the data and not just the data itself, so it understood what a table meant instead of guessing" — grounding the agent's text-to-SQL generation before it runs on Trino.
- sources/2026-08-14-cloudflare-how-cloudflare-detects-mcp-traffic-and-helps-secure-it
— MCP as a network-governance target. Because MCP runs over
ordinary HTTPS with no required hostname or
/mcppath, MCP traffic "has no obvious shape" and a single line of config connects an agent to any server. Cloudflare detects it on the wire via theMCP-Protocol-Versionheader (Gatewayexperimental.is_mcp), separates shadow MCP from Portal bypass, enforces Portal-only egress, and gates tool calls server-side with WriteGuard. Establishes the client / network / server control-point framing and reuses the 2026-07-28 statelessMcp-Method/Mcp-Nameheaders (protocol-metadata-in-http-headers) as per-operation classification signals. - sources/2026-08-06-cloudflare-ai-search-give-your-agents-a-search-engine
— MCP as a no-code search surface. Cloudflare
AI Search namespaces expose a
/mcpendpoint (alongside/search) that any coding agent can drop into its MCP config with zero deployment. The Cloudflare Dev Stack MCP ships as a single tool inside Cloudflare's MCP server that fans one call across 10 Cloudflare-surface AI Search instances, returning cited docs — positioned as replacing the agent's "web search then fetch full pages" fallback with current, cited, low-token results. -
sources/2026-01-08-wix-mcp-resources-all-you-need-to-know — Canonical implementer-altitude disclosure of the MCP resources surface. Wix Engineering's 2026-01-08 tutorial walks the
@modelcontextprotocol/sdkv^1.8.0SDK end-to-end for static / template / updating resource shapes; canonicalises the tools-vs-resources decision rule (mcp-tool-vs-resource), the resource-link-vs-embedded-resource token-budget trade-off (resource-link-vs-embedded-resource), the RFC 6570 URI template shape (uri-template-rfc6570), thesubscribe: truecapability andsendResourceUpdatedemission API (resource-subscribe-capability), and the optional annotations metadata (resource-annotations). Three SDK-v1.8.0 gotchas surfaced: (1) JS URL constructor breaksfile://URIs — use custom schemes; (2)subscribemethod not implemented — clients get "method not found"; (3) no subscriber targeting — notifications fan out to all clients. Two canonical integration patterns derived: expose-resource-as-tool-for-agent-discoverability (workaround for client-side resource-discovery fragmentation) and subscribe-notify-for-updatable-resource (live-logs, metrics, feeds as MCP resources). First on-scope Wix ingest on the wiki; complements the Dropbox / Datadog / Cloudflare bias toward MCP-tools disclosures with the first implementer-altitude source on MCP resources. Tier-3 on-scope on vocabulary- canonicalisation grounds. -
sources/2026-03-12-stripe-10-things-we-learned-building-for-the-first-generation-of-agentic-commerce — MCP as native transport for the Agentic Commerce Protocol (ACP). Per Stripe's 2026-03-12 retrospective, ACP PR #139 adds native MCP transport, bridging agent-tool-discovery and agentic-commerce-checkout transport into one mechanism. "Since we co-developed ACP with OpenAI in September 2025, we've shipped four releases and added ... native MCP transport." Architecturally: MCP carriage gives agentic-commerce the same discoverability and tool-shape semantics as general MCP tool registration.
-
sources/2025-04-03-redpanda-autonomy-is-the-future-of-infrastructure — Alex Gallego's founder-voice reframing of MCP as infrastructure, not just a tool-description format. Positions MCP as an intent-based integration proxy centralising connectivity, auth, audit, tracing, cost accounting at a single choke-point, canonicalising patterns/mcp-as-centralized-integration-proxy on the wiki. Reframes future MCP evolution as dynamic per-call content filtering at HBase-cell-ACL granularity via Redpanda Connect declarative pipelines (Bloblang) + code extensions (Starlark Python subset) — canonicalised as dynamic-content-filtering-in-mcp-pipeline. Load- bearing framing verbatim: "MCP is about intent, 'create a Redpanda Cluster in
us-east-1', while the MCP server worries about implementing the five API calls... An intent-based proxy pushes that complexity to a central location." Canonical Redpanda instantiation:rpk connect mcp-serverexposes any of ~300 Redpanda Connect connectors as an MCP tool with YAML config managing connection pooling, retries, exponential backoffs, TLS, certificates, authentication. Distinct from existing Fly.iofly mcp launchergonomics-tax focus and from Pinterest's hosted-MCP ecosystem — Gallego's frame is MCP-as-infrastructure-choke-point, not MCP-as-managed-platform. -
sources/2025-11-17-dropbox-how-dash-uses-context-engineering-for-smarter-ai — names MCP as "a robust protocol" while laying out the tool-inventory / context-window limitations it intrinsically surfaces; frames Dash's design as MCP-compatible but context-lean.
- sources/2026-03-04-datadog-mcp-server-agent-tools — the most detailed MCP-design retrospective in this wiki; five patterns each a specific response to MCP-related failure modes.
- sources/2026-04-20-cloudflare-internal-ai-engineering-stack — MCP at enterprise scale (Server Portal, proxy pattern, discovery endpoint, progressive tool disclosure).
- sources/2026-01-28-dropbox-knowledge-graphs-mcp-dspy-dash — Josh Clemm's talk puts concrete latency numbers on MCP-at-scale degradation: simple queries taking up to ~45s via MCP vs "within seconds" against the raw index; Dash caps its context at ~100,000 tokens. Enumerates four production fixes Dash applied in response: (1) collapse retrieval tools into one "super tool" (patterns/tool-surface-minimization); (2) knowledge-graph bundles as token-efficient result compression ("modeling data within knowledge graphs can significantly cut our token usage"); (3) store tool results locally rather than inline them into the context window (new lever); (4) classifier-routed sub-agents with narrow toolsets (patterns/specialized-agent-decomposition). Frames MCP as the default "make it work" starting point and indexed retrieval as the "make it better" destination at scale.
- sources/2026-04-16-cloudflare-email-service-public-beta-ready-for-agents — introduces a new Email MCP server on the Cloudflare MCP surface — any MCP-aware agent (Claude / Cursor / Copilot) can discover and call the Email endpoints to send and configure email with a prompt. Paired with the same Code Mode machinery that fits ~3,000 Cloudflare operations into <1,000 tokens. The post also explicitly flags the context-window-bloat failure mode of MCP — "tool definitions can consume tens of thousands of tokens before your agent even starts processing a single message" — and ships Wrangler + Skills as the "near-zero context overhead" complement for agents with bash access. Agentic Inbox additionally ships its own built-in MCP server so external agents can "draft emails for your review before sending" — the email-tier analog of the dashboard elicitation gate.
- sources/2025-04-10-flyio-30-minutes-with-mcp-and-flyctl —
canonical CLI-wrapped-as-MCP-server instance: Fly.io's
flymcp exposes 2
flyctlcommands (fly logs,fly status) via MCPstdiotransport in ~90 lines of Go, built in "30 minutes" on mark3labs/mcp-go. Anchors patterns/wrap-cli-as-mcp-server and surfaces local-mcp-server-risk — "I don't like that I'm giving a Claude instance in the cloud the ability to run a native program on my machine" — with patterns/disposable-vm-for-agentic-loop as the natural sandbox answer. Demonstrates an agentic-observability flow over unpkg (Fly-hosted npm CDN): 10-Machine topology recited, OOM correlation, per-second incident timeline reconstructed from two read-only tools. - sources/2025-05-07-flyio-provisioning-machines-using-mcps
— mutation-transition sequel (~27 days after the 2025-04-10
read-only prototype): the same flyctl MCP server now exposes
the full
fly volumessubcommand family — create / list / extend / fork / snapshots / destroy — shipped in flyctl v0.3.117. First wiki instance of patterns/wrap-cli-as-mcp-server crossing the read-only → production-mutation boundary. Load-bearing architectural thesis paragraph for natural-language-infrastructure-provisioning: "Today's state of the art is K8S, Terraform, web based UIs, and CLIs. Those days are numbered." Introduces the "Make it so" target UX (LLM scans code → presents plan → human adjusts → approves → agent executes → on failure examines logs) and CLI-refusal-as-agent- guardrail ("I would have received an error had I tried to destroy a volume that is currently mounted. Knowing that gave me the confidence to try the command"). Also gestures at MCP servers running on Fly.io's private network — "on separate machines, or in 'sidecar' containers, or even integrated into your app" — pairing with the 2025-04-08 robot-routing / long-lived-SSE framing. Names GitHub Copilot as the authoring assistant, Claude Desktop as the canonical client, and MCP Inspector (local port 6274) as the agent-free validation surface for server authors. - sources/2025-11-06-flyio-you-should-write-an-agent — Fly.io (Thomas Ptacek, 2025-11-06) is the wiki's first "when MCP is not needed" framing. The post's minimal-agent-loop demonstration (tool-call-loop-minimal-agent) shows that a 30-LoC Python loop against the OpenAI Responses API with a native-JSON tools list is a complete agent — no MCP involved. Explicit thesis: "we didn't need MCP at all. That's because MCP isn't a fundamental enabling technology. […] MCP is just a plugin interface for Claude Code and Cursor, a way of getting your own tools into code you don't control. Write your own agent. Be a programmer. Deal in APIs, not plugins." The claim is structural, not dismissive: MCP earns its place as an interop protocol for tools consumed by agents other people built (Claude Code, Cursor, Goose) — which is exactly the case the wiki's existing MCP instances (flymcp, systems/datadog-mcp-server, systems/cloudflare-ai-gateway's MCP Server Portal, systems/unity-ai-gateway) are designed for. The corollary Fly flags for production MCP: "one context window bristling with tool descriptions doesn't leave enough token space left to get work done" — independent confirmation of concepts/context-window-as-token-budget and the patterns/tool-surface-minimization / sub-agent (patterns/context-segregated-sub-agents) responses. Also sharpens the wiki's existing MCP-security framing ("When you read a security horror story about MCP your first question should be why MCP showed up at all") — MCP's implicit single-context-window assumption can prevent the operator from splitting tool surfaces across sub-agents, which is the structural fix for prompt-injection blast-radius (local-mcp-server-risk + untrusted-input-via-file-not-prompt).
-
sources/2026-03-10-flyio-unfortunately-sprites-now-speak-mcp — Fly.io (Thomas Ptacek, 2026-03-10). Canonical wiki statement of the MCP-is-aesthetically-wrong-for-shell-capable- agents thesis. "In 2026, MCP is the wrong way to extend the capabilities of an agent. The emerging Right Way to do this is command line tools and discoverable APIs." Load- bearing because it's the first-party statement from Fly.io — the same vendor that ships systems/flymcp, systems/fly-mcp-launch, and, in this post,
sprites.dev/mcp. Introduces two distinct-from-token-budget axes of cost: progressive capability disclosure (CLIs reveal capabilities incrementally; MCP front-loads all tools) and context-as- importance-signal ("Cramming your context full of MCP tool descriptions is a way of signaling to the model that those tools are important to you"). Playwright coin-flip observation is the canonical empirical datum: "Askclaudeto install Playwright and Chrome and there's a coinflip chance it sets up the MCP server. But notice that when the coin comes up tails, Playwright still works." Positional recommendation: MCP as fallback for shell-less agents (patterns/mcp-as-centralized-integration-proxy); CLI + short-prose skill for shell-capable.sprites.dev/mcpis shipped with the three-axis agent-creation guardrail (org scope × Sprite-count cap × name prefix), extending concepts/ai-agent-guardrails to the VM-lifecycle altitude. Closes with the "Fuck Stateless Sandboxes" reprise of the 2026-01-09 "Fuck Ephemeral Sandboxes" manifesto. -
sources/2025-12-01-slack-streamlining-security-investigations-with-agents — canonical first wiki instance of MCP in an internal security-investigation agent pipeline. Slack's Security Engineering team built their prototype of Spear with a "simple 'stdio' mode MCP server to safely expose a subset of our data sources through the tool call interface" — the MCP server being the safety wrapper around the security-data surface so the agent couldn't reach beyond what the server advertised. Paired with a coding-agent CLI repurposed as execution harness. When the prototype moved to production as the Hub/Worker/Dashboard service (hub-worker-dashboard-agent-service), the post stops explicitly mentioning MCP — whether the production workers still speak MCP or now speak direct data-source APIs is not disclosed. The disclosure is valuable as the first wiki instance of MCP used inside an internal-security-operations-posture pipeline (prior ingests cover dev tooling, public registries, Cloudflare's MCP ecosystem, and the Redpanda ADP vision). See systems/slack-spear + director-expert-critic-investigation-loop.
As the wrong default (Fly.io, 2026-03-10)¶
Ptacek's 2026-03-10 framing locates MCP's correct role explicitly: fallback protocol for shell-less agents, not universal-integration-abstraction.
"Skills and APIs are the best way to drive Sprites. But to make that work, you need an agent that can run shell commands for itself. So you'll want to reach for MCP sessions when you're stuck with an agent that can't run commands. Thankfully, most of us aren't using those kinds of agents anymore."
The recommendation is not "don't ship MCP" — Fly.io ships sprites.dev/mcp in the same post. It is "don't make MCP the default surface when the agent has shell access." For shell-capable agents (Claude Code, Gemini CLI, Codex CLI), Fly's preferred surface is the CLI + a one-sentence skill.
See patterns/mcp-as-centralized-integration-proxy for the pattern page; concepts/progressive-capability-disclosure for the discovery mechanism the CLI path relies on; context-as-importance-signal for the attention-weighting cost axis.
As a generated interface (Cloudflare, 2026-04-13)¶
Cloudflare's 2026-04-13 CLI announcement reveals that the
Code Mode MCP server
— which fits Cloudflare's entire ~3,000-operation API into
<1,000 tokens — is generated from the same TypeScript
schema that produces the cf CLI, Workers
bindings, wrangler.jsonc config, Cloudflare SDKs, Terraform
provider, Agent Skills, and OpenAPI spec. This positions MCP as
one generated surface of a
unified interface schema,
not a hand-maintained server (Source:
sources/2026-04-13-cloudflare-building-a-cli-for-all-of-cloudflare).
See also concepts/agent-ergonomic-cli and
schema-driven-interface-generation.
As an agent consumption layer with permission enforcement (Cloudflare Agent Lee, 2026-04-15)¶
Cloudflare's 2026-04-15 Agent Lee launch is the first wiki instance of MCP deployed to end-users at measurable scale: ~18,000 daily users and ~250,000 tool calls / day across DNS, Workers, SSL/TLS, R2, Registrar, Cache, Cloudflare Tunnel, API Shield, and more (Source: sources/2026-04-15-cloudflare-introducing-agent-lee). Two architectural refinements to the protocol's consumption pattern surface in this deployment:
- Code Mode instead of direct tool
prompting. Agent Lee's MCP surface is just two tools
(
search+execute); all ~3,000 Cloudflare API operations are reachable throughexecutevia generated TypeScript code. "LLMs have seen a huge amount of real-world TypeScript but very few tool call examples, so they're more accurate when working in code. For multi-step tasks, the model can also chain calls together in a single script and return only the final result, ultimately skipping the round-trips." - Elicitation gate at a credentialed-proxy boundary. Agent Lee routes every MCP call through a Durable Object that classifies the generated code as read or write, proxies reads directly, and blocks writes until the user approves via the dashboard elicitation UI. API keys are held inside the DO and injected server-side at forward time — they are never present in generated code. "The security boundary isn't just a sandbox that gets thrown away; it's a permission architecture that structurally prevents writes from happening without your approval." See patterns/agent-sandbox-with-gateway-only-egress. This is the first in-wiki production instance of the MCP permission system formalised at the protocol-consumer layer rather than hand-coded in the agent loop.
Quantified context-window win vs naive baseline (Project Think, 2026-04-15)¶
Cloudflare's 2026-04-15 Project Think launch quantifies the Code Mode compression against the explicit naive alternative for the first time (Source: sources/2026-04-15-cloudflare-project-think-building-the-next-generation-of-ai-agents):
"The Cloudflare API MCP server demonstrates this at scale. We expose only two tools (
search()andexecute()), which consume ~1,000 tokens, vs. ~1.17 million tokens for the naive tool-per-endpoint equivalent. This is a 99.9% reduction."
This is the same number family as the <1,000-tokens-for-~3,000- operations claim in the CLI post, now paired with the baseline it was never previously quantified against. The comparison is directional rather than a refutation of the realistic alternative — a hand-crafted tool-minimised MCP surface following patterns/tool-surface-minimization would not hit 1.17M tokens either. But as a worst-case illustration of why code-gen over tool-calls is load-bearing at scale-of-API-surface, the number is now on the wiki. See also systems/code-mode for the full framing.
- sources/2025-12-11-aws-architecting-conversational-observability-for-cloud-applications — MCP used as the agent-to-cluster-operations transport in the Strands deployment option of AWS's EKS troubleshooting blueprint. EKS MCP Server exposes Kubernetes operations as MCP tools the K8s Specialist agent calls during an agentic troubleshooting loop. Replaces the custom kubectl-routing plumbing from the RAG deployment option with a standardized protocol surface; agent action surface is still bound by read-only allowlisting since MCP transport doesn't alter the least-privilege posture of the server-side service account.
Pre-connect discovery via MCP Server Card (2026-04-17)¶
Cloudflare's 2026-04-17 Agent Readiness Score post surfaces a draft MCP spec extension — the MCP Server Card — that lets a site publish a static JSON document describing an MCP server before any agent connects:
- Path:
/.well-known/mcp/server-card.json(with a slight variant at/.well-known/mcp.jsonused by some reference implementations including isitagentready). - Contents: server identity (
name,title,version),protocolVersion, transport (e.g.streamable-http+endpoint), authentication requirements, and the full tool list with input schemas.
An agent can fetch one HTTP GET, evaluate whether the server's
tools fit its need, and decide to commit to a session — no
authentication dance, no protocol negotiation, no list_tools
round-trip against N candidate servers. The shape is analogous
to API Catalog (RFC 9727) for classical
HTTP APIs but at the MCP layer.
Draft status: proposal at
modelcontextprotocol/modelcontextprotocol issue #1649.
Early adoption: per Cloudflare Radar on the top 200k domains, MCP
Server Card + API Catalog combined appear on fewer than 15
sites. Positioned by the
Agent Readiness Score as an
early-adopter opportunity under the Agent Actions dimension. See
systems/mcp-server-card and
well-known-endpoint-discovery for the broader
/.well-known/ cluster of agent-ergonomic standards this
belongs to.
- sources/2026-04-17-cloudflare-introducing-the-agent-readiness-score-is-your-site-agent-ready
— canonical wiki instance for MCP Server Card + the
broader agent-readiness positioning of MCP as "a first-
class discovery primitive for agent actions at site
level." Cloudflare's
isitagentready.com itself ships an MCP server exposing
a
scan_sitetool over Streamable HTTP — publishing its own Server Card athttps://isitagentready.com/.well-known/mcp.json. - sources/2025-04-08-flyio-our-best-customers-are-now-robots — MCP framed as the robot interop protocol whose long-lived SSE connections are a session-affinity routing requirement on multitenant deployments. Canonical Fly.io framing: "LLMs all speak a protocol called MCP. MCP is what enables the robots to search the web, use a calculator, launch the missiles, shuffle a Spotify playlist, &c. If you haven't played with MCP, the right way to think about it is POST-back APIs like Twilio and Stripe, where you stand up a server, register it with the API, and wait for the API to connect to you. Complicating things somewhat, more recent MCP flows involve repeated and potentially long-lived (SSE) connections. To make this work in a multitenant environment, you want these connections to hit the same (stateful) instance." Canonical wiki datum for mcp-long-lived-sse and the session-affinity routing pattern. Also the first wiki disclosure of MCP as an RX-shaping protocol for platform-level routing primitives.
-
sources/2026-04-01-cloudflare-emdash-wordpress-spiritual-successor — MCP shipped as a CMS primitive: every EmDash instance runs its own built-in MCP server exposing the Admin UI's capability set. Gives an agent full programmatic management of the CMS (content, media, schema, collections) via MCP without a per-site integration. Sibling shape to the Cloudflare Email Service MCP server (2026-04-16) and the Agent Lee MCP surface (2026-04-15) — MCP is now the default admin-surface discovery protocol for new Cloudflare products. First wiki instance of MCP in a content- management / CMS context.
-
sources/2025-05-19-flyio-launching-mcp-servers-on-flyio —
fly mcp launch— remote-MCP-server deploy subcommand (flyctl v0.3.125). Canonical wiki instance of remote-mcp-server-via-platform-launcher + the canonical motivation statement for mcp-client-config-fragmentation. The post leads with the three-shape MCP server taxonomy ("basically two types of MCP servers. One small and nimble that runs as a process on your machine. And one that is a HTTP server that runs presumably elsewhere and is standardizing on OAuth 2.1. And there is a third type, but it is deprecated.") and the config-file-fragmentation complaint naming Claude Desktop's~/Library/Application Support/Claude/claude_desktop_config.json(MCPServerkey) vs Zed's~/.config/zed/settings.json(context_serverskey) vs OS-dependent per-tool variants. One command handles it:fly mcp launch "npx -y <server>" --claude --server <name> --secret K=Vdeploys a Fly Machine running the stdio MCP server as a remote HTTP endpoint, with bearer-token auth on by default on both ends, client-config JSON rewritten in place for 6 built-in clients (Claude, Cursor, Neovim, VS Code, Windsurf, Zed),--secretflags piped through to Machine secrets, and all Fly platform knobs (auto-stop, Flycast, Volumes, region, VM size) available. Pairs with the 2025-04-10 flymcp post to span both axes of MCP-server ergonomics: wrap a local CLI as a local MCP server (flymcp, patterns/wrap-cli-as-mcp-server) and deploy a local MCP server as a remote MCP server (fly mcp launch, remote-mcp-server-via-platform-launcher). Beta status acknowledged — "examples as shown are thought to work. Maybe."
As an enterprise hosted ecosystem (Pinterest, 2026-03-19)¶
Pinterest's 2026-03-19 retrospective (sources/2026-03-19-pinterest-building-an-mcp-ecosystem-at-pinterest) is the wiki's first canonical enterprise-hosted MCP ecosystem at measurable scale: 66,000 invocations/month across 844 MAUs, saving an estimated ~7,000 engineer-hours/month as of January 2025. The post's substance is a set of opinionated architectural choices — each explicitly reasoned — that together constitute the hosted-mcp-ecosystem pattern:
- Hosted over local on the paved path (local-mcp-server-risk). Local stdio servers reserved for experimentation; production is always cloud-hosted so "internal routing and security logic can best be applied."
- Many small domain-specific servers (Presto, Spark, Airflow, Knowledge) over one monolith. Reasoning: per-server access control + context-window hygiene. patterns/tool-surface-minimization applied at the server-decomposition axis.
- Central MCP registry as source of truth for approved-for-production servers. Dual-surface: human Web UI + AI-client API with pre-flight authorization. Canonical wiki instance of mcp-registry.
- Unified deployment pipeline — platform handles deployment + scaling; teams define only tools + per-tool policy.
- Two-layer auth — end-user JWTs validated at Envoy + SPIFFE mesh identities for service-only flows + in-process
@authorize_tool(policy='…')decorator (per-tool-authorization-decorator) for fine-grained per-tool policy. - Business-group-based access gating on sensitive servers — Presto MCP is reachable from broad surfaces like the company chat, but only specific business groups (Ads, Finance, specific infra teams) can open a session.
- Elicitation gate + human-in-the-loop for mutations — MCP's elicitation primitive confirms dangerous actions; agent guidance mandates human approval (optionally batched) before sensitive / expensive actions.
Contrast with the MCP OAuth spec¶
Pinterest explicitly rejects the spec's per-server OAuth consent flow for internal traffic:
"The MCP specification defines an OAuth 2.0 authorization flow where users explicitly authenticate with each MCP server, typically involving consent screens and per-server token management. Our approach is different: users already authenticate against our internal auth stack when they open a surface like the AI chat interface, so we piggyback on that existing session. There is no additional login prompt or consent dialog when a user invokes an MCP tool."
This is the wiki's first canonical enterprise-SSO piggyback statement — a deliberate counter-positioning to the protocol's native-per-server-OAuth shape, applicable inside-the-org but not for cross-org / public MCP. The pattern transfers wherever an organisation already has an SSO-issued JWT that carries identity + group claims.
Three integration surfaces named¶
Pinterest's MCP is integrated into (a) an internal LLM web chat used by the majority of Pinterest employees daily, (b) AI bots on the internal chat platform with per-channel tool visibility ("Spark MCP tools are only available in Airflow support channels"), and (c) IDE integrations. Each handles OAuth transparently via the registry API. Canonical wiki datum for MCP-at-enterprise-scale-integrated-into-existing-surfaces.
Observability is baked in¶
"All MCP servers at Pinterest use a set of library functions that provide logging for inputs/outputs, invocation counts, exception tracing, and other telemetry for impact analysis out of the box."
North-star metric: time saved. Owner-supplied minutes-saved × invocation counts → ~7,000 engineer-hours/month. Directional ("order-of-magnitude view"), owner-attested, but transparent about both properties.
Cloudflare OS: MCP tool access is not data authorization (2026-08-05)¶
Cloudflare OS consumes existing MCP servers through MCP Server Portals, but explicitly identifies MCP's boundary: knowing which tools an agent can call does not reveal which underlying resources the tools returned or control where data derived from them can flow. Cloudflare OS supplies that missing layer through service-specific Gatekeepers and observation-coupled authorization. This is a third answer to MCP's documented lack of built-in multi-tenancy/auth: beyond a central proxy or external policy evaluator, retain concrete read provenance and re-check it at collaboration and egress sinks. (Source: sources/2026-08-05-cloudflare-os-an-open-platform-for-agents-apps-and-work)
Agentic Internet: MCP as the "callable" standard (2026-08-06)¶
In Cloudflare's Agentic Internet framing, MCP is
one of the open standards (alongside x402, Web Bot Auth, PACT) that keep the
rails neutral. The browser-side companion WebMCP
exposes a page's actions as MCP-style tools via
document.modelContext.registerTool — making the tool contract explicit and
reusing the user's in-page session — while Code Mode has
agents write code against those tools rather than emit prose tool calls.
(Source: sources/2026-08-06-cloudflare-building-an-open-agentic-internet)
MCP goes stateless: the 2026-07-28 spec (2026-08-06)¶
The 2026-07-28 specification turned MCP into a fully stateless protocol —
the single biggest change since launch. The mandatory initialize/initialized
handshake, the Mcp-Session-Id header, and protocol-level sessions are removed
from the core request path. Each request self-describes (protocol version,
client identity, capabilities); a server can be inspected optionally via
server/discover. A request can arrive, invoke a tool/prompt/resource, and
return a result with no session to store, migrate, or drain (Source:
sources/2026-08-06-cloudflare-the-next-generation-of-mcp). This is the wiki's
canonical instance of concepts/stateless-compute.
What this changes, per Cloudflare's framing:
McpAgentis no longer required. Because there's no protocol session to hold, MCP servers run as ordinary HTTP workloads on request-scoped Workers — no stateful infrastructure. Durable Objects remain the right primitive when the application needs state, but MCP itself no longer requires one to speak the protocol. See concepts/serverless-compute + concepts/scale-to-zero.- Elicitation without an open stream. Server-initiated requests like
elicitation/createpreviously needed an open stream. The new Multi Round-Trip Request (MRTR) pattern returns aninput_requiredresult; the client collects the answer and retries the operation with it. Breaking change, but stateless and simpler. - HTTP infra understands MCP. New
Mcp-MethodandMcp-Nameheaders (plusMCP-Protocol-Version) on Streamable HTTP let gateways / rate limiters / WAFs decide from headers without parsing JSON-RPC bodies — canonical protocol-metadata-in-http-headers. - Cache stability.
ttlMs+cacheScopehints on the*/listandresources/readresults, plus deterministic tool-catalog ordering, keep upstream prompt caches stable across reconnects (concepts/context-engineering). - Authorization tightens. Preference order pre-registered → CIMD →
DCR (deprecated, removal after summer 2027); RFC 9207 issuer
isscheck; RFC 8707 audience-restricted tokens bound to the canonical server URI. Implemented by Workers OAuth Provider. - Formal feature lifecycle. Active / Deprecated / Removed with a ≥12-month window; Roots, Sampling, Logging, DCR, and the legacy HTTP+SSE transport are deprecated. New capabilities (MCP Apps, Enterprise-Managed Authorization, Tasks) move through an extensions framework. See feature-lifecycle-deprecation-policy.
- SDKs.
createMcpHandlergraduated from the Agents SDK into the official MCP TypeScript SDK, which was replatformed from Node.js to Web Standards (better Bun/Deno/Workers interop). One/mcpendpoint serves both the new protocol and legacy 2025 stateless clients; deliberate session-dependent servers migrate via patterns/shadow-migration. In production: Sentry shipped on it pre-finalization without breaking prod; Cloudflare's Code Mode MCP server scaled to thousands of req/s and billions of tool calls.
Contradiction¶
Earlier sections of this page (and the wiki's earlier MCP coverage) describe MCP
as a stateful protocol requiring a persistent connection —
Mcp-Session-Id-tagged sessions, session affinity
/ sticky routing for the long-lived SSE transport, and (on Cloudflare) an
McpAgent backed by a Durable Object to hold that session. That was accurate
for the pre-2026-07-28 transports.
- Old position (MCP origins → 2025 Streamable HTTP, tagged
sse,long-lived-connection,session-affinity): MCP begins with aninitialize/initializedhandshake, assigns a session id, and every request resolves that session; well-behaved remote servers manage sticky sessions, held-open streams, and message replay. Server-initiated elicitation rides an open stream. - New position (2026-07-28, Source: sources/2026-08-06-cloudflare-the-next-generation-of-mcp): the handshake, session header, and protocol sessions are removed from the core path; MCP is stateless; elicitation is re-expressed as MRTR retries with no open stream; the legacy HTTP+SSE transport is deprecated (≥12-month window).
Both are correct for their eras. The /mcp endpoint serves legacy stateless
2025 clients alongside the new protocol during the deprecation window, so the
older sessionful shape persists in the field until drained — see
patterns/shadow-migration.
AWS Well-Architected reading of the stateless spec (2026-09-01)¶
AWS independently read the same 2026-07-28 revision against the Well-Architected Agentic AI Lens, mapping the protocol changes onto all six pillars and arguing the stateless core natively achieves what the old session-based protocol could only reach through compensating AWS infrastructure (Source: sources/2026-09-01-aws-mcp-went-stateless-is-your-aws-mcp-server-deployment-well-architected). It frames the migration as deleting infrastructure that existed only to preserve sessions:
- Deployment table. ALB stickiness →
round-robin; session state in DynamoDB /
ElastiCache → server-minted identifiers as tool
arguments (server-minted-continuation-token);
Lambda workarounds → Lambda as a first-class host;
body-parsing gateways → header routing (protocol-metadata-in-http-headers);
Last-Event-IDstream resumption → idempotent tools + client re-issue (idempotent-retry-on-broken-stream). requestStateas continuation token. MRTR's opaque token carries resume context so any instance continues an interrupted interaction; servers must protect it with HMAC/AEAD and enforce ownership per identifier because it is model-visible (server-minted-continuation-token).- Observability in-protocol. W3C Trace Context
in
_metatraces end-to-end through OpenTelemetry / CloudWatch;resultType(complete/input_required) plusMcp-Method/Mcp-Namegive per-operation signals without body parsing; protocol logging deprecated forstderr/OTel. - Protocol-declared caching.
ttlMs+cacheScopeare now required on list/resource-read results;cacheScope: "public"on tenant-specific data is flagged as a multi-tenant disclosure risk. - Standardized error codes. -32000..-32019 implementation-defined; -32020..-32099 reserved for MCP — canonical retry/backoff/circuit-break signals.
- Cost / sustainability. delete-session-infrastructure — a
two-node ElastiCache
cache.t4g.microsession store ≈ $23/mo, but the real win is eliminating a whole class of infra + sticky-routing's uneven load; teams behind AgentCore Gateway get protocol management and back-compat handled for them.
This is a second Tier-1 source corroborating the stateless shift, adding the
AWS-service deployment specifics, the Well-Architected framing
(well-architected-framework), and server/discover for optional
capability negotiation.
Seen in¶
-
sources/2026-09-25-databricks-from-data-to-dialogue-how-sp-global-energy-made-its-structured-data-estate-conversational — Managed MCP server auto-generated per Genie space + FastMCP composition + external-consumer bridge. S&P Global Energy exposes its structured-data estate to agents by making every Genie Agent a Databricks-managed MCP server at
/api/2.0/mcp/genie/{genie_space_id}— nothing to deploy or host — with a two-tool ask-then-poll surface (genie_query_spacesubmits a natural-language question;genie_poll_responsepolls by conversation + message ID for the SQL + result set), executing asynchronously against a SQL warehouse. The managed servers are governed by Unity Catalog and authenticated by the platform ("we inherited the [security layer] we already had"). Because MCP is an open standard, the same endpoints serve internal agents, customer-facing AI, and external customers' own MCP-compatible agents — one bridge, every client crosses it. A FastMCP proxy composes the scoped per-group Genie MCP servers into per-commodity composite endpoints with name-spaced tools (patterns/mcp-as-centralized-integration-proxy). -
sources/2026-09-01-databricks-how-we-eliminated-1-million-a-year-of-wasted-ai-agent-spend — MCP tool signatures are kept deliberately under-specified (tool-selection-accuracy) to save the per-call token cost of parameter descriptions. That looseness lets a model fill gaps with reasonable guesses; tools that accept only one shape then crash, producing silent tool-failure cost. Databricks' remedy is to build tools that adapt to how LLMs naturally call them.
-
sources/2026-09-22-databricks-genie-one-mcp-give-any-ai-agent-the-right-business-context — MCP as the governed-analytics access surface + MCP Apps interactive views. Databricks' Genie One MCP server exposes governed conversational analytics as five tools (
genie_ask/genie_poll_response/genie_get_query_result/genie_cancel_response/view_ask) to any MCP-compatible agent (ChatGPT, Claude, Copilot, Claude Code), with awarehouse_id_metaparameter pinning execution. Two protocol-level data points: (1) MCP Apps (ext-apps) — an extension letting the server return an interactive rendered view (visuals, metrics, ontology citations) instead of plain text, with automatic text-only fallback on clients that don't support it;view_askis the MCP-Apps variant ofgenie_ask. (2) External MCP servers as Unity Catalog securables governed through standard grants, with OBO recommended so the end user's identity (and UC row filters / column masks) flows through — reinforcing the "register an external MCP as a UC securable" model from the 2026-05-20 governance post. Also names the scoped Genie Agent MCP server (/api/2.0/mcp/genie/{genie_space_id}) as the single-curated- domain alternative, and the "tune Genie in Databricks, not from the client system prompt" operational guidance.