What Is an MCP Server? A Developer's Guide to Model Context Protocol in 2026
By Ethan Halfhide · Updated September 29, 2026
What is an MCP server? A developer's guide to Model Context Protocol architecture, transports, primitives, and how to choose the right servers in 2026.
If you have wired an LLM into anything real, you have written the same glue code more than once: an adapter for a database, another for a ticketing system, another for internal search. Every model provider wanted the tool schema in a slightly different shape, and every integration was a bespoke piece of plumbing that only you understood.
The Model Context Protocol exists to kill that pattern. So what is an MCP server, concretely? It is a process that exposes a set of capabilities (tools, data, and prompt templates) over a standard protocol, so that any MCP-compatible client can discover and use them without custom integration code. Write the server once, and it works with every client that speaks the protocol. For a broader tour of the protocol and its ecosystem, see our MCP developer guide.
The Client-Server Model
The clearest way to answer what is an MCP server is to look at the architecture, which MCP borrows from the language server protocol. Before LSP, every editor needed a custom integration for every language. After LSP, a language team wrote one server and got support across every editor.
MCP applies the same idea to model context. Three roles matter:
The host is the application the user interacts with: a desktop assistant, an IDE, an agent framework. It manages the conversation and decides what the model is allowed to do.
The client lives inside the host and maintains a one-to-one connection with a single server. If the host connects to five servers, it runs five clients.
The server is the piece you write. It wraps some capability (a database, an API, a filesystem, an internal service) and exposes it through the protocol.
The important consequence of this separation is that the server does not know or care which model is on the other end. You are not writing for a specific vendor's tool-calling format. You are writing to a specification.
What an MCP Server Actually Exposes
The protocol defines three primitives, and understanding the distinction between them is what separates a well-designed server from an awkward one.
Tools are model-controlled actions. The model decides when to call them, so they carry side effects and require user approval in most hosts. Creating a ticket, running a query, sending a message: these are tools.
Resources are application-controlled data. The host decides what to load into context; the model does not invoke them directly. A file, a database schema, a document, a log excerpt. Resources are identified by URI and are the right primitive for anything the model should read rather than do. If you are weighing this against retrieval pipelines, MCP vs RAG explains where each approach fits.
Prompts are user-controlled templates: parameterized workflows a person explicitly triggers, often surfaced as slash commands. A code review checklist or a structured incident write-up fits here.
Servers can also request things back from the client. Sampling lets a server ask the host to run a model completion on its behalf, and elicitation lets it ask the user a structured question mid-operation. Both invert the usual direction and are useful for servers that need judgment or input they cannot supply themselves.
Transports and Deployment
An MCP server communicates over one of two transports.
stdio runs the server as a local subprocess, exchanging JSON-RPC messages over standard input and output. This is the right choice for anything touching the local machine: filesystem access, local git operations, developer tooling. There is no network surface, and authentication is implicit in the fact that the process runs as the user. To compare local MCP server options, see our directory page for servers built this way.
Streamable HTTP runs the server as a remote service, with server-sent events for streaming responses back. This is what you use for hosted, multi-tenant servers. It also means you now own real security concerns: OAuth-based authorization, token validation, and per-user scoping of whatever the server can reach. Our remote MCP server guide covers the hosted servers worth connecting, and if your client only speaks stdio, the guide to switching from mcp-remote covers the bridge options.
A mistake worth avoiding: do not expose a remote server that passes through a shared credential for all users. Scope access per user, and validate that the token presented was actually issued for your server.
Designing a Server People Will Use
Once you can answer what is an MCP server in architectural terms, the interesting work is making one that models actually use well.
Keep the tool surface small. A server exposing forty granular tools performs worse than one exposing eight that map to real tasks. Models choose badly among near-duplicates, and every tool definition consumes context.
Write descriptions for the model, not for a human skimming docs. State what the tool does, when to use it, when not to, and what the output looks like. Ambiguity here is the leading cause of wrong tool calls.
Return results the model can act on. Structured, trimmed output beats a raw API dump. If a response can be thousands of rows, paginate it and say so.
Make errors instructive. "Invalid request" tells the model nothing. "Missing required field project_id; call list_projects to get valid IDs" lets it recover on the next turn.
Find the Right Servers on Best MCP Tools
The protocol is only as useful as the ecosystem around it, and that ecosystem is now large enough that finding the right server is its own problem.
Best MCP Tools is a directory of MCP servers and tools built for developers, searchable by what the server connects to, which transport it uses, and how it is authenticated. Browse it when you would rather integrate an existing server than write another one. For a tour of what servers do in practice, start with our MCP server examples.
If you have shipped an MCP server, submit it to the directory so other developers can find it. And if you have run one in production, leave a review; notes on reliability, tool design, and rough edges are exactly what the next engineer evaluating it needs.
Write the server once. Let every client use it.
About the author
Ethan Halfhide
Ethan Halfhide is an AI technologist who works with AI agents and Model Context Protocol integrations. He curates BestMCPTools' server directory, checking each server's documentation, supported clients and setup steps.