The permission dialog ages badly
An MCP server publishes its tools through tools/list. Each tool can carry a name, description, input schema, output schema, and annotations. The model reads that metadata before it decides how to use the tool.[1]
A user may approve the server once. The server can return different metadata on a later connection. That creates a narrow integrity problem. The approval describes yesterday's tool, while today's model sees today's definition.
Approve the definition, not the server name.
mcp-pin is a new local proxy for standard-input and standard-output MCP servers. On the first connection, it canonicalizes each complete tool object, hashes each object with SHA-256, and records a hash for the whole tool set. On later connections, it repeats the calculation before forwarding queued client traffic. A mismatch blocks the session and prints a diff.[2]
The useful part is the refusal
The project does not ask a model whether a metadata change looks safe. It compares deterministic fingerprints. Key order, tool order, and whitespace do not trigger drift. A changed description, schema, annotation, added tool, or removed tool does.
We ran version 0.1.4 from npm in an empty temporary home. Its bundled demo pinned one weather tool. The second connection changed the description and added a context field. The proxy blocked the session before it forwarded queued calls. We also ran the repository's 61 tests. They covered canonicalization, drift blocking, paginated tool lists, corrupt-state refusal, queued-call blocking, log verification, crawler limits, and concurrent pins.
A stable definition does not prove stable behavior. mcp-pin cannot detect a tool implementation that changes while its metadata stays fixed. It does not inspect tool results, protect a malicious first version, or proxy HTTP and SSE transports. The repository marks those limits plainly.
Tool reach is growing
Chrome's September release recap says the Chrome DevTools MCP server added an Agent Plugins 1.0 package, JavaScript execution controls, configurable filesystem roots, heap inspection, and PWA automation. The same release added --no-javascript-evaluation so an agent can inspect pages without evaluating JavaScript.[3]
More useful tools make definition review more important. They also make definition pinning less sufficient. MCP's security guidance calls for narrow scopes and minimum privileges. A hash can tell you that the advertised tool changed. It cannot bound the process, credential, network, or filesystem behind that tool.[4]