A collaborative PCB design and routing server with MCP integration for autorouting, parts management, and fabrication export
Single tool 'autoroute' has a clear, domain-specific description (165 chars) and explicit input schema with two parameters. However, the schema lacks critical details: parameter descriptions are present but minimal (e.g., 'Route only these nets...' is adequate but terse), no output schema is documented, and no error handling guidance is provided. The tool name 'autoroute' is a noun rather than a verb (pattern:tool recommends verb_noun like 'run_autoroute'), which slightly weakens LLM intent inference. The schema shows proper JSON types (array, number) but lacks constraints (min/max for passes, enum for nets). No per-parameter type annotations visible in the schema definition itself.
Run the full autoroute pipeline against the board using Freerouting. Unroutes target nets, exports a Specctra DSN, runs the router, imports the returned SES, and applies routed tracks/vias to the document. Supports escape-width retry for nets that fail at full class width, track widening, and zone stitching.
Tool name 'autoroute' is a noun, not a verb. LLMs infer intent from action verbs. Rename to 'run_autoroute' or 'execute_autoroute' to match pattern:tool conventions.
No output schema documented. LLMs cannot plan downstream operations or extract results without knowing what fields are returned. Document the response structure (e.g., success boolean, routed_nets array, error_details).
Parameter 'passes' lacks numeric constraints (min/max). Unbounded numbers let LLMs pass absurd values. Add min=1, max=100 (or appropriate domain limit) to the schema.
No error handling guidance. If autoroute fails (e.g., Freerouting timeout, invalid nets), the tool should return actionable error messages telling the LLM what to do next (retry, check net names, reduce passes).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Parameter 'nets' description says 'Route only these nets' but does not specify the format or how to reference nets (by name, ID, or other identifier). Clarify: 'Array of net names (strings) to route; omit to route all nets.'