Skip to main content
Glama

Trace Connection

trace_connection
Read-onlyIdempotent

Trace how two named things in the planning record connect, and report how specific that connection is. Give from and to for the shortest route between them; give from alone to rank what one actor connects to; give neither to rank the corpus's most specific connections. Endpoints are entity, meeting, or named-pattern slugs; list_entities, list_meetings and list_patterns discover them.

Routes run over the three layers where a shared node is a specific claim: meeting attendance transcribed from agendas and minutes (249 references across 78 meeting records; a meeting record holds a median of 3 entities and at most 12), peer claims authored on an entity dossier (162 links, 44 of them stated on both dossiers), and shared named patterns (58 references across 15 patterns; a pattern holds a median of 2 entities and at most 10). That substrate is 161 nodes and 469 links over 68 entities, in one connected component. Place, corridor, brief and watch links serve here as filters and citations rather than as routes: the us-27-south-lake node alone carries 117 links, so a route through it would hold for nearly every pair in the corpus.

Hop count is a result here rather than an input. Across the full frontmatter graph, 94.5% of entity pairs already sit within two steps and a three-step expansion reaches a median of 235 of 243 nodes, so depth returns the corpus rather than an answer. What discriminates is the degree of the WIDEST node a route passes through, and the ranking leads on it: a route is only as specific as its least specific waypoint. Two more measured properties travel with every row: how many equally-short routes exist (uniqueness runs 65% at two hops, 40% at three, 14% at four), and whether the two endpoints are minuted in disjoint jurisdictions, which 15 of 68 entities are positioned to be. interior_degrees carries every degree on the chain so you can re-rank on any of them, and provenance says whether the whole join rests on the meeting record, on a curator’s hand, or on both.

Filter with evidence to choose which layers may carry a hop, crossing to keep only pairs minuted in different jurisdictions, and exclude_published to keep only pairs the observatory’s own briefs have not already put together. Every response reports how many of the 2,278 possible entity pairs the filters matched, splits them by provenance, and accounts for the rest, so a query that discriminated nothing says so in its own output. Note one interaction the response also states: two entities minuted in one room share that room’s jurisdiction, so crossing: "jurisdiction" holds no two-hop minuted route, and the minuted routes that satisfy it run three hops or more.

