Skip to main content
Glama
testinsightconsulting

pickering-lxi-mcp

pickering-lxi-mcp

CI Project page License: MIT

An MCP server that lets an LLM agent route signals through Pickering PXI/LXI switching — by logical endpoint name, with the interlocks that make that safe to point at a real fixture.

The worked bench, racked: a Pickering 60-103D-001 LXI chassis with two 40-785C-521 SP6T multiplexers and a GP matrix, cabled between a Keysight N5182B MXG, a Keysight N9020B MXA, a VIAVI TestCenter SPT-N4U and the DUT

The worked bench, racked: real model numbers at their real rack heights, cabled exactly as the shipped rf_bench.json says, relay state mid-way through walkthrough 08. An illustration drawn from the topology, not a photograph. Project page →

Switching is the routing layer of a test rack. Every other instrument an agent might drive is reached through it, which makes it the one server a multi-vendor agent cannot do without, and the one where a mistake is not a wrong reading but a short.

It ships with an in-process chassis simulator, so git clone && pip install -e ".[dev]" && pytest exercises every code path with no hardware, no Pickering driver and no lab.

pip install -e ".[dev]"
pytest -q                                    # 170+ tests
pickering-lxi-mcp-walkthrough walkthroughs   # the CI gate
pickering-lxi-mcp                            # MCP server on stdio, simulated chassis

Against a real rack:

PICKERING_LXI_ADDRESS=192.168.1.50 pickering-lxi-mcp     # LXI chassis by IP
PICKERING_LXI_ADDRESS=PXI          pickering-lxi-mcp     # local PXI cards
PICKERING_LXI_TOPOLOGY=./my_bench.json pickering-lxi-mcp # your fixture map

Point any MCP client at it:

{ "mcpServers": { "switching": { "command": "pickering-lxi-mcp" } } }

Or run it as a network service and let several agents share the rack:

pickering-lxi-mcp --transport streamable-http --host 0.0.0.0 --port 8000
{ "mcpServers": { "switching": { "url": "http://lab-host:8000/mcp" } } }

The problem this is actually solving

On a programmable supply, the dangerous mistake is a number: 400 V where 4 V was meant. On a switching matrix, the dangerous mistake is a graph.

Nobody ever asks to short the supply to ground. They route the supply to a DUT pin — reasonable. Then they route that pin to ground for a continuity check — also reasonable. The short is the composition of two individually correct requests, and neither one looks wrong at the moment it is made. An agent that reasons one call at a time will make this mistake, and so will a tired engineer at 2am.

So this server does not ask "is this route forbidden". It asks: given every crosspoint closed right now, plus every crosspoint this route would close, plus the hard-wired patch leads, does any forbidden pair of endpoints end up in the same connected component? That question is answered before a relay moves, and a route that fails it is refused whole.

> route_signal  psu_pos -> dut_pin_a1        ok   matrix_a/sub1(1,1)
> route_signal  dmm_hi  -> dut_pin_a1        ok   matrix_a/sub1(6,1)     measuring under power is fine
> route_signal  gnd     -> dut_pin_a1        REFUSED
    this route would make 'psu_pos' and 'gnd' electrically common,
    which the topology forbids. Nothing was switched.
> route_signal  gnd     -> dut_pin_a5        ok   matrix_a/sub1(3,5)     same route, different pin

Related MCP server: Moku MCP Server

Waking up to a chassis someone else left switched

A chassis is not a blank sheet when a process starts. A previous run may have died holding a fixture live; another program may be using the rack. The route table comes back empty and the relays do not — and an empty model of a chassis that is not empty is worse than no model, because the interlock reasons from it confidently and will authorise the very short it exists to prevent.

So the server reads every subunit before it believes anything. If it finds crosspoints no route here owns, it refuses to switch until someone says what they are:

> route_signal  scope_ch1 -> dut_pin_a2
    ReconciliationError: 2 crosspoint(s) were already closed on this chassis when this
    server started, and no route here owns them: matrix_a/sub1(1,1), matrix_a/sub1(6,1).
    The fixture may be live. Call adopt_existing_state to keep that state and count it in
    every future interlock check, or clear_existing_state to open everything and start
    from a known-safe chassis. Observation works meanwhile.

Observation is never gated here either — you cannot decide what to do about a fixture you are not allowed to look at. adopt_existing_state switches nothing; it moves those crosspoints into the set every later check reasons over, so a route that would compose a short with state this process never created is refused exactly as if it had. And a fixture that is already shorted cannot be adopted at all, because making a violation the baseline is the one outcome worse than refusing to serve — for that, clearing is the way out.

Logical endpoints, not crosspoints

A test engineer does not think in crosspoints; they think connect the DMM to thermocouple 1. The topology file is the map from those names to physical lines, plus the patch leads between cards. Routing is then a shortest-path search over that graph, and the answer is an ordered list of switch operations.

