Skip to main content
Glama
Mipiti
by Mipiti

Get Sufficiency

get_sufficiency

Determine if a single control's assertions sufficiently cover its description; get a sufficient/insufficient verdict with named missing clauses and required evidence.

Instructions

Sufficiency verdict for a single control: whether its submitted assertions collectively cover every aspect of the control. Read-only.

Returns the LLM sufficiency status and reasoning for one control, evaluated server-side from the current assertion set (no CI round-trip). Use this for a focused check on one control after submitting assertions; for the whole-model rollup with tier1/tier2 pass/fail counts and drift/misalignment details across all controls, use get_verification_report instead. A verdict carries a freshness of fresh | stale | pending beside its status: stale means the control description, the assertion set or the rules the verdict was computed under have moved since. A stale read with no re-evaluation already queued queues one, so calling again shortly does converge; a stale read that is already waiting adds nothing. For the whole-model rollup, which also refreshes stale controls on read, use get_verification_report.

This is the surface that explains a control stuck at verification_status: "partially_verified". Returns status ("sufficient" | "insufficient" | "pending"; staleness rides in freshness, not in the status) and, when insufficient, a details breakdown naming EACH uncovered clause of the control description and what evidence would close it — a concrete work list, not a score. A claim that carries a soundness_tier reports its weakest clause's tier: a control is proven no more strongly than the thinnest clause it rests on, so the composed tier is read as that bound and never as a control-level pass. Act on it by submitting the named assertions with submit_assertions; if a clause is uncloseable because the control describes a mechanism the system does not actually use, that is a signal to refine_control instead of manufacturing evidence.

The per-clause work list is served by get_control_work_order: where the order names a required class for a clause, required_evidence carries the clause id to put in covers, the clause text and its quantifier, the required_class that closes it and a suggested_submission skeleton whose <...> placeholders you replace before submitting. It is stated by-construction first — for a for-all clause the required class is [by_construction, sound_over_approximation], so prefer typed_boundary (declare the type the sinks accept and its constructors), else sink_default_deny (declare the sinks that realise the clause, the safe forms, a reviewed allowlist). When evidence of the wrong class is bound, class_mismatch is set: the evidence is the wrong CLASS, not merely incomplete, and more of it will not help. An attestation covers an existential clause and never a for-all one; the only legitimate non-mitigation exit for a for-all clause is a risk acceptance or a not-applicable disposition.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
model_idYesID of the threat model.
control_idYesID of the control (e.g., "CTRL-01").
server_versionYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.62.2
  2. Removedv0.62.0
  3. First observedv0.57.0

TDQS

A4.6/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 and does so thoroughly. It discloses that the verdict is evaluated server-side with no CI round-trip, explains the freshness states (fresh/stale/pending), reveals that a stale read with no queued re-evaluation queues one, and clarifies that staleness rides in freshness rather than status. It also explains the composed soundness tier bound and the class_mismatch semantics, which are non-obvious behaviors an agent needs to interpret results correctly.

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 long but information-dense, and the core purpose is front-loaded in the first sentence. Every paragraph adds distinct value: verdict semantics, freshness behavior, the partially_verified use case, the work-order relationship, and the by-construction guidance. It is not padded, though it could be tightened 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?

The description is complete for a read-only diagnostic tool with an output schema. It covers what the tool returns (status, freshness, details breakdown), how to interpret the composed tier, what to do next (submit_assertions or refine_control), and how it relates to get_control_work_order. The output schema exists, so return-value documentation is not the description's job, and nothing an agent needs to call or act on this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%: model_id and control_id are documented in the schema, but server_version has no description. The tool description does not add parameter-level detail beyond what the schema provides, so it does not compensate for the undocumented server_version. Baseline 3 is appropriate because the schema covers most parameters, but the description adds no extra semantic value for them.

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 precise verb and resource: 'Sufficiency verdict for a single control' and immediately distinguishes it from the whole-model rollup by naming get_verification_report. It also explains the verdict semantics (status plus freshness) and the concrete use case of diagnosing a control stuck at partially_verified, so an agent can tell exactly what this tool is for.

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 explicitly says when to use this tool ('focused check on one control after submitting assertions') and when not to ('for the whole-model rollup... use get_verification_report instead'). It also names the sibling get_control_work_order for the per-clause work list and gives actionable follow-ups (submit_assertions, refine_control), so usage context and alternatives are fully specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools