MCP Tool List and Agent Card Check

Before you enable an MCP server or connect to another agent, read what it tells your model. Paste its tool list or Agent Card and get flags for hidden instructions, risky tools and missing security fields, plus a fingerprint to spot changes later.

What the check looks at

An MCP server describes its tools in its tools/list response: a name, a description, an input schema and optional annotations for each tool. Your AI assistant reads all of that text as part of its instructions. That makes it a place to hide commands (tool poisoning, OWASP MCP03), and it tells you what the server lets the model do. An A2A Agent Card does the same for an agent you connect to: its endpoints, how to authenticate, and the skills it offers.

The check reads that metadata and applies fixed rules. Each finding has a level (Critical, High, Medium, Low or Info), the exact text that triggered it, a reference, and the matching check in our MCP Security Audit Kit. The rules are deterministic: the same input always gives the same result, and there is no AI involved. Rules version 1.0, checked against MCP specification 2026-07-28 and A2A 1.0.0.

Hidden or manipulative text

Applied to every text the model reads: tool names, titles and descriptions, and every description, title, enum, default and example inside the input and output schemas. For Agent Cards: the name, description and every skill's name, description, tags and examples.

FlagLevelReferenceAudit Kit
P1 Invisible or direction-changing Unicode charactersHighOWASP MCP03 Tool PoisoningC12
P2 Instruction-like text aimed at the modelHighOWASP MCP03 Tool Poisoning; ASI01 Agent Goal HijackC12
P3 Refers to secrets or sensitive filesHighOWASP MCP03 Tool Poisoning; ASI03 Identity and Privilege AbuseC12
P4 Tells the model to use or avoid other tools (shadowing)MediumOWASP MCP03 Tool PoisoningC13
P5 Hidden markup or encoded contentMediumOWASP MCP03 Tool PoisoningC12
P6 Unusually long text: read it in fullInfoOWASP MCP03 Tool PoisoningC12

Invisible characters (P1): zero-width characters (U+200B to U+200F, U+2060 to U+2064, U+FEFF), direction controls (U+202A to U+202E, U+2066 to U+2069) and Unicode tag characters (U+E0000 to U+E007F). They are shown as [U+200B] in the result.

Instruction phrases (P2): ignore previous, ignore all previous, ignore the above, disregard previous, disregard all, forget your instructions, do not tell the user, don't tell the user, do not mention, don't mention, without telling the user, without informing the user, do not inform the user, the user must not know, keep this secret, hide this from, before using this tool, before calling this tool, before using any other tool, <important>, </important>, <system>, system prompt, you must always, you must first, always call this tool, this is very important, otherwise the tool will not work, new instructions.

Secret and file references (P3): ~/.ssh, .ssh/, id_rsa, id_ed25519, .env file, /.env, mcp.json, claude_desktop_config, .aws/credentials, .npmrc, .git-credentials, /etc/passwd, /etc/shadow, private key, seed phrase, recovery phrase.

Shadowing phrases (P4): instead of using, do not use the, never use the, rather than using, overrides the, replaces the, use this tool instead; also a description that names another tool of the same server together with "instead", "never", "do not", "replace", "override" or "ignore".

What each tool can do

Each tool gets capability classes from the words in its name and title. Descriptions and parameter names often mention actions as context ("use before you send...", a parameter called transferCountry), so they count only for what a tool reads (untrusted content, private data, files) and, for parameter names, credentials. Hover over a capability in the result to see the words that matched.

