{"name":"io.github.petrovicistefan/mcp-security-guard","slug":"petrovicistefan-mcp-security-guard","title":"MCP Security Guard","description":"Audit MCP servers for tool poisoning, rug pulls and supply-chain risk (OWASP MCP Top 10).","url":"https://mcp.market/server/petrovicistefan-mcp-security-guard","rating":null,"grade":"A","score":85,"certified":false,"status":"active","category":"security","tags":["security"],"presence":{"score":31,"stars":0,"forks":0,"downloads_week":357,"last_push_at":"2026-10-09T12:12:36.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/petrovicistefan/mcp-security-guard","website":"https://github.com/petrovicistefan/mcp-security-guard#readme","version":"0.9.0","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"mcp-security-guard","version":"0.9.0","transport":{"type":"stdio"}}],"tools":[{"name":"adversarial_test","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"analyze_tool_definitions","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"apply_fixes","description":"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 lite","write_action":false,"price_micros":0,"input_schema":null},{"name":"audit_agent_context","description":"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 tha","write_action":false,"price_micros":0,"input_schema":null},{"name":"audit_mcp_config","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"audit_server_tools","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"check_supply_chain","description":"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","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_bom","description":"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 secr","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_policy","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_mcp_servers","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"pin_context","description":"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 reviewe","write_action":false,"price_micros":0,"input_schema":null},{"name":"pin_tools","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"query_audit_log","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"request_approval","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"security_dashboard","description":"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 f","write_action":false,"price_micros":0,"input_schema":null},{"name":"team_report","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"team_status","description":"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.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":85,"grade":"A","scanned_at":"2026-10-09T18:56:09.579Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-09T18:56:09.541Z","components":{"code":{"score":20,"max":25,"notes":["5 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"plugin/dist/cli.mjs: …ode, sch); const makeValidate = new Function(`${names_1.default.self}`, `${names_1.de…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"mcp-security-guard","version":"0.9.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-10-09T12:16:40.572Z","repositoryUrl":"git+https://github.com/petrovicistefan/mcp-security-guard.git","weeklyDownloads":357}],"repo":{"found":true,"owner":"petrovicistefan","repo":"mcp-security-guard","archived":false,"pushedAt":"2026-10-09T12:12:36Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/5754511?v=4","ownerCreatedAt":"2013-10-23T08:44:47Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/5754511?v=4&s=128","source":"github"},"presence":{"stars":0,"forks":0,"downloadsWeek":357,"license":"MIT","lastPushAt":"2026-10-09T12:12:36.000Z","score":31}}}},"grade_history":[],"reviews":[]}