"endpoints": {
  "dmm_hi": { "card": "matrix_a", "subunit": 1, "line": "row",    "index": 6 },
  "tc_1":   { "card": "mux_b",    "subunit": 1, "line": "column", "index": 1 }
},
"links": [                          // a patch lead: known about, never switched
  [ { "card": "matrix_a", "subunit": 1, "line": "column", "index": 13 },
    { "card": "mux_b",    "subunit": 1, "line": "row",    "index": 1  } ]
]

plan_route dmm_hi -> tc_1 returns two closures across two cards, and says whether the interlocks would allow it — without switching anything, and without taking the chassis. It is the first tool an agent should reach for.

Three consequences worth naming:

Routes are reference counted. Two routes through the same matrix will legitimately share a crosspoint. Tearing one down must not open a crosspoint the other is still holding up, so unroute_signal reports what it opened and what it retained.

The plan is computed before anything is switched. A router that closes crosspoints as it discovers them cannot be refused half way. This one can be refused whole, and a route that fails mid-flight is rolled back.

A topology is a claim about the rack. verify_topology checks it against what the chassis actually reports — which is trivially true on the simulator, and is exactly what catches a topology written for last quarter's rack.

Anatomy of a switch topology

A fully worked bench — real model numbers, cabling schedule, the four network planes and a validated topology — is in docs/EXAMPLE-BENCH.md.

Terms used precisely here — fabric domain, unowned crosspoint, endpoint, reservation as distinct from lease — are defined with worked examples in GLOSSARY.md.

The two patterns

Both are argued at length in PATTERNS.md.

1. Read/observe and mutating tools are separate tiers, structurally. Every tool declares a tier. tools.call is the single dispatch point and refuses a MUTATE tool without a live reservation token. Observation is never gated — you can always read a chassis someone else is using. There is no passthrough onto the vendor driver, and a test asserts there never will be:

FORBIDDEN = {"send", "write", "raw", "exec", "command", "opbit", "opcrosspoint", "driver", ...}

def test_no_raw_driver_passthrough_is_exposed():
    for name in tools.REGISTRY:
        assert not (set(name.lower().split("_")) & FORBIDDEN), name

2. Deterministic tool walkthroughs are the hard CI gate. A walkthrough is an ordered list of tool calls and expected results, expressed as data, run against the simulator. expect_error is the half that matters most: a switching server's job is as much refusing as connecting.

PASS  recovery: a chassis found already switched is not a chassis this server will switch
  ok  found      2 crosspoints, owned by nobody   -> reconciled: false
  ok  noarm      arm_interlock                    -> ReconciliationError
  ok  untouched  still exactly 2 closed
  ok  adopt      adopt_existing_state             -> adopted, nothing switched
  ok  short      gnd -> dut_pin_a1                -> InterlockError  (against adopted state)
  ok  normal     scope_ch1 -> dut_pin_a2          -> open

PASS  interlocks: the short is refused as a graph, not as a request, and the fixture is left untouched
  ok  unarmed    route before arming             -> InterlockError
  ok  clean1     nothing closed after refusal    -> 0 crosspoints
  ok  badarm     arm with confirm="yes"          -> InterlockError
  ok  psu        psu_pos -> dut_pin_a1           -> open
  ok  measure    dmm_hi  -> dut_pin_a1           -> open      (measuring under power)
  ok  short      gnd     -> dut_pin_a1           -> InterlockError
  ok  intact     still exactly 2 crosspoints closed
  ok  excl       psu_pos -> dut_pin_a2           -> InterlockError  (exclusive endpoint)
  ok  tc2        second mux channel              -> InterlockError  (closure limit of 1)
  ok  held       opening a crosspoint a route needs -> InterlockError

Tool surface

Tool

Tier

Purpose

chassis_identify

observe

Backend, driver, topology, current status

list_cards

observe

Cards, subunits, matrix sizes, closure limits

list_endpoints

observe

The logical names this topology can route between

list_fabric_domains

observe

The independently leasable units, and what a lease over given endpoints must cover

list_routes

observe

Connections currently held open

plan_route

observe

Dry run: crosspoints a route would close, and whether it is permitted

subunit_state

observe

Every closed crosspoint on one subunit

crosspoint_state

observe

One crosspoint, and which routes are holding it

interlock_status

observe

Armed or not, and the policy in force

reconciliation_status

observe

What was found already closed at startup, and what it breaks

verify_topology

observe

The topology's claims vs what the chassis reports

reserve_chassis

observe

Take a time-boxed reservation; returns the token

list_tool_tiers

observe

Let an agent plan before it reserves

adopt_existing_state

mutate

Keep crosspoints found at startup; count them in every later check

clear_existing_state

mutate

Open what was found and begin from a known chassis

arm_interlock

mutate

Explicit acknowledgement before any relay moves

disarm_interlock

mutate

Stop new routing; leave existing routes up

route_signal

mutate

Connect two endpoints by the shortest switch path

unroute_signal

mutate

Tear one route down, reference counted

clear_all_routes

mutate

Open everything, forget everything

set_crosspoint

mutate

Direct control, still bounds- and interlock-checked

release_chassis

mutate

Clear routes, disarm, release the reservation

Chassis lifecycle: connect → reconcile → discover → reserve → arm → route → observe → unroute → release. Releasing tears the fixture down, because an agent that crashes mid-run must not leave a bench live.

Arming takes a literal acknowledgement — confirm="the fixture is safe to energise" — rather than a boolean, because a boolean is something a model fills in from context and a fixed string is something it has to mean.

Configuration

Variable

Default

Meaning

PICKERING_LXI_ADDRESS

(unset)

LXI unit IP, or PXI for local cards. Unset means the in-process simulator.

PICKERING_LXI_TOPOLOGY

dut_bench

Path to your fixture map, or the name of a bundled one (dut_bench, rf_bench)

PICKERING_LXI_SIM_CARD

0

Ask the vendor driver for simulated cards (DriverModes.SIM_CARD)

PICKERING_LXI_PORT

1024

ClientBridge port

PICKERING_LXI_TIMEOUT_MS

5000

Session timeout

The default is the simulator on purpose: the interesting failure mode is a server that silently reaches for a rack, not one that refuses to.

Where the pieces run

Flag / variable

Default

Meaning

--transport / PICKERING_LXI_TRANSPORT

stdio

stdio, streamable-http or sse

--host / PICKERING_LXI_HTTP_HOST

127.0.0.1

HTTP bind address

--port / PICKERING_LXI_HTTP_PORT

8000

HTTP port

--path / PICKERING_LXI_HTTP_PATH

/mcp

HTTP endpoint path

--stateless-http / PICKERING_LXI_STATELESS_HTTP

off

Each HTTP request stands alone at the MCP protocol level

Three deployments, and the only thing that actually constrains them is where the switching driver has to live:

One workstation, stdio. The MCP client launches this server as a subprocess, so agent, client and server share a host. The chassis need not: an LXI unit is reached over IP, so PICKERING_LXI_ADDRESS=192.168.1.50 works from any host on that network. This is the right shape for one engineer at one bench.

Lab-side service, streamable HTTP. The server runs near the rack and agents connect over the network from wherever they are. This is the shape that matters once more than one agent, or more than one person, needs the same fixture.

Local PXI cards. PICKERING_LXI_ADDRESS=PXI means the ClientBridge driver is talking to cards in the chassis this process is running in, so the server must run on the PXI controller itself. Everything above it can still be remote — run it there with --transport streamable-http and the agents stay wherever they are.

One process serves one chassis. There is a single chassis session shared by every client of the process, because there is a single set of physical relays, and the reservation is what arbitrates between callers. Over stdio that is mostly bookkeeping; over HTTP it is doing the job it was built for:

agent-a  reserve_chassis                    -> token 8fa0a571
agent-b  reserve_chassis                    -> ReservationError: chassis is reserved by 'agent-a'
agent-b  list_routes                        -> ok            (observation is never gated)
agent-a  route_signal psu_pos -> dut_pin_a1 -> open
agent-b  route_signal gnd     -> dut_pin_a1 -> InterlockError: would make 'psu_pos' and 'gnd'
                                                electrically common
agent-b  subunit_state matrix_a/1           -> closed_count = 1   (one rack, one truth)

A second chassis is a second process on a second port, not a second session in this one.

There are two distinct kinds of simulation here, and they answer different questions. SimBackend (the default) is an in-process state machine — no vendor software required, runs in CI, answers is the routing logic right. PICKERING_LXI_SIM_CARD=1 runs the real ClientBridge driver against cards that are not in the rack — answers is the driver integration right. Use both, in that order.

Hardware support needs the vendor wrapper and the Pickering software suite installed:

pip install "pickering-lxi-mcp[hardware]"     # adds pilxi

pilxi imports fine without the driver; only opening a session needs it. That is deliberate — the package installs, imports, tests and runs on a laptop with no Pickering software on it at all.

Layout

src/pickering_lxi_mcp/
  driver.py        Backend protocol; SimBackend (state machine) + PilxiBackend (ClientBridge)
  topology.py      endpoints, patch leads, the switch graph, shortest-path routing
  interlocks.py    the connectivity check, closure ceilings, exclusive endpoints
  session.py       reservations, the mutation gate, reference-counted routes, a journal
  tools.py         typed tool registry with tiers; the single dispatch point
  walkthrough.py   the deterministic runner
  server.py        thin MCP binding — every tool body is one call into tools.call
  topologies/      dut_bench.json, the worked example
walkthroughs/      the gate, as data
docs/              the worked bench, its figures, and the scripts that draw them
site/              the project page; .github/workflows/pages.yml publishes it

The MCP tool bodies are deliberately one line each. The server, the tests and the walkthroughs all go through tools.call, so a green walkthrough is evidence about the server rather than about a parallel test-only implementation.

Scope