CapabilityWords
Reads untrusted contentfetch, browse, scrape, crawl, webpage, web page, website, url, urls, inbox, emails, incoming, ticket, tickets, issue, issues, comment, comments, pull request, rss, web search, search the web, download, html
Reads private datacustomer, customers, database, db, records, crm, personal, employee, employees, patient, account, accounts, documents, drive, repository, repo, private, internal, sql, contacts, calendar, mailbox, inbox, files
Changes datacreate, update, write, edit, modify, insert, upsert, set, add, commit, merge, move, rename, save, patch, put, append, upload
Deletes datadelete, remove, drop, truncate, purge, destroy, erase, wipe
Sends data outsend, reply, forward, publish, post, webhook, upload, share, notify, tweet, sms, smtp, message, email, mail, http request, post request, invite
Runs code or commandsexec, execute, shell, bash, command, cmd, terminal, eval, run code, python, script, subprocess, spawn, powershell, sandbox
File systemfile, files, directory, folder, path, filesystem, filepath, filename
Paymentspayment, payments, pay, transfer, refund, charge, purchase, checkout, wallet, payout
Handles credentialspassword, passwd, token, api key, apikey, api_key, secret, credential, credentials, oauth
FlagLevelReferenceAudit Kit
C1 Exfiltration path: untrusted content, private data and a way to send data out on one serverCriticalASI01 Agent Goal Hijack; ASI02 Tool MisuseC42
C2 Runs code or commandsHighASI05 Unexpected Code ExecutionC34, C35, C36
C3 Declared read-only, but the name or description suggests it changes, deletes, sends or runs somethingHighMCP spec: annotations are untrusted unless the server is trustedC14, C15
C4 No annotations on a tool that changes, deletes, sends or runs something: clients must assume the defaults (not read-only, destructive, open-world)MediumMCP schema: ToolAnnotations defaultsC14
C5 Free-text parameter that reaches a URL, path, command, query or recipientMediumMCP security best practices; ASI02 Tool MisuseC16, C34
C6 Takes a secret as a parameter, so the credential passes through the modelHighASI03 Identity and Privilege AbuseC32
C7 x-mcp-header on a sensitive parameter: its value is visible to network intermediariesHighMCP spec (tools, x-mcp-header): SHOULD NOTC32
C8 One tool with an action or operation argument: reading and changing cannot be allowed separatelyLowASI02 Tool MisuseC19
C9 More than 30 tools: fewer tools means fewer ways to misuse themInfoASI02 Tool Misuse (least agency)C19

The first rule matters most. A server whose tools together read untrusted content (email, web pages, tickets), reach private data and can send data out gives any agent that uses it an exfiltration path: one injected instruction can make it send the data to an attacker. The same rule is in the AI Agent Risk Calculator.

On annotations: the MCP schema defines four hints, readOnlyHint (default false), destructiveHint (default true), idempotentHint (default false) and openWorldHint (default true), and the specification says clients must treat them as untrusted unless the server is trusted. A tool with no hints should therefore be handled as destructive and open-world.

Specification rules

FlagLevelReferenceAudit Kit
S1 Tool name outside the spec rules (1-128 characters; A-Z, a-z, 0-9, _, -, .)LowMCP spec (tools, tool names)C13
S2 Duplicate tool nameMediumMCP spec (tools, tool names); OWASP MCP03C13
S3 inputSchema missing or not an objectMediumMCP spec (tools): inputSchema MUST be a valid JSON Schema objectC16
S4 Input schema accepts unexpected properties on a tool that changes, deletes, sends or runs somethingLowMCP spec (tools); MCP security best practicesC16
N1 The list is paginated (nextCursor): only the pasted page was checkedInfoMCP spec (pagination)C09

A2A Agent Card rules

Based on the A2A specification 1.0.0. Required fields: name, description, supportedInterfaces, version, capabilities, defaultInputModes, defaultOutputModes and skills. Agent Cards are usually published at /.well-known/agent-card.json.

FlagLevelReferenceAudit Kit
A1 Required Agent Card field missingMediumA2A 1.0, section 4.4.1C09
A2 Interface URL uses http://: production deployments must use encrypted transportHighA2A 1.0, section 7 (transport security)C53
A3 Card points to localhost, a private or link-local addressMediumA2A 1.0, sections 3.1.11, 13.3C38
A4 The card declares no authenticationHighA2A 1.0, sections 4.5, 13.1; ASI07 Insecure Inter-Agent CommunicationC20
A4p The card declares no authentication (marked as deliberately public)InfoA2A 1.0, sections 4.5, 13.1C20
A5 API key sent in the query string: keys in URLs end up in logsMediumA2A 1.0, section 4.5 (APIKeySecurityScheme)C23
A6 The card is not signed: clients cannot verify it came from its publisherMediumA2A 1.0, section 8.4; ASI04 Agentic Supply ChainC06
A7 Signature header is unusable (alg none or missing, or kid missing)HighA2A 1.0, section 8.4.2C06
A7j Signature key URL (jku) is not HTTPSHighA2A 1.0, sections 8.4.2, 8.4.3C06
A7i Signed: the signature was not verified by this checkInfoA2A 1.0, section 8.4.3C06
A8 Push notifications enabled: webhook controls applyInfoA2A 1.0, section 13.2C38
A9 Extended Agent Card available: it must require authenticationInfoA2A 1.0, sections 3.1.11, 13.3C20
A10 No provider: you cannot tell who operates the agentLowASI04 Agentic Supply ChainC06

Many of the important controls in A2A are recommendations rather than requirements, such as verifying card signatures and rejecting internal webhook addresses. Read more in A2A security.

ClevSec Pro: compare versions and get the review report

The free check gives every flag, the levels and the fingerprint. With ClevSec Pro you can also paste the version you approved and see what changed (tools added, removed and changed, field by field, with the old and new description), get an action for every flag grouped into fix before use, fix soon and note, an inventory row for the Audit Kit, and a PDF report.

What this check is not

It is not a scanner, a penetration test or an audit. It reads what a server or agent says about itself. It cannot see how the server handles authorization or tokens, what its code does, where it runs, or whether it logs your data, and it does not verify signatures. A clean result means the declared metadata raised no flags, not that the server is safe. For the full review, use the MCP Security Audit Kit and read how to audit an MCP server.

The same rules are available to AI assistants as the mcp_tools_check tool of the ClevSec MCP server, so an assistant can check a server's tools before you enable it.

Frequently Asked Questions

Does this tool scan or connect to my MCP server?

No. It only reads the JSON you paste: the tool names, descriptions, schemas and annotations a server declares, or the fields of an Agent Card. It does not connect to the server, call its tools or fetch anything. That is why it can run entirely in your browser, and why it cannot tell you what the server really does.

How do I get the tools/list response?

Most MCP clients and the MCP Inspector show it: connect to the server and list its tools, then copy the JSON. You can also send a tools/list request yourself. Paste the whole JSON-RPC response, its result object or just the tools array; all three work. If the response has a nextCursor, the list is paginated: fetch every page.

What is the fingerprint for?

Servers can change their tool descriptions after you approved them, and the new text reaches the model without anyone reading it. Record the fingerprint when you approve a server. Before each use or update, check again: a different fingerprint means something changed and needs a new review. The fingerprint is a SHA-256 hash of the tools in canonical JSON (keys sorted, tools sorted by name, _meta and icons left out), so formatting and order do not change it.

Why is a tool flagged when the server is legitimate?

The rules are deliberately simple and published on this page: a word in a tool name or a phrase in a description is enough. Some flags will be false alarms; each one shows the exact text that triggered it so you can judge it in seconds. Flags are prompts to look, not verdicts.

Why does it not trust the readOnlyHint annotation?

The MCP specification says clients must treat tool annotations as untrusted unless they come from trusted servers. A malicious or careless server can mark a destructive tool as read-only. The check compares the hints with the tool's name and title and flags a mismatch, and flags risky tools with no hints at all, because the defaults then mean destructive and open-world.

Is the Agent Card signature verified?

No. The check decodes the protected header of each signature and flags unusable ones (no algorithm, alg none, no key id, a key URL over plain HTTP). Verifying the signature needs the publisher's key; do that in your A2A client before trusting the card.

Is my data stored or sent anywhere?

No. The check runs in your browser and the pasted JSON is never sent to a server. The same rules are also available to AI assistants as the mcp_tools_check tool of the ClevSec MCP server, which does not log inputs.

Related Articles

Related Tools

Sources

Disclaimer: This check is for informational purposes only. It reads only the metadata you paste and is not a security test, scan or audit; a result without flags does not mean a server or agent is safe. It does not constitute legal, regulatory or professional advice. Built by ClevSec, makers of EU compliance and security tools; see About.

Last updated: November 2026