MCP conformance vs safety: run the official suite, then hostile fixtures

The official MCP conformance suite checks that a client or server speaks the protocol correctly. Apart from a few narrow auth checks, it does not check what your client does when a server is hostile. Passing it is necessary, but it does not make your client safe. Run both kinds of test. Last checked: 12 October 2026, against @modelcontextprotocol/conformance 0.1.16.

What the conformance suite checks

The suite is free and maintained by the MCP project. It connects to a server as a client, or runs your client against its own test servers, and compares each exchange with the specification: initialisation, tool listing and calls, auth flows and so on.

npx @modelcontextprotocol/conformance server --url http://localhost:3000/mcp
npx @modelcontextprotocol/conformance client --command "<your client command>" --suite auth

The suite is still marked a work in progress. Most of its test servers behave well. The exceptions are narrow: one auth scenario sends a resource URL that does not match the server and checks the client stops, and the server tests check that a server rejects a rebinding Host header. There are no checks for hostile tool descriptions or payment requests. A pass tells you the messages are right. It does not tell you what happens when a server lies in a tool description.

What it does not check

A server can follow the protocol to the letter and still try to harm the client that uses it:

Each of these is a valid protocol message. A conformance suite has no reason to fail them; a safety test must.

Run hostile fixtures next

After the conformance suite passes, run your client against servers that misbehave on purpose and check that it refuses:

For background, see the free guides on MCP tool poisoning and changed payment quotes.

Related: Hostile clients and L402 MCP gates and DNS rebinding in local MCP servers.