Skip to main content
Glama

sim_canonical

Destructive

Tell whether two differently-labelled models are actually the same net: an isomorphism-invariant id computed from the model's EXACT automorphism orbits (orbits.go), not the colour-refinement (WL) kind sim_classify falls back to when the exact search can't decide. Two models differing only by renaming places or transitions share the same canonicalId even though their content-addressed ids (from sim_get_model) differ — this is the id to compare, not the model id, when checking whether a catalog already holds this net. Also returns the non-trivial automorphism orbits and generator count the id was computed from: zero generators means the net is rigid (no symmetry at all), which is itself a fact about the net's structure. Refuses (as a tool error) when the exact search exceeds its 200,000-leaf budget — too large or too symmetric for this implementation, per orbits.go — rather than silently falling back to a weaker answer; sim_classify's own fallback covers that case for classification specifically.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesmodel id

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true. The description adds substantial behavioral context beyond annotations: it returns non-trivial automorphism orbits and generator count, zero generators means rigid, and it refuses as a tool error rather than silently falling back when the exact search exceeds its budget. It also explains the relationship to content-addressed ids from sim_get_model. The only minor gap is that it doesn't explicitly state whether the operation mutates anything, but the annotations already cover destructiveHint=true, and the description's focus on computation and return values is consistent with that.

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 dense but every sentence earns its place: it defines the tool's purpose, distinguishes it from sim_classify, explains the relationship to sim_get_model, describes return values, and states the failure mode. It is front-loaded with the core purpose and scoping. It is somewhat long, but the complexity of the tool (exact vs WL isomorphism, fallback behavior, budget limit) justifies the length. No wasted words.

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 tool with one parameter, no output schema, and complex behavioral nuances, the description is complete. It covers what the tool returns (canonicalId, orbits, generator count), how to interpret the results (zero generators = rigid), when to use it vs alternatives, and when it fails (budget exceeded). An agent has everything needed to select and invoke this tool correctly.

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 100%: the only parameter 'id' is described as 'model id' in the schema. The description adds context by explaining that the model id from sim_get_model is not the id to compare, and that the canonicalId is the one to use. However, it doesn't add syntax or format details beyond what the schema provides. Baseline 3 is appropriate because the schema already documents the parameter fully.

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 states a specific verb ('Tell whether two differently-labelled models are actually the same net') and a specific resource (an isomorphism-invariant id computed from exact automorphism orbits). It clearly distinguishes itself from sim_classify by naming the exact vs colour-refinement (WL) distinction and the fallback behavior. An agent can tell this tool apart from sim_classify and sim_get_model without opening schemas.

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: compare canonicalId rather than model id when checking whether a catalog already holds a net. It also names the alternative (sim_classify) and the condition that selects it: sim_classify's fallback covers the case when the exact search can't decide, for classification specifically. It also states when the tool refuses (exceeds 200,000-leaf budget), which is a clear exclusion condition.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources