Class 8: The MCP Ecosystem
Duration: ~20 minutes | Level: Beginner | Prerequisites: Class 7: Security and Trust
What the Previous Seven Classes Covered
The protocol itself is now behind us:
- Why MCP exists: write the integration once, not once per application (or per model)
- The architecture: host, client, server, model
- The three primitives: tools, resources, prompts
- The protocol: JSON-RPC, message types, error handling
- The transports: stdio for local, Streamable HTTP for remote (with HTTP+SSE as a deprecated legacy option)
- Capability negotiation: per-request metadata now, the
initializehandshake before2026-07-28 - Security: trust boundaries, least privilege, prompt injection
MCP Clients (Where You Connect Your Server)
MCP clients are embedded in AI host applications. The following are confirmed MCP-compatible as of 2025-2026:
| Client | Type | Notes |
|---|---|---|
| Claude Desktop | Desktop AI assistant | Anthropic's own; first-class MCP support |
| ChatGPT | Desktop and web AI assistant | Named by the MCP documentation, alongside Claude, as an assistant that supports MCP |
| Cursor | AI code editor | Supports both stdio and HTTP servers |
| Zed | Code editor | Integrated MCP for context and tooling |
| GitHub Copilot | AI coding assistant | Microsoft's integration |
| Continue | VS Code/JetBrains plugin | Open-source; broad MCP support |
| Windsurf | AI code editor | Originally by Codeium; acquired by Cognition in July 2025 |
| Cline | VS Code agent | Open-source autonomous agent |
| LibreChat | Self-hosted chat UI | Community deployment |
Notable MCP Servers
The modelcontextprotocol/servers repository is the canonical home for reference implementations. Many early servers have moved to first-party maintainers (the vendors themselves) or been archived.
Currently maintained in modelcontextprotocol/servers
- Everything, a reference implementation that exercises every primitive (tools, resources, prompts, sampling)
- Fetch, URL fetching and HTML-to-markdown conversion
- Filesystem, safe, sandboxed local file access
- Git, repository operations on local clones
- Memory, persistent knowledge graph for AI memory
- Sequential Thinking, structured reasoning helper
- Time, time and timezone utilities
Maintained by their respective vendors (first-party)
- GitHub: now at
github/github-mcp-server - Brave Search: now at
brave/brave-search-mcp-server - Stripe, Cloudflare, Notion, Linear, and many others publish official MCP servers in their own repositories
Community / third-party
A long tail of community servers exists for Slack, Gmail, Google Calendar, Postgres, MongoDB, Docker, Kubernetes, Obsidian, Discord, Puppeteer, and many more domains. Only a few of these (Slack, Postgres, Puppeteer) began in the reference repository and have since been archived to servers-archived as read-only references.
When evaluating a community server, check: is it actively maintained, who runs the security review, and is the published version recent. Installing a server runs its code with your credentials, and the specification treats tool descriptions and annotations as untrusted unless the server is one you trust. Pin an exact version. The quickstart in the reference repository, npx -y @modelcontextprotocol/server-memory, installs whatever is newest that day, and its README calls those reference servers educational examples instead of production-ready solutions.
Official SDK Support
The MCP project maintains official SDKs for the most common languages, all under the modelcontextprotocol GitHub organisation. In the table, GA marks a stable, general-availability release, and pre-1.0 an SDK whose API may still change. The tier is a maintenance promise: Tier 1 implements new protocol features before the revision ships, Tier 2 within six months, and Tier 3 without any timeline commitment.
| Language | Artifact | Tier | Spec revision | Status (September 2026) |
|---|---|---|---|---|
| TypeScript/Node.js | @modelcontextprotocol/sdk | 1 | 2026-07-28 | GA |
| Python | mcp (PyPI) | 1 | 2026-07-28 | GA |
| Java | io.modelcontextprotocol.sdk:mcp | 2 | 2025-11-25 | GA. Current 2.0.1, released 2026-08-19; the previous 1.1.x line is still patched (latest 1.1.4) and 1.0.x still receives fixes (latest 1.0.2). Maintained with Spring AI. Follows SemVer, and does not designate any release as long-term support. |
| C#/.NET | ModelContextProtocol NuGet | 1 | 2026-07-28 | GA, current v2.2.0. Maintained with Microsoft. |
| Go | github.com/modelcontextprotocol/go-sdk | 1 | 2026-07-28 | GA, current v1.7.0. Maintained with Google. |
| Rust | rmcp crate | 1 | 2026-07-28 | GA, current rmcp v3.2.0. |
| Kotlin | io.modelcontextprotocol:kotlin-sdk | 3 | 2025-11-25 | Pre-1.0, current 0.15.0. Maintained with JetBrains. |
| Swift | mcp-swift-sdk | 3 | Pre-1.0, current 0.12.1. | |
| Ruby | mcp gem | 2 | GA, current 1.5.0; the first stable release, 1.0.0, came on 2026-07-24. | |
| PHP | mcp/sdk (Packagist) | 3 | Pre-1.0, current 0.8.1. Maintained with The PHP Foundation. |
These version numbers move: the official SDK page has the current tier for each SDK, and Maven Central the current Java version.
Our Java SDK course uses the official Java SDK, which integrates cleanly with Spring Boot.
The Protocol's Evolution
The current stable specification is 2026-07-28, ratified on 28 July 2026, and it is the largest revision since MCP launched. Four SDKs spoke it on ratification day: TypeScript, Python, Go and C#, with the Rust SDK supporting it in beta the same day. The Java SDK is behind: its latest release, 2.0.1 from 19 August 2026, still implements 2025-11-25 (the "first anniversary" release), which is what the code in these courses targets. That lag is the tiering system at work, because a Tier 2 SDK has six months to implement a revision. 2025-06-18 and 2025-03-26 also remain widely supported.
Every revision so far, and what each one added:
| Revision | Date | What landed |
|---|---|---|
2024-11-05 | November 2024 | The first revision: stdio and the HTTP+SSE transport |
2025-03-26 | March 2025 | Streamable HTTP; OAuth 2.1 authorization for HTTP servers |
2025-06-18 | June 2025 | Elicitation; structured tool output; RFC 8707 Resource Indicators required; the MCP-Protocol-Version header |
2025-11-25 | November 2025 | Tasks (experimental); icons; JSON Schema 2020-12 as the default dialect; OpenID Connect Discovery; Client ID Metadata Documents; Working Groups and SDK tiering |
2026-07-28 | July 2026 | Per-request _meta in place of sessions; server/discover; Multi Round-Trip Requests; subscriptions/listen; required resultType; required request headers; ttlMs and cacheScope |
The versioning rules call 2025-11-25 and earlier legacy, and 2026-07-28 and later modern. A client that speaks only modern fails against a server that speaks only legacy, so a server built on the Java SDK today needs clients that speak both eras. A dual-era client finds out which era it is talking to by probing:
The body of that 400 Bad Request decides it: a modern server answers a bad modern request with a recognised modern error, so any other body marks the server as legacy.
Streamable HTTP transport (introduced in the 2025-03-26 revision): the current standard HTTP transport, replacing the two-channel HTTP+SSE design, which is deprecated but still encountered in legacy deployments. Session state moved to an Mcp-Session-Id header, which 2026-07-28 removed along with sessions themselves.
HTTP+SSE (2024-11-05, deprecated) | Streamable HTTP (as of 2026-07-28) | |
|---|---|---|
| Endpoints | a GET endpoint that opens an SSE stream, plus a separate POST endpoint | a single MCP endpoint that accepts POST |
| How the client learns the POST URL | from an endpoint event, the first event on the SSE stream | it is the URL the user configured |
| Where server messages arrive | on the one long-lived SSE stream | per request: a JSON body, or an SSE stream scoped to that request |
OAuth authentication for HTTP servers (introduced in 2025-03-26, refined in 2025-06-18 and 2025-11-25): how clients authenticate to HTTP-based MCP servers, built on OAuth 2.1, RFC 9728 Protected Resource Metadata, and RFC 8707 Resource Indicators. The 2025-11-25 revision adds OpenID Connect Discovery, Client ID Metadata Documents for client registration, and mandates PKCE verification. Covered in the Remote MCP Servers course.
Server-initiated elicitation (introduced in 2025-06-18): servers can ask the user (through the client) for additional information mid-tool-call using JSON-Schema-validated forms.
Structured tool output (introduced in 2025-06-18): strongly typed tool return values via the optional structuredContent field on CallToolResult, alongside the existing content array:
{
"jsonrpc": "2.0",
"id": 5,
"result": {
"content": [
{ "type": "text", "text": "{\"temperature\": 22.5, \"conditions\": \"Partly cloudy\"}" }
],
"structuredContent": { "temperature": 22.5, "conditions": "Partly cloudy" }
}
}
The text block repeats the same data as a string, so a client that reads only content still works.
Tasks (async operations) (introduced experimentally in 2025-11-25): tools/call on the server side, plus sampling and elicitation in the client direction, can return a task handle when the receiving side declares the tasks capability. (In 2026-07-28 tasks moved out of the core protocol into an official extension, io.modelcontextprotocol/tasks, and were redesigned around polling.) The handle lets the requestor check status and fetch results later, and the task moves through five states:
input_required is the only state that leads back to working.
Icons and metadata (introduced in 2025-11-25): servers can attach icons to tools, resources, resource templates, and prompts; JSON Schema 2020-12 is now the default dialect for MCP schemas.
Linux Foundation governance (announced 9 December 2025): MCP became a founding project of the Agentic AI Foundation (AAIF), a directed fund under the Linux Foundation, co-founded by Anthropic, Block and OpenAI with backing from Google, Microsoft, AWS, Cloudflare and Bloomberg. It joined Block's goose and OpenAI's AGENTS.md as the AAIF's founding projects.
The 2026-07-28 revision (ratified 28 July 2026) removes protocol-level sessions (SEP-2567, SEP-2575). The changelog lists what was replaced:
Up to 2025-11-25 | From 2026-07-28 |
|---|---|
initialize and notifications/initialized | protocol version and client capabilities in every request's _meta |
capabilities learned from the initialize result | server/discover, which servers MUST implement, advertising supported versions, capabilities and identity |
the Mcp-Session-Id header | removed with protocol-level sessions |
resources/subscribe, resources/unsubscribe and the HTTP GET stream | one subscriptions/listen stream |
roots/list, sampling/createMessage and elicitation/create sent by the server | Multi Round-Trip Requests: the server answers resultType: "input_required" and the client retries |
ping | removed |
logging/setLevel | io.modelcontextprotocol/logLevel in _meta, set per request |
notifications/roots/list_changed | removed |
Last-Event-ID stream resumption | the client re-issues the request under a new id |
The Multi Round-Trip Requests row changes how a server is written (SEP-2322). A server can no longer send a request of its own, so it answers with a result that asks for input and waits for the client to come back:
The second tools/call carries the same parameters plus the answers, under a new JSON-RPC id: the specification treats the retry as an independent request.
Four smaller changes in the same revision will affect your code. Every result gains a required resultType field, complete or input_required, and a result from an older server that omits it MUST be read as complete. Error codes were renumbered, and one range is now reserved for the specification itself:
| Code | Meaning | Status in 2026-07-28 |
|---|---|---|
-32000 to -32019 | implementation-defined | left to the SDKs, existing usage grandfathered |
-32020 to -32099 | reserved | allocated to the MCP specification |
-32602 | invalid params | now also carries resource-not-found, which was -32002 up to 2025-11-25 |
Streamable HTTP also requires routing headers on every POST, so a gateway can route a call without reading the body:
| Header | Source field | Required for |
|---|---|---|
Mcp-Method | method | every request |
Mcp-Name | params.name or params.uri | tools/call, resources/read, prompts/get |
Mcp-Param-{name} | a tool parameter annotated x-mcp-header | when the tool definition declares it |
ttlMs and cacheScope become required on the results of tools/list, prompts/list, resources/list, resources/templates/list and resources/read, giving clients a freshness hint instead of a reason to poll.
Finally, Roots, Sampling and Logging are deprecated (SEP-2577) under a new feature-lifecycle policy that guarantees a minimum twelve-month window before anything is removed (SEP-2596), and Dynamic Client Registration is deprecated in favour of OAuth Client ID Metadata Documents.
Building on Top of MCP
Several frameworks are emerging that use MCP as a foundation rather than implementing it directly:
LangChain / LangGraph: the popular Python agent framework has MCP tool integrations, allowing MCP servers to be used as LangChain tools.
LangChain4j: the Java counterpart to LangChain, and the main alternative to Spring AI for JVM developers who aren't already in the Spring ecosystem. Its dev.langchain4j:langchain4j-mcp module is an MCP client, supporting stdio and Streamable HTTP; server-side support lives separately in LangChain4j Community.
Spring AI: Spring's official AI framework has first-class MCP support, including auto-discovery and registration of MCP tools as Spring AI tools.
AI SDK (Vercel): TypeScript SDK with MCP client support for Next.js and Node.js applications.
Choosing a Java Path
This course is technology-agnostic, but the JVM has four distinct MCP implementations, and choosing between them is a common source of confusion.
The intuitive criterion, use whichever framework you already use, turns out to be a weak one. Being a Spring Boot application does not settle the question, because plenty of Spring Boot projects reach for the official Java SDK directly. What decides it is how your tools are declared: fixed at compile time, or assembled while the application is running. The questions, in the order worth asking them:
The first question does the most work: tools assembled while the application is running rule out Spring AI and Quarkus MCP Server, which both declare tools with annotations at compile time.
| If you are | Use | Why |
|---|---|---|
| Building a new service, tools known at compile time | Spring AI | Annotate a bean; the starter wires transport, discovery and registration |
| Adding MCP to an application or runtime you do not control, or generating tools at runtime | The official Java SDK, directly | Does not assume anything about how your tools are declared |
| Working in Quarkus, or targeting a native image (an ahead-of-time compiled binary) | Quarkus MCP Server | CDI annotations (Jakarta Contexts and Dependency Injection), and an implementation independent of the SDK |
| Already building with LangChain4j | langchain4j-mcp | A capable client; its server-side support is limited |
Where to Find MCP Servers
- MCP Registry: the official registry of published MCP servers
- Awesome MCP Servers: curated community list
- MCP.so: community directory with install links
- Official Reference Servers: reference implementations maintained by the MCP steering group
- Smithery: MCP server marketplace
What's Next
That is the end of the MCP Fundamentals course. You have the protocol, its primitives, its transports and its trust boundaries, which the implementation courses assume you are bringing with you.
If you want to build MCP servers in Java → Building MCP Servers in Java →
If you want to build agents that consume MCP servers → Spring AI + MCP Integration →
If you want to design larger systems → MCP Architecture Patterns (coming soon)
If you want to ship to production → Remote MCP Servers and Securing Production MCP (both coming soon)
If you want to test what you build → Testing & Observability (coming soon)
If you want to understand more protocol nuance → Read the official MCP specification
If you want context before building → Check the Blog for practical insights and real-world patterns
Key Takeaways
- MCP has broad client adoption: Claude Desktop, Cursor, GitHub Copilot, Zed, and more
- Thousands of community servers cover most common integration scenarios; check before building
- Official GA SDKs exist for TypeScript, Python, Java, C#/.NET, Go, Rust, and Ruby, with Kotlin, Swift, and PHP still pre-1.0
- The protocol is now governed under the Linux Foundation as a vendor-neutral standard
- On the JVM, pick between Spring AI, the Java SDK, Quarkus and LangChain4j by what you are building, and not by the framework the surrounding application already uses
- The current revision is
2026-07-28; most SDKs track it, and the Java SDK2.0.1still implements2025-11-25
Further Reading
- Key Changes (specification 2026-07-28): the normative list of every change this class summarises, with the SEP number behind each one.
- Versioning and Compatibility: the legacy and modern eras, and the matrix of which client and server combinations work.
- Multi Round-Trip Requests: the full rules for the pattern that replaced server-initiated sampling, elicitation and roots requests.
- Streamable HTTP: the transport as it stands now, including the required headers and the probe for older servers.
- SDKs: the official list of the ten SDKs and the current tier of each, which is where to check whether the table above has gone stale.
- Feature Lifecycle and Deprecation Policy: the Active, Deprecated and Removed states, and the twelve-month minimum window that now governs Roots, Sampling and Logging.
- The New MCP Roadmap: the workstreams the maintainers named for the next revision.
Sources
- Key Changes (specification 2026-07-28): the removal of sessions, the handshake and
ping,server/discover, MRTR,subscriptions/listen, requiredresultType, the error-code allocation policy,ttlMsandcacheScope, and the Roots, Sampling and Logging deprecation. - Versioning and Compatibility: the legacy and modern terminology, the dual-era probe, and the matrix entry saying a modern-only client fails against a legacy-only server.
- Streamable HTTP: the
Mcp-MethodandMcp-Nameheaders with their source fields,x-mcp-header, theMcp-Session-Idspelling, and the deprecated HTTP+SSE two-endpoint design. - Multi Round-Trip Requests: the
input_requiredresult,inputRequestsandinputResponses, and the rule that the retry uses a different JSON-RPC id. - Specification 2026-07-28 overview: tools represent arbitrary code execution, and tool descriptions and annotations should be considered untrusted unless they come from a trusted server.
- Key Changes (specification 2025-11-25): icons, JSON Schema 2020-12 as the default dialect, OpenID Connect Discovery, Client ID Metadata Documents, experimental tasks, Working Groups and SDK tiering.
- Tasks (specification 2025-11-25): the
taskscapability, the request types that can be task-augmented, and the five states with their valid transitions. - Tools (specification 2025-11-25): the
structuredContentexample, and the advice to repeat the data in a text block. - Authorization (specification 2025-11-25): OAuth 2.1 with RFC 9728 and RFC 8707, and the requirement that clients verify PKCE support before proceeding.
- SDK Tiering System: the Tier 1, Tier 2 and Tier 3 commitments for implementing new protocol features.
- SDKs: the tier of each official SDK, including Java at Tier 2.
- The 2026-07-28 Specification: the ratification date, that TypeScript, Python, Go and C# all spoke the revision on the day it shipped, and that the Rust SDK supported it in beta.
- MCP joins the Agentic AI Foundation: the AAIF as a directed fund under the Linux Foundation, its co-founders and backers, and the three founding projects.
- Linux Foundation announces the Agentic AI Foundation: the 9 December 2025 announcement date and the member list.
- MCP Java SDK on Maven Central: the Java SDK versions
2.0.1,1.1.4and1.0.2, and their release dates. - ModelContextProtocol on NuGet: the C# SDK version
v2.2.0. - rmcp on docs.rs: the Rust SDK version
3.2.0. - mcp gem on RubyGems: the Ruby SDK versions from
1.0.0on 2026-07-24 to1.5.0. - mcp/sdk on Packagist: the PHP SDK version
v0.8.1. - go-sdk on pkg.go.dev: the Go SDK version
v1.7.0. - kotlin-sdk on Maven Central: the Kotlin SDK version
0.15.0. - Model Context Protocol servers: the seven maintained reference servers, the archived list, the Brave Search replacement, and the README warning that they are educational examples.
- What is the Model Context Protocol?: ChatGPT named alongside Claude as an assistant that supports MCP.
- Cognition's acquisition of Windsurf: the July 2025 acquisition named in the client table.
- MCP tutorial (LangChain4j):
langchain4j-mcpas a client, with server-side support in LangChain4j Community. - Quarkus MCP Server: server features declared as annotated CDI beans.