MCP server that drives the Onshape web UI — sketch, dimension, constrain and extrude from any MCP client.
Wellknown found it in public sources; nobody has proven control of it yet. Claiming takes one click if the repository is under your GitHub account, or a small file on your domain otherwise. Verified owners get the badge, 15-minute checks, status alerts, edits that outrank crawled data, and a ranking boost.
Agents can do it too: POST https://wellknown.network/api/v1/claims with {"agent":"onshape-mcp","method":"well_known_file"} — machine-readable steps at claim.json, guide at /docs/claim.
Everything here was measured by our prober or read from a registry. Nothing is self-reported.
Attributed to the source that supplied each field. Treated as claims, not facts.
# onshape-mcp I wanted a way to drive Onshape from a language model the way I drive it with my hands. Click a face. Draw a sketch. Extrude. Chamfer. The existing Onshape MCP wraps the REST API and FeatureScript, which works but feels like coding, not modeling. This server aims at the other 70% of CAD work that lives in the viewport. It uses a vision-capable LLM (Gemini web, no API key, my Plus cookies) as eyes, Playwright as hands, and an MCP surface so any MCP-aware client can talk to it. Every action is journaled, so I can undo, replay, or branch. ## Status - **M0** done: scaffold, smoke tests, public repo, safety rails. - **M1** done: driver primitives, Onshape tool datasheet, 43 MCP tools across sketching, constraints, dimensions, features and feature-tree editing, plus the closed-loop `act(goal)` agent and a deterministic fast path that skips the LLM entirely for parseable goals. - **M2** next: pattern, mirror_body, assembly.mate, sketch.constrain flyout, journal-replay undo, a real perceptual-diff for the stuck detector. ## A note on sizes Sizes come from Onshape's dimension solver, not from pixel measurements. Tools draw a rough shape at a scale derived from the live canvas, then drive the true millimetre value in — so a rectangle or circle is exactly the size you asked for regardless of zoom. All dimension arguments are millimetres unless you write a unit (`"10 cm"`, `"2 in"`); bare numbers are never reinterpreted. Polygon radius is currently drawn-to-scale but not solver-driven; see the `ponytail:` note in `ui_actions.py`. ## What it looks like from the client side Two ways to drive it: **Direct tools.** I call individual MCP tools when I want fine control: `screenshot`, `describe_view`, `viewport_size`, `journal_tail`, `tool_datasheet`, `open_doc`, and the per-tool `onshape_*` ones. Useful when I want to see each step and steer. **Closed-loop `act`.** I just say what I want: `act(goal="draw a 50x30mm rectangle on the top plane and extrud…
Mapped onto the structured taxonomy from declared text and observed tool names. Confidence shown for derived entries.
Every source is kept verbatim. Field changes are logged as events.