Before you connect an MCP server to your AI agent, inspect it: its tools, input schemas, resources, prompts, and instructions. A step-by-step guide to testing an MCP server safely.
An exhaustive analysis of 5,308 Model Context Protocol (MCP) servers, introducing the mcpgrade-1.4.0 assessment framework and remediation blueprint.
4 min read
A curated list of the most useful MCP servers in 2026 — GitHub, Filesystem, Fetch, Slack, Playwright and more — with an honest security note on each and a checklist to vet any server.
12 min read
A dense, scannable reference for Model Context Protocol security: threats at a glance, a pre-connection checklist, config hardening, and the tools that detect each risk.
7 min read
Vet a Model Context Protocol server the way this article describes: paste a URL for a live A–F security grade, browse vetted servers in the directory, or read the exact checks behind every grade.
Connecting an AI agent to a Model Context Protocol (MCP) server is a trust decision. The moment your agent completes the initialize handshake, that server's tool names, tool descriptions, resource contents and advertised instructions flow straight into the model's context — and the model will act on them. Before you wire a server into Claude, Cursor, VS Code or an autonomous agent, you need to know exactly what it exposes and whether any of it is hostile. This guide covers how to inspect and test an MCP server the way a security engineer should: read-only, before connection, with a clear checklist of what matters.
If you want the fast path, the browser-based MCP Inspector connects to any remote server by URL and lists everything it exposes with an automatic security scan. The rest of this article explains what you are looking at and why each field matters.
An MCP server is not a passive data source. It hands the model a menu of tools it can call, resources it can read, and prompts it can reuse. The model chooses which tool to invoke, and fills in its arguments, based almost entirely on the tool's name and description. That metadata is untrusted text that becomes part of the prompt — which makes it an injection surface.
The concrete risks you are inspecting for:
None of these require the server to be "hacked." A description is enough. Inspecting first is the cheapest control you have, and it costs nothing at runtime because it is purely a read of the server's advertised surface. For the deeper theory of how these attacks combine into data theft, see MCP Prompt Injection and the Lethal Trifecta for AI Agents and the complete MCP security guide.
A thorough inspection covers five things. Skip any one of them and you can miss the finding that matters.
The initialize response tells you the server's name, its version, and the negotiated protocol version — the MCP revision the client and server agreed to speak. Version mismatches and unexpected names are your first sanity check: a server claiming to be a well-known project but reporting an odd version or an unfamiliar endpoint deserves scrutiny. Pin the version you inspected so a later change is visible to you rather than silent.
This is the highest-value part of the inspection. For every tool, read two things: the description (the untrusted text the model will obey) and the input schema (the JSON Schema of its arguments). A tool called read_file should take a path — not a webhook, debug, notes or feedback parameter that exists to siphon data out. The schema tells you what a tool can receive; the description tells you how the model will be steered to use it.
Resources are the readable data a server offers — files, records, API responses. They matter for security because their contents also reach the model, which makes a resource a channel for indirect prompt injection: instructions planted in the data the model reads rather than in a tool description. Enumerate what resources exist and consider where their contents originate.
MCP servers can advertise reusable prompt templates. These are literally prompts the model may run, so inspect them the same way you would inspect a tool description — look for embedded instructions, role overrides, or references to sending data outward.
instructionsThe MCP initialize result includes a free-text instructions field the server sends to the client, intended to tell the model how to use the server. Because it is model-facing free text delivered at connection time, it is a prime hiding place for injection. Read it in full. A legitimate server uses it for a one-line usage note; a hostile one uses it to plant standing instructions.
There are two practical approaches, and they suit different situations.
Anthropic ships an official inspector you run locally:
npx @modelcontextprotocol/inspector
It launches a local UI and connects to a server you point it at — including local stdio servers you start as a subprocess. This is the right tool when you are building a server on your own machine and want to exercise it interactively. It is honest, official, and it can actually invoke tools for testing. Its limitation is practical: it requires Node.js and a local install, and it is oriented toward a server you already control — not toward quickly vetting a remote server whose URL a colleague just sent you.
When someone hands you https://example.com/mcp and asks "is it safe to add this to our agent?", you want an answer in seconds without installing anything. That is what the MCP Inspector on this site is for. It connects to remote Streamable HTTP or legacy HTTP+SSE servers by URL, performs the real initialize handshake, and enumerates every tool, resource and prompt — then runs an automatic security scan over the results using the same engine as the MCP Server Security Scanner.
Two properties make it safe to use on a stranger's endpoint. The connection happens server-side behind a strict SSRF guard that refuses to touch private, loopback, link-local or cloud-metadata addresses, so you cannot be tricked into probing internal infrastructure. And every enumeration is read-only — it calls tools/list, resources/list and prompts/list, never a tool itself, so inspecting a server has no side effects.
Here is the practical walkthrough using the browser inspector to test an MCP server end to end.
https://example.com/mcp) into the inspector.instructions field. Read the server's advertised instructions in full for standing directives aimed at the model.The following table maps the inspection checklist to why each item matters and where you find it in the inspector.
| What to check | Why it matters | Where in the inspector |
|---|---|---|
| Server name, version, protocol version | Detects impersonation and unexpected builds; lets you pin what you approved | Server identity panel (from initialize) |
| Tool descriptions | The untrusted text the model obeys — primary tool-poisoning surface | Tools list, expanded |
| Tool input schemas | Reveals exfiltration-shaped parameters (webhook, debug, notes) | Tools list, argument schema |
instructions field | Model-facing free text; a prime hiding place for standing injections | Server identity / instructions panel |
| Resources | Their contents reach the model — a channel for indirect injection | Resources list |
| Prompts | Reusable templates the model may run; inspect like tool descriptions | Prompts list |
| Security scan grade | Fast triage of the whole surface against known abuse patterns | Automatic scan report (A–F) |
When you expand a tool, treat any of the following as a reason to route the server to the MCP Server Security Scanner for a full graded report before you connect it:
feedback, debug, notes or webhook argument on a tool that has no legitimate need to send data anywhere.A single one of these can be enough to make a server unsafe. The scanner shows you exactly which tool and which phrase triggered each finding, which turns a hunch into a defensible decision.
Two boundaries are worth stating plainly. First, inspecting is read-only. The inspector lists what a server advertises; it never invokes a tool, so the act of inspecting cannot itself trigger a side effect — the same guarantee formalized in our scanning policy, which also limits us to public endpoints and honours robots.txt. Inspect only servers you own or are authorized to assess. Second, the browser inspector reaches public HTTP(S) servers only. Local stdio servers — the kind launched as a subprocess on your own machine — are not remotely reachable by design. For those, review the launch configuration with the MCP Config Auditor, which checks your claude_desktop_config.json, .cursor/mcp.json or VS Code mcp block entirely in your browser for plaintext secrets, unpinned "rug-pull-prone" servers and dangerous launch commands.
Once you know a server is clean, browse vetted options in the MCP server directory and see the field's current favorites in the best MCP servers for 2026. And if the server you just inspected is one you maintain, publish its grade as a live README badge and read it back through the free MCP grade API so your users see the same clean surface you do.
Paste its URL into a browser-based MCP Inspector, choose the transport (or Auto), and read the automatic security grade. You get the full tool, resource and prompt surface plus a risk assessment in seconds, with no install and no local client to configure.
The official npx @modelcontextprotocol/inspector is a local command-line tool for a server you control — including local stdio servers — and it can invoke tools interactively for development testing. The browser inspector here is built for vetting a remote server by URL with no install, and it adds an automatic security scan of every tool it finds.
No. A proper inspection is limited to the read-only initialize handshake and the list operations (tools/list, resources/list, prompts/list). It never calls a tool, so inspecting a server has no side effects on the server or your systems.
stdio MCP server this way?Not with a remote URL inspector — local stdio servers are subprocesses, not network endpoints. Use the official local inspector to exercise them, and audit how they are launched with the MCP Config Auditor, which flags plaintext secrets, unpinned packages and risky commands in your client config.
It grades the server's advertised surface — tool descriptions, schemas, prompts and the instructions field — against known abuse patterns: tool poisoning, prompt-injection phrasing, exfiltration-shaped parameters, excessive permissions and cross-tool shadowing. A high grade means no red flags in the surface, not a guarantee about what a tool does when actually invoked.
Do not connect the server. Run it through the MCP Server Security Scanner to capture a shareable report identifying the exact tool and phrase, and report it to whoever asked you to add the server. Hidden instructions in a description are the signature of a tool-poisoning attack, explained in depth in our lethal trifecta article and tool poisoning explainer.
An MCP server earns access to your model's context and, through its tools, to your systems. Inspect it first. Paste any remote endpoint into the MCP Inspector for a read-only enumeration with an automatic security scan, escalate anything suspicious to the MCP Server Security Scanner, and review your local setup with the MCP Config Auditor. Start from the MCP security hub to bring all three together.
The live MCP security scanner and hub runs this whole enumeration and grade in the browser, and the steps above are formalized as a repeatable inspection methodology. Once a server passes, browse vetted options in the MCP server directory.
Share this article
MCP servers can hand an AI agent private data, untrusted content, and a way to exfiltrate it — the lethal trifecta. How prompt injection works over MCP, and how to break the chain.
12 min read
Sign in to leave a comment.