# What an MCP server actually does in 2026

- [What an MCP server does in 2026: much more than a list of tools](https://pournasserian.com/writing/mcp-2026-what-a-server-does): 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.
- [MCP goes stateless: what changed in the 2026-07-28 specification](https://pournasserian.com/writing/mcp-2026-what-changed): 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.
- [server/discover: the one method every MCP server must implement](https://pournasserian.com/writing/mcp-2026-server-discover): 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.
- [Server instructions: the paragraph every model reads first](https://pournasserian.com/writing/mcp-2026-server-instructions): 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.
- [Stateless MCP requests: _meta, resultType and explicit handles](https://pournasserian.com/writing/mcp-2026-stateless-requests): 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.
- [Caching hints and pagination in MCP](https://pournasserian.com/writing/mcp-2026-caching-and-pagination): 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.
- [MCP transports in 2026: stdio and Streamable HTTP](https://pournasserian.com/writing/mcp-2026-transports): 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.
- [Designing an MCP tool: the definition and the result](https://pournasserian.com/writing/mcp-2026-tool-definitions): 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.
- [MCP tool errors, and tools that models use well](https://pournasserian.com/writing/mcp-2026-tool-errors-and-design): 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.
- [MCP resources: context the application decides to use](https://pournasserian.com/writing/mcp-2026-resources): 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.
- [MCP prompts: slash commands your server ships](https://pournasserian.com/writing/mcp-2026-prompts): 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.
- [Tool, resource or prompt? Choosing the right MCP primitive](https://pournasserian.com/writing/mcp-2026-choosing-a-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.
- [Multi round-trip requests: how a stateless MCP server asks for more](https://pournasserian.com/writing/mcp-2026-multi-round-trip-requests): 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.
- [requestState: sealing the state your MCP server hands to the client](https://pournasserian.com/writing/mcp-2026-request-state): 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.
- [Elicitation in MCP: asking the user with a form or a link](https://pournasserian.com/writing/mcp-2026-elicitation): 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.
- [Progress, cancellation and timeouts when nothing can resume](https://pournasserian.com/writing/mcp-2026-progress-and-cancellation): 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.
- [subscriptions/listen: change notifications in MCP](https://pournasserian.com/writing/mcp-2026-subscriptions-listen): How an MCP server streams change notifications with subscriptions/listen under the 2026-07-28 spec: the filter, acknowledgement first, reconnects and fan-out.
- [Your MCP server is an OAuth resource server: what it must do](https://pournasserian.com/writing/mcp-2026-oauth-resource-server): 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.
- [MCP authorization in practice: step-up, no passthrough, Entra ID](https://pournasserian.com/writing/mcp-2026-oauth-step-up-and-entra): 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.
- [Tracing MCP calls with OpenTelemetry](https://pournasserian.com/writing/mcp-2026-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.
- [An MCP threat model: what to defend, and where](https://pournasserian.com/writing/mcp-2026-threat-model): 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.
- [Serving two MCP protocol eras: deprecations and a migration checklist](https://pournasserian.com/writing/mcp-2026-migration-two-eras): 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.
- [How MCP extensions work](https://pournasserian.com/writing/mcp-2026-extensions): 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.
- [MCP Apps: how interactive UI gets into the conversation](https://pournasserian.com/writing/mcp-2026-apps): 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.
- [Building an MCP App: declarations, sandbox and text fallbacks](https://pournasserian.com/writing/mcp-2026-apps-building): 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.
- [MCP Tasks: long-running work without holding a connection](https://pournasserian.com/writing/mcp-2026-tasks): 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.
- [Skills over MCP: shipping workflows with your server](https://pournasserian.com/writing/mcp-2026-skills): 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.
- [Enterprise-managed authorization and client credentials for MCP](https://pournasserian.com/writing/mcp-2026-enterprise-auth): 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.
- [Experimental and vendor-specific MCP extensions](https://pournasserian.com/writing/mcp-2026-experimental-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.
- [One request through an MCP server, end to end](https://pournasserian.com/writing/mcp-2026-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.
- [Which AI hosts support which MCP features (October 2026)](https://pournasserian.com/writing/mcp-2026-host-support): 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.
- [MCP server design patterns and anti-patterns](https://pournasserian.com/writing/mcp-2026-design-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.
- [Should you put an AI agent behind an MCP tool?](https://pournasserian.com/writing/mcp-2026-agent-behind-a-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.
- [A reference architecture for MCP servers in production](https://pournasserian.com/writing/mcp-2026-reference-architecture): 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.
- [The MCP server author's checklist](https://pournasserian.com/writing/mcp-2026-server-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.
