Learning objectives
By the end of this module, you should be able to:
- Explain the host, client and server roles and the difference between tools, resources and prompts.
- Describe the current 2026-07-28 stateless protocol at a beginner level, including optional discovery and per-request metadata.
- Separate MCP connectivity from authorization, approvals and agent policy.
MCP standardizes a connection boundary
An MCP host can manage client connections to one or more MCP servers. Servers expose capabilities through protocol-defined primitives such as tools, resources and prompts. MCP reduces custom integration work; it does not decide whether a capability is safe for a particular user or task.
- Tool: an invokable capability
- Resource: data/content the server exposes
- Prompt: reusable prompt/template capability
- Host/client: the application side that discovers and invokes server capabilities
Current spec note: 2026-07-28 is stateless at the protocol layer
The 2026-07-28 revision removed the old initialize/initialized handshake and Mcp-Session-Id protocol session. Each request is self-describing; clients can use server/discover when they want server capabilities up front, but discovery is not required for every call.
Application state can still exist. A tool can return an explicit handle that later calls pass back as a normal argument.
HTTP routing is explicit
For the 2026-07-28 Streamable HTTP path, the protocol version and method are visible in standard MCP headers, including MCP-Protocol-Version and Mcp-Method; tool calls also expose the tool name through Mcp-Name. Gateways can route, meter and apply policy without parsing arbitrary prompt text.
Authorization is still a separate control
A tool description is metadata, not permission. Remote MCP deployments use an OAuth-oriented resource-server model, and the current revision strengthens issuer validation and moves client registration toward Client ID Metadata Documents. MCP trust guidance also emphasizes explicit user consent and control around tool use, so an internal risk-tier policy does not replace the host's consent responsibilities. Use maintained SDKs for the details rather than copying old OAuth snippets.
Long-running work uses an extension
In the 2026-07-28 ecosystem, Tasks is an extension rather than experimental core protocol. A supported tools/call can return a task handle; the client can follow it with tasks/get, tasks/update or tasks/cancel. There is no tasks/list in the current Tasks extension.
Worked examples
Conceptual MCP topology
AI Host
├─ MCP client → Files MCP server
├─ MCP client → Git MCP server
└─ MCP client → Operations MCP server
├─ tools
├─ resources
└─ prompts
- MCP standardizes the integration boundary.
- Each server can expose a different trust and permission surface.
Modern request shape — simplified
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: get_service_status
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_service_status",
"arguments": {"service": "nginx"},
"_meta": {"...client/version/capability metadata...": "..."}
}
}
- The modern protocol carries request identity/version information per request rather than relying on the old protocol session handshake.
- This is a teaching simplification; use an official MCP SDK for production wire handling.
Try it · core lab · account-free
Validate a modern MCP request boundary
Goal: Inspect simplified 2026-07-28 discovery/tool-call envelopes and prove that a protected tool still requires application authorization.
Before you start
- Python 3 only. This is a protocol-concepts simulator, not a replacement for an official MCP SDK.
STEP 1Run the MCP concepts lab
python3 public/labs/agentic-ai/10_mcp.py
STEP 2Inspect the modern request metadata
The simulator checks protocol version, Mcp-Method/Mcp-Name and per-request metadata without creating a protocol session.
STEP 3Try a protected tool without authorization
The simulated server must reject the call even though the tool is discoverable.
Verify
- server/discover and a read-only tools/call pass the modern-envelope checks.
- A protected tool call fails without authorization and succeeds only with the simulated bearer identity.
Expected outcome
- You can explain that discovery is not authorization.
- You can identify old session/initialize tutorials as pre-2026 protocol-era material.
Break / fix · diagnose
- If an old-style session ID appears in the modern path, revisit the 2026-07-28 stateless model.
- If a protected tool executes without identity, check the authorization gate before dispatch.
Production viewMCP is an interoperability layer. Production safety still depends on server-side authorization, narrow tool contracts, risk-aware approval, observability and the host's policy around which servers and capabilities may be used.
Avoid these traps
Common mistakes
- Assuming an MCP server is trusted merely because it speaks MCP.
- Using old initialize/session tutorials as if they describe the 2026-07-28 protocol revision.
- Treating tool annotations or descriptions as authorization enforcement.
- Exposing a powerful MCP server to an agent without scoping identity, tools and data.
Knowledge check
Explain the control decision, not just the vocabulary.
Open every answer only after committing to your own answer. Opening all four answers records knowledge-check activity in My Learning.
1What major lifecycle change arrived in MCP 2026-07-28?
The protocol core became stateless: the old initialize/initialized handshake and Mcp-Session-Id protocol session were removed for the modern revision.
2Is server/discover required before every MCP tool call in the modern revision?
No — it is available for clients that want capabilities up front; modern requests are self-describing.
3If a tool appears in tools/list, is the caller automatically authorized to use it?
No — discovery and authorization are separate; protected capabilities still require identity and server-side policy.
4How is long-running tools/call work represented in the current MCP ecosystem?
Through the Tasks extension, which can return a task handle and supports tasks/get, tasks/update and tasks/cancel.