Chapter 5. Building MCP Servers: Providing Tools, Prompts, and Resources to Applications
On the other side of the MCP equation from the client is the server. In Chapter 3, the client examples all used a server that gave their host application the ability to do math. This server was prebuilt and was run locally. In this chapter, our examples will show the construction of this same server from scratch, including all the primitives and features that servers can provide to clients and their host applications.
Note
In Chapters 3 and 4, we talked about host applications from the perspective of the client. Now that we are building servers, we will take the point of view of the server, for whom clients and their host applications are inseparable. For these chapters, we will refer to them collectively as client applications or just clients.
We will begin with a high-level view of the server, including what servers do and how they’re useful, how they connect to clients, and the two main paths for building them with the Python SDK. Then, we will get right into the details:
-
Server primitives (tools, prompts, and resources) and how to serve them
-
Server utilities (completion, logging, notifications, and pagination) and how to use them
-
Server security
-
Using client-provided resources like sampling and elicitation
Some of these, like logging, sampling, and roots, are deprecated in the 2026-07-28 MCP spec and will become candidates for deletion 12 months later, so use caution on relying ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access