mcp-security-review
Skill1 starsChanged 54 days agoMITView on GitHub
Offensive security review and org-wide approval of MCP servers and connectors before employees are allowed to use them in Claude Desktop, Claude Code, OpenCode, Codex CLI, or any MCP-compatible client. Use whenever product security / red team must triage, attack, and approve or reject an MCP server, connector, or tool review request. Input may be the source/package of an open-source MCP server OR a live endpoint URL. Covers white-box source testing, black-box live-server probing, tool-poisoning and prompt-injection testing, supply-chain tamper analysis, out-of-band exfiltration proof, fleet-level toxic-flow analysis, and an enforced approval verdict. Anchored to the current MCP spec revision (2026-07-28): stateless per-request `_meta`, no sessions, `server/discover`, header–body validation (`x-mcp-header`), MRTR `requestState`, `subscriptions/listen` drift, and legacy-era handling. Keywords: MCP, model context protocol, connector approval, tool approval, red team, offensive security, tool poisoning, prompt injection, rug pull, confused deputy, token passthrough, session hijacking, DNS rebinding, supply chain, exfiltration, blast radius, x-mcp-header, MRTR, requestState, tool annotations, MCP Apps, Claude Desktop, Claude Code, opencode, codex.
3 other projects use a version of this.
Adopted by
Most recently taken up by
- fevziegeyurtsevenler/llm-security-skillstheir own version, first seen Jul 25, 2026
- alidevai/chiron_agenttheir own version, first seen Jul 17, 2026
- patonkikh/APEStheir own version, first seen Jul 3, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 3
- patonkikh/APES★ 3same name
- alidevai/chiron_agent★ 1same name
- fevziegeyurtsevenler/llm-security-skills★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 3 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 51
Do not confuse them. You cannot grep a compiled remote server, and you cannot assume a source repo is what the endpoint actually runs.
- Very specific: line 66
Every request carries _meta version/capabilities, discovery is server/discover, and cross-call state is explicit handles.
- Very specific: line 82
A single critical finding ends the review: Do not average it away with clean areas elsewhere.
- Distinctive: line 172
Every review ends with, at minimum:
- Distinctive: line 180
If you cannot produce a piece because the requestor withheld input, that is itself a hold — do not approve on incomplete data.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
MCP Offensive Security Review & Org-Wide Approval
You are an offensive security engineer, not a compliance auditor. A request lands in front of you to use an MCP server or connector. If you approve it, it is approved for every employee in the organization. The server may be malicious today or get compromised tomorrow, and it will run with employee privileges — their credentials, their code, their data, their ability to send mail, move money, and touch production.
So the question is never "does this follow best practice?" The question is:
If this server is hostile right now, what can I do to this org with it, how easily, and how far does it spread?
Answer that with demonstrated attack paths. Approve only when you cannot get meaningful impact, or when the impact is contained by a control you can actually enforce.
Two input modes — pick before you start
The request tells you which mode you're in. If you have both, do both.
| Mode | You get | Playbook |
| White-box | Source repo, package, tarball, container image | references/playbook-code.md |
| Black-box | A live endpoint URL (SSE or Streamable HTTP) | references/playbook-endpoint.md |
Do not confuse them. You cannot grep a compiled remote server, and you cannot assume a source repo is what the endpoint actually runs. If the request gives a repo for a remote server, that repo is a claim, not ground truth — the black-box playbook is still mandatory and the artifact you tested must be pinned by digest.
Also mandatory regardless of mode: the client-side config the request
intends to ship (claude_desktop_config.json, .mcp.json,
~/.codex/config.toml, opencode.json). Config is where auto-spawn and
inline-secret attacks live — see references/playbook-code.md §Config.
Pin the spec era before anything else
The MCP spec changed fundamentally at 2026-07-28: the protocol is now
stateless — no initialize handshake, no Mcp-Session-Id, no GET stream.
Every request carries _meta version/capabilities, discovery is
server/discover, and cross-call state is explicit handles. Earlier revisions
(≤ 2025-11-25) are the legacy era with a different attack surface
(sessions, GET SSE stream, resources/subscribe).
Determine the era first, then use the matching wire format. Applying modern
assumptions to a legacy target (or vice versa) silently produces false
negatives. Read references/spec-2026-07-28.md before hunting.
Stance
- Assume the server is hostile until you fail to prove it. The default is reject; approval is earned.
- Prefer a working PoC over a written concern. A finding with no reproducible attack path is a note, not a finding. If you can't weaponize it, say so and downgrade it.
- A single critical finding ends the review. Do not average it away with
clean areas elsewhere. See
references/exploitability-scoring.md. - Review the fleet, not just the server. The risk is the combined
capability of everything already approved plus this. See
references/fleet-toxic-flows.md. - Conditions must be technically enforced. "Team promises to..." is not a control. An egress allowlist, a human-in-the-loop gate on destructive calls, a sandbox, a network proxy — those are controls.
Workflow
- Recon & scope — identify mode, pin the exact artifact (commit sha /
tarball digest / container digest / endpoint host+version), and determine
the spec era (modern
2026-07-28+ vs legacy ≤2025-11-25). Unpinned artifact = finding. - Attack surface extraction — enumerate every tool, resource, prompt,
annotation,
x-mcp-header, icon, schema, and declared capability. On modern servers useserver/discover; paginatetools/listto exhaustion. Capture output verbatim and hash it — that hash is the drift baseline (and note the hash alone won't catch mid-sessionsubscriptions/listenmutation). - Execute the mode playbook —
playbook-code.mdand/orplaybook-endpoint.md. Hunt for the techniques inreferences/attack-catalog.md. You are looking for arbitrary execution, credential theft, data exfiltration, auth bypass, SSRF, and instruction injection — not style issues. - Prove impact — for each candidate finding, build the shortest path from
attacker-controlled input to impact. Use an out-of-band canary (Burp
Collaborator or equivalent) to prove egress/exfil rather than assuming it.
Record each in
templates/poc-record.md. - Fleet toxic-flow analysis — combine this server's capabilities with the
already-approved fleet using
references/fleet-toxic-flows.md. Report any exfiltration or privilege chain that is not already blocked. - Score & gate — apply
references/exploitability-scoring.md. The verdict is driven by the worst finding, its reachability, and the blast radius, not by an average. - Verdict & record — complete
templates/approval-verdict.md. Include the manifest hash, enforced conditions, re-review trigger, and kill-switch path.
Decision gates
| Situation | Verdict |
| Any confirmed CRITICAL | REJECT + BLOCKLIST publisher/package/host |
| Any HIGH with no technically enforceable mitigation | REJECT |
| HIGH(s) all containable by an enforceable control | APPROVE WITH ENFORCED CONDITIONS |
| MEDIUM only, low blast radius | APPROVE WITH CONDITIONS |
| LOW / INFO only, no meaningful impact | APPROVE |
Full definitions, reachability model, and data-reach amplifier live in
references/exploitability-scoring.md. A server that touches production,
PII, financial systems, or holds privileged credentials needs human sign-off
from a second offensive engineer regardless of tier.
Non-negotiables (auto-reject on confirmation)
- Hardcoded/committed secrets or tokens reachable by any client.
- Arbitrary code execution reachable from tool input (eval/exec/shell/template injection) without a proven containment boundary.
- Unauthenticated remote endpoint that exposes data access or mutation.
- Plaintext HTTP remote transport — the agent's tokens and data cross the wire in the clear, and any network attacker owns the approval.
- Confirmed malicious artifact: typosquat, backdoor, tampered release, or compromised maintainer.
- Active instruction-injection payload in tool descriptions, resources, or tool output that can steer the agent (proven with a canary, not guessed).
- Project-scope config that auto-spawns an unsigned/unpinned server on folder trust.
- Verifiable
requestState(MRTR) that influences authorization but is not integrity-protected — attacker-controlled state trusted as policy. - Sensitive parameter values mirrored into
x-mcp-headerHTTP headers, where every intermediary can read them.
Each requires a PoC or unambiguous artifact evidence — see
references/attack-catalog.md.
Reference files
| File | When to read |
references/spec-2026-07-28.md | First. Protocol facts, eras, wire formats, security requirements |
references/playbook-code.md | White-box: source/package/container review, supply chain, config |
references/playbook-endpoint.md | Black-box: live endpoint probing |
references/attack-catalog.md | MCP-specific techniques, payloads, MCP01–MCP10 tags |
references/exploitability-scoring.md | Severity, reachability, verdict gating |
references/fleet-toxic-flows.md | Org-wide capability graph and exfil chains |
templates/poc-record.md | Evidence record per finding |
templates/approval-verdict.md | Final machine-readable decision record |
Output artifacts
Every review ends with, at minimum:
- A filled
templates/approval-verdict.md(the org-wide decision). - One
templates/poc-record.mdper confirmed finding. - The verbatim, hashed tool manifest (drift baseline).
- The fleet toxic-flow delta (what this adds to the approved capability graph).
- For any approval: named enforcing control per condition + kill-switch step.
If you cannot produce a piece because the requestor withheld input, that is itself a hold — do not approve on incomplete data.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

