Skip to main content
Glama
Mipiti
by Mipiti

model_coherence_report

Static-analysis report on coherence between the model's component declarations, the code-binding strings on its controls and assertions, and the structural reachability of every CO.

Instructions

Static-analysis report on coherence between the model's component declarations, the code-binding strings on its controls and assertions, and the structural reachability of every CO.

Pass co_id to scope the report to findings carrying that CO id (the co_* reachability findings + the attestation cross-link findings). Component- and assertion-level findings without a CO binding are excluded in single-CO mode. 404 if the CO doesn't exist on the model.

The report carries up to twelve finding types, grouped below by concern. Each finding includes the entity IDs it concerns (co_id, asset_id, attacker_id, component_id, etc.) so the agent can dispatch the resolution tool directly without re-fetching the model.

Component / assertion bindings:

  • control_component_unknown — control references a component ID that no longer exists. Resolve: assign_to_components (target_type="control").

  • asset_component_unknown — asset references a missing component. Resolve: edit_asset (with corrected component_ids).

  • assertion_repo_mismatch — an assertion's repo does not match the repo_url of any component scoping its control. Resolve: rebind the assertion or rescope the control.

  • assertion_repo_orphan — an assertion has a repo but its control is unscoped. Resolve: assign_to_components (target_type="control") to scope the control, or correct the assertion's repo.

  • control_unscoped_with_scoped_assertions — control is unscoped, but its assertions all carry a single component's repo. Resolve: assign_to_components (target_type="control") to that component.

  • component_unbound — a component has no repo_url. Two cases, told apart by the component's trust boundary. An internal-zone component (your own code) that isn't linked yet: resolve with edit_component pointing at the real repo. An external-zone component (e.g. a third-party service, the customer's IdP, or other external infrastructure you call but don't own): leave it unbound — the finding is a permanent, auditor-visible external- dependency marker, NOT a TODO. Never bind an external component to your repo to silence this; "some client code touches it" is not a reason to bind (that client code lives in your repo for every dependency).

Reachability findings (deterministic composer; indeterminate verdicts surface as findings, never auto-decided by an LLM):

  • co_attacker_unpositioned — the CO's attacker has no positioned trust boundaries. Resolve: edit_attacker (set trust_boundary_ids), or add_assumption with a structured exclusion predicate.

  • co_asset_unbounded — the CO's asset has no component-derived trust boundaries. Resolve: assign_to_components (target_type="asset"), edit_asset (with component_ids), or add_assumption with a structured exclusion.

  • co_no_shared_boundary — attacker and asset boundaries do not intersect. Resolve: re-position the attacker via edit_attacker, scope the asset to a shared component via assign_to_components (target_type="asset"), or add_assumption with a structured exclusion.

  • co_missing_entity — the CO references a missing asset/attacker; model state inconsistent. Resolve: restore the entity (restore_entity (entity_type="asset") / restore_entity (entity_type="attacker")) or remove the orphaned CO via refine_threat_model.

Use this before relying on component-scoped control discovery, when assertion verification fails for path/repo reasons, or to enumerate structural-completeness gaps the operator should address before treating the model as audit-ready. get_reachability_verdicts exposes the underlying composer verdicts directly when the finding-shape summary isn't enough.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
co_idNoOptional CO id to scope the report to a single CO.
model_idYesID of the threat model.
server_versionYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full transparency burden and does so thoroughly: it explains single-CO scoping exclusions, 404 behavior, deterministic composer behavior, that indeterminate verdicts are surfaced as findings rather than LLM-decided, and that external-component unbound findings are permanent markers, not TODOs.

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?

Although long, the description is front-loaded with a one-sentence summary and then uses scannable grouped bullets for each finding type with corresponding resolution tool. Every section adds operational value—scoping, finding semantics, remediation routing, and usage conditions—so the length is justified.

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—12 finding types across multiple concerns—the description is complete: it covers scoping behavior, error semantics, finding structures, entity-ID availability, remediation routing, and relationships to sibling tools. The presence of an output schema reduces the need to specify return formatting in prose.

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 already describes co_id and model_id (67% coverage); the description adds substantial co_id semantics—which finding families are included, what is excluded in single-CO mode, and the 404 condition. server_version remains undocumented in both schema and description, so this is not a perfect 5.

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 statement: it is a static-analysis report on coherence between component declarations, code-binding strings, and structural reachability of every CO. It clearly distinguishes itself from siblings by naming get_reachability_verdicts as the lower-level alternative and enumerates concrete finding types.

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?

Explicitly says when to use: before relying on component-scoped control discovery, when assertion verification fails for path/repo reasons, or to enumerate structural-completeness gaps. It also tells when to prefer get_reachability_verdicts instead, which is exactly the when-vs-alternative guidance the dimension asks for.

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

Install Server

Other Tools

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/Mipiti/mipiti-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server