Announcing CIMD support for MCP Client registration
Learn more

How to vet a third-party MCP server

How to vet a third-party MCP server: check the publisher, pin the version, use a narrow token and run it in a sandbox

A community MCP server can be safe to use, but a listing in a registry does not tell you that it is. The official MCP Registry checks that a publisher owns the name they publish under; it does not review the server's code. Installing a server means running someone else's code, or sending your requests to their service, with whatever credentials you give it. Vet it the way you would vet any dependency that gets access to your data: check who publishes it, pin the version, read every tool description, give it the narrowest credentials that work, run it in a sandbox, and watch for changes after you approve it.

TL;DR

  • Registries verify who published a server. They do not check its code, and the official registry's own policy says to assume minimal or no moderation.
  • Published incidents and researcher demonstrations show the same failure modes: impersonated packages, hidden instructions in tool descriptions, prompt injection through data the agent reads, and bugs in official servers.
  • Limit what any one server can do: narrow, short-lived credentials, a fixed set of tools, a sandbox for local servers, and no single agent that combines private data, untrusted input and a way to send data out.

Our take

Asking whether a server is "community" or "official" does not get you very far. Of the cases below, one was a package impersonating a real vendor, another was a bug in a vendor's own server, and in a third, a researcher's demo, an official server did exactly what its token allowed after the agent read a malicious issue. What decided the damage in each case was what the server could reach and which credentials it held. So vet the server, and also design as if one of your servers will misbehave someday: give each one only the access its job needs.

What a registry listing tells you

The official MCP Registry is in preview. It verifies two things. First, namespace ownership: names under io.github.<user>/ require signing in to that GitHub account, and names under a domain require a DNS record or a file on that domain. Second, that the package on npm, PyPI or another registry points back to the same server name.

It does not review the code. The registry leaves security scanning to package registries and downstream aggregators, and its moderation policy tells consumers to assume minimal-to-no moderation. It removes malware and spam, but lists servers with known vulnerabilities among the things it does not remove.

Other directories add their own signals, but check what they measure. Smithery has shown MCP-Scan results on server pages since April 2025. Glama grades servers on license, quality and maintenance. Use these signals to build a shortlist, then run the checklist below. For how registries compare with managed integrations, see MCP registry vs managed MCP integrations. The MCP integrations guide covers the wider options for connecting agents to tools.

What has gone wrong, and what researchers have shown

Two of these happened to real users (postmark-mcp and Asana). Two are CVEs in MCP tooling. Three are researcher demonstrations that show what an attacker could do. Each one maps to a check in the checklist below.

When
What happened
What it teaches
April 2025: tool poisoning (proof of concept)
Invariant Labs showed that hidden instructions in a tool's description can make the model leak data or misuse other servers' tools, and that a server can change a description after the user approved it
Read tool descriptions in full, and notice when they change
May 2025: GitHub MCP server (proof of concept)
Using demo repositories, Invariant showed that a malicious public issue could lead an agent using the official GitHub server to copy private repository data into a public pull request. Invariant describes it as an agent design problem, not a bug in the server's code
Scope tokens to the repositories a task needs, and require approval for actions that publish
The Inspector's local proxy accepted requests without authentication, so anyone who could reach it could launch commands on the developer's machine. Fixed in version 0.14.1
Keep MCP developer tools up to date too
June 2025: Asana MCP server
A bug in Asana's own MCP server could expose some data from one Asana organization to other Asana MCP users. Asana found it on June 4 and took the server offline from June 5 to 17
Official servers can have bugs; limit what each one can reach
July 2025: Supabase MCP (proof of concept)
On a test project with dummy data, General Analysis showed that instructions hidden in a support ticket could lead an agent with a service-role key, which bypasses row-level security, to read and expose a table of integration tokens
Never combine private data, untrusted input and an outbound channel in one agent
A malicious server could return a crafted authorization URL that made the mcp-remote client run arbitrary commands on Windows, or launch arbitrary programs on macOS and Linux. Versions 0.0.5 to 0.1.15 were affected; fixed in 0.1.16
Connecting to an untrusted remote server is not risk-free either; patch the client side
September 2025: postmark-mcp
An npm package using the name of Postmark's server, published by someone unrelated to Postmark, shipped 15 clean versions and then version 1.0.16, which copied every email it sent to an outside address. Koi Security found it, and The Hacker News counted 1,643 downloads
Check the publisher, not just the name, and pin versions

Simon Willison's term for the pattern behind the GitHub and Supabase cases is the lethal trifecta: an agent that has access to private data, reads untrusted content, and can send data out.

A vetting checklist

Run through these before you install a server, and again before you upgrade it.

Check
How
Why
Publisher
Match the package name to the vendor's own docs or repository. Check the registry namespace and the package's publisher account. A verified namespace only proves who published the server, so confirm the namespace is the vendor's own GitHub org or domain
postmark-mcp used a real vendor's name
Code and maintenance
Look at the repository, recent commits, open security issues and who has publish rights. Prefer servers you can read
You are running this code with your credentials
Version pinning
Install an exact version, not the latest, and upgrade on purpose. For MCPB bundles, check the fileSha256
Malicious changes can arrive in a later version
Tool descriptions
Read every tool's full description and input schema. Look for instructions to the model, references to other tools, or requests for files or secrets
The spec says to treat tool descriptions from untrusted servers as untrusted
Credentials
Give the server the narrowest token that works: read-only, one project or repository, short-lived. Never a personal admin token
The token decides the damage when something goes wrong
Transport
Prefer a remote server with OAuth, where tokens are issued for that server only, over a local server holding a static token in an environment variable
The authorization spec binds OAuth tokens to one server; stdio servers read credentials from the environment
Sandbox
Run local servers in a container or sandbox with a read-only file system, no extra privileges and limited network access
The MCP security best practices note that local servers run with your privileges
Network egress
Allow outbound traffic only to the hosts the server needs, and block internal and cloud metadata addresses
Stops quiet exfiltration and server-side request forgery
Human approval
Keep confirmation on for tools that send, publish, delete or pay. Avoid "always allow" for them
The spec says a person should be able to deny any tool call
Changes over time
Record the tool list and descriptions you approved. Review them when the server's tool list changes or you upgrade
Servers can change their tools after approval

Pin and sandbox a local server

For a local server, the two cheapest controls are an exact version and a narrow credential:

{ "mcpServers": { "example": { "command": "npx", "args": ["-y", "@example/mcp-server@1.4.2"], "env": { "EXAMPLE_API_TOKEN": "read-only-token-for-one-project" } } } }

This pins the server package, but npm still resolves its dependencies fresh on install. For a stronger guarantee, install it into a project with a lockfile, or run the container image by digest.

If the server is published as a container image, pin it by digest, since tags can be moved, and run it with a read-only file system, no Linux capabilities and no privilege escalation. A Docker network cannot allowlist hosts on its own, so here mcp-egress stands for an internal Docker network whose only route out is an egress proxy, such as Smokescreen, that allows only the hosts the server needs:

docker run --rm -i \ --read-only --cap-drop ALL \ --security-opt no-new-privileges \ --network mcp-egress \ -e HTTPS_PROXY=http://egress-proxy:4750 \ -e EXAMPLE_API_TOKEN \ ghcr.io/example/mcp-server@sha256:<digest>

The MCP security best practices also require clients that offer one-click install of local servers to show the full command, warn that it runs code on your machine, and wait for approval. Read that command before you accept it. For how local and remote servers differ in more detail, see remote vs stdio MCP servers.

Scanners

Scanners catch known patterns quickly and are worth running in CI. They do not replace reading the code and tool descriptions.

  • Snyk Agent Scan, formerly Invariant's mcp-scan, checks installed MCP servers and agent skills for prompt injection in tool descriptions, exposure of private and untrusted data, and destructive capabilities. It sends component details to its API for analysis; the project says secrets are redacted first.
  • Cisco MCP Scanner combines YARA rules, an LLM judge and the Cisco AI Defense API, plus a behavioural check that compares what a tool says it does with what its code does.
  • The OWASP MCP Top 10, currently a beta list, is a useful checklist; tool poisoning, supply chain attacks and shadow MCP servers are all on it.

Where Scalekit fits

Vetting a server stays with you. Scalekit limits how much a misbehaving server or a tricked agent can reach. When you add a remote MCP server as a custom connector, Scalekit stores each user's credentials and attaches them per call, so the agent never holds them. A Virtual MCP server exposes only the tools you list for an agent role.

Session tokens can also be minted read-only. For catalog connectors, Scalekit labels each tool read-only, write or destructive. For a third-party MCP server you add yourself, the read-only label comes from that server's own readOnlyHint annotation, and the spec says to treat annotations from untrusted servers as untrusted. So pair a read-only token with a tool allowlist that names only the tools you have reviewed. Each session token is bound to one user and one server, and is short-lived by design: one hour by default, up to 24 hours.

None of that removes the checks above. A tool you allow still sends its description to the model, so review descriptions when a server changes. For the governance side of MCP in a company, see MCP security risks in the enterprise.

FAQs

Is it safe to use a community MCP server?

It can be, after you vet it. Check the publisher, pin an exact version, read every tool description, give it narrow credentials, run local servers in a sandbox, and review it again when it changes. A registry listing alone is not a safety check.

Does the official MCP Registry check servers for security?

No. It verifies that publishers own their namespace through GitHub or DNS, and it removes malware and spam. Its moderation policy says to assume minimal-to-no moderation, and it leaves code scanning to package registries and other tools.

What is MCP tool poisoning?

Hidden instructions placed in a tool's description or schema. The model reads them as part of its context and may follow them, for example by reading files or sending data through another tool. A server can also change a description after you approved it.

Are official MCP servers safer than community ones?

Not automatically. Official servers have had bugs, and researchers have shown official servers being misused through prompt injection. The bigger factor is what the server can reach: the credentials you give it and the tools your agent can call.

Should I run MCP servers locally or remotely?

A remote server with OAuth gets tokens issued only for that server, while a local server runs with your privileges and usually reads a static token from its environment. If you run a server locally, sandbox it and limit its network access.

No items found.
Agent
Auth Quickstart
On this page
Share this article
Agent
Auth Quickstart

Acquire enterprise customers with
‍zero upfront cost.

Every feature unlocked. No hidden fees.