{"apiVersion":"v1","directorySlug":"vcad-mcp-cf517e6d7e","title":"vcad","description":"Free parametric CAD for everyone","pageUrl":"https://www.mcpbundles.com/skills/vcad-mcp-cf517e6d7e","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://vcad.io/api/mcp","hostedMcpUrl":null,"toolCount":178,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"io.vcad/vcad-mcp-cf517e6d7e","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"open_document","description":"Open an editing session for a CAD document. Returns a `document_id` to pass to subsequent tool calls (create, update, place_part, inspect_cad, …). Pass an `initial` IR to begin editing an existing document; omit it for a fresh empty document.","inputSchema":{"type":"object","properties":{"initial":{"type":"object"}}},"title":"Open Document","logicalName":"open_document","displayName":"Open Document","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_document","description":"Return the full IR Document JSON for an open session. Use after a series of mutations to capture the result, or to feed into `export_cad` / `open_in_browser`. A document authored from loon carries that source under `source`, and the result reports `source_stale` when the session no longer matches it (the file changed, or incremental edits moved the session away from it). Very large documents come back as a compact artifact handle instead ({document_id, artifact_url, manifest with sha256, …}) — d","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"}}},"title":"Get Document","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_document","displayName":"Get Document"},{"name":"close_document","description":"Close a document session and free its memory. Idempotent — closing an unknown id reports `closed: false`.","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"}}},"title":"Close Document","logicalName":"close_document","displayName":"Close Document","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"load_document","description":"Reopen a save_document save into a fresh session and return its new document_id. Pass the same name you saved under (or the `saved_…` key an anonymous save returned). The cheap way to resume a board/part across runs instead of rebuilding it. Pass `path` instead to open a `.loon` source file (evaluated on load) or a `.vcad` document from disk — that session stays bound to the file and reports `source_stale` if the two drift apart.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"path":{"type":"string"}}},"title":"Load Document","logicalName":"load_document","displayName":"Load Document","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"checkpoint_document","description":"Snapshot a session's current state as a durable, restorable checkpoint. Returns a `checkpoint_id`. Use it at known-good milestones (post-schematic, post-place, post-route) so you can rewind with branch_from instead of rebuilding. The full IR is captured — the netlist (the most expensive, most stable artifact) is the anchor. On a durable deploy a checkpoint survives a redeploy; check server_info for durable:true.","inputSchema":{"type":"object","required":["document_id"],"properties":{"label":{"type":"string"},"document_id":{"type":"string"}}},"title":"Checkpoint Document","logicalName":"checkpoint_document","displayName":"Checkpoint Document","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"branch_from","description":"Re-open a checkpoint (from checkpoint_document). Omit `into` to BRANCH into a fresh session id — a variant to explore. Pass `into: <document_id>` to RESTORE the checkpoint into an existing session in place (same id). The cheap undo for a bad route or place: rewind to a good state rather than rebuilding the netlist.","inputSchema":{"type":"object","required":["checkpoint_id"],"properties":{"into":{"type":"string"},"checkpoint_id":{"type":"string"}}},"title":"Branch From Checkpoint","logicalName":"branch_from","displayName":"Branch From Checkpoint","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"continue_document","description":"Open the user's vcad.io part as an editing session from a 'Continue in Claude' handoff (a share `token`, or an inline `doc` for accountless handoffs). The web app hands you this in the starter prompt; call this first, then render_view it and continue the user's work. Returns a `document_id` for subsequent tool calls. The geometry is fetched server-side — never paste it.","inputSchema":{"type":"object","properties":{"doc":{"type":"string"},"token":{"type":"string"}}},"title":"Continue Document","logicalName":"continue_document","displayName":"Continue Document","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"server_info","description":"Report the running build's identity: version, git sha (if stamped), tool count, enabled packs, whether the kernel WASM loaded, and whether sessions are durable (`durable` — survive a redeploy/cold start, vs. in-memory only). Call this to confirm a tool exists in THIS build before assuming a stale or version-skewed deploy, and to check durable:true before relying on checkpoints across a long session.","inputSchema":{"type":"object","properties":{}},"title":"Server Info","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"server_info","displayName":"Server Info"},{"name":"list_tool_packs","description":"List the optional tool packs and whether each is currently enabled, with its tool count. Packs gate large domain surfaces (ecad, physics, sheet_metal, dfm, …) off the always-on core; a smaller surface costs fewer schema tokens and improves tool selection. Use set_tool_packs to enable/disable them at runtime.","inputSchema":{"type":"object","properties":{}},"title":"List Tool Packs","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_tool_packs","displayName":"List Tool Packs"},{"name":"get_order_status","description":"Return the lifecycle row for a Fabricate order (state, fab, totals, event timeline). Read-only.","inputSchema":{"type":"object","required":["order_id"],"properties":{"order_id":{"type":"string"}}},"title":"Get Order Status","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_order_status","displayName":"Get Order Status"},{"name":"list_orders","description":"List the caller's Fabricate orders, newest first. Optional status filter and limit. Read-only.","inputSchema":{"type":"object","required":[],"properties":{"limit":{"type":"integer","maximum":200,"minimum":1},"status":{"type":"string"}}},"title":"List Orders","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_orders","displayName":"List Orders"},{"name":"authorize_spend","description":"Propose a spend authorization for a QUOTED order. Creates a DB-backed, revocable authorization (status pending_human) and records the proposal on the session's event log. A HUMAN must approve it in the vcad app before place_order can charge — the agent cannot approve its own spend; when the client supports URL elicitation the approval page is offered to the human in-band. Flag-gated (test-mode); no money moves here.","inputSchema":{"type":"object","required":["order_id"],"properties":{"order_id":{"type":"string"},"max_amount_minor":{"type":"integer","minimum":1}}},"title":"Authorize Spend","logicalName":"authorize_spend","displayName":"Authorize Spend","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_order_feed","description":"App-only: the order-dock feed for a document — orders with fused lifecycle chips, joined quote details, authorization status (+ approve URL while pending), receipt status, and wallet balance. Polled by the inline viewer; read-only.","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"}}},"title":"Get Order Feed","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_order_feed","displayName":"Get Order Feed"},{"name":"share_session","description":"Share this session as a live, watchable link (mcp.vcad.io/live/<id>). Sessions are PRIVATE by default — this is the explicit opt-in that makes one viewable. Anyone with the returned link can watch the geometry + full event log (read-only) and drop annotations, so the result includes a clear public-link warning. Revoke anytime with unshare_session.","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"}}},"title":"Share Session","logicalName":"share_session","displayName":"Share Session","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"unshare_session","description":"Revoke a session's live link — it goes dead and the session is private again.","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"}}},"title":"Unshare Session","logicalName":"unshare_session","displayName":"Unshare Session","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"search_parts","description":"Search the stdlib parts library (fasteners, bearings, …). Matches across name, category, synonyms, and catalog part numbers (McMaster / ISO / DIN). Returns an array of {id, name, category, params, xrefs, synonyms} — use `id` with `place_part`. Part numbers like '91290A320' or 'ISO 4762' match directly.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer"},"query":{"type":"string"},"category":{"type":"string"}}},"title":"Search Stdlib Parts","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"search_parts","displayName":"Search Stdlib Parts"},{"name":"place_part","description":"Insert a stdlib part into the session's document. Takes a `document_id`, a `path` (from `search_parts.id`), and an optional `params` map; missing params use declared defaults. The part remains parametric — end users can edit its params from the feature tree.","inputSchema":{"type":"object","required":["document_id","path"],"properties":{"name":{"type":"string"},"path":{"type":"string"},"params":{"type":"object","additionalProperties":true},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"z":{"type":"number"}}},"document_id":{"type":"string"}}},"title":"Place Part","logicalName":"place_part","displayName":"Place Part","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"read","description":"Inspect the current document. Without part_id, lists all parts. With part_id, returns full feature tree and parameters for that part.","inputSchema":{"type":"object","required":["document_id"],"properties":{"part_id":{"type":"string"},"document_id":{"type":"string"}}},"title":"Read Nodes","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"read","displayName":"Read Nodes"},{"name":"update","description":"Update parameters on an existing node — pass only the fields to change. The surgical-edit tool: when geometry is misplaced or mis-sized, prefer this over delete + re-create. Use `read` to find node ids. The result reports a compact `changed` diff of affected parts.","inputSchema":{"type":"object","required":["document_id","node_id","params"],"properties":{"params":{"type":"object"},"node_id":{"type":"string"},"document_id":{"type":"string"}}},"title":"Update Node","logicalName":"update","displayName":"Update Node","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete","description":"Delete a part from the document.","inputSchema":{"type":"object","required":["document_id","part_id"],"properties":{"part_id":{"type":"string"},"document_id":{"type":"string"}}},"title":"Delete Node","logicalName":"delete","displayName":"Delete Node","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"set_material","description":"Set a part's material preset. Keys — metals: aluminum, steel, brass, copper, titanium, chrome, gold, silver; plastics: abs-white, abs-black, abs-red, abs-blue, pla, petg, nylon, resin, acrylic, rubber; organic: oak, walnut, leather, cork, bamboo; glass: glass, glass-tinted; composite: carbon-fiber, fiberglass, kevlar; other: concrete, ceramic, foam.","inputSchema":{"type":"object","required":["document_id","part_id","material"],"properties":{"part_id":{"type":"string"},"material":{"type":"string"},"document_id":{"type":"string"}}},"title":"Set Material","logicalName":"set_material","displayName":"Set Material","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"inspect_part","description":"Read a part's current world-space geometry: bounding box, size, center, translate, rotation, material, and the set of named anchors (center/min/max/top/bottom/front/back/left/right) you can pass to `place`. Use this to verify what the scene looks like after a tool call without spending tokens on a screenshot — it's much cheaper than screenshot_viewport. Result is JSON.","inputSchema":{"type":"object","required":["document_id","part_id"],"properties":{"part_id":{"type":"string"},"document_id":{"type":"string"},"joint_state":{"type":"object","additionalProperties":{"type":"number"}}}},"title":"Inspect Part","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"inspect_part","displayName":"Inspect Part"},{"name":"describe_scene","description":"One-call snapshot of the whole scene (or a subset of parts): each part's world-space bbox, center, translate, rotate, and material as JSON. Use this INSTEAD of a chain of `inspect_part` calls when you need positions for several parts at once — one turn, no round-trips. Also use it after a batch of edits to verify where everything ended up.","inputSchema":{"type":"object","required":["document_id"],"properties":{"limit":{"type":"integer"},"part_ids":{"type":"array","items":{"type":"string"}},"document_id":{"type":"string"},"joint_state":{"type":"object","additionalProperties":{"type":"number"}}}},"title":"Describe Scene","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"describe_scene","displayName":"Describe Scene"},{"name":"get_preview_glb","description":"Return a base64 GLB preview of an open session document. Internal to the inline 3D viewer — agents should use `export_cad` for geometry exports.","inputSchema":{"type":"object","required":["document_id"],"properties":{"instances":{"type":"boolean"},"document_id":{"type":"string"}}},"title":"Get Preview GLB","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_preview_glb","displayName":"Get Preview GLB"},{"name":"get_preview_version","description":"Return a cheap {document_id, version} change token for an open session document (no geometry eval). Internal to the inline 3D viewer's self-refresh poll — agents should ignore it.","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"}}},"title":"Get Preview Version","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_preview_version","displayName":"Get Preview Version"},{"name":"get_sim_replay","description":"Return the recorded joint trajectory and per-step instance transforms for a physics env. Internal to the inline viewer's replay UI — agents should use gym_observe or record_simulation instead.","inputSchema":{"type":"object","required":["env_id"],"properties":{"env_id":{"type":"string"}}},"title":"Get Sim Replay","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_sim_replay","displayName":"Get Sim Replay"},{"name":"get_sim_version","description":"Return a cheap {env_id, step_count, version} change token for a physics env (no FK eval). Internal to the inline viewer's replay poll — agents should ignore it.","inputSchema":{"type":"object","required":["env_id"],"properties":{"env_id":{"type":"string"}}},"title":"Get Sim Version","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_sim_version","displayName":"Get Sim Version"},{"name":"call_loon","description":"Instantiate a stored loon macro into a new document: positional numeric args in the macro's declared order (see list_loons). Returns the document and a document_id session.","inputSchema":{"type":"object","required":["name","args"],"properties":{"args":{"type":"array","items":{"type":"number"}},"name":{"type":"string"},"macro":{"type":"object","required":["name","source"],"properties":{"name":{"type":"string"},"params":{"type":"array"},"source":{"type":"string"}}},"format":{"enum":["vcode","json"],"type":"string"},"material":{"type":"string"}}},"title":"Call Loon Macro","logicalName":"call_loon","displayName":"Call Loon Macro","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_loons","description":"List the stored loon macro library: names, versions, parameter docs with units and example values. Use before call_loon or create_cad_loon with use_loons.","inputSchema":{"type":"object","properties":{}},"title":"List Loon Macros","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_loons","displayName":"List Loon Macros"},{"name":"list_parameters","description":"List a document's named parameters: raw expression, resolved numeric value, unit, and scrub bounds (min/max). Pair with set_parameters to drive the design and parameter_gradient to differentiate it.","inputSchema":{"type":"object","properties":{"document":{"type":"object"},"document_id":{"type":"string"}}},"title":"List Parameters","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_parameters","displayName":"List Parameters"},{"name":"set_parameters","description":"Batch-update named parameter values on an open session document (e.g. { \"r\": 12, \"h\": 8 }). Every name must already be declared; values must be finite numbers. Returns a `changed` diff of the deltas and re-evaluates geometry integrity. When the document has design constraints, they re-solve automatically (constraint_solve in the result) — a parameter change relayouts everything bound to it. Undoable and persisted.","inputSchema":{"type":"object","required":["document_id","parameters"],"properties":{"parameters":{"type":"object","additionalProperties":{"type":"number"}},"document_id":{"type":"string"}}},"title":"Set Parameters","logicalName":"set_parameters","displayName":"Set Parameters","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"parameter_gradient","description":"Differentiate a document's QoIs with respect to a single named parameter via the differentiable seam: per solid part, returns d(volume)/dθ, d(mass)/dθ, d(centroid)/dθ (exact analytic seam derivatives) and d(bbox extents)/dθ (finite difference), alongside each QoI's value. The parameter must be bound onto some geometry field. \"Solve for the geometry\" starts here.","inputSchema":{"type":"object","required":["parameter"],"properties":{"density":{"type":"number"},"document":{"type":"object"},"parameter":{"type":"string"},"probe_step":{"type":"number"},"document_id":{"type":"string"}}},"title":"Parameter Gradient","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"parameter_gradient","displayName":"Parameter Gradient"},{"name":"delete_constraint","description":"Delete a design constraint by id or label (or `all: true` to clear the set). Frees degrees of freedom; geometry stays where it is.","inputSchema":{"type":"object","required":["document_id"],"properties":{"id":{"type":"string"},"all":{"type":"boolean"},"document_id":{"type":"string"}}},"title":"Delete Constraint","logicalName":"delete_constraint","displayName":"Delete Constraint","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_constraints","description":"List the document's design constraints with their current measured values and residuals, per-group degrees of freedom, and over/under-constrained status. Use before deleting or when a solve reports non-convergence.","inputSchema":{"type":"object","properties":{"document":{"type":"object"},"document_id":{"type":"string"}}},"title":"List Constraints","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_constraints","displayName":"List Constraints"},{"name":"solve_constraints","description":"Re-solve the document's design constraints against current geometry — run after set_placement, set_board_outline, or sketch edits that may have violated them. Reports per-group convergence and DOF, moved footprints/vertices/sketches, and back-annotates driven dimensions.","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"}}},"title":"Solve Constraints","logicalName":"solve_constraints","displayName":"Solve Constraints","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"animate","description":"Set (or clear) the document's animation timeline: keyframe named parameters, joint states, instance visibility, or a global explode factor, plus declarative camera shots (turntable/orbit/focus). For kinematic joint playback (servo-style commanded motion, no physics) pass `keyframes:[{t, joints:{jointId: value}}]` instead of a full timeline. Preview with render_sequence; ship with export_video.","inputSchema":{"type":"object","required":["document_id"],"properties":{"fps":{"type":"number"},"timeline":{"type":"object"},"keyframes":{"type":"array","items":{"type":"object"}},"document_id":{"type":"string"}}},"title":"Animate","logicalName":"animate","displayName":"Animate","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"timeline_from_simulation","description":"Compile a recorded physics rollout (gym_step trajectory) into the document's animation timeline — one joint track per observed joint at the simulation timestep, optional turntable. The rollout then previews via render_sequence and ships via export_video with clearance verification.","inputSchema":{"type":"object","required":["env_id","document_id"],"properties":{"camera":{"enum":["turntable","static"],"type":"string"},"env_id":{"type":"string"},"max_keys":{"type":"number"},"document_id":{"type":"string"}}},"title":"Timeline From Simulation","logicalName":"timeline_from_simulation","displayName":"Timeline From Simulation","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"verify_part","description":"Grade an open session document against a mecheval benchmark task using the official deterministic graders (the exact binaries the leaderboard runs). Returns pass/fail per check — bounding box, mass properties, hole positions, STEP round-trip, … — with measured-vs-expected details so you can iterate until green. Use list_eval_tasks to browse task ids.","inputSchema":{"type":"object","required":["document_id","task_id"],"properties":{"task_id":{"type":"string"},"document_id":{"type":"string"}}},"title":"Verify Part","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"verify_part","displayName":"Verify Part"},{"name":"list_eval_tasks","description":"List mecheval benchmark tasks (id, suite, tier, title, prompt, check count). Suites: A authoring, B kernel, C mech/physics, D visual, F fit. Pair with verify_part for self-graded practice and verification.","inputSchema":{"type":"object","properties":{"suite":{"type":"string"}}},"title":"List Eval Tasks","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_eval_tasks","displayName":"List Eval Tasks"},{"name":"dfm_explain","description":"Return the long-form explanation for a specific DFM issue from the most recent `dfm_check` run on this document.","inputSchema":{"type":"object","required":["issue_id"],"properties":{"report":{"type":"object"},"issue_id":{"type":"string"},"document_id":{"type":"string"}}},"title":"DFM Explain","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"dfm_explain","displayName":"DFM Explain"},{"name":"dfm_suggest_fix","description":"Return the suggested patch (set_param / wrap_op / replace_op / manual) for a DFM issue. Inspect the patch; only call `dfm_apply_fix` when you're ready to mutate the IR.","inputSchema":{"type":"object","required":["issue_id"],"properties":{"report":{"type":"object"},"issue_id":{"type":"string"},"document_id":{"type":"string"}}},"title":"DFM Suggest Fix","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"dfm_suggest_fix","displayName":"DFM Suggest Fix"},{"name":"dfm_apply_fix","description":"Apply an approved DFM fix to the session document. v1 supports `set_param` patches (raise a fillet radius, thicken a wall) — other kinds throw and require manual edits. Re-run `dfm_check` afterwards to confirm the issue cleared.","inputSchema":{"type":"object","required":["issue_id"],"properties":{"report":{"type":"object"},"document":{"type":"object"},"issue_id":{"type":"string"},"document_id":{"type":"string"}}},"title":"DFM Apply Fix","logicalName":"dfm_apply_fix","displayName":"DFM Apply Fix","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"sheet_metal_unfold","description":"Return the flat pattern (panel outlines, holes, creases, engravings, area, bbox) for a sheet-metal session document, plus a fab-ready merged single-silhouette DXF (millimetres): one closed exterior polyline + holes on CUT, DASHED bend centerlines on BEND_UP/BEND_DOWN, surface markings as open polylines on ENGRAVE. DXF carries no bend angles (entered in the fab's UI); for zero data entry export the folded body as STEP via export_cad instead.","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"},"include_dxf":{"type":"boolean"}}},"title":"Unfold Sheet Metal","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"sheet_metal_unfold","displayName":"Unfold Sheet Metal"},{"name":"sheet_metal_check","description":"Run sheet-metal manufacturability for a session document against a shop profile (brake length, min R/t, flange height, hole→bend, bend→bend, bend relief, fixed radius). `shop_profile` is a catalog id string (e.g. \"sendcutsend\") or a capabilities object (field-tolerant: omit keys for generic defaults). Returns structured violations the agent can use to adjust the part and re-check.","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"},"shop_profile":{}}},"title":"Check Sheet Metal","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"sheet_metal_check","displayName":"Check Sheet Metal"},{"name":"sheet_metal_materials","description":"List the built-in sheet-metal materials registry (aluminum soft/hard, mild + stainless steel, brass, copper) with min R/t, yield, modulus, density, and a coarse springback estimate. Use to pick a `material` for sheet_metal_create.","inputSchema":{"type":"object","properties":{}},"title":"Sheet Metal Materials","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"sheet_metal_materials","displayName":"Sheet Metal Materials"},{"name":"sheet_metal_bend_table","description":"Read the kernel's curated bend table — `(material, thickness, radius) → K-factor` rows used to compute bend allowance. Pass `shop_profile` (e.g. \"sendcutsend\") to instead read that fab service's published catalog: fixed radii, K-factors, die widths, min flange sizes, and relief depths per material/thickness.","inputSchema":{"type":"object","properties":{"shop_profile":{"type":"string"}}},"title":"Sheet Metal Bend Table","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"sheet_metal_bend_table","displayName":"Sheet Metal Bend Table"},{"name":"sheet_metal_cost","description":"Estimate the manufacturing cost of a sheet-metal session document: material (mass × $/kg), cut (length × $/m), pierces, bends, amortized setup, plus shop markup. Returns a line-itemed breakdown so the agent can see which line dominates and which design changes would lower it. `rates` is field-tolerant; omit it to use generic low-volume laser defaults.","inputSchema":{"type":"object","required":["document_id"],"properties":{"rates":{"type":"object"},"quantity":{"type":"number"},"document_id":{"type":"string"}}},"title":"Sheet Metal Cost","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"sheet_metal_cost","displayName":"Sheet Metal Cost"},{"name":"sheet_metal_suggest_fix","description":"Translate the structured violations from sheet_metal_check into concrete parameter changes the agent can apply (radius up, flange longer, bends spread, etc.). Pass `violation_index` to target one, omit it to get a suggestion for every open violation. Closes the create → check → fix → re-check self-heal loop.","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"},"shop_profile":{},"violation_index":{"type":"number"}}},"title":"Sheet Metal Suggest Fix","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"sheet_metal_suggest_fix","displayName":"Sheet Metal Suggest Fix"},{"name":"sheet_metal_sequence","description":"Return a feasible press-brake bend sequence for a sheet-metal part — outermost bends first so the remaining flat stays small and earlier bends don't collide with later ones. Each step includes the springback-compensated brake angle and a one-line rationale.","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"}}},"title":"Sheet Metal Bend Sequence","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"sheet_metal_sequence","displayName":"Sheet Metal Bend Sequence"},{"name":"sheet_metal_nest","description":"Pack multiple sheet-metal parts on stock sheets using bottom-left fill decreasing. Each part is either a session `document_id` (footprint inferred from the flat pattern) or an explicit `{width_mm, height_mm}`. Returns per-instance placements, sheets used, and utilization — enough to drive a multi-part DXF and a real quote.","inputSchema":{"type":"object","required":["parts"],"properties":{"parts":{"type":"array","items":{"type":"object"}},"params":{"type":"object"}}},"title":"Sheet Metal Nest","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"sheet_metal_nest","displayName":"Sheet Metal Nest"},{"name":"import_step","description":"Import geometry from a STEP file (.step or .stp), keeping B-rep: the document gets one lazy `step_import` node per body, so analytic faces survive into booleans, fillets, and STEP export. Pass `as_mesh: true` for the old tessellated import (rendering / colliders only — mesh parts cannot be exported to STEP). Supports AP203/AP214 STEP files commonly exported from Fusion 360, SolidWorks, Onshape, etc.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"as_mesh":{"type":"boolean"},"filename":{"type":"string"},"material":{"type":"string"},"content_base64":{"type":"string"}}},"title":"Import STEP","logicalName":"import_step","displayName":"Import STEP","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"import_kicad","description":"Import an existing KiCad .kicad_pcb board into a live session — board outline, footprints with pads + nets, design rules, and any routed traces/vias/zones. Returns a document_id ready for render_pcb, run_drc, get_pad_positions, route_nets, and export_gerber. Pass content_base64 on hosted servers.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"filename":{"type":"string"},"content_base64":{"type":"string"}}},"title":"Import KiCad","logicalName":"import_kicad","displayName":"Import KiCad","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"import_altium","description":"Import an Altium .PcbDoc board into a live session — board outline, footprints with pads + nets, design rules, and any routed traces/vias. Accepts both the native binary file and an ASCII export (detected automatically). Returns a document_id ready for render_pcb, run_drc, get_pad_positions, route_nets, and export_gerber. The binary path fails closed on record layouts it cannot decode rather than importing a partially-correct board. Pass content_base64 on hosted servers.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"filename":{"type":"string"},"content_base64":{"type":"string"}}},"title":"Import Altium","logicalName":"import_altium","displayName":"Import Altium","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"import_altium_library","description":"Read an Altium .PcbLib footprint library (binary or ASCII) and return its footprint patterns with pads, shapes, and drills. A library is not a board, so no document_id is minted.","inputSchema":{"type":"object","properties":{"filename":{"type":"string"},"content_base64":{"type":"string"}}},"title":"Import Altium Library","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"import_altium_library","displayName":"Import Altium Library"},{"name":"import_eagle","description":"Import an Eagle .brd board (XML, Eagle 6+) into a live session — board outline, packages placed as footprints with pads, signals as nets, and any hand-routed traces/vias. Returns a document_id ready for render_pcb, run_drc, get_pad_positions, route_nets, and export_gerber. Pass content_base64 on hosted servers.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"filename":{"type":"string"},"content_base64":{"type":"string"}}},"title":"Import EAGLE","logicalName":"import_eagle","displayName":"Import EAGLE","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"open_in_browser","description":"Generate a shareable URL to open a CAD document in vcad.io. Pass a live session's `document_id` (the usual ship path), or an inline IR `document` (JSON or VCode format). Documents are compressed (gzip + base64url) for URL embedding. Note: Very large documents may exceed URL length limits (~2KB).","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"document":{"type":"string"},"document_id":{"type":"string"}}},"title":"Open in Browser","logicalName":"open_in_browser","displayName":"Open in Browser","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"gym_reset","description":"Reset the simulation environment to its initial state, re-drawing any configured domain randomization. Optional `seed` re-seeds the randomization stream for reproducible episodes. Returns the initial observation, with joint values keyed by joint id (`joints`) and end effector poses keyed by instance id (`end_effectors`) alongside the bare arrays.","inputSchema":{"type":"object","required":["env_id"],"properties":{"seed":{"type":"number"},"env_id":{"type":"string"}}},"title":"Gym Reset","logicalName":"gym_reset","displayName":"Gym Reset","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"gym_observe","description":"Get the current observation from the simulation without stepping. Returns joint positions, velocities, and end effector poses — both as bare arrays and keyed by joint / instance id.","inputSchema":{"type":"object","required":["env_id"],"properties":{"env_id":{"type":"string"}}},"title":"Gym Observe","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"gym_observe","displayName":"Gym Observe"},{"name":"gym_close","description":"Close and clean up a simulation environment.","inputSchema":{"type":"object","required":["env_id"],"properties":{"env_id":{"type":"string"}}},"title":"Gym Close","logicalName":"gym_close","displayName":"Gym Close","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"load_structure","description":"Import an atomic structure from XYZ / extended-XYZ text (or accept a MoleculeSystem) and return the molecule plus a summary (formula, atom count, radius of gyration, bonds, periodicity). Units are Ångström.","inputSchema":{"type":"object","properties":{"xyz":{"type":"string"},"molecule":{"type":"object"}}},"title":"Load Structure","logicalName":"load_structure","displayName":"Load Structure","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"inspect_molecule","description":"Structural analysis of a molecule: Hill-order formula, per-element counts, mass, center of mass, radius of gyration, bounding box, bond count, periodicity. The atomic-domain analog of inspect_cad.","inputSchema":{"type":"object","required":["molecule"],"properties":{"molecule":{"type":"object"}}},"title":"Inspect Molecule","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"inspect_molecule","displayName":"Inspect Molecule"},{"name":"minimize_energy","description":"Relax a structure to a local energy minimum with FIRE. Force field via config (Lennard-Jones default, harmonic bonds, Coulomb, or the ML-potential stub). Returns the relaxed molecule, a result summary (energy, max force, convergence), and a reproducibility receipt.","inputSchema":{"type":"object","required":["molecule"],"properties":{"config":{"type":"object"},"molecule":{"type":"object"},"force_tol":{"type":"number"},"max_iters":{"type":"number"}}},"title":"Minimize Energy","logicalName":"minimize_energy","displayName":"Minimize Energy","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"md_run","description":"Run molecular dynamics (velocity-Verlet, optional Berendsen thermostat) for N steps and return the final observation (energies, temperature, max force) and the evolved structure.","inputSchema":{"type":"object","required":["molecule","steps"],"properties":{"steps":{"type":"number"},"config":{"type":"object"},"molecule":{"type":"object"}}},"title":"Run Molecular Dynamics","logicalName":"md_run","displayName":"Run Molecular Dynamics","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"design_material","description":"Inverse design: search an isotropic scale factor that drives a geometric property (nearest-neighbor distance or radius of gyration) to a target value, returning the reshaped molecule and a receipt. The energy-objective inverse design (gradients through the simulation) lives in the Rust kernel.","inputSchema":{"type":"object","required":["molecule","property","target"],"properties":{"target":{"type":"number"},"molecule":{"type":"object"},"property":{"enum":["nn_distance","radius_of_gyration"],"type":"string"},"scale_bounds":{"type":"array","items":{"type":"number"}}}},"title":"Design Material","logicalName":"design_material","displayName":"Design Material","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"homogenize_material","description":"Homogenize a periodic crystal into bulk material properties — density (kg/m³), cubic elastic constants C11/C12/C44 and VRH isotropic moduli (GPa) — the atoms-to-continuum bridge. Requires a fully periodic cell.","inputSchema":{"type":"object","required":["molecule"],"properties":{"sigma":{"type":"number"},"bond_k":{"type":"number"},"cutoff":{"type":"number"},"strain":{"type":"number"},"epsilon":{"type":"number"},"molecule":{"type":"object"},"force_field":{"enum":["auto","lj","bonds","mlip-stub"],"type":"string"},"relax_internal":{"type":"boolean"}}},"title":"Homogenize Material","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"homogenize_material","displayName":"Homogenize Material"},{"name":"render_molecule","description":"Render a molecule as an isometric ball-and-stick (or space-filling) SVG with CPK colors and depth sorting — agent eyes on atomic structures.","inputSchema":{"type":"object","required":["molecule"],"properties":{"molecule":{"type":"object"},"width_px":{"type":"number"},"representation":{"enum":["ball_and_stick","space_filling"],"type":"string"}}},"title":"Render Molecule","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"render_molecule","displayName":"Render Molecule"},{"name":"batch_step","description":"Step all environments in a batch simultaneously with per-env actions. Returns observations, rewards, and done flags for all environments. action_type can be 'torque', 'position', or 'velocity'.","inputSchema":{"type":"object","required":["batch_id","action_type","actions"],"properties":{"actions":{"type":"array","items":{"type":"array","items":{"type":"number"}}},"batch_id":{"type":"string"},"action_type":{"enum":["torque","position","velocity"],"type":"string"}}},"title":"Batch Step","logicalName":"batch_step","displayName":"Batch Step","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"batch_reset","description":"Reset all environments in a batch to their initial state. Returns initial observations for all environments.","inputSchema":{"type":"object","required":["batch_id"],"properties":{"batch_id":{"type":"string"}}},"title":"Batch Reset","logicalName":"batch_reset","displayName":"Batch Reset","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_changelog","description":"Query vcad changelog by version, category, feature, or MCP tool. Returns recent changes, new features, breaking changes, and migration guides.","inputSchema":{"type":"object","properties":{"tool":{"type":"string"},"limit":{"type":"number"},"since":{"type":"string"},"feature":{"type":"string"},"version":{"type":"string"},"category":{"enum":["feat","fix","breaking","perf","docs","all"],"type":"string"},"breaking_only":{"type":"boolean"}}},"title":"Get Changelog","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_changelog","displayName":"Get Changelog"},{"name":"board_from_solid","description":"Derive a PCB outline polygon (with cutouts, e.g. a center bore) from a solid part in a CAD session by projecting its geometry onto the XY plane. Bridges solid modeling and PCB layout: feed the returned `outline` to place_components.","inputSchema":{"type":"object","required":["document_id"],"properties":{"part_id":{"type":"string"},"thickness":{"type":"number"},"resolution":{"type":"number"},"document_id":{"type":"string"},"simplify_tolerance":{"type":"number"}}},"title":"Board From Solid","logicalName":"board_from_solid","displayName":"Board From Solid","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_footprints","description":"List the footprint families the parametric engine resolves, each with a canonical example id to drop into create_schematic's `footprint`. Optional `kind` filter (passive/ic/transistor/diode/power/connector). Use this instead of guessing id spellings.","inputSchema":{"type":"object","required":[],"properties":{"kind":{"type":"string"}}},"title":"List Footprints","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_footprints","displayName":"List Footprints"},{"name":"search_footprints","description":"Fuzzy-search footprint families by name/alias (e.g. 'SOIC 8', 'jst', 'qfn') and get ranked matches with a canonical example id — resolve a footprint id without a failed create_schematic round-trip.","inputSchema":{"type":"object","required":["query"],"properties":{"query":{"type":"string"}}},"title":"Search Footprints","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"search_footprints","displayName":"Search Footprints"},{"name":"get_pad_positions","description":"Return every footprint pad's absolute board-frame (x, y), copper layer, and net — the coordinates manual routing (add_trace / add_via / add_via_array) needs so trace endpoints land exactly on pads instead of being eyeballed from component centers. Read-only. Optional `net` / `ref` filters narrow the result for targeted routing.","inputSchema":{"type":"object","required":["document_id"],"properties":{"net":{"type":"string"},"ref":{"type":"string"},"document":{"type":"object"},"document_id":{"type":"string"}}},"title":"Get Pad Positions","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_pad_positions","displayName":"Get Pad Positions"},{"name":"describe_pcb","description":"Inspect the session PCB as compact, structured data: board size + outline, stackup (layer names + copper weights), net classes / design rules, zones (net/layer/bbox/fill), trace & via counts by net and layer, component count, the current DRC status, and an exportability/renderability probe that actually serializes the board for fab + 3D preview — surfacing the 'DRC-clean but unexportable' state get_document/read can't see. Read-only.","inputSchema":{"type":"object","required":["document_id"],"properties":{"document":{"type":"object"},"document_id":{"type":"string"}}},"title":"Describe PCB","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"describe_pcb","displayName":"Describe PCB"},{"name":"delete_via","description":"Remove a single via by `index` (0-based, the add order) or by an unambiguous `net` match. The take-back for a stray add_via. Returns a `changed` diff. Mutates the session document. Verify-on-write: the result carries `drc_delta` — the DRC violations this call introduced (shorts/clearance/connectivity/manufacturing, capped sample with positions) with `clean` to branch on in one step.","inputSchema":{"type":"object","required":["document_id"],"properties":{"net":{"type":"string"},"index":{"type":"number"},"document":{"type":"object"},"document_id":{"type":"string"}}},"title":"Delete Via","logicalName":"delete_via","displayName":"Delete Via","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"undo","description":"Rewind the most recent mutation on a session — the snapshot taken before the last add_zone / add_trace / add_via / delete_* / route_nets / place_components (or a CAD create/update/delete) is restored, without re-sending the document. Repeated calls walk further back. Returns a `changed` diff of the board elements the rewind moved.","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"}}},"title":"Undo","logicalName":"undo","displayName":"Undo","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"size_trace_for_current","description":"IPC-2221 conductor ampacity solved for trace width: given current, copper weight, allowed temp rise, and layer (outer/inner), returns the minimum width. The ampacity sibling of size_impedance/size_pdn — pure calc, no document.","inputSchema":{"type":"object","required":["current_a"],"properties":{"layer":{"type":"string"},"copper_oz":{"type":"number"},"current_a":{"type":"number"},"fab_grid_mm":{"type":"number"},"temp_rise_c":{"type":"number"}}},"title":"Size Trace for Current","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"size_trace_for_current","displayName":"Size Trace for Current"},{"name":"check_self_start","description":"Will it spin? Starting torque (direct, or Kt·I; induction: the locked-rotor torque from calc_motor) vs a friction estimate (direct, or the built-in bearing catalog: 608-2RS/608-ZZ/625/688 × light/medium preload × count). Returns starts (fail-closed vs worst-case friction), best-case verdict, and the margin. Pure calc, no document.","inputSchema":{"type":"object","properties":{"bearings":{"type":"object"},"current_a":{"type":"number"},"kt_nm_per_a":{"type":"number"},"friction_torque_nm":{"type":"number"},"available_torque_nm":{"type":"number"}}},"title":"Check Self-Start","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"check_self_start","displayName":"Check Self-Start"},{"name":"render_ratsnest","description":"Render the board with its unrouted-connection ratsnest (per-net MST airwires) overlaid as dashed lines — judge placement quality and crossing density BEFORE routing. Returns a PNG plus the airwire (unconnected-pair) count.","inputSchema":{"type":"object","required":["document_id"],"properties":{"layers":{"type":"array","items":{"type":"string"}},"width_px":{"type":"number"},"document_id":{"type":"string"}}},"title":"Render Ratsnest","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"render_ratsnest","displayName":"Render Ratsnest"},{"name":"render_stackup","description":"Render each copper layer of a multilayer board to its own image (with the board edge for framing), so inner planes are legible instead of buried under an all-layers composite. Returns one image per layer plus a layer→image index.","inputSchema":{"type":"object","required":["document_id"],"properties":{"width_px":{"type":"number"},"document_id":{"type":"string"}}},"title":"Render Stackup","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"render_stackup","displayName":"Render Stackup"},{"name":"search_electronic_parts","description":"Spec-search the generative parts catalog (offline). A query like '10k 0603 1%' parses to value+package+tolerance and returns the best match plus E-series neighbours, each with a generated footprint, symbol, and 3D body. A part is family+value+package, not a scraped row.","inputSchema":{"type":"object","required":["query"],"properties":{"limit":{"type":"integer"},"query":{"type":"string"}}},"title":"Search Electronic Parts","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"search_electronic_parts","displayName":"Search Electronic Parts"},{"name":"resolve_part","description":"Resolve a spec query (e.g. '10k 0603 1%') into ONE fully-specified part: E-series-snapped value plus a generated footprint + schematic symbol + 3D body (one parametric source of truth) and any MPN cross-references.","inputSchema":{"type":"object","required":["query"],"properties":{"query":{"type":"string"}}},"title":"Resolve Part","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"resolve_part","displayName":"Resolve Part"},{"name":"find_alternatives","description":"Propose spec-compatible substitutes for the part a query resolves to. Each alternative keeps the value, varies the package, and is labelled identical / needs-reroute / incompatible by re-deriving its footprint.","inputSchema":{"type":"object","required":["query"],"properties":{"query":{"type":"string"}}},"title":"Find Alternatives","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"find_alternatives","displayName":"Find Alternatives"},{"name":"verify_substitution","description":"PROVE a part swap on the session PCB: replace `reference` with the part `candidate` resolves to, re-derive its footprint, re-place at the same anchor, re-run DRC (incl. connectivity), and return the before/after violation delta with a `drop_in` verdict. An alternative is only drop-in when it adds no new violations and preserves pin numbering.","inputSchema":{"type":"object","required":["reference","candidate"],"properties":{"candidate":{"type":"string"},"reference":{"type":"string"},"document_id":{"type":"string"}}},"title":"Verify Substitution","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"verify_substitution","displayName":"Verify Substitution"},{"name":"build_receipt","description":"Build a re-runnable verification Receipt for the session PCB: a content hash, the DRC backend, a canonicalized DRC summary, and per-part provenance — a durable proof that round-trips and re-verifies later as Holds / Stale / Violated. Persisted clearance specs (check_clearance with a label) join the unified ledger as mech.clearance claims — a CAD-only session with specs gets a mechanical receipt, no PCB needed. Renders as an audit ledger in the inline viewer.","inputSchema":{"type":"object","properties":{"clearance":{"type":"number"},"document_id":{"type":"string"},"enclosure_document_id":{"type":"string"}}},"title":"Build Receipt","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"build_receipt","displayName":"Build Receipt"},{"name":"verify_receipt","description":"Re-run a prior receipt (from build_receipt) against the session's current document and return the verdict — Holds (unchanged, clean), Stale (changed but claims still hold), or Violated. Covers the PCB Receipt (board hash + DRC diff) and mech.clearance claims (re-measured against current geometry); worst verdict wins. Powers the ledger's Re-run button.","inputSchema":{"type":"object","required":["receipt"],"properties":{"receipt":{"type":"object"},"document_id":{"type":"string"}}},"title":"Verify Receipt","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"verify_receipt","displayName":"Verify Receipt"},{"name":"route_diff_pair","description":"Route a declared differential pair (net_p/net_n) coupled and length-matched, using the pair's diff-pair net-class gap and width. Routes straight (best on a clear channel); verify with run_drc / critique_route afterwards.","inputSchema":{"type":"object","required":["net_p","net_n"],"properties":{"net_n":{"type":"string"},"net_p":{"type":"string"},"document":{"type":"object"},"document_id":{"type":"string"}}},"title":"Route Differential Pair","logicalName":"route_diff_pair","displayName":"Route Differential Pair","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"critique_route","description":"Audit one net's routing without changing anything: total length, via/layer-change count, the closest approach to other-net copper, and any clearance/short/unconnected DRC issues it's in. Inspect a route before trusting it.","inputSchema":{"type":"object","required":["net"],"properties":{"net":{"type":"string"},"document":{"type":"object"},"document_id":{"type":"string"}}},"title":"Critique Route","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"critique_route","displayName":"Critique Route"},{"name":"run_erc","description":"Run Electrical Rule Check (ERC) on a schematic. Checks for duplicate references, unconnected pins, and pin type conflicts.","inputSchema":{"type":"object","required":[],"properties":{"document":{"type":"object"},"document_id":{"type":"string"}}},"title":"Run ERC","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"run_erc","displayName":"Run ERC"},{"name":"export_gerber","description":"Export Gerber RS-274X fabrication files from a PCB design. Generates copper layer files, drill file, pick-and-place CSV, and BOM. Gated on a clean DRC by default (require_clean_drc) — a dirty or unverifiable board is BLOCKED with its DRC summary instead of emitting an invalid bundle. Run validate_for_fab first for the full readiness verdict.","inputSchema":{"type":"object","required":[],"properties":{"document":{"type":"object"},"output_dir":{"type":"string"},"document_id":{"type":"string"},"require_clean_drc":{"type":"boolean"}}},"title":"Export Gerber","logicalName":"export_gerber","displayName":"Export Gerber","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"calc_coil","description":"Analyze a planar spiral coil: inductance (modified Wheeler), DC resistance, copper length, and L/R time constant. The analyzer for the planar-magnetics archetype (inductors, sensor coils, motor stators). Pure.","inputSchema":{"type":"object","required":["inner_radius","outer_radius","turns","trace_width"],"properties":{"turns":{"type":"number"},"geometry":{"type":"string"},"resistivity":{"type":"number"},"trace_width":{"type":"number"},"inner_radius":{"type":"number"},"outer_radius":{"type":"number"},"copper_thickness":{"type":"number"}}},"title":"Calc Coil","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"calc_coil","displayName":"Calc Coil"},{"name":"calc_rf","description":"Frequency-domain (AC) analysis of an RLC resonator: sweeps complex impedance over frequency and reports |Z|, phase, and S11/return-loss vs a reference Z0, plus resonance, Q, and the best match in the band. The RF/AC analyzer (calc_impedance is geometry-only). Pure.","inputSchema":{"type":"object","required":["r_ohm","l_henry","c_farad"],"properties":{"r_ohm":{"type":"number"},"points":{"type":"number"},"z0_ohm":{"type":"number"},"c_farad":{"type":"number"},"l_henry":{"type":"number"},"topology":{"type":"string"},"f_stop_hz":{"type":"number"},"f_start_hz":{"type":"number"}}},"title":"Calc RF","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"calc_rf","displayName":"Calc RF"}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=vcad&config=eyJ1cmwiOiAiaHR0cHM6Ly92Y2FkLmlvL2FwaS9tY3AifQ%3D%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22vcad%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fvcad.io%2Fapi%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22vcad%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fvcad.io%2Fapi%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=vcad&connectorUrl=https%3A%2F%2Fvcad.io%2Fapi%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"vcad\" --url \"https://vcad.io/api/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/vcad-mcp-cf517e6d7e","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/vcad-mcp-cf517e6d7e/tools/{tool}","mcpServerUrl":"https://vcad.io/api/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/vcad-mcp-cf517e6d7e?live=1"}