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 would spend more than its 1,000,000-step budget (refinement steps, about half a second) — 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. Costs 1 compute token (one search), as GET /api/models/{id}/canonical does. Equal canonical ids mean the same net under the comparison sim_prove uses for isomorphicTo; to get the place/transition bijection and record it as a witnessed edge, call sim_prove(subject, "isomorphicTo", object).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesmodel id

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Extraordinarily rich disclosure beyond the annotations: the 1,000,000-step budget, refusal-as-tool-error instead of silent fallback, cost of 1 compute token, and the meaning of the returned orbits/generator count (zero generators = rigid). The only gap is that it never reconciles the purely computational GET semantics it describes with the sibling annotations declaring destructiveHint=true and readOnlyHint=false, leaving the agent to guess whether hidden mutation occurs.

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?

Front-loaded with the core definition in the first clause, and nearly every sentence carries new information (orbits, budget, cost, witness path). It is dense and somewhat long-winded, with mild repetition around 'this is the id to compare, not the model id', but no filler sentences.

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?

With no output schema, the description takes on the burden of explaining returns and does so: the canonicalId, the non-trivial automorphism orbits, and the generator count, plus the error condition. An agent has everything needed to call it and interpret the result.

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?

Schema coverage is 100% so the baseline is 3, but the description adds real meaning by clarifying which identifier this is (a model id, explicitly not the content-addressed id and not the canonical id to compare against), which resolves a genuine ambiguity in the single 'id' parameter.

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?

States a precise verb+resource: it computes an isomorphism-invariant canonical id from exact automorphism orbits. It explicitly distinguishes itself from the colour-refinement (WL) approach of sim_classify and from content-addressed ids returned by sim_get_model, so an agent can tell it apart from siblings 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?

Gives explicit routing: 'this is the id to compare, not the model id, when checking whether a catalog already holds this net', names sim_classify's fallback as the alternative for classification, and points to sim_prove for the actual bijection/witness. When-to-use and when-to-use-something-else are both covered.

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