An MCP server is a program that exposes tools, resources and prompts to a client over JSON-RPC, and the client only learns what exists by asking. That makes the first connection a trust decision. MCP is an open standard introduced by Anthropic as a way to replace fragmented per-integration connectors with one protocol, which is exactly why third-party servers are easy to pick up and easy to trust too quickly (Anthropic, MCP intro).
MCP defines two layers. The data layer carries JSON-RPC messages for discovery and the core primitives (tools, resources, prompts, notifications). The transport layer covers connection setup, message framing and authorization (architecture overview). Your audit reads both.
Start with what the server publishes about itself:
- Transport. Is it stdio (a process launched locally on your machine) or Streamable HTTP (a remote endpoint)? The architecture docs note that stdio servers typically serve a single client while HTTP servers typically serve many (architecture overview). A stdio server runs with your user's rights on your filesystem. Treat that as code execution by default.
- Declared capabilities. Servers that expose tools must declare the
toolscapability, andlistChangedtells you whether the tool list can change after connection (tools specification). IflistChangedis true, whatever you audited at connect time can be replaced later. - Auth expectations. For HTTP transports, look for how tokens are meant to be passed. A manifest is the entry point for discovery and sets the trust boundary for what a client accepts as a valid server (MCP manifest primer).
Record what you find in a review file. Anything the manifest claims but the server does not demonstrate later is a finding, not a footnote.



