Book a 30-min callBook a call

Building an MCP server: tools, resources, transports and authorization

Build an MCP server on the 2026-07-28 spec: tools, resources, prompts, stdio vs Streamable HTTP, stateless requests, OAuth 2.1 and security rules.

A client card posting to a server box with a padlock, an authorization circle above it, and three cards for tools, resources and prompts on the right.
Written by
BYD Tech
Published
Topic
Deep dives
Reading time
19 min read

Questions people ask

Does an MCP server still need an initialize handshake?

Not under revision 2026-07-28. Every request carries its protocol version and client capabilities in _meta, and servers must implement server/discover so a client can learn their versions and capabilities up front. Servers that also serve older clients still handle initialize for revisions up to 2025-11-25.

What replaced the HTTP+SSE transport?

Streamable HTTP, introduced in revision 2025-03-26. Every message is a POST to one endpoint, and the reply is a JSON object or an SSE stream scoped to that request. HTTP+SSE is formally deprecated and eligible for removal.

Should a local MCP server use stdio or HTTP?

Usually stdio. Only the client that launched the process can talk to it, and credentials come from the environment. A local HTTP server is reachable by other processes and, through DNS rebinding, by web pages, so it needs authentication and Origin validation as well as a 127.0.0.1 binding.

Can an MCP server forward the user’s token to another API?

No. The spec forbids token passthrough. The server must accept only tokens issued for itself, and when it calls an upstream API it must act as a client of that API with a separate token.

Are sampling and roots still part of MCP?

They are, but both are deprecated as of 2026-07-28 and stay for at least twelve months. New servers should call an LLM provider’s API directly instead of sampling, and take directories as tool arguments, resource URIs or configuration instead of roots. Elicitation is not deprecated.

Building something like this?