Written from scratch against the public pilxi wrapper and the ClientBridge API surface it documents. The simulator, the example topology and the endpoint names are invented for this repository — no employer or client code, configuration, rack inventory, fixture map or customer name appears anywhere in it. The example bench is a generic matrix-plus-multiplexer arrangement, sized to make the patterns concrete without modelling any particular product.

Where the simulator and a real card disagree, the simulator is wrong and gets fixed.

MIT licensed.

Available Tools

18 tools
arm_interlockC

Arm the chassis interlock. confirm must be exactly 'the fixture is safe to energise'.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
confirmYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. It discloses that an exact confirmation phrase is required, but it does not explain the effects of arming, safety implications, preconditions, or what state changes occur.

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?

The description is two short sentences with no wasted words. The core action is front-loaded, and the critical confirmation constraint is stated concisely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a safety-related state-changing tool, the description omits important context such as token provenance, preconditions, and consequences of arming. The output schema may cover return values, but the missing operational context makes the tool difficult to invoke reliably.

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 0%, so the description must compensate. It clearly defines the required literal value for confirm, but the token parameter remains completely unexplained, leaving a significant gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Arm the chassis interlock.' This is clear and distinct from siblings such as disarm_interlock and interlock_status, though it does not explicitly differentiate itself by name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives like disarm_interlock or interlock_status. The confirmation phrase is a parameter constraint rather than usage context, so the agent is left to infer the appropriate scenario.

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

chassis_identifyA

Backend, driver, topology and current chassis status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral disclosure burden. 'Status' and the tool name 'identify' imply a non-mutating read, but the description never explicitly states that it makes no changes, requires no special context, or has no side effects.

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 extremely concise and scannable, using only one short phrase with no filler. It would benefit from being a complete sentence with a verb, but it is not bloated or repetitive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with an output schema, the description is mostly workable: it says what domain the output covers. However, it lacks an explicit read-only statement and does not help the agent choose this tool over topology- or status-related siblings, leaving some contextual ambiguity.

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 has zero parameters, so there are no parameter semantics for the description to add. The baseline of 4 applies; the description does not mislead about any arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names concrete content areas ('Backend, driver, topology and current chassis status') so an agent can tell it is about chassis identification/status, not just a tautology. However, it lacks a verb such as 'get' or 'retrieve,' and it does not explicitly distinguish the tool from siblings like verify_topology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this tool is for reading chassis status/identity from the listed fields. There is no explicit 'use when' guidance, no mention of alternatives, and no exclusions, so the agent is left to reason about when it is preferred over related tools.

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

clear_all_routesA

Open every crosspoint on every card and forget all routes.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

No annotations are present, so the description carries the burden of disclosing side effects. It clearly states that the operation affects every card and destroys all routes, making the destructive and broad nature transparent. It could add an explicit irreversibility warning, but the core behavior is disclosed.

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?

The description is one concise sentence, front-loaded with the primary action and scope. Every word contributes meaning, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a global destructive tool, the description names the complete scope and both effects in a single sentence. An output schema exists, so return-value details need not be covered. It stops short of adding explicit caution or operational context, but nothing critical is missing for correct invocation.

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?

The schema defines only a required 'token' string with no description, and the description does not discuss parameters. However, with a single self-explanatory authentication token, the lack of parameter explanation is not a practical obstacle for the agent.

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 uses a specific verb ('Open'), states the full scope ('every crosspoint on every card'), and adds a second clear effect ('forget all routes'). This distinguishes it from siblings like set_crosspoint or unroute_signal, which target individual elements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The wording 'every card' and 'all routes' implies a global reset, but the description never explicitly states when to use this tool versus individual operations like unroute_signal or set_crosspoint. Some guidance is inferable from the global scope, so it is not completely absent.

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

crosspoint_stateC

Whether one crosspoint is closed, and which routes are holding it.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowYes
cardYes
columnYes
subunitYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It reveals two outputs but does not state that this is a read-only/non-mutating operation, nor does it describe error behavior, empty-route behavior, or what happens with invalid coordinates. For a state query, this leaves important behavioral context unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is short and has no filler, and the key reported information is front-loaded. However, the description is so terse that it reads as under-specification rather than deliberate conciseness, leaving important invocation details out.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With four required, fully undocumented parameters and zero annotations, this one-sentence description is not enough for reliable invocation. The output schema may clarify return shape, but the agent still lacks parameter semantics, usage guidance, and behavioral expectations. The description only tells what the tool reports, not how or when to call it safely.

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

Parameters1/5

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

Schema description coverage is 0%, and the description adds no meaning to the four required parameters: card, subunit, row, and column. It does not explain how these identify a crosspoint, what formats or ranges are valid, or what card/subunit refer to. The word 'crosspoint' only repeats the tool name and does not compensate for the undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific query intent ('whether one crosspoint is closed') and names the resource and a second output ('which routes are holding it'). It is distinguishable from mutating siblings like set_crosspoint and route_signal, although it does not explicitly use a verb like 'gets' or 'returns'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use, when-not-to-use, or alternative guidance. The description does not mention set_crosspoint, route_signal, or list_routes as related tools, nor does it state any preconditions such as requiring a known card or reserved crosspoint. The status-query phrasing implies a use case, but the agent is not told how to choose among siblings.

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

