The Model Context Protocol (MCP) is an open standard for connecting an AI application to external tools and data sources through a common interface, instead of every integration being a bespoke, one-off tool definition. An MCP server exposes a set of tools (and optionally resources and prompts) that a client — Claude Code, your own application, or Claude via the Messages API's MCP connector — can discover and call, without you having to hand-write the tool-calling glue for every external system separately. The protocol itself is transport-agnostic and JSON-RPC-based; what matters for the exam is less the wire format and more the roles (host, client, server) and the three things a server can expose.
The three MCP primitives: tools, resources, prompts
An MCP server can expose three kinds of capability. Tools are callable functions with the same shape as a regular tool definition — a name, description, and JSON Schema input — and are the primitive most exam scenarios focus on. Resources are readable data the client can fetch (a file, a database record, a document) without necessarily invoking a tool call; they're identified by a URI and read directly into context. Prompts are reusable, parameterized prompt templates the server exposes so a client doesn't have to hand-author the same prompt shape for every user of that server. A server is not required to expose all three — a minimal server might expose tools only.
Local servers vs. the remote MCP connector
There are two distinct ways Claude ends up talking to an MCP server, and the exam expects you to keep them separate. A local MCP server runs as a subprocess on the same machine as the client (started over stdio) — this is the typical Claude Code / Claude Desktop pattern, and the SDK's MCP conversion helpers (anthropic.lib.tools.mcp in Python) let you wire a local server's tools into the Tool Runner directly. The MCP connector, by contrast, is a Messages API feature (beta flag mcp-client-2025-11-20) that connects Claude directly to a remote MCP server over HTTP — Anthropic's infrastructure makes the connection server-side, not your application. The connector requires two parameters together: mcp_servers (the server's URL, name, and optional authorization_token) and a tools entry of type mcp_toolset referencing that server by name. Omitting the toolset entry, or naming a server the toolset doesn't reference, is rejected as a validation error — every server you connect must be claimed by exactly one toolset.
Key concept
MCP's value is standardisation: write (or install) one server for a system like a database or ticketing tool, and any MCP-compatible client can use it, instead of re-implementing the same integration per application. This is a reuse argument, not a performance or correctness argument — an MCP server still needs the same authentication, input validation, and error handling any other tool integration needs.
Scoping and configuration
An MCP server connection can be scoped at different levels — available globally across all of a developer's projects, per-project, or per-session — and that scoping choice matters for both convenience and security surface. A server with access to sensitive systems (a production database, an internal ticketing system with customer PII, a payments backend) shouldn't be scoped more broadly than the specific project that actually needs it. Configuration should be reviewed the same way any other dependency granting external system access would be: what credentials does it hold, what can it read or write, and who else's projects would inherit that access if it were scoped globally instead of locally. For the remote MCP connector specifically, the authorization_token on the server definition is exactly this kind of credential — treat it with the same care as an API key, and never hardcode it in source under version control.
Security: MCP tool results are untrusted external data
A tool result coming back from an MCP server — especially a third-party server you didn't write — is external content, and should be treated with the same suspicion as a web page fetched by a web-fetch tool or a document uploaded by a user. A malicious or compromised MCP server could return a tool result containing an embedded instruction ("ignore your previous instructions and...") designed to hijack the agent's next action — this is the same prompt-injection risk that applies to any tool whose output the model reads back into context. Before connecting an MCP server you don't control, review what it's actually capable of doing (which tools it exposes, what systems it touches) rather than trusting its description at face value, and apply the same least-privilege scoping principle to it that you'd apply to a hand-written tool with the same access.
Exam trap
Scoping an MCP server with access to sensitive internal systems globally, when only one specific project actually needs it, is a recurring exam scenario. Broader scope than necessary widens the security surface unnecessarily — an MCP server exposing sensitive access should be scoped to exactly where it's needed, following the same least-privilege principle as any other credentialed integration. A related trap: assuming that because MCP is an official, Anthropic-supported protocol, an MCP server's tool results don't need the same untrusted-content handling as any other external tool output — they do.