What it leaves undetermined, stated on every call: vote outcomes and dispositions, which live in meeting prose and item tables; direction and sequence, since a route is co-occurrence in a record; and the 347 of 425 meeting records not yet linked to an entity, where what the tool covers is what has been curated. In from and sweep modes, rows that share a chain of intermediaries collapse to one finding, which names the rest of its roster in route_also_joins. Pair with describe_entity for a node’s full dossier, describe_meeting for the room itself, and semantic_search for prose.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
toNoThe other endpoint, drawn from the same three vocabularies as `from`. Supplying `to` without `from` is accepted and read as `from`, because the graph is undirected; the response echoes that as query.normalized_as.
fromNoOne endpoint slug, resolved in order against entities, meetings, then named patterns: the three vocabularies in which a shared node is a specific claim. No slug is shared between them on the deployed corpus, so a bare slug resolves unambiguously and needs no type prefix (e.g., "tara-tedrow", "minneola-pz-2025-01", "self-storage-canary"). Omit both endpoints to rank the whole corpus.
limitNoHow many connections to return. It caps connections; routes within one connection are shown five at a time in pair mode and one at a time in from and sweep modes, and `routes_shown` beside the exact `shortest_path_count` names how many. A value outside 1–25 is refused rather than clamped, so selectivity.returned always agrees with what you asked for.
crossingNo"any" ranks every matching pair. "jurisdiction" keeps only pairs whose record-backed jurisdiction footprints are disjoint and both present, computed from the jurisdiction on each minuted meeting rather than from an authored place list.any
evidenceNoWhich layers may carry a hop. "minuted" = attendance transcribed from an agenda or minutes; "authored" = a peer claim stated on an entity dossier; "named_pattern" = two entities listed as exhibits of one named pattern. This is the substrate choice and the largest single lever on the answer: a restricted set fragments the graph (minuted alone is 5 components), and the response reports substrate.components and a fragmentation note rather than returning a bare no_path.
exclude_publishedNotrue keeps only the pairs the observatory's own briefs have yet to put together, tested against the union of an entity's appears_in_briefs and the briefs that name it.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYes
limitsYesAssembled per call. The coverage line is always first: absence in this tool is absence of curation.
no_pathNoPair mode only, when the endpoints are unreachable on the chosen layers. Null everywhere else, including in pair mode when a route exists.
rankingYesThe sort rule, verbatim, labelled a judgement call. Every integer behind it is in each row.
coverageYesWhat the corpus covers, plus what the graph covers: meetings linked to entities against meetings in corpus, jurisdictions linked against jurisdictions in corpus, and the per-jurisdiction breakdown.
tie_noteNoA sentence, present when the cut at `limit` lands inside a band of connections that tie on widest-node degree, hop count and path count, naming the band, its size, and that order within it falls back to slug.
substrateYesThe graph the routes ran over, for the evidence layers this call selected.
calibrationYesMeasured background rates for the chosen evidence layers: what to read a row against.
connectionsYes
selectivityYesHow much of the population the filters kept: the tool grading its own discrimination.
declared_directNoFrom and sweep modes: one-hop authored pairs, unscored, as slug pairs; describe_entity already returns each one in its dossier context.
declared_direct_noteNoPresent whenever declared_direct carries a row: the call that reads any of them in full.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / evidence / description
      Previous value: -"Which layers may carry a hop. \"minuted\" = attendance transcribed from an agenda or minutes; \"authored\" = a peer claim stated on an entity dossier; \"named_pattern\" = two entities listed as exhibits of one named pattern. This is the substrate choice and the largest single lever on the answer: a restricted set fragments the graph (minuted alone is 6 components), and the response reports substrate.components and a fragmentation note rather than returning a bare no_path."New value: +"Which layers may carry a hop. \"minuted\" = attendance transcribed from an agenda or minutes; \"authored\" = a peer claim stated on an entity dossier; \"named_pattern\" = two entities listed as exhibits of one named pattern. This is the substrate choice and the largest single lever on the answer: a restricted set fragments the graph (minuted alone is 5 components), and the response reports substrate.components and a fragmentation note rather than returning a bare no_path."
    • changedOutput schema / properties / selectivity / properties / of_possible / description
      Previous value: -"The candidate pairs this call's arity put in scope: one in pair mode, 68 from a named entity, 2,346 across the corpus."New value: +"The candidate pairs this call's arity put in scope: one in pair mode, 67 from a named entity, 2,278 across the corpus."
  2. Changed17 schema fields changed
    • changedInput schema / properties / crossing / description
      Previous value: -"\"any\" ranks every matching pair. \"jurisdiction\" keeps only pairs whose record-backed jurisdiction footprints are disjoint and both present — computed from the jurisdiction on each minuted meeting rather than from an authored place list."New value: +"\"any\" ranks every matching pair. \"jurisdiction\" keeps only pairs whose record-backed jurisdiction footprints are disjoint and both present, computed from the jurisdiction on each minuted meeting rather than from an authored place list."
    • changedInput schema / properties / exclude_published / description
      Previous value: -"true keeps only the pairs the observatory's own briefs have yet to put together — tested against the union of an entity's appears_in_briefs and the briefs that name it."New value: +"true keeps only the pairs the observatory's own briefs have yet to put together, tested against the union of an entity's appears_in_briefs and the briefs that name it."
    • changedInput schema / properties / from / description
      Previous value: -"One endpoint slug, resolved in order against entities, meetings, then named patterns — the three vocabularies in which a shared node is a specific claim. No slug is shared between them on the deployed corpus, so a bare slug resolves unambiguously and needs no type prefix (e.g., \"tara-tedrow\", \"minneola-pz-2025-01\", \"self-storage-canary\"). Omit both endpoints to rank the whole corpus."New value: +"One endpoint slug, resolved in order against entities, meetings, then named patterns: the three vocabularies in which a shared node is a specific claim. No slug is shared between them on the deployed corpus, so a bare slug resolves unambiguously and needs no type prefix (e.g., \"tara-tedrow\", \"minneola-pz-2025-01\", \"self-storage-canary\"). Omit both endpoints to rank the whole corpus."
    • changedOutput schema / properties / calibration / description
      Previous value: -"Measured background rates for the chosen evidence layers — what to read a row against."New value: +"Measured background rates for the chosen evidence layers: what to read a row against."
    • changedOutput schema / properties / connections / items / properties / evidence_used / description
      Previous value: -"The union of layers across ALL shortest routes between these two — the honest scope for a row that reports how many of them there are. The representative route’s own layers are on its hops."New value: +"The union of layers across ALL shortest routes between these two: the honest scope for a row that reports how many of them there are. The representative route’s own layers are on its hops."
    • changedOutput schema / properties / connections / items / properties / routes / items / properties / hops / items / properties / basis / description
      Previous value: -"A sentence naming what kind of knowing this hop is — a record, an authored claim, or a curated grouping."New value: +"A sentence naming what kind of knowing this hop is: a record, an authored claim, or a curated grouping."
    • changedOutput schema / properties / connections / items / properties / undetermined / description
      Previous value: -"Read across all shortest routes, matching evidence_used — a row that reports eight routes and qualifies one would under-report what it leaves open."New value: +"Read across all shortest routes, matching evidence_used. A row that reports eight routes and qualifies one would under-report what it leaves open."
    • changedOutput schema / properties / connections / items / properties / widest_node / description
      Previous value: -"The WIDEST node the route passes through, named rather than scored — the primary ranking key, and exactly the narrowest such node any shortest route achieves. Computed by a dynamic program over the whole predecessor DAG, so it is exact however many routes are displayed. Null at one hop."New value: +"The WIDEST node the route passes through, named rather than scored. It is the primary ranking key, and exactly the narrowest such node any shortest route achieves. Computed by a dynamic program over the whole predecessor DAG, so it is exact however many routes are displayed. Null at one hop."
    • changedOutput schema / properties / declared_direct / description
      Previous value: -"From and sweep modes: one-hop authored pairs, unscored, as slug pairs — describe_entity already returns each one in its dossier context."New value: +"From and sweep modes: one-hop authored pairs, unscored, as slug pairs; describe_entity already returns each one in its dossier context."
    • changedOutput schema / properties / declared_direct / items / properties / authored_on / description
      Previous value: -"The dossiers carrying the reference — one slug for a one-way claim, both for a reciprocal one."New value: +"The dossiers carrying the reference: one slug for a one-way claim, both for a reciprocal one."
    • changedOutput schema / properties / no_path / properties / fragmentation_note / description
      Previous value: -"Present when the chosen layers fragment the substrate — a full-substrate retry may join the two."New value: +"Present when the chosen layers fragment the substrate; a full-substrate retry may join the two."
    • changedOutput schema / properties / query / properties / mode / description
      Previous value: -"Set by arity — both endpoints, one, or neither. The scoring path is identical in all three."New value: +"Set by arity: both endpoints, one, or neither. The scoring path is identical in all three."
    • changedOutput schema / properties / selectivity / description
      Previous value: -"How much of the population the filters kept — the tool grading its own discrimination."New value: +"How much of the population the filters kept: the tool grading its own discrimination."
    • changedOutput schema / properties / selectivity / properties / by_provenance / description
      Previous value: -"Matched pairs by how the join is known. A zero on `record` says a filter has excluded the evidentiary layer — which `crossing: \"jurisdiction\"` does at two hops."New value: +"Matched pairs by how the join is known. A zero on `record` says a filter has excluded the evidentiary layer, which `crossing: \"jurisdiction\"` does at two hops."
    • changedOutput schema / properties / selectivity / properties / distinct_routes / description
      Previous value: -"Distinct chains of intermediaries among the matched pairs — findings behind pairs."New value: +"Distinct chains of intermediaries among the matched pairs: findings behind pairs."
    • changedOutput schema / properties / selectivity / properties / of_possible / description
      Previous value: -"The candidate pairs this call's arity put in scope — one in pair mode, 68 from a named entity, 2,346 across the corpus."New value: +"The candidate pairs this call's arity put in scope: one in pair mode, 68 from a named entity, 2,346 across the corpus."
    • changedOutput schema / properties / tie_note / description
      Previous value: -"A sentence, present when the cut at `limit` lands inside a band of connections that tie on widest-node degree, hop count and path count — naming the band, its size, and that order within it falls back to slug."New value: +"A sentence, present when the cut at `limit` lands inside a band of connections that tie on widest-node degree, hop count and path count, naming the band, its size, and that order within it falls back to slug."
  3. Added

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only cover read-only/idempotent/closed-world safety, yet the description discloses the ranking logic (widest-waypoint degree), uniqueness and provenance columns, filter interactions (crossing holds no two-hop minuted route), fragmentation reporting instead of bare no_path, and explicit undetermined areas (vote outcomes, direction, the 347 unlinked meeting records). This is far beyond the structured fields.

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?

Purpose and the three modes are front-loaded, and the paragraphs are cleanly ordered (modes, substrate, ranking rationale, filters, limits). It is dense and carries a large volume of corpus statistics that push length well past what tool selection strictly requires, but little is truly redundant.

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 complex, filter-heavy graph tool with a rich output schema, the description supplies the substrate model, ranking semantics, filter interactions, and honest capability limits. An agent has everything needed to call it correctly; return-value detail is rightly left to the output schema.

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 genuine meaning: evidence is named 'the largest single lever' with fragmentation consequences, crossing's jurisdiction interaction is explained, limit's refuse-not-clamp behavior is stated, and undirected `to`/`from` normalization is called out. It goes past restating the 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?

States a specific verb+resource (trace how two named things connect, report specificity) and immediately enumerates the three operating modes (from+to, from alone, neither). It is clearly distinguishable from the sibling describe_*/list_* tools, which return dossiers and inventories rather than routes.

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 maps each invocation shape to its purpose ('Give from and to for the shortest route... from alone to rank... neither to rank the corpus'), and names the alternatives (describe_entity, describe_meeting, semantic_search) with the case each serves. When-to-use is fully spelled out.

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