What an MCP server actually does in 2026
- Part 1

What an MCP server does in 2026: much more than a list of tools What an MCP server does under the 2026-07-28 spec: three roles, how duties differ from features and extensions, one request traced through, and a one-tool Python server.
- Part 2

MCP goes stateless: what changed in the 2026-07-28 specification The 2026-07-28 MCP specification drops the handshake, sessions and server-initiated requests: what replaces them, what else changed, and what is now deprecated.
- Part 3

server/discover: the one method every MCP server must implement What server/discover returns under the 2026-07-28 MCP spec, how a client negotiates a version or falls back to initialize, and how to read it with the Python SDK.
- Part 4

Server instructions: the paragraph every model reads first What MCP server instructions are under the 2026-07-28 spec, how hosts such as Claude Code load them, and what to write and what to leave out, with a Python example.
- Part 5

Stateless MCP requests: _meta, resultType and explicit handles How a 2026-07-28 MCP request carries its version and capabilities in _meta, how a client branches on resultType, and how a server keeps state with explicit handles.
- Part 6

Caching hints and pagination in MCP How an MCP server marks its results with ttlMs and cacheScope, why its tool order should stay stable, and how cursor pagination works under the 2026-07-28 spec.
- Part 7

MCP transports in 2026: stdio and Streamable HTTP How MCP’s two transports work under the 2026-07-28 spec: stdout on stdio, the headers that route a Streamable HTTP request, x-mcp-header, and proxy timeouts.
- Part 8

Designing an MCP tool: the definition and the result What an MCP tool definition and its result carry under the 2026-07-28 spec: naming rules, annotations, content and structuredContent, with a Python weather tool.
- Part 9

MCP tool errors, and tools that models use well When an MCP tool should return isError and when a protocol error, what the Python SDK does with exceptions, the security duties, and how to design tools models use well.
- Part 10

MCP resources: context the application decides to use How an MCP server lists and reads resources and URI templates under the 2026-07-28 spec, the error a missing resource gets, and what hosts and the Python SDK do.
- Part 11

MCP prompts: slash commands your server ships How MCP prompts work under the 2026-07-28 spec: how hosts invoke them, prompts/list and prompts/get, argument completion, safe arguments and a Python example.
- Part 12

Tool, resource or prompt? Choosing the right MCP primitive How to choose between an MCP tool, resource and prompt: who decides when each is used, where instructions, Skills, Apps and Tasks fit, and a procedure to follow.
- Part 13

Multi round-trip requests: how a stateless MCP server asks for more How an MCP server asks for a confirmation without a session: the input_required result, the retry, the rules for both sides, and a deploy example in Python.
- Part 14

requestState: sealing the state your MCP server hands to the client Why an MCP server must seal the requestState it hands the client, what to bind into it, what the Python SDK seals for you, and how to build a multi-step wizard on it.
- Part 15

Elicitation in MCP: asking the user with a form or a link How an MCP server asks the user for input in 2026: form and URL elicitation inside multi round-trip requests, capability checks, and a sign-in link in Python.
- Part 16

Progress, cancellation and timeouts when nothing can resume How an MCP server reports progress, honours cancellation on stdio and Streamable HTTP, and lives with timeouts when a dropped stream can’t resume, with Python.
- Part 17

subscriptions/listen: change notifications in MCP How an MCP server streams change notifications with subscriptions/listen under the 2026-07-28 spec: the filter, acknowledgement first, reconnects and fan-out.
- Part 18

Your MCP server is an OAuth resource server: what it must do The first four duties of an MCP server as an OAuth 2.1 resource server under the 2026-07-28 spec: publish its metadata, send the 401, check every token, forward none.
- Part 19

MCP authorization in practice: step-up, no passthrough, Entra ID How an MCP server asks for more scope with a 403 step-up, calls other APIs without passing tokens through, and works with Microsoft Entra ID under the 2026-07-28 spec.
- Part 20

Tracing MCP calls with OpenTelemetry How an MCP server continues a trace from traceparent in _meta, which spans and attributes to emit, what to measure, and what the Python SDK traces for you.
- Part 21

An MCP threat model: what to defend, and where The threats an MCP deployment faces, from tool poisoning to token passthrough, its three trust boundaries, what the 2026-07-28 spec requires, and the layers of defence.
- Part 22

Serving two MCP protocol eras: deprecations and a migration checklist How one MCP server serves 2025-era and 2026-07-28 clients at once, what is deprecated and until when, what is already gone, and a checklist for your migration.
- Part 23

How MCP extensions work What MCP extensions are, which exist in October 2026, how clients and servers negotiate them per request, and how a server falls back when the client lacks one.
- Part 24

MCP Apps: how interactive UI gets into the conversation What MCP Apps adds over a link, how the server, the host and the sandboxed view share the work, and the messages from tool discovery to the app’s first render.
- Part 25

Building an MCP App: declarations, sandbox and text fallbacks What an MCP App’s server declares, how its view talks to the host, how web hosts sandbox it, and a Python tool with a text fallback plus a TypeScript view.
- Part 26

MCP Tasks: long-running work without holding a connection How the MCP Tasks extension lets a server answer a tool call with a task the client polls: its states and methods, durable storage, security, and a Python Task type.
- Part 27

Skills over MCP: shipping workflows with your server How an MCP server publishes Agent Skills: skills/list and skills/get, the SHA-256 manifest hosts verify, when approval applies, and a manifest builder in Python.
- Part 28

Enterprise-managed authorization and client credentials for MCP How the two official MCP authorization extensions work: enterprise-managed access through an ID-JAG from the company’s IdP, and client credentials for jobs with no user.
- Part 29

Experimental and vendor-specific MCP extensions What vendor _meta keys like anthropic/alwaysLoad do, why they must stay optional, what the Interceptors and Variants proposals add, and how to design your own extension.
- Part 30

One request through an MCP server, end to end Follow one MCP request through seven phases, from server/discover to the app’s teardown, then test the whole sequence in Python with a fake host and a wire recorder.
- Part 31

Which AI hosts support which MCP features (October 2026) Which MCP features Claude, Claude Code, ChatGPT, VS Code, Cursor, Gemini CLI and Microsoft 365 Copilot support as of October 2026, and what that means for your server.
- Part 32

MCP server design patterns and anti-patterns Four MCP server design patterns that hold up in practice, from search plus fetch to layered surfaces, and the twelve anti-patterns behind most production problems.
- Part 33

Should you put an AI agent behind an MCP tool? When an inner agent behind an MCP tool helps, when plain search and fetch tools serve the calling model better, and eleven design rules if you build one.
- Part 34

A reference architecture for MCP servers in production How the 2026 MCP duties shape a production deployment: a generic architecture, one way to host it on Azure, and a build pipeline for schemas, skills and conformance.
- Part 35

The MCP server author’s checklist A one-page checklist for MCP server authors under the 2026-07-28 spec, from server/discover to deprecations, each item linked to the series article that explains it.