Cinch MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Cinch MCP Serverrun the agent containment checklist for my AI agent deployment"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
๐ก๏ธ Cinch
Contain your AI agents before they reach production.
MCP server + cross-harness skills for building and operating AI agents safely.
The model proposes; the architecture authorizes and enforces.
117 | 6 | 9 | 5 | 5 | 4 | 3 |
controls | checklists | MCP tools | crosswalks | protocols | templates | skills |
Grounded in NIST AI RMF ยท CISA Secure AI Development ยท OWASP LLM & Agentic ยท MITRE ATLAS ยท CUSTODY ยท LASM ยท Google SAIF ยท DORA 2025
AI agents can read data, invoke tools, execute code, call APIs, and initiate business processes. When they go wrong โ through prompt injection, excessive autonomy, credential theft, or model error โ the consequences are only as severe as the environment allows. Cinch gives you the enforceable controls, protocols, and runtime queries to keep that environment contained.
โจ What's inside
What | Why it matters | |
๐ | 6 checklists (117 controls) | Enforceable, framework-mapped YAML โ not advice, controls |
๐ | Probes (host ยท project ยท behaviour) | Assess a running agent: inspect its process, its deployment, and how it behaves under attack |
๐ก | MCP server (9 tools) | Any MCP-compatible agent queries controls at runtime โ and can collect + verify evidence |
๐ฅ๏ธ | Assessment console | Grade a deployment, get insights + a phased action plan, export JSON/CSV/PDF |
๐ง | 3 skills | Drop-in Hermes skill definitions for security reviews & red-teaming |
๐ | 5 protocols | Step-by-step deployment, incident-response, and evidence collection |
๐ | 5 mappings | Crosswalks: NIST AI RMF ยท OWASP LLM ยท MITRE ATLAS ยท CUSTODY ยท LASM |
๐ | 4 templates | Security review, risk assessment, agent policy, deployment ADR |
Related MCP server: cybersec-mcp
๐ฅ๏ธ The assessment console
โถ Try the hosted console โ no install required.
One page, two modes: a landing page for the project, and a live containment assessment dashboard. It is not a static mockup โ it loads a real assessment result pack and renders the analysis: letter grade, insights, ranked recommendations, and a phased action plan. Mark a control Enforced / Gap / N-A and every one of those re-derives instantly.
View | What you get |
Overview | Grade, containment score, top insights, "do now" queue, open-gap feed, per-checklist counts |
Insights & plan | Grade + why it was capped, ranked findings, one recommendation per gap (do this โ verify like this), remediation phased Now / Next / Later with exit criteria |
Assessment | Walk the checklist control by control, attach evidence as you go |
Control library | All 117 controls across 6 checklists โ searchable, filterable, assessable inline |
Threat model | LASM 7ร4 attack-surface grid derived live from the catalog's layer mapping |
Framework coverage | NIST AI RMF, OWASP, CUSTODY, ATLAS, LASM crosswalks against your answers |
Export | JSON (full result pack for CI gating and diffs), CSV (gap register with phase + rank), PDF (grade, insights, action plan, recommendations, crosswalk) |
Where the results come from
Two ways to produce them, one engine grading both:
Probe a running agent โ
cinch collectobserves the real deployment and emits an evidence bundle;cinch verifygrades it. This is the primary path.Review by hand โ
cinch assessgrades a state file a reviewer filled in (or the console session they clicked through).
The grade itself is computed once and shown everywhere: src/cinch/assess.py for the CLI and CI, the dashboard for the browser, both reading their rules โ severity weights, grade bands, critical-gap and completeness caps, remediation phases โ from docs-site/data/rubric.json. Change a rule there and both follow.
# review by hand
cinch assess --state examples/assessment-state.json # grade + insights + action plan
cinch assess --state examples/assessment-state.json --out pack.json
cinch console --assessment pack.json # open the dashboard on it
cinch assess --state pack.json --fail-on critical # gate a release (exit 2)A state file is just what a reviewer decided (see examples/assessment-state.json):
{
"deployment": "checkout-agent-prod",
"status": { "AC-001": "pass", "AC-006": "fail", "AC-014": "na" },
"evidence": { "AC-006": "retrieval output concatenated into the system turn" }
}๐ Assess a running agent
Nobody wants to hand-answer 117 controls. cinch collect observes the deployment and answers what it can prove, in the agent's own environment.
# 1. probe the agent โ out of band, as an operator/sidecar/CI identity
cinch collect --host --pid $AGENT_PID \
--project /srv/checkout-agent \
--deployment checkout-agent-prod \
--sign-cmd 'cosign sign-blob -' \
--out evidence.json
# 2. grade the evidence
cinch verify --evidence evidence.json --out pack.json --fail-on critical
# 3. look at it
cinch console --assessment pack.jsonWhat each probe family observes
Family | Flag | Reads | Controls |
Host |
| The kernel's view of the agent process: UID and |
|
Project |
| The authority the deployment grants: MCP tool grants, container/pod security context, NetworkPolicy egress, committed secret material, dependency pinning and hashes, SBOM, vulnerability scanning, provenance attestation and image signing, CI runner posture, threat model and IR docs |
|
Behaviour |
| How the running agent responds to adversarial input: direct injection, injection smuggled through retrieved content, system-prompt extraction, tool enumeration, rate-limit presence |
|
Host findings are also mapped onto the containment controls that assert the same thing (AE-005 egress โ AC-019 exfiltration), labelled derived: so the chain stays visible.
Probes also abstain when the target is the wrong kind of thing: supply-chain and documentation controls (SBOM, dependency scanning, provenance, threat model) report unknown unless the directory is actually a build tree โ a build manifest, a CI workflow, or a repository. Reporting "no SBOM" about a config directory would be confidently wrong.
Three statuses, and why unknown matters
pass demonstrably enforced ยท fail demonstrably not ยท unknown the probe could not tell.
unknown is never a pass โ and never a fail either. A probe on macOS with no /proc, without CAP_NET_ADMIN, or with no manifest to read says so and leaves the control unreviewed โ it costs completeness instead of quietly earning credit. Keyword hits in config are reported as leads to confirm, not as proof a limit is enforced at runtime. Every observation keeps the raw evidence it was derived from, so you can check the probe's reasoning instead of trusting it. Secret names are recorded; secret values never are.
Self-audit is detected, not assumed away
protocols/evidence-collect.md is blunt about this: an agent auditing its own host is both auditor and audited, and a compromised or simply mistaken agent can report every control as enforced.
So collection records who collected what, where and when โ and when the collector is the audited party, the bundle is stamped provenance.self_attested: true. Three ways that is detected: the inspected PID is the collector's own; the inspected PID is an ancestor of the collector (the agent spawned it, so it inherits the agent's identity and authority); or the request arrived over MCP, where the requester is an agent by definition. That becomes a critical finding in the assessment, is shown as a red self-attested banner in the console, and is never counted as assurance. Independent evidence means cinch collect run out of band under its own identity, signed with --sign-cmd using a key the agent cannot reach.
Behavioural probing sends adversarial input to a live system, so it refuses to run without --authorized naming the target.
As MCP tools
An auditing agent can drive the same flow:
Tool | Use it to |
| Probe a deployment ( |
| Grade a bundle โ score, grade, insights, recommendations, action plan |
Bundles collected through MCP are marked self-attested by construction โ the requester is an agent. Use them to find problems fast; use an out-of-band signed run when the grade has to mean something.
Three ways to get results into the dashboard:
Route | How |
Published pack |
|
Served pack |
|
Loaded by hand | Load assessment in the console header โ accepts an exported pack or a plain state file; |
Exports round-trip: an exported pack feeds straight back into cinch assess --state or the Load assessment button, so re-assessments diff cleanly.
How the grade works. The score is severity-weighted (critical ร3, high ร2, medium/low ร1) over the controls you actually answered. Grade bands run AโF, and two kinds of cap can only ever lower the result โ the pack always says which cap fired and why:
Cap | Effect |
1 unenforced critical control | grade capped at D |
3 or more critical controls | grade capped at F |
under 60% completeness | grade capped at C โ a high score describes a sample, not the deployment |
under 25% completeness | grade I ยท Insufficient evidence โ no letter is claimed at all |
That last one exists because of a real failure: probing a live Claude Code harness resolved 3 of 117 controls, all passing, and the first version graded it A (Contained). A score computed over three controls says nothing about the other 114. Coverage is part of the verdict, not a footnote.
Serve it yourself
The console reads its catalog with fetch('data/full.json'), so it must be served over HTTP โ opening the file directly with file:// makes that fetch fail and falls back to a small offline subset. cinch console does it for you:
pip install cinch-ai-security
cinch console # serves on http://127.0.0.1:8787 and opens your browsercinch console --port 9000 # pick another port
cinch console --no-browser # headless / remote-friendly
cinch console --host 0.0.0.0 # expose on your LAN (read-only, but consider who can reach it)The server is read-only, GET/HEAD only, bound to 127.0.0.1 by default, and rooted at the console directory. Assessment state lives in the browser only โ nothing is uploaded anywhere.
From a source checkout, the same page is served straight from docs-site/:
git clone https://github.com/nirhalfon/cinch-ai-security.git
cd cinch-ai-security && pip install -e .
python scripts/build_docs_json.py # regenerate the catalog bundle after editing any YAML
cinch consoleTurn a session into evidence
Assess the controls that apply to your deployment (Control library โ expand โ Enforced / Gap / N-A, plus an evidence note).
Read Insights & plan โ the grade, what is actually wrong, and what to do in what order.
Export evidence โ Download all โ three artifacts:
JSON โ the full result pack: summary + grade, coverage, insights, ranked recommendations, action plan, and every control with status and evidence. Commit it, diff the next run, gate CI with
cinch assess --fail-on critical.CSV โ the gap register, one row per control, with remediation phase and rank, for tickets and trackers.
PDF โ printable report: grade and why it was capped, insights, action plan, recommendations, CUSTODY coverage, open gaps, NIST AI RMF crosswalk.
๐ Quick start for AI agents
You are an AI agent reading this repo. This section is for you. Three commands and one config block get you operational.
1. Install
pip install cinch-ai-security
# or, from source:
git clone https://github.com/nirhalfon/cinch-ai-security.git
cd cinch-ai-security && pip install -e .2. Wire it into your MCP client
Add this to your MCP config (Claude Desktop, Claude Code, Cursor, etc.):
{
"mcpServers": {
"cinch": {
"command": "cinch",
"args": ["serve"]
}
}
}3. Query the controls you need
Your tools (all return JSON):
Tool | Use it to |
| Probe a running deployment (host / project / endpoint) and get an evidence bundle |
| Grade an evidence bundle โ score, grade, insights, recommendations, action plan |
| Run a named checklist against a description of your deployment |
| List the 6 checklists and their item counts |
| Get a specific control by ID ( |
| Get a step-by-step protocol by name ( |
| Look up controls mapped to a framework ( |
| Find every control that mitigates a given threat โ scans threat + control + verification + sources |
| Compare two checklists to surface coverage gaps and duplicated controls |
Checklist ID prefixes: AC agent-containment ยท AE agent-environment ยท HE harness-engineering ยท RT red-team ยท SC supply-chain ยท SH system-hardening.
30-second smoke test
cinch serve & # start the MCP server on stdio
# then call checklist_list from your MCP client, or:
python -c "from cinch.loader import list_checklists; [print(c['name'], c['item_count']) for c in list_checklists()]"CLI reference
Command | What it does |
| Run the MCP server over stdio (the default with no subcommand) |
| Serve the assessment console on localhost ( |
| Probe a running agent โ evidence bundle ( |
| Grade an evidence bundle ( |
| Grade a hand-reviewed state file ( |
Use as a skill (Hermes / Claude / OpenClaw / NanoClaw)
# Hermes skill
cp -r skills/ai-harness-review ~/.hermes/skills/
# Claude Code โ drop into your project root; it auto-loads
cp cross-harness/claude/CLAUDE.md /your/project/CLAUDE.md
# OpenClaw / NanoClaw โ see cross-harness/openclaw/ and cross-harness/nanoclaw/๐งญ Philosophy
The model proposes; the architecture authorizes and enforces. Prompts are not a security boundary.
An AI agent can be manipulated, compromised, or wrong. Its environment must prevent a bad decision from becoming an unrestricted system action.
Functional correctness โ security. 47.5% of AI-generated code may be functionally correct, but only 8.25% is also secure (ICLR 2026 vibe-coding benchmark).
Capability accretion is the core risk. Agents silently gain practical authority through inherited credentials, trust relationships, tool access, and delegation chains.
Defense in depth maps to architecture layers. A control at one layer does not detect an attack at another (LASM principle).
๐ Project structure
cinch/
โโโ src/cinch/ # MCP server (SDK 2.0)
โ โโโ server.py # 9 tool definitions + CLI (serve / console / collect / verify / assess)
โ โโโ probes/ # observe a running agent
โ โ โโโ host.py # AE-001..AE-011 from /proc, cgroups, netfilter, mountinfo
โ โ โโโ project.py # MCP grants, manifests, CI, pinning, secrets (HE/SC/AC)
โ โ โโโ behaviour.py # injection / leakage / tool / rate probes (authorization-gated)
โ โโโ collect.py # evidence bundle: provenance, self-audit detection, signing
โ โโโ verify.py # bundle โ graded assessment (unknown never becomes a pass)
โ โโโ assess.py # assessment engine: score, grade, insights, recommendations, plan
โ โโโ console.py # localhost static server for the assessment console
โ โโโ loader.py # YAML checklist/protocol/mapping loader (path-traversal-safe)
โโโ checklists/ # 6 checklists ยท 117 controls
โ โโโ agent-containment.yaml # CUSTODY-based agent containment (AC)
โ โโโ agent-environment.yaml # host/container controls, out-of-band audited (AE)
โ โโโ harness-engineering.yaml # AI dev harness safeguards (HE)
โ โโโ system-hardening.yaml # OS/infra hardening for AI workloads (SH)
โ โโโ red-team.yaml # AI red team engagement checklist (RT)
โ โโโ supply-chain.yaml # AI supply chain security (SC)
โโโ protocols/ # 5 how-to procedures
โ โโโ agent-deployment.md
โ โโโ evidence-collect.md # out-of-band signed-JSON host evidence for AE controls
โ โโโ incident-response.md
โ โโโ red-team-engagement.md
โ โโโ harness-setup.md
โโโ skills/ # 3 Hermes skills
โ โโโ ai-harness-review/SKILL.md
โ โโโ agent-audit/SKILL.md # + separation-of-duties / --self-audit rule
โ โโโ ai-red-team/SKILL.md
โโโ mappings/ # 5 framework crosswalks
โ โโโ nist-rmf-crosswalk.yaml
โ โโโ owasp-llm-crosswalk.yaml
โ โโโ atlas-crosswalk.yaml
โ โโโ custody-crosswalk.yaml
โ โโโ lasm-crosswalk.yaml
โโโ cross-harness/ # agent platform configs
โ โโโ claude/CLAUDE.md
โ โโโ openclaw/agent-config.yaml
โ โโโ nanoclaw/agent-config.yaml
โโโ templates/ # 4 review/policy/ADR templates
โโโ docs/ # threat-model, research-references, design-rationale
โโโ marketing/ # announcement copy (kept out of docs/ โ docs/ is bundled)
โโโ docs-site/ # the console
โ โโโ index.html # landing page + assessment dashboard (one file)
โ โโโ data/
โ โโโ full.json # generated control catalog
โ โโโ rubric.json # scoring rules โ shared with src/cinch/assess.py
โ โโโ assessment.json # generated result pack the console opens on
โโโ examples/assessment-state.json # worked assessment state (input to `cinch assess`)
โโโ scripts/
โ โโโ build_docs_json.py # deterministic full.json generator (run on every source change)
โ โโโ build_assessment.py # regenerate docs-site/data/assessment.json
โ โโโ migrate_schema.py # one-time Schema B โ canonical Schema A migration
โโโ tests/ # pytest: loader, server, console, assessment engine, probes
โโโ .github/
โโโ dependabot.yml # weekly pip + github-actions updates
โโโ workflows/
โโโ validate.yaml # CI: YAML, imports, ruff, bandit, pip-audit, content gate, pytest, full.json sync
โโโ security-scan.yml # CodeQL, semgrep, dependency-review, gitleaks, SBOM
โโโ pages.yml # deploy the console to GitHub Pages๐ฌ Research grounding
Source | Coverage |
Risk governance (GOVERN, MAP, MEASURE, MANAGE) | |
Generative AI-specific risks and controls | |
Secure AI lifecycle controls | |
LLM application security risks | |
Agent threat modeling and controls | |
Adversarial threat landscape for AI | |
Autonomous agent containment | |
Layered Attack Surface Model | |
Secure AI Framework | |
AI Controls Matrix | |
AI cybersecurity standardization | |
Engineering safeguards for AI-assisted dev | |
CI/CD practices, stability metrics | |
Subtle correctness in AI-generated code |
๐ค Contributing
See CONTRIBUTING.md. Every checklist item, protocol step, and mapping must cite a source. After any source change, regenerate both generated files โ CI verifies they are in sync:
python scripts/build_docs_json.py # docs-site/data/full.json (control catalog)
python scripts/build_assessment.py # docs-site/data/assessment.json (result pack the console opens on)๐ Security
See SECURITY.md for vulnerability reporting. This project dogfoods its own controls โ the repo itself is scanned with CodeQL, semgrep, bandit, pip-audit, and gitleaks on every push.
๐ License
CC BY 4.0 โ free to share and adapt with attribution.
Available Tools
9 toolschecklist_diffA
Compare two checklists and show coverage gaps and duplicated controls.
Returns items present in checklist A but missing from B, and vice versa. Matching is by normalized control text (case- and whitespace-insensitive), not by item ID, so the same control stated in two checklists (e.g. agent-containment and harness-engineering) is recognized as a duplicate. Use this to keep the catalog maintainable as it grows.
Args: a: First checklist name, e.g. 'agent-containment'. b: Second checklist name, e.g. 'harness-engineering'.
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | ||
| b | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses key behaviors: case/whitespace-insensitive matching, duplicate detection, and output of missing items in both directions. This goes beyond the schema and gives the agent accurate expectations. It doesn't mention side effects explicitly, but 'compare' implies read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the main purpose, and uses a clear Args block for parameters. No wasted words; each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple 2-parameter tool, the description effectively explains purpose, behavior, and usage. The output schema exists so return values are covered separately. It doesn't address error cases but nothing indicates they are critical; overall it's a complete description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has no descriptions (coverage 0%), so the description fully compensates. It defines each parameter with examples: 'a: First checklist name, e.g. agent-containment.' and clarifies that names are used, not IDs. This provides meaningful semantics beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Compare two checklists and show coverage gaps and duplicated controls.' It explicitly mentions the matching logic (normalized control text, not item ID) and distinguishes it from sibling tools like checklist_list and checklist_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides context for when to use it: 'Use this to keep the catalog maintainable as it grows.' This indicates a maintenance/diff scenario. It doesn't explicitly mention alternatives or exclusions, but the purpose is clear enough to guide selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
checklist_getA
Get a specific checklist item by its ID (e.g. 'AC-001', 'HE-006').
Returns the full item with threat, control, severity, verification, and source framework references.
Args: checklist_name: Checklist name, e.g. 'agent-containment'. item_id: Item ID, e.g. 'AC-001'.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | ||
| checklist_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details the return content (threat, control, severity, verification, source references), which adds transparency beyond the bare action. However, with no annotations, it does not disclose error behavior, permissions, or side effects, leaving some behavioral aspects unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two purposeful sentences plus an Args list, front-loaded with the primary action. Every sentence adds value with examples and return details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with an output schema, the description covers the core function, parameters, and return fields. It lacks explicit usage guidance and error handling, but is largely sufficient given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameter descriptions (0% coverage), but the description explains both parameters with concrete examples (e.g., 'agent-containment' and 'AC-001'). This compensates for the schema gap, though it doesn't enumerate valid values or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a specific checklist item by ID, with examples of ID format. This distinguishes it from siblings like checklist_list (which lists items) and checklist_diff (which compares).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying it gets a single item by ID, but does not explicitly state when to prefer this over checklist_list or other siblings. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
checklist_listA
List all available security checklists with item counts and frameworks.
Returns checklist name, version, description, item count, and mapped frameworks. No arguments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It explicitly states the return fields (name, version, description, item count, frameworks) and that no arguments are required, making the expected behavior clear. For a read-only listing tool, this is sufficient, though it does not mention potential authorization requirements or response size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short paragraphs, with the first sentence stating the core purpose and the second enumerating return fields. Every sentence adds value, and the structure is front-loaded for quick agent parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with an existing output schema, the description is complete. It specifies the exact output fields and explicitly notes there are no arguments, covering all necessary context for invocation. No additional caveats or edge cases are relevant for this simple operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds the explicit statement 'No arguments,' which removes any ambiguity about parameter usage, fully addressing the empty input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource ('List all available security checklists'), clearly defining the tool's scope as an exhaustive listing. It also differentiates from siblings like checklist_get by emphasizing 'all available' and including aggregate details like item counts and frameworks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear context: it is a zero-argument command that returns all checklists, implying it is the discovery/overview entry point. It does not explicitly name alternatives or when-not-to-use scenarios, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
checklist_runA
Run a named checklist against a description of your AI agent or deployment.
Returns all items in the checklist with their threat, control, severity, and verification steps. Use this to assess whether your deployment meets security controls from NIST, CISA, OWASP, CUSTODY, and LASM.
Args: name: Checklist name, e.g. 'agent-containment', 'harness-engineering', 'system-hardening', 'red-team', or 'supply-chain'.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions output items but also says 'against a description of your AI agent or deployment', implying an input that is not in the schema. This creates ambiguity about how the description is provided and whether the operation has side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear action sentence, output summary, usage context, and an Args section. Every sentence adds value and there is no unnecessary prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, usage, and parameter examples, but the disconnect between the 'description of your AI agent or deployment' and the schema lacking such a parameter is a notable gap. It also omits any error or permission details that might be relevant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has a single 'name' parameter with no description, but the Args section adds examples of valid values and explains it as a 'Checklist name', which helps the agent understand what to provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Run' and the resource 'a named checklist', and explains the output structure ('Returns all items...'), making it distinct from siblings like checklist_list and checklist_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context: 'Use this to assess whether your deployment meets security controls from NIST, CISA, OWASP, CUSTODY, and LASM.' However, it does not explicitly mention when not to use it or name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evidence_collectA
Probe a running agent deployment and return an evidence bundle.
Runs read-only probes and returns what was actually observed, per control: 'pass' (demonstrably enforced), 'fail' (demonstrably not), 'unknown' (could not tell โ never counted as enforced). Feed the bundle to evidence_verify to get a grade, insights and an action plan.
Self-audit warning: when an agent calls this tool about its own host, the result
is self-attestation, not assurance. The bundle records that ('provenance.
self_attested') and the assessment raises it as a critical finding. Independent
evidence needs cinch collect run out of band under a separate identity โ see
the 'evidence-collect' protocol.
Args:
host: Probe the host/container running the agent (AE-001..AE-011).
pid: PID of the agent process to inspect. Omit and the collector inspects
itself, which is flagged as self-attestation.
unit: systemd unit name of the agent, used to resolve its MainPID.
project_path: Deployment directory to inspect โ MCP tool grants, container
manifests, CI workflows, dependency pinning, secret handling.
endpoint: Running agent's HTTP endpoint for behavioural probes (prompt
injection, prompt leakage, tool enumeration, rate bounds).
authorized: Must be true to probe endpoint. Confirms you are permitted to
send adversarial input to that target.
deployment: Name recorded in the bundle.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| host | No | ||
| unit | No | ||
| endpoint | No | ||
| authorized | No | ||
| deployment | No | unnamed-deployment | |
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it excels. It explicitly states that the tool runs read-only probes, returns the actual observed statuses, counts 'unknown' as never enforced, and flags self-attestation as a critical finding (provenance.self_attested). It also reveals the side effect of sending adversarial input to an endpoint when `authorized` is true. This is rich, honest, and highly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a one-sentence summary and then well-structured sections for output details, self-audit warning, and arguments. It is longer than average, but every sentence adds necessary information for a tool with complex side effects and seven parameters. It earns its length, though a few rephrasings could tighten it slightly without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, no annotations, high-risk behavioral probes) and the presence of an output schema, the description covers the essential context: what the tool returns, how to interpret results, the self-attestation pitfall, and the recommended follow-up (evidence_verify). The description is self-sufficient for an agent to decide whether and when to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the lack of parameter documentation in the schema, and it does so completely. The 'Args' section explains the meaning and purpose of all seven parameters, including the role of `authorized` as a consent flag, the distinction between `pid` omission leading to self-inspection, and what `project_path` covers (MCP tool grants, manifests, etc.). This is exactly what the description should add over the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Probe a running agent deployment and return an evidence bundle.' It goes beyond a generic verb+resource by explaining the output format (pass/fail/unknown per control) and explicitly differentiates itself from the sibling tool evidence_verify by directing users to feed the bundle to it for grading. This makes the tool's distinct role in the workflow unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: it tells users when to use this tool (to collect evidence) and, importantly, provides a clear caveat about when not to rely on it (self-attestation) with a named alternative ('run cinch collect out of band'). It also specifies when the `authorized` parameter must be true, which doubles as a prerequisite for endpoint probing. This level of when/when-not guidance is exemplary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evidence_verifyA
Grade an evidence bundle: score, letter grade, insights, recommendations, plan.
Applies the same rubric a human reviewer sees in the console, and reports on the evidence itself as well as the controls โ self-attested collection, unsigned bundles, and controls no probe could verify all surface as findings. 'unknown' observations stay unreviewed rather than counting as enforced.
Args: bundle_json: A 'cinch-evidence/1' bundle, as returned by evidence_collect. deployment: Optional deployment name override.
| Name | Required | Description | Default |
|---|---|---|---|
| deployment | No | ||
| bundle_json | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it delivers substantial detail. It reveals that self-attested collection, unsigned bundles, and unverifiable controls all surface as findings, and that 'unknown' observations remain unreviewed rather than counting as enforced. This goes beyond a generic summary and gives the agent accurate expectations for how edge cases are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and well-structured, opening with a one-line summary then providing behavioral details and an Args section. Every sentence adds value, and there is no redundant or filler content. The formatting makes it easy to scan for key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, the description covers all necessary aspects: the action, the input format, the behavioral quirks, and the output categories. An output schema exists, so return structure is handled separately. The description is complete enough for an agent to select and invoke the tool correctly, leaving no significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides no descriptions for the two parameters (0% coverage), so the description is the sole source of meaning. It adds essential context: bundle_json must be a 'cinch-evidence/1' bundle as returned by evidence_collect, and deployment is an optional override. This enables correct invocation despite the schema being empty.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb 'Grade' and a clear resource ('an evidence bundle'), then enumerates the outputs: score, letter grade, insights, recommendations, plan. This distinguishes it from sibling tools like evidence_collect (which gathers bundles) and checklist_run (which executes checklists), leaving no ambiguity about its function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool's usage context is clear: it is meant for grading evidence bundles, and the input is explicitly tied to the output of evidence_collect. The description also states it applies the same rubric a human reviewer sees, which signals when it is appropriate. However, it does not explicitly exclude other tools or mention when not to use it, so it falls short of an explicit when-to-use versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mapping_lookupA
Look up security controls mapped to a specific framework.
Returns all checklist items that correspond to framework controls, enabling cross-reference between NIST AI RMF, OWASP, CUSTODY, LASM, and MITRE ATLAS.
Args: framework: Framework name: 'nist-rmf', 'owasp-llm', 'atlas', 'custody', or 'lasm'.
| Name | Required | Description | Default |
|---|---|---|---|
| framework | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description alone must disclose behavior. It does state that the tool returns all matching checklist items and implies a read-only lookup operation. Yet it does not mention failure modes, authorization requirements, or any limitations beyond the listed framework names, leaving the behavioral profile somewhat incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a clear opening sentence states the purpose, followed by a short explanation of the return value and a compact 'Args' section listing the parameter and allowed values. Every sentence serves a purpose with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple lookup tool with one parameter and a present output schema. The description covers the tool's purpose, the parameter's allowed values, and the nature of the return data, which is sufficient for an agent to select and invoke it correctly. No additional context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema for 'framework' is only a string with no enum or description, giving 0% description coverage. The description fully compensates by specifying the exact allowed values ('nist-rmf', 'owasp-llm', 'atlas', 'custody', 'lasm') and explaining what the parameter selects, providing complete parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with the verb 'look up' and identifies the resource as 'security controls mapped to a specific framework.' It explicitly enumerates the supported frameworks (NIST AI RMF, OWASP, CUSTODY, LASM, MITRE ATLAS), which distinguishes it from sibling tools like checklist_list or protocol_get that serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys a clear usage context by explaining that the tool enables cross-reference between specific frameworks and returns corresponding checklist items. However, it does not explicitly name alternative tools or provide 'when not to use' exclusions, so it stops short of a fully explicit contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
protocol_getA
Get a step-by-step security protocol by name.
Returns the full protocol document with prerequisites, steps, verification, and rollback procedures.
Args: name: Protocol name, e.g. 'agent-deployment', 'incident-response', 'red-team-engagement', or 'harness-setup'.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that the tool returns the full protocol document and enumerates its sections, which is useful behavioral context. It does not mention auth, error behavior, or side effects, but the read-only semantics of 'Get' are straightforward.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise overview sentences plus a short Args block; every sentence adds value. No redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter) and has an output schema, so the description doesn't need to document return structure. The provided context covers purpose, argument semantics, and expected response contents.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only 'name' as a string with no description; the description compensates by giving concrete examples ('agent-deployment', 'incident-response') and clarifying that it is a protocol name. This is sufficient for a single-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly identifies a get operation for a named security protocol, enumerating document contents (prerequisites, steps, verification, rollback). This distinguishes it from sibling tools like checklist_get by specifying what a protocol document contains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a protocol document is needed by name, but it does not explicitly compare to sibling tools or specify when not to use. No alternative tools are mentioned, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threat_searchA
Search all checklists for controls that mitigate a given threat.
Use this to find relevant controls for specific threats like 'prompt injection', 'credential theft', 'data exfiltration', 'privilege escalation', or 'lateral movement'.
Args: query: Threat or control to search for.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It adds the scope ('all checklists') and typical use cases, but does not disclose whether it is read-only, how results are returned, or any limitations. For a search tool this is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a one-line summary, a usage sentence with examples, and a parameter definition. No filler; every sentence contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one simple parameter and an output schema available, the description covers the essential purpose and usage. It could mention result ordering or that it searches only controls, but the output schema likely covers return structure. Adequate for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description includes an 'Args' section clarifying 'query' as 'Threat or control to search for'. This compensates for the missing schema-level description and adds practical meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Search all checklists for controls that mitigate a given threat', using a specific verb ('Search'), resource ('all checklists'), and objective. This clearly differentiates it from sibling tools like checklist_list or checklist_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides concrete usage guidance with examples ('prompt injection', 'credential theft', etc.) in the sentence 'Use this to find relevant controls for specific threats...'. However, it does not mention when not to use or alternatives, so it lacks explicit exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
v1.1.1- First observed
checklist_diff - First observed
checklist_get - First observed
checklist_list - First observed
checklist_run - First observed
evidence_collect - First observed
evidence_verify - First observed
mapping_lookup - First observed
protocol_get - First observed
threat_search
TDQS
Each tool targets a distinct operation: listing, running, retrieving, diffing checklists; retrieving protocols; mapping frameworks; searching threats; and collecting/verifying evidence. Even closely related tools like checklist_run and evidence_collect are clearly separated by static assessment vs. live probing.
All tools use a consistent verb_noun snake_case pattern (e.g., checklist_list, protocol_get, evidence_verify). Minor synonym use like 'lookup' and 'search' does not break the overall predictable style.
Nine tools is well-scoped for a security checklist/evidence server, covering discovery, assessment, cross-referencing, and evidence workflows without redundancy or bloat.
The set covers the core lifecycle: listing/running/retrieving/checklists, fetching protocols, mapping to frameworks, searching threats, and collecting/verifying evidence. The only notable gap is the lack of a protocol_list endpoint to enumerate available protocols without knowing names in advance, but this is workable.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
AI-security knowledge as MCP: standards-mapped tools (OWASP, NIST, MITRE) for AI agents.
Compliance frameworks (SOC 2, ISO 27001, CMMC, NIST, more) delivered to AI agents as MCP tools.
1Search, vet & assemble MCP servers from your agent: verified tools, risk labels, and trust scores.
- gatewayOAuthai.sealgate
MCP gateway with runtime security policy, tool-call-level control, and audit of agent actions.
Related MCP Servers
- FlicenseAqualityCmaintenanceEnables AI assistants to perform defensive security tasks such as vulnerability detection, CVE lookup, phishing/link safety checks, and security report generation via MCP tools.23-
- FlicenseNot gradedqualityDmaintenanceEnables Claude or any MCP-compatible client to execute cybersecurity workflows like incident response, cloud audits, and pentests by calling tools with 323 prompts across 8 categories.-
- AlicenseBqualityAmaintenanceExposes the five Enternovate security tools as 23 Model Context Protocol tools, enabling agents to scan attack surfaces, query knowledge graphs, audit websites, check email security, and run POPIA compliance assessments via a single MCP connection.37MIT
- AlicenseNot gradedqualityBmaintenanceEnables LLM clients to access DevSecOps tooling such as CI/CD pipeline status, vulnerability triage, log search, and dependency scanning through MCP, turning AI copilots into security-aware engineering partners.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nirhalfon/cinch-ai-security'
If you have feedback or need assistance with the MCP directory API, please join our Discord server