MCP Security Guard
NPM · MCP-SECURITY-GUARD
Audit MCP servers for tool poisoning, rug pulls and supply-chain risk (OWASP MCP Top 10).
Available components
Last scanned (8 hours ago)
Scores higher than 62% of npm servers
Category Security
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 31 of 93 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to petrovicistefan/mcp-security-guard). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 8 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability78
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 2358 tokens (~131/item across 18 items; 17 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage85
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 55% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 17 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 19 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
- Supports UI / widget rendering.Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 14 Oct 26 +31
- Injection markers: unverified → pass ▲ security
- First check of Judged manipulation: pass security
- Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
- Tool coverage: unverified → 100 ▲ functional
- Schema quality: unverified → 100 ▲ functional
- MCP protocol: unverified → pass ▲ functional
- First check of Schema quality: fail functional
- First check of Tool coverage: 55 functional
- First check of Destructive annotations: pass functional
- First check of Schema quality: fail functional
- First check of Capabilities: pass functional
- First check of Schema quality: good functional
- 13 Oct 26 0
- Security disclosure: unverified → pass ▲ functional
- 12 Oct 26 0
- Security disclosure: pass → unverified ▼ functional
- Package version: 0.8.1 → 0.9.0 functional
- 8 Oct 26 49
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 18 Oct 2026 · Analysed npm/mcp-security-guard@0.9.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | petrovicistefan/mcp-security-guard |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/petrovicistefan/mcp-security-guard/.github/workflows/release.yml@refs/tags/v0.9.0 |
| Rekor log index | 3164037200 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha512:aef1aa60bda67f678cdf2a6082535473fdcf9de53dc486222d04abde736c8e116479b83e2d1c80aaeedb06cd83af505cb9e2a6428b50b73dad495de49 |
Background: How many MCP packages publish verified provenance →
Dependencies 93 packages
| Packages resolved | 93 |
|---|---|
| Stale | 31 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
adversarial_test Adversarial test of your own MCP server ~216
CALLS every non-destructive tool of one configured server with command-injection payloads (each would only create an empty canary file) and path-traversal payloads, then reports which parameters reach a shell or the file system unchecked. Only for servers the user develops or operates, ideally a test instance in a container. Destructive tools are skipped unless include_destructive is true.
| Name | Type | Req | Description |
|---|---|---|---|
| canary_dir | string | – | Writable directory as seen by the server (default: the OS temp directory). For a container, mount a host directory and pass host_canary_dir too. |
| confirm_launch | boolean | yes | Must be true: the user agreed that the server is started and its tools are called. |
| host_canary_dir | string | – | – |
| i_own_this_server | boolean | yes | Must be true: the user confirmed they own or operate this server. |
| include_destructive | boolean | – | – |
| project_dir | string | – | – |
| server | string | yes | Server name, optionally "scope:name". |
No output schema declared.
No examples provided.
analyze_tool_definitions Analyze tool definitions (offline) ~74
Runs the tool-poisoning checks on tool definitions you pass in (e.g. the output of tools/list from a server you are developing), without connecting to anything. Useful in CI or before publishing an MCP server.
| Name | Type | Req | Description |
|---|---|---|---|
| server_name | string | yes | Label used in the report. |
| tools | array | yes | – |
No output schema declared.
No examples provided.
apply_fixes Apply recommended fixes ~218
Fixes findings in the project's own files. permissions: adds the recommended permissions.ask rules for tools that execute code, delete data or write files to .claude/settings.json (needs confirm_launch, because the servers are listed to classify their tools). pin-versions: pins unpinned npx/uvx packages in .mcp.json to the registry's current version (needs confirm_network). env-refs: replaces literal secrets in .mcp.json env/headers with ${VAR} references. Without write=true it only shows the planned edits. Every written file is backed up under ~/.claude/mcp-security/backups/ first; ~/.claude.json is never modified.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm_launch | boolean | – | – |
| confirm_network | boolean | – | – |
| fixes | array | yes | – |
| project_dir | string | – | – |
| servers | array | – | Servers considered for the permissions fix. |
| write | boolean | – | false = dry run. Show the plan to the user first, then call again with write=true after they agree. |
No output schema declared.
No examples provided.
audit_agent_context Audit skills, commands, agents and CLAUDE.md ~167
Scans the text files Claude reads besides MCP tools: CLAUDE.md, skills (and their bundled scripts), slash commands, subagents, rules and the hook configs of installed plugins, from the user, the project and every enabled plugin. Flags instruction overrides, requests to hide things from the user, invisible text, HTML comments addressed to the model, directives to read credential files, commands that upload credentials, download-and-run and encoded execution, credential-stealing scripts, and pre-approved unrestricted shell access. Read-only; launches nothing and sends nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| project_dir | string | – | Project directory. Defaults to the current project. |
| project_only | boolean | – | Only the project's own files (CLAUDE.md, .claude/). Use for repositories you are about to trust. |
No output schema declared.
No examples provided.
audit_mcp_config Audit MCP configuration ~87
Static audit of MCP server configuration: plaintext secrets in env/headers/args/URLs, plain-HTTP remote servers, unpinned npx/uvx packages, unpinned or privileged Docker containers, pipe-to-shell launch commands, and duplicate server names across scopes. Read-only; launches nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| project_dir | string | – | Project directory. Defaults to the current project. |
No output schema declared.
No examples provided.
audit_server_tools Audit MCP tool definitions ~178
Connects to the selected MCP servers, lists their tools, and checks every name, description and schema string for tool poisoning (instruction overrides, concealment requests, hidden tags, invisible Unicode, sensitive file paths, exfiltration wording, encoded payloads), cross-server tool shadowing, and changes since the tools were last pinned (rug pulls). Never calls the scanned tools.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm_launch | boolean | yes | Must be true. Scanning starts each server process (stdio) or connects to it (HTTP); only initialize and tools/list are sent and no tool is called. Ask the user first. |
| project_dir | string | – | – |
| servers | array | yes | Server names to scan, optionally as "scope:name" (e.g. "project:github"). Use ["*"] for all. |
| timeout_seconds | integer | – | – |
No output schema declared.
No examples provided.
check_supply_chain Check MCP server packages (npm/PyPI) ~179
For servers launched with npx/uvx and similar, checks the package on its registry and in the OSV database: known vulnerabilities, known malicious versions, typosquats of popular MCP packages, non-existent names, very new packages or releases, install scripts, deprecation and npm publisher changes. Sends package names and versions to registry.npmjs.org, pypi.org and api.osv.dev; nothing else leaves the machine.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm_network | boolean | yes | Must be true: package names and versions are sent to the registries and OSV. |
| project_dir | string | – | – |
| scan_images | boolean | – | Also scan container images of Docker-based servers with Trivy or Grype if installed (may pull images and the scanner database). |
| servers | array | – | Server names, or ["*"] for all. |
No output schema declared.
No examples provided.
export_bom Export the agent bill of materials ~137
Inventory of everything the agent can run or read here: MCP servers, plugins, skills, commands, subagents, CLAUDE.md and hook configs, with SHA-256, pin status, scores and OWASP MCP Top 10 evidence. format=summary is a Markdown overview for audits; format=cyclonedx is a CycloneDX 1.6 JSON document. Static and local: nothing is launched or sent, and it holds no paths, arguments, environment or secrets.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | – | – |
| project_dir | string | – | – |
| project_only | boolean | – | Only the project's own servers and files. |
No output schema declared.
No examples provided.
generate_policy Generate an approved-server policy ~83
Returns a .mcp-security.json policy that approves exactly the MCP servers configured now (and their remote hosts) and requires pinned versions. Commit it to the repository so CI, session checks and audits flag any server added later that is not on the list (shadow MCP servers). Read-only: returns the JSON, does not write it.
| Name | Type | Req | Description |
|---|---|---|---|
| project_dir | string | – | – |
No output schema declared.
No examples provided.
list_mcp_servers List configured MCP servers ~61
Lists every MCP server configured for this project (user, local and project scope in Claude Code, plus Claude Desktop) with its transport. Reads config files only; launches nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| project_dir | string | – | Project directory. Defaults to the current project. |
No output schema declared.
No examples provided.
pin_context Pin skills, commands, agents and CLAUDE.md ~179
Records a SHA-256 of every skill, command, subagent, rule, CLAUDE.md, plugin hook config and bundled script (user, project and each installed plugin) in ~/.claude/mcp-security/context-pins.json, so later scans and the session-start check report anything that changed after you approved it. A plugin that changes files without a new version is the rug-pull pattern. Pin only after the user has reviewed an audit_agent_context report; origins with critical or high findings are skipped unless force is true. Reads files only; launches nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| force | boolean | – | Pin origins that still have critical or high findings. Only when the user explicitly accepts them. |
| origins | array | – | Only these origins: "user", "project", "plugin:<name>". Default: all. |
| project_dir | string | – | – |
No output schema declared.
No examples provided.
pin_tools Pin MCP tool definitions ~160
Records a SHA-256 hash of every tool definition of the selected servers in ~/.claude/mcp-security/pins.json, so later audits can detect rug pulls. Pin only after the user has reviewed an audit_server_tools report for these servers. Launches the servers like audit_server_tools.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm_launch | boolean | yes | Must be true. Scanning starts each server process (stdio) or connects to it (HTTP); only initialize and tools/list are sent and no tool is called. Ask the user first. |
| project_dir | string | – | – |
| servers | array | yes | Server names to scan, optionally as "scope:name" (e.g. "project:github"). Use ["*"] for all. |
| timeout_seconds | integer | – | – |
No output schema declared.
No examples provided.
query_audit_log Query the MCP call audit log ~79
Summarises the local audit log written by the plugin's hooks: MCP tool calls per server and tool, and every call where a credential was sent, a credential came back, or the output contained injected instructions. The log stores hashes and sizes only, never arguments or outputs.
| Name | Type | Req | Description |
|---|---|---|---|
| since_hours | number | – | Look-back window in hours. |
No output schema declared.
No examples provided.
request_approval Ask the admin to approve a server or plugin ~127
Creates an approval request in the user's organisation for an MCP server (e.g. project:linear) or a plugin, when the team policy blocks it or does not list it. Use it only when the user asks. The admin decides on the command line; this tool cannot approve anything.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm_network | boolean | yes | Must be true: the request is sent to the team backend. Ask the user first. |
| identity | string | yes | Server as "scope:name" or plugin name. |
| kind | string | yes | – |
| note | string | – | Why the user needs it. |
No output schema declared.
No examples provided.
security_dashboard Security dashboard ~116
Opens the interactive mcp-security-guard dashboard: every configured MCP server with its score and grade, findings filterable by severity and server, the OWASP MCP Top 10 breakdown, recommended permission rules, and pin buttons. scan='config' reads files only. scan='full' starts the servers to list their tools, prompts and resources (no tool is called) and needs confirm_launch=true; ask the user first.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm_launch | boolean | – | – |
| project_dir | string | – | – |
| scan | string | – | – |
No output schema declared.
No examples provided.
team_report Report servers and plugins to the team ~109
Shows exactly what a fleet report would send (server names, scopes, transport, package names and versions or remote hostnames, pinned or not; plugin names and versions; never paths, arguments, environment, headers or secrets). With confirm_send=true it sends it, if the admin turned fleet visibility on. Only when the user asks.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm_send | boolean | – | false = preview only. true = send, after the user has seen the preview and agreed. |
| project_dir | string | – | – |
No output schema declared.
No examples provided.
team_status Team plan status ~103
Syncs the organisation's policy from the team backend (it is then enforced next to the user's own policy) and shows the organisation, the role, the policy version and whether fleet reporting is on. Needs a team API key (MCP_SECURITY_API_KEY or the plugin's setting). Sends only the API key; the answer is cached locally.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm_network | boolean | yes | Must be true: the API key is sent to the team backend. Ask the user first. |
No output schema declared.
No examples provided.
How do I install the MCP Security Guard server?
MCP Security Guard runs locally as an npm package, launched with npx -y mcp-security-guard. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · mcp-security-guard
claude mcp add petrovicistefan-mcp-security-guard -- npx -y mcp-security-guard
What is the MCP Security Guard server?
MCP Security Guard is listed in the public MCP registry as io.github.petrovicistefan/mcp-security-guard. Audit MCP servers for tool poisoning, rug pulls and supply-chain risk (OWASP MCP Top 10). This page covers its npm package (mcp-security-guard).
Is the MCP Security Guard server safe to use?
MCP Security Guard scores 80 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 18 October 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the MCP Security Guard server expose?
MCP Security Guard exposes 17 tools: list_mcp_servers, audit_mcp_config, audit_agent_context, pin_context, audit_server_tools, and 12 more. Their descriptions and schemas cost roughly 2,273 tokens of context every time the server is loaded.
Is the MCP Security Guard server still maintained?
MCP Security Guard is still listed as active in the MCP registry. We last reached this channel on 18 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the MCP Security Guard server under?
MCP Security Guard declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.