disarm_interlockA

Disarm the interlock. Routes already open stay up; no new ones can be made.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of disclosure. It clearly states the two core behavioral effects: existing open routes are not disturbed, and no new routes can be created. It does not cover reversibility or authorization details, but the main side effects are transparent.

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?

The description consists of two short, front-loaded sentences with no filler. The main action is stated first, and the clarifying behavioral note is concise. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the routing effects but omits the meaning of the required token parameter and does not mention how the operation can be reversed. While the output schema may cover return values, the missing parameter semantics and lack of annotations leave an agent with a meaningful gap for a state-changing tool.

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

Parameters1/5

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

The schema has one required parameter, 'token', with 0% description coverage, and the tool description never mentions it. The agent is left to guess whether the token is an auth credential, a resource identifier, or something else. With such low schema coverage, the description needed to compensate and did not.

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 and resource: 'Disarm the interlock.' The second sentence clarifies the operational effect—existing routes remain, new routes are blocked—which makes the tool's role clear and distinguishes it from siblings like arm_interlock and interlock_status without needing their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when you want to stop new routes from being created while keeping current routes up. However, it does not explicitly state when not to use it or point to alternatives like arm_interlock or clear_all_routes, so the guidance remains implied rather than explicit.

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

interlock_statusB

Whether the interlock is armed, and the safety policy in force.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations provided, the description must carry the behavioral transparency burden itself. The phrase 'whether the interlock is armed' strongly implies a read-only status inspection with no side effects, but it never explicitly states that. It also does not disclose permission requirements, error behavior, or whether the tool reflects a cached or live state.

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 a single compact phrase with no filler or redundancy. It front-loads the core subject and is easy to scan. A complete sentence with a verb would be slightly more polished, but the current wording is acceptable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there are no parameters and an output schema exists, the description does not need to explain return values. Still, it leaves the domain largely unexplained: what an 'interlock' is, what it means for it to be 'armed', and what kinds of safety policies are possible. The sibling names help, but the description alone is minimal rather than fully self-sufficient.

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?

This tool has zero parameters and an empty input schema, so the baseline is 4. The description adds useful meaning by explaining what the status output covers, which is all that parameter semantics could require here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a status query reporting two specific facts: whether the interlock is armed and which safety policy is in force. It is obviously distinct from sibling tools like arm_interlock and disarm_interlock because it describes inspection rather than mutation. However, it lacks an explicit verb such as 'returns' or 'reports', so it is clear but not maximally precise.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance about when to call this tool versus alternatives such as arm_interlock or disarm_interlock. It does not state whether it should be called before changing interlock state, nor does it mention any conditions under which it should be avoided.

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

list_cardsA

Every open card with its subunits, matrix sizes and closure limits.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

The description implies a read-only enumeration by using 'list' and describing the output, but it does not explicitly disclose side effects, ordering, staleness, or access requirements. With no annotations, more explicit behavioral context would have been helpful, though the read-only nature is reasonably inferable.

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?

The description is a single concise phrase with no filler words. It is front-loaded with the core entity ('open card') and immediately lists the included attributes, making it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with an output schema, the description adequately covers what is returned and the scope ('every open card'). Some domain terms like 'open card' and 'closure limits' could be more explicit, but the output schema can fill in return-shape details, and no parameters require further explanation.

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 tool has zero parameters, so there are no parameter semantics to document. The baseline of 4 applies; the description appropriately focuses on what the returned data represents instead of parameter syntax.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the resource ('every open card') and the returned attributes (subunits, matrix sizes, closure limits). It avoids tautology, though it relies on the tool name for the verb and does not explicitly differentiate itself from sibling list tools like list_endpoints or list_routes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives. With siblings such as list_endpoints, list_routes, subunit_state, and chassis_identify, the agent gets no explicit direction on when list_cards is the right choice.

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

list_endpointsA

The logical endpoint names this topology can route between.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It communicates that the tool returns endpoint names and implies a read-only query, but it does not state whether any reservation or topology state is required, nor mention side effects or output behavior beyond names. This is acceptable for a simple list tool but not rich.

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?

The description is a single, front-loaded sentence with no filler, redundant phrasing, or unnecessary detail. It states the core semantic in minimal space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a zero-parameter list tool with an output schema, so the description does not need to explain return values. It is nearly complete, but it does not explicitly connect the tool to the route-planning workflow or tell the agent when to prefer it over sibling tools.

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 tool has zero parameters and the empty input schema already has 100% description coverage, so there is no parameter documentation burden. The description adds orienting context by defining what endpoints are returned, which is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource returned (logical endpoint names) and scopes it to 'this topology can route between,' which also implicitly distinguishes it from sibling tools like list_cards and list_routes. However, the action 'list' is only present in the tool name, not the description, so it is slightly elliptical.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'can route between' implies this tool is used when an agent needs available route endpoints, likely before plan_route. But there is no explicit when-to-use guidance, no mention of alternatives, and no exclusion of cases where list_cards or list_routes would be more appropriate.

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

list_routesB

Logical connections currently held open by this server.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says the tool describes current open logical connections and does not explicitly state that it is read-only, non-destructive, or free of side effects. This is minimal but not misleading.

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?

The description is a single concise sentence with no filler. The most important qualifier, 'currently held open', is placed prominently and efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool with an output schema present, the description provides essential domain context: logically held-open connections on this server. It does not explicitly mention read-only behavior or elaborate route semantics, but those gaps are minor given the tool's simplicity and the available 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?

The tool has zero parameters and an empty input schema, so there is no parameter documentation burden. The baseline of 4 applies because no parameter semantics are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource as 'logical connections currently held open by this server', which distinguishes it from sibling tools like route_signal, plan_route, and clear_all_routes. It lacks an explicit verb like 'list' or 'retrieve', but the tool name and resource phrasing make the purpose reasonably clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives such as list_endpoints, plan_route, or route_signal. The phrase 'currently held open' implies it is for inspecting the current state, but there are no explicit usage conditions or exclusions.

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

list_tool_tiersA

List every tool with its tier, so an agent can plan before it reserves.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral transparency. Its use of 'List' and the planning framing make clear this is a non-mutating read operation that precedes reservation, adding useful contextual behavior beyond the tool name.

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?

The description is a single, front-loaded sentence. It leads with the action and resource, then gives the purpose. Every clause contributes meaning, with no filler or redundant restatement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple zero-parameter tool with an output schema, so the description does not need to explain return values. It covers what the tool does and when to call it. The only minor gap is not defining 'tier', but that is unlikely to block correct invocation.

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 tool has zero parameters, so the baseline is 4. The description correctly indicates the tool returns all tools with their tiers and adds no unnecessary parameter expectations.

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 and resource: 'List every tool with its tier'. It also explains the intended purpose ('plan before it reserves'), which separates this meta-listing tool from the action-oriented siblings like reserve_chassis or route_signal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates when to use the tool: before making a reservation, as a planning step. It does not explicitly name alternatives or exclusion conditions, but the context is strong enough given the sibling tool set.

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

plan_routeA

Dry run a route: the crosspoints it would close, and whether the interlocks permit it.

Nothing is switched. Ask this before reserving the chassis.

ParametersJSON Schema
NameRequiredDescriptionDefault
to_endpointYes
from_endpointYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It explicitly states 'Nothing is switched' and frames the operation as a dry run, making the non-destructive nature and hypothetical outcome clear.

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?

The description is compact and front-loaded: it states the action, the key outputs, the safety behavior, and the recommended usage context in a few short sentences. Every sentence earns its place.

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?

Despite minimal parameter descriptions, the tool context is complete: the description explains what the tool does, what it returns, that it is non-destructive, and when to invoke it. An output schema exists, so return-value details are not the description's burden.

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

Parameters2/5

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

Parameter schema coverage is 0%, so the description must compensate. It does not explain how endpoints should be specified, what formats are expected, or where valid endpoint values come from. The names from_endpoint and to_endpoint are self-evident, but the description adds no parameter-level meaning beyond 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 uses a specific verb and resource: 'Dry run a route' and clearly states what it returns—the crosspoints that would close and whether interlocks permit it. It also distinguishes itself from switching/reservation tools by noting 'Nothing is switched.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit usage trigger: 'Ask this before reserving the chassis.' It conveys that this is a preflight check and contrasts with actual switching, though it does not explicitly name alternative tools such as route_signal or reserve_chassis.

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

release_chassisB

Clear every route, disarm the interlock, and release the reservation.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly reveals three significant side effects: clearing every route, disarming the interlock, and releasing the reservation. It does not cover permissions, failure modes, or idempotency, but the core destructive behaviors are transparently listed.

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?

The description is a single terse sentence that front-loads the main action and enumerates the effects in a clear, ordered list. There is no filler or redundant wording; every word contributes to stating the operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The headline effects are clear, but the description omits important operational context: when to call this versus clear_all_routes or disarm_interlock, whether a reservation must already exist, and what token means. An output schema exists, so return values need not be described, but for a compound destructive tool this is still thin.

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

Parameters1/5

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

The only parameter, token, is required but is never mentioned in the description. Schema description coverage is 0%, so the description needed to explain what the token represents, how it relates to the reservation, or what format it expects. It provides none of that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete compound operation: clear every route, disarm the interlock, and release the reservation. This gives the tool a distinct meaning beyond its name and differentiates it from single-purpose siblings like clear_all_routes and disarm_interlock, though it does not explicitly name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance about when to use this tool versus siblings such as clear_all_routes or disarm_interlock. The only hint is semantic: 'release the reservation' implies an end-of-life/cleanup operation, but no prerequisites, ordering, or exclusions are stated.

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

reserve_chassisB

Take a time-boxed reservation. Returns the token every mutating tool requires.

ParametersJSON Schema
NameRequiredDescriptionDefault
ownerYes
ttl_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It does disclose that the reservation is time-boxed and that the returned token is a required input for mutations, which is useful. However, it does not explain what happens when the reservation expires, whether it can be renewed, or whether the reservation causes side effects beyond returning a token.

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 brief and front-loaded with the core action ('Take a time-boxed reservation'), followed by the important token detail. Both sentences earn their place, though the lack of parameter documentation limits the overall usefulness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given two parameters with no schema descriptions and no annotations, the description is not complete enough for correct invocation. It correctly conveys the token purpose, but omits critical details about the owner and TTL semantics, reservation lifetime, and any renewal or release behavior.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not explain either parameter. It never clarifies what 'owner' should be or how 'ttl_seconds' behaves beyond the default, leaving the agent to guess at required argument semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: taking a time-boxed reservation and returning a token required by mutating tools. It differentiates from sibling mutating tools by positioning this as a prerequisite reservation step, though it does not explicitly name the alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence gives a clear usage signal: this tool must be called before mutating tools because it provides the required token. It does not explicitly state when not to use it, but the context of reservation-before-mutation is strongly implied.

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

route_signalB

Connect two logical endpoints by the shortest switch path. Refused whole if unsafe.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
to_endpointYes
from_endpointYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. 'Refused whole if unsafe' usefully discloses that the operation is all-or-nothing on safety failure, which is a non-obvious behavior. However, it does not disclose side effects, whether existing routes are affected, authentication requirements, or reversibility.

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?

Two short sentences with no filler. The main action is front-loaded, and the second sentence adds the essential safety behavior without unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The operation is a state-changing routing action with no annotations, yet the description omits prerequisites, token semantics, endpoint format, and what 'unsafe' means. An output schema exists, so return values are partially covered, but the agent still lacks key details needed to call this reliably.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It clarifies that from_endpoint and o_endpoint are 'logical endpoints', but does not explain the token parameter, value formats, or any constraints. This leaves a required parameter under-specified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear action ('Connect two logical endpoints') with an explicit resource and a distinctive routing strategy ('shortest switch path'). It distinguishes itself from unroute_signal and list_routes by being the actual connection action, though it does not name a sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance is provided. There is no mention of plan_route for planning, set_crosspoint for manual switching, or unroute_signal for teardown, so an agent gets no help choosing among siblings.

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

set_crosspointB

Operate one crosspoint directly. Still bounds-checked and interlock-checked.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowYes
cardYes
stateYes
tokenYes
columnYes
subunitYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

No annotations are present, so the description carries the burden. It does disclose that bounds-checking and interlock-checking are 'still' applied, which is useful safety-relevant behavior, but it omits side effects, failure behavior, permissions, or what happens when the interlock is not satisfied.

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 very short, with both sentences contributing: the first states the action and scope, the second adds safety behavior. It is front-loaded and free of fluff, though it sacrifices useful detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Six required parameters, no annotations, and no schema descriptions demand more context than this. The tool likely interacts with interlock/reservation concepts given sibling tools like arm_interlock and reserve_chassis, but the description does not explain prerequisites or invocation context beyond noting that checks are still performed.

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

Parameters2/5

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

The schema has 0% description coverage for 6 parameters, and the description adds no parameter-level guidance. 'One crosspoint directly' loosely maps to card/subunit/row/column, but state, token, and exact addressing semantics are left entirely to inference from parameter names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool acts on 'one crosspoint directly,' naming a specific resource and distinguishing it from route-level operations. 'Operate' is somewhat generic, but the tool name and the presence of a state parameter make the intent clear enough.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Directly' implies this is for manipulating a single crosspoint rather than using higher-level routing tools like route_signal, but it never explicitly says when to choose this over an alternative. The safety note about bounds/interlock checks gives some context but no clear exclusions.

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

subunit_stateC

Every closed crosspoint on one subunit.

ParametersJSON Schema
NameRequiredDescriptionDefault
cardYes
subunitYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses that the output concerns 'closed' crosspoints, but it does not state whether this is a read-only query, whether it requires special access, or whether it has side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short with no wasted words, but it is a sentence fragment and omits a verb and key context. It is concise at the cost of under-specification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with two required parameters, no annotations, and no parameter descriptions, this fragment omits the operation, parameter semantics, and any behavioral context. The output schema may cover return shape, but the calling context remains unclear.

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

Parameters2/5

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

Schema description coverage is 0%, but the description only restates 'one subunit' and adds no meaning for the required card parameter. It does not explain how to identify the subunit, what card refers to, or what values are valid.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The phrase identifies a resource—closed crosspoints on one subunit—and hints at a scope difference from crosspoint_state, but it is a noun fragment with no verb. It does not explicitly state whether the tool lists, retrieves, or summarizes that state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance and no mention of alternatives. The word 'every' weakly implies enumeration, but the description never tells an agent when to choose this tool over crosspoint_state or set_crosspoint.

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

unroute_signalB

Tear down one route, keeping any crosspoints other routes still need.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
to_endpointYes
from_endpointYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose the key behavioral trait of preserving crosspoints other routes still need, which is meaningful context beyond the tool name. However, it does not mention permissions, reversibility, failure behavior, or what happens to crosspoints that are no longer needed.

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?

The description is a single, front-loaded sentence with no filler. It communicates the core action and the critical preservation constraint efficiently, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the primary behavior and the most important side-effect constraint, and an output schema exists so return values do not need explanation. However, given the complete lack of parameter descriptions and no usage/exclusion guidance, the agent still has significant gaps to infer before calling the tool correctly.

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

Parameters1/5

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

Schema description coverage is 0% and the description provides no information about token, from_endpoint, or to_endpoint. The phrase 'tear down one route' does not explain how the parameters identify the route or what values are expected, so the description adds no meaningful parameter-level meaning.

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 uses a specific verb and resource: 'Tear down one route' clearly states it removes a single signal route. It also adds a distinguishing nuance—preserving crosspoints needed by other routes—which separates it from a blanket teardown like clear_all_routes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool should be used when you need to remove exactly one route while preserving still-needed crosspoints. However, it does not explicitly state when to prefer this over clear_all_routes or how it relates to route_signal, so the usage guidance is implied rather than explicit.

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

verify_topologyA

Check the topology's claims about the rack against what the chassis reports.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the safety burden; 'Check' implies a read-only comparison and identifies the chassis report as the data source. However, it never explicitly states that no state is changed or what happens on mismatch.

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?

One short sentence, front-loaded with the verb, with no filler. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless tool with an output schema, the description covers what is checked and against what source. It does not explain when to invoke it, but the output schema handles return details, so the remaining gap is minor.

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 schema has zero parameters, and the description adds no parameter details, which is appropriate. This matches the baseline for a parameterless tool.

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 names a specific action ('Check') and a concrete comparison: the topology's stored claims versus chassis-reported state. This makes the tool's role distinct from the sibling list/state tools even though no alternative is named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance is given; it does not say to call this after plan_route, before route_signal, or instead of chassis_identify. The need for verification is only implied by the verb 'Check'.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 18 tool updatesv0.1.0
    • First observedarm_interlock
    • First observedchassis_identify
    • First observedclear_all_routes
    • First observedcrosspoint_state
    • First observeddisarm_interlock
    • First observedinterlock_status
    • First observedlist_cards
    • First observedlist_endpoints
    • First observedlist_routes
    • First observedlist_tool_tiers
    • First observedplan_route
    • First observedrelease_chassis
    • First observedreserve_chassis
    • First observedroute_signal
    • First observedset_crosspoint
    • First observedsubunit_state
    • First observedunroute_signal
    • First observedverify_topology

TDQS

B3.4/5.0

Scored across 18 tools

Disambiguation5/5

Each tool targets a distinct operation: status queries, enumeration, dry-run planning, interlock control, route manipulation, and direct crosspoint control. Even similar tools like plan_route and route_signal are clearly separated by the dry-run vs actual-switch distinction.

Naming Consistency4/5

Most tools follow a clear verb_noun or list_noun pattern, with a consistent *_state/*_status convention for queries. The main deviation is chassis_identify, which reverses the expected verb_noun order and stands out from the otherwise predictable scheme.

Tool Count4/5

18 tools is slightly above the typical well-scoped range, but each tool covers a meaningful part of the switching chassis lifecycle. The inclusion of list_tool_tiers is a bit meta, but it serves the agent-planning workflow rather than adding redundancy.

Completeness4/5

The toolset covers the main lifecycle well: inspect, plan, reserve, arm, route, unroute, clear, and release. Minor gaps exist around reservation management — there is no explicit extend-reservation or reservation-status tool — but agents can work around these by releasing and re-reserving.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Enables LLMs like Claude to interact with PicoScope oscilloscopes for signal acquisition, measurement, and analysis. Supports device management, data capture, triggering, and signal generation through natural language commands.
    24
    6
    -
  • A
    license
    B
    quality
    D
    maintenance
    Enables LLM control of Moku devices through network discovery, connection management, configuration deployment, and signal routing. Supports graceful ownership handoff between different interfaces (CLI, iPad, LLM) for seamless workflow integration.
    8
    BSD 2-Clause "Simplified"
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables LLMs to control a PicoScope 5000A USB oscilloscope for signal generation, block capture, measurements, and frequency response sweeps.
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables programmatic control of a PNETLab network-emulation lab via natural language, allowing users to build topologies, wire links, push device configs, and boot the lab through an LLM agent.
    31
    4
    Apache 2.0