Skip to main content
Glama

๐Ÿ›ก๏ธ 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.

Open the live console Install from PyPI View on GitHub

PyPI Python License CI Security MCP

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:

  1. Probe a running agent โ€” cinch collect observes the real deployment and emits an evidence bundle; cinch verify grades it. This is the primary path.

  2. Review by hand โ€” cinch assess grades 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.json

What each probe family observes

Family

Flag

Reads

Controls

Host

--host --pid/--unit

The kernel's view of the agent process: UID and NoNewPrivs, capability sets, AppArmor/SELinux confinement, seccomp filter, netfilter egress policy, network namespace and metadata-API reachability, log forwarding and log ownership, credential-shaped env vars, image digest + SBOM, read-only root, cgroup limits

AE-001โ€“AE-011

Project

--project PATH

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

HE-*, SC-*, AC-003/016/018/019/023

Behaviour

--endpoint URL --authorized

How the running agent responds to adversarial input: direct injection, injection smuggled through retrieved content, system-prompt extraction, tool enumeration, rate-limit presence

RT-001/002/005/008/009, AC-005/006/017

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

evidence_collect

Probe a deployment (host, project_path, endpoint + authorized) โ†’ evidence bundle

evidence_verify

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

data/assessment.json next to the page โ€” the hosted console opens on one, regenerated by scripts/build_assessment.py

Served pack

cinch console --assessment pack.json serves any pack from anywhere on disk

Loaded by hand

Load assessment in the console header โ€” accepts an exported pack or a plain state file; ?assessment=<url> also works

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 browser
cinch 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 console

Turn a session into evidence

  1. Assess the controls that apply to your deployment (Control library โ†’ expand โ†’ Enforced / Gap / N-A, plus an evidence note).

  2. Read Insights & plan โ€” the grade, what is actually wrong, and what to do in what order.

  3. 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

evidence_collect

Probe a running deployment (host / project / endpoint) and get an evidence bundle

evidence_verify

Grade an evidence bundle โ†’ score, grade, insights, recommendations, action plan

checklist_run

Run a named checklist against a description of your deployment

checklist_list

List the 6 checklists and their item counts

checklist_get

Get a specific control by ID (AC-001, AE-005, โ€ฆ)

protocol_get

Get a step-by-step protocol by name (agent-deployment, evidence-collect, โ€ฆ)

mapping_lookup

Look up controls mapped to a framework (nist-rmf, owasp-llm, atlas, custody, lasm)

threat_search

Find every control that mitigates a given threat โ€” scans threat + control + verification + sources

checklist_diff

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

cinch serve

Run the MCP server over stdio (the default with no subcommand)

cinch console

Serve the assessment console on localhost (--port, --host, --no-browser, --assessment)

cinch collect

Probe a running agent โ†’ evidence bundle (--host, --pid, --unit, --project, --endpoint, --authorized, --sign-cmd, --out)

cinch verify

Grade an evidence bundle (--evidence, --out, --fail-on critical|high|any-gap)

cinch assess

Grade a hand-reviewed state file (--state, --out, --deployment, --fail-on)

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

  1. The model proposes; the architecture authorizes and enforces. Prompts are not a security boundary.

  2. An AI agent can be manipulated, compromised, or wrong. Its environment must prevent a bad decision from becoming an unrestricted system action.

  3. 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).

  4. Capability accretion is the core risk. Agents silently gain practical authority through inherited credentials, trust relationships, tool access, and delegation chains.

  5. 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

NIST AI RMF 1.0

Risk governance (GOVERN, MAP, MEASURE, MANAGE)

NIST AI 600-1 GenAI Profile

Generative AI-specific risks and controls

CISA Secure AI System Development

Secure AI lifecycle controls

OWASP Top 10 for LLMs

LLM application security risks

OWASP Agentic AI

Agent threat modeling and controls

MITRE ATLAS

Adversarial threat landscape for AI

CUSTODY Framework

Autonomous agent containment

LASM

Layered Attack Surface Model

Google SAIF

Secure AI Framework

CSA AICM

AI Controls Matrix

ETSI SAI

AI cybersecurity standardization

AI Harness Scorecard

Engineering safeguards for AI-assisted dev

DORA 2025

CI/CD practices, stability metrics

SlopCodeBench

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 tools
checklist_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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
aYes
bYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes
checklist_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pidNo
hostNo
unitNo
endpointNo
authorizedNo
deploymentNounnamed-deployment
project_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deploymentNo
bundle_jsonYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
frameworkYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updatesv1.1.1
    • First observedchecklist_diff
    • First observedchecklist_get
    • First observedchecklist_list
    • First observedchecklist_run
    • First observedevidence_collect
    • First observedevidence_verify
    • First observedmapping_lookup
    • First observedprotocol_get
    • First observedthreat_search

TDQS

A4.4/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

Nine tools is well-scoped for a security checklist/evidence server, covering discovery, assessment, cross-referencing, and evidence workflows without redundancy or bloat.

Completeness4/5

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

ActivityMaintained
ResponsivenessSyncing

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

Related MCP Servers

  • F
    license
    A
    quality
    C
    maintenance
    Enables 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
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    -
  • A
    license
    B
    quality
    A
    maintenance
    Exposes 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.
    37
    MIT

Latest Blog Posts

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