Plasticity MCP
Summary: The server drives a locally running Plasticity CAD app from an MCP client — to connect to a chosen window, inspect and measure native B-Rep geometry, run native modeling/document/mutation operations through a bounded tool catalog, and capture screenshots.
Discover and dispatch operations —
plasticity_callbrowses the bounded catalog of registered Plasticity MCP operations (toolName: "catalog"withquery/offset/limit) to read their descriptions and JSON input schemas, then invokes any of them by exact name with anargumentsobject. It is a registered-operation dispatcher, not JavaScript execution.Find and connect to Plasticity —
plasticity_list_windowslists Plasticity document windows exposed on loopback CDP;plasticity_connectattaches to one explicit window (targetId) and returns a compact initial scene summary.Read document state —
plasticity_statusreturns identity, revision, exact body bounds, topology counts, and Undo/Redo state, with paginated body summaries (bodyOffset/bodyLimit, up to 200).Inspect the user's selection —
plasticity_current_selectionreports selected bodies, linked instances, approximate reference meshes, groups, faces, edges, regions, and native Wire boundary/control handles.Get exact topology —
plasticity_list_bodieslists native B-Rep details with topology IDs (paginated), andplasticity_body_inforeads a single body exactly, including cone basis radius, axis, and semi-angle where available.Track scene changes —
plasticity_capture_snapshotrecords an in-memory baseline (returns snapshot ID, document/revision identity, object counts);plasticity_changes_sincereturns a structured, paginated diff covering changed bodies, sketch Regions, construction planes, materials, visibility, instances, groups, and selection.Recover from failures —
plasticity_reconcilere-reads the document after a timeout or disconnect so later mutations can proceed without retrying the uncertain command.Capture renders —
plasticity_screenshotsaves a PNG of the visible viewport to a new file without overwriting, refusing hidden windows to avoid stale frames.Model and deliver through the catalog — the underlying operation set covers native CAD creation/editing with document history (Undo/Redo), document operations, import/export, and camera screenshots; mutations are serialized and revision-checked, so stale references are rejected. Units are millimeters and degrees. Some tools (e.g. printing) require explicit user confirmation.
Provides an optional Creality Print workflow for slicing and print-job preparation, with the agent waiting for explicit user confirmation before starting a print.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Plasticity MCPcreate a 20mm cube and export as STEP"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Plasticity MCP
Control Plasticity from an MCP client: inspect and measure native CAD geometry, create and edit models, and export the result. An optional Workbench supports model review, dimensional feedback, and print preparation.
Runs locally on macOS Apple Silicon with Plasticity 26.1.3. The MCP server connects to a Plasticity window selected by the user; it cannot run as a standalone cloud CAD service.
CAD workflow | What the server provides |
Inspect | Scene state, precise B-rep measurements, and references to bodies, faces, and edges |
Model | Native creation and editing with document history, Undo, and Redo |
Deliver | Document operations, import/export, and camera screenshots |
Review | Optional local Workbench with measurement tables, dimensional feedback, and tablet annotations |
The server uses Plasticity's own command factories and document history through a loopback-only Electron CDP endpoint. It does not patch or re-sign the application. MCP geometry inputs use millimeters and degrees; native edits support Plasticity Undo and Redo.
What it provides
Native Plasticity scene inspection, precise B-rep measurements, and revision-bound references to bodies, faces, and edges.
Native CAD creation and editing, document operations, import/export, and camera screenshots.
Agent guidance and workflows for image/sketch-driven design, functional clarification, fasteners, and practical strength screening.
Optional Workbench for viewing models and measurement tables, submitting validated dimensional feedback, and tablet annotations on the same local network.
Optional Creality Print workflow for slicing and print-job preparation. The agent waits for explicit user confirmation before starting a print.
See the full tool reference, acceptance matrix, and Workbench operations guide for details and current verification status.
Related MCP server: print_prep_studio
Requirements
macOS on Apple Silicon
Plasticity 26.1.3 installed at
/Applications/Plasticity.appNode.js 24 or newer
Codex CLI for the Git-backed plugin installation below
This is an early, version-specific project. Live CAD and slicer operations depend on the installed applications and are not covered by mock tests alone. Check the acceptance matrix before relying on a specific operation.
Install and run
git clone https://github.com/Mesteriis/plasticity-mcp.git
cd plasticity-mcp
npm install
npm run start:plasticity
npm run setup:codexsetup:codex adds this GitHub repository as a Codex plugin marketplace and installs the plasticity-mcp plugin from Git. It records this checkout's path in a private file under ~/.plasticity-mcp so the two MCP servers can run the checked-out code and its installed dependencies. No machine-specific paths are committed. Open a new Codex chat after installation.
To use the MCP server without the plugin, register it directly instead:
codex mcp add plasticity -- npm --prefix "$PWD" startAsk the agent to call plasticity_list_windows, then connect to an explicitly selected window with plasticity_connect.
The default MCP catalog shows the core connect, inspection, change-tracking, and screenshot tools plus plasticity_call. For any other operation, use plasticity_call with toolName: "catalog" and a search query to get its name and input schema, then call it through the same dispatcher. The full catalog remains available with npm run start:full; existing handlers and validation are the same in both modes.
The launcher does not terminate an existing Plasticity process to add MCP access. If it reports that a restart is needed, save your documents, close Plasticity yourself, then rerun the command. CDP listens on loopback only.
Optional Workbench
The Workbench is not required for chat-based use. Start it on the local machine with:
npm run start:workbenchIn another terminal on the same Mac, run npm --workspace workbench run open:owner to open an authenticated owner session. The server address alone does not grant owner access.
To make it reachable by a tablet on the same private network, run npm run start:workbench -- --lan; the server prints its local address. Do not expose it to the public internet. Follow the Workbench guide for registration, sharing, backup, and recovery.
Development
npm test
npm run typecheck
npm --prefix workbench test
npm --prefix workbench run typecheck
npm --prefix workbench run buildLive acceptance checks use a real Plasticity session and can mutate a document. Read the corresponding acceptance guide and explicitly select a disposable test document before running them; they are not part of the default test suite.
Safety and scope
Mutations are serialized and checked against the current document revision; stale references are rejected.
After a timeout or lost connection during a mutation, inspect/reconcile the scene before issuing another change.
Workbench dimensional inputs are validated in the browser and again on the server.
Print submission and starting a print are separate actions; starting requires explicit user confirmation.
This project does not replace Plasticity, provide certified engineering analysis, or guarantee printability or part strength. Strength tools are screening calculations whose assumptions and limitations must be reviewed.
Contributing and support
Read CONTRIBUTING.md before opening a pull request. Report security issues using the private reporting process in SECURITY.md. See SUPPORT.md for bug reports, feature requests, and usage questions. Contributions are released under the MIT License, with copyright attributed to Aleksand Meshchriakov.
Available Tools
11 toolsplasticity_body_infoBRead-only
Read one body from the current document revision.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, covering the safety profile. The description adds scoping context ("current document revision"), which is useful, but says nothing about behavior when the id is invalid or about the returned payload, so it is only modestly additive over the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. For a one-parameter read tool it is appropriately sized and wastes nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and annotations cover safety, but with no output schema and no parameter descriptions, the description leaves the agent without return-shape or error-behavior context. Adequate but with clear gaps for a body-inspection tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. "Read one body" implies the single integer id identifies a body, which is a reasonable but minimal hint; it adds no format, range, or lookup guidance beyond that implication.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Read one body from the current document revision" states a specific verb (read) and resource (one body), and the singular "one body" implicitly distinguishes it from plasticity_list_bodies. However, it does not name or contrast against any sibling, so the differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no mention of alternatives like plasticity_list_bodies or plasticity_select_bodies, and no prerequisites. The agent must infer that this is for retrieving details of a single known body id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plasticity_callPlasticity tool catalog and dispatcherADestructive
Browse the bounded catalog of registered Plasticity MCP operations or invoke one by its exact tool name. Use toolName='catalog' with query/offset/limit to read descriptions and JSON input schemas; set toolName to a returned operation name and pass its arguments object to invoke it. Only registered MCP operations are callable; the selected operation's original Zod schema and safety checks are applied. This is not JavaScript execution.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| offset | No | ||
| toolName | No | catalog | |
| arguments | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and openWorldHint=true, and the description complements this by clarifying the catalog is 'bounded', only registered MCP operations are callable, the selected operation's original Zod schema and safety checks are applied, and it is 'not JavaScript execution'. That last point usefully closes off a plausible misinterpretation, though it does not describe what an invocation returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences with the core operation stated first, then the two usage modes, then the safety framing. No filler, no restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a dispatcher with a nested free-form 'arguments' object, no output schema, and 0% schema description coverage, the description covers the essential contract: how to browse, how to invoke, and that safety checks are enforced. It could still say what a successful invocation returns or how an invalid toolName is reported.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden, and it maps the parameters well: toolName selects 'catalog' or an operation name, query/offset/limit drive catalog browsing, and arguments is the target operation's argument object. It adds real meaning over bare type declarations, though limit/offset pagination semantics are only implied by the schema defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource pair: 'Browse the bounded catalog of registered Plasticity MCP operations or invoke one by its exact tool name.' This cleanly separates the dispatcher role from every sibling in the list, which are the individual operations it would dispatch to.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage mechanics: use toolName='catalog' with query/offset/limit to read schemas, then set toolName to a returned operation name and pass its arguments. What is missing is guidance on when to route through this dispatcher versus calling a sibling tool (e.g. plasticity_create_circle) directly, which is the primary decision an agent faces.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plasticity_capture_snapshotARead-only
Capture an in-memory scene baseline before manual edits. Returns only the snapshot ID, document/revision identity and object counts; use that ID with plasticity_changes_since or plasticity_wait_for_change.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, and the description does not contradict them — the snapshot is an in-memory baseline read of the scene, not a mutation. It adds real value by describing the payload scope ('returns only the snapshot ID, document/revision identity and object counts'), which compensates for the absent output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences, with the action and its purpose front-loaded and the follow-up usage trailing. No filler or repetition of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully summarizes what is returned, and annotations cover the safety profile, so an agent has what it needs to call and chain the tool. The only gap is the undocumented 'label' parameter, a minor omission for a 0-required-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single optional 'label' parameter has 0% schema description coverage and is never mentioned in the description, so no semantics are added. Impact is limited because the parameter is optional and self-explanatory, which keeps this at the minimum-viable baseline rather than lower.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Capture an in-memory scene baseline') with an explicit scope and timing condition ('before manual edits'). It also names the downstream consumers (plasticity_changes_since, plasticity_wait_for_change), so an agent immediately understands this tool's role in the workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'before manual edits' states the intended moment to call it, and the second sentence tells the agent what to do with the returned ID, effectively routing to the two companion tools. There is no explicit when-not-to-use or statement of alternatives to this specific tool, but the workflow context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plasticity_changes_sinceARead-only
Return a structured diff from a captured scene baseline. Exact changed-body B-Rep descriptors are summarized and paginated (bodyOffset default 0, bodyLimit default 20, maximum 100); follow bodyPagination.nextOffset with expectedRevision set to current.revision. Use plasticity_body_info for detailed topology of selected bodies. The diff also reports sketch Regions, construction planes, materials, visibility, instances, groups, and selection. Check sceneChanged for a reportable scene edit; revisionChanged can be true without a reportable scene diff.
| Name | Required | Description | Default |
|---|---|---|---|
| bodyLimit | No | ||
| bodyOffset | No | ||
| snapshotId | Yes | ||
| expectedRevision | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description goes further by disclosing pagination mechanics (bodyOffset default 0, bodyLimit default 20, max 100), the optimistic-revision contract, and the subtle sceneChanged vs revisionChanged distinction. That is real behavioral context an agent could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the core purpose leads, then pagination instructions, then the companion tool, then the reporting caveat. Every sentence carries information, though the enumeration of diffed categories is long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of describing the return payload (changed-body B-Rep descriptors plus regions, planes, materials, visibility, instances, groups, selection), which is substantial. Remaining gap is minor: no error/expiry behavior and only implicit explanation of how the baseline snapshot is identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it does for three of four: bodyOffset/bodyLimit defaults and maximum, and expectedRevision tied to current.revision. snapshotId is only implicitly described as the 'captured scene baseline', leaving its exact format/relationship to capture_snapshot unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Return a structured diff from a captured scene baseline') and enumerates the diffed categories, so an agent can distinguish it from sibling inspection tools. It also explicitly routes topology-level detail to plasticity_body_info rather than leaving the boundary implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete operating guidance: follow bodyPagination.nextOffset with expectedRevision set to current.revision, and use plasticity_body_info for detailed topology of selected bodies. It also tells the agent to check sceneChanged for a reportable edit. It stops short of stating explicit when-not conditions or the snapshot prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plasticity_connectADestructive
Connect this MCP process to one explicit Plasticity window and return its compact initial scene summary. Body bounds/counts are paginated; use plasticity_body_info for exact topology of a selected body.
| Name | Required | Description | Default |
|---|---|---|---|
| targetId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=false, so the safety profile is partly covered. The description adds that the initial scene summary is compact and that body bounds/counts are paginated, but never explains what 'connect' does to any existing connection/lifecycle state — which the destructive hint implies matters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the primary action and its result, then the sibling routing. Nothing wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description does supply a return summary and a pagination caveat. But for a connection-establishing tool with a required, undocumented parameter, it omits the target identifier format and any connection lifecycle/replacement behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required targetId. The phrase 'one explicit Plasticity window' implies targetId identifies a window, which is some added meaning, but the accepted format (id vs name) and the 'one window at a time' constraint are left unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: connecting the MCP process to one explicit Plasticity window, plus the return value (compact initial scene summary). This clearly distinguishes it from siblings like plasticity_list_windows, plasticity_status, or plasticity_call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to plasticity_body_info when exact body topology is needed, and warns that body bounds/counts are paginated. It does not, however, say when to prefer connect over plasticity_list_windows or plasticity_status, so the alternative routing is only partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plasticity_current_selectionARead-only
Read bodies, linked instances, approximate reference meshes, groups, faces, edges, regions, and native Wire boundary/control handles currently selected by the user in Plasticity.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe, non-destructive, non-open-world read, so the safety profile is covered. The description usefully extends this by enumerating what entity categories are returned, which is the main added value, but it says nothing about ordering, empty-selection behavior, or how the result is structured.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the verb and scope, with the entity list following. Every element earns its place; the only mild cost is the long enumeration, which is nonetheless informative rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description carries the burden of describing return content and does so by listing the returned entity types. It stops short of describing result structure or the empty-selection case, but for a read-only, zero-parameter tool it is close to sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema is trivially complete and there is nothing for the description to compensate for. The baseline for a parameterless tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and a well-scoped resource ('...currently selected by the user'), then enumerates the entity kinds involved (bodies, instances, reference meshes, groups, faces, edges, regions, Wire handles). It is distinctly different from sibling list_*/select_* tools in intent, but it never names a sibling to contrast against, so the differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'currently selected by the user' implies the operating context (inspect the live CAD selection) but gives no explicit when-to-use, no exclusions, and no pointer to alternative tools such as plasticity_select_bodies or plasticity_list_bodies. An agent can infer the intent but must guess at the boundary cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plasticity_list_bodiesARead-only
List exact native B-Rep body details with topology IDs. Results are paginated (bodyOffset default 0, bodyLimit default 10, maximum 100); follow bodyPagination.nextOffset and pass the previous page's revision as expectedRevision so edits cannot mix pages. Prefer plasticity_body_info when only one body is needed. Cone faces also report native basis radius, axis origin/direction, and semi-angle in radians when Plasticity provides them.
| Name | Required | Description | Default |
|---|---|---|---|
| bodyLimit | No | ||
| bodyOffset | No | ||
| expectedRevision | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, non-destructive read, so the description wisely spends its space on behavior annotations cannot express: page size defaults and the 100 cap, the revision-pinning requirement that prevents mixing pages after edits, and the fact that cone faces carry extra basis/axis/semi-angle data. This is exactly the kind of operational context an agent needs before paging.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences with no filler; the purpose and pagination contract are front-loaded before the sibling pointer and the cone-face note. Slightly dense but every sentence carries a distinct fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description does a reasonable job describing what comes back (topology IDs, pagination cursor, cone face basis data). It does not fully enumerate the returned body fields, but for a paginated listing tool the critical call-correctness information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load and it does: bodyOffset described (default 0) and bodyLimit (default 10, max 100) are both explained in prose, and expectedRevision is given meaning and format ('pass the previous page's revision'), not just a name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List exact native B-Rep body details with topology IDs') and explicitly distinguishes itself from the closest sibling by naming plasticity_body_info and the condition that selects it. An agent can separate this from plasticity_body_info, plasticity_select_bodies, and plasticity_validate_bodies without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use routing ('Prefer plasticity_body_info when only one body is needed') and mandatory pagination procedure with the nextOffset/expectedRevision contract. It also flags that the revision must be threaded to prevent mixing edits across pages, which is the key usage constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plasticity_list_windowsBRead-only
List Plasticity document windows exposed on loopback CDP.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: discovery happens over loopback CDP, i.e. a local debugging channel rather than geometry data. It does not say what happens when no windows are exposed or whether any connection setup is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with zero filler; the resource and its access mechanism are stated immediately and nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description should carry more of the return-shape burden — an agent cannot tell from this text whether entries are window titles, IDs, counts, or process handles, nor what an empty result means. The mechanism (loopback CDP) is a helpful hint but the result contract is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the description carries no parameter burden; baseline is 4. Nothing in the description conflicts with the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('Plasticity document windows exposed on loopback CDP'), which an agent can distinguish from the many CAD-operation siblings since none of them enumerate windows. It is clear without being tautological, though it does not contrast itself against any particular sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives, nor any prerequisite or exclusion. Usage is only implied by the name and the presence of a CDP-exposed window list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plasticity_reconcileARead-only
Read the document after a timeout or disconnect and allow later mutations without retrying the uncertain command.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, so safety is covered. The description adds genuinely non-annotation context about the timeout/disconnect recovery scenario, but the phrase 'allow later mutations' is mildly confusing for a read-only tool and no return behavior is described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence leading with the scenario ('after a timeout or disconnect') and the effect. It is tight, though the trailing clause about not retrying the uncertain command reads slightly awkwardly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description should make the post-call state clear. It explains the scenario but not what 'reading' yields or how the agent should proceed afterward, leaving a modest gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so per the baseline there is nothing for the description to compensate for; schema coverage is 100% on an empty object. No parameter-level ambiguity exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description conveys a specific operation: reading the document after a timeout or disconnect to reconcile uncertain state so later mutations can proceed without retrying. It is more than a restatement of the name, though the exact mechanism (what 'reconcile' does beyond reading) stays somewhat abstract.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the triggering condition (after a timeout or disconnect) and the intended effect (later mutations without retrying the uncertain command), which tells an agent when to reach for it. It does not, however, name any alternative recovery approach or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plasticity_screenshotA
Save a PNG screenshot of the visible Plasticity renderer viewport to a new file without overwriting. Refuses hidden windows to avoid stale frames.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, and the description usefully adds that the file is written new and never overwritten, plus that hidden windows are rejected to avoid stale frames. That is real behavioral context beyond the annotations, though auth/permission needs and the return value go unmentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, both of which earn their place: the first gives the action and its non-overwrite guarantee, the second gives the refusal condition. No filler and the core action is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should ideally indicate what comes back (saved file path, or an error on hidden windows). It covers the write semantics and the refusal case, which is adequate for a one-parameter tool, but leaves the return contract unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single 'path' parameter, so the description carries the burden. It says the target is a 'new file' and will not be overwritten, implying a destination path, but it never states whether the path is absolute or relative or whether the .png extension must be included.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: saving a PNG screenshot of the visible Plasticity renderer viewport. That is far more precise than a sibling like plasticity_capture_snapshot, but the description never contrasts itself with that sibling explicitly, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to reach for this tool versus plasticity_capture_snapshot or plasticity_list_windows. The only condition mentioned ('refuses hidden windows') is a failure mode rather than usage guidance, leaving the agent to guess when this is the right capture tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plasticity_statusARead-only
Read a compact document summary with identity, revision, exact body bounds, topology counts, and Undo/Redo state. Body summaries are paginated with bodyOffset/bodyLimit (default 0/50, maximum 200); follow bodyPagination.nextOffset and pass the prior page's revision as expectedRevision so scene edits cannot mix pages. Use plasticity_body_info for exact face/edge/vertex geometry of one body, or plasticity_list_bodies for paginated topology details.
| Name | Required | Description | Default |
|---|---|---|---|
| bodyLimit | No | ||
| bodyOffset | No | ||
| expectedRevision | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/openWorldHint/destructiveHint, so safety is covered. The description adds genuinely useful behavior beyond that: pagination defaults and maximums, and the revision-pinning mechanism that prevents scene edits from mixing pages. It stops short of describing error handling or failure modes, but the added context is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with zero filler, and the most important information (what it reads, what the payload contains) is front-loaded before the pagination mechanics and the sibling routing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the burden of describing the return content, which it does (identity, revision, body bounds, topology counts, Undo/Redo state), and it fully explains the paginated body-summary behavior. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load, and it does: bodyOffset/bodyLimit defaults (0/50) and maximum (200) are given, and expectedRevision is explained in terms of passing the prior page's revision to avoid mixed pages. All three parameters are meaningfully documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Read') and resource ('compact document summary') and enumerates the exact payload: identity, revision, exact body bounds, topology counts, and Undo/Redo state. It is clearly distinguishable from siblings, which it names explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to reach for alternatives: 'Use plasticity_body_info for exact face/edge/vertex geometry of one body, or plasticity_list_bodies for paginated topology details.' It also describes the correct pagination workflow (follow bodyPagination.nextOffset, pass the prior page's revision as expectedRevision), so an agent knows both when to use it and how.
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.
360 tool updates
v0.2.1- Removed
plasticity_activate_group - Removed
plasticity_align_cylindrical_faces - Removed
plasticity_align_linear_edges - Removed
plasticity_align_planar_faces - Removed
plasticity_align_vertices - Removed
plasticity_analyze_cohesive_interface - Removed
plasticity_analyze_cone_development - Removed
plasticity_analyze_design_reference - Removed
plasticity_analyze_edge_curvature - Removed
plasticity_analyze_face_draft - Removed
plasticity_analyze_material_interface_test_curve - Removed
plasticity_analyze_static_fem - Removed
plasticity_analyze_strength_task - Removed
plasticity_analyze_surface_continuity - Removed
plasticity_boolean - Removed
plasticity_bridge_curve_vertices - Removed
plasticity_bridge_curves - Removed
plasticity_bridge_shell_edges - Removed
plasticity_bridge_surface - Removed
plasticity_calculate_dcb_mode_i_energy - Removed
plasticity_calculate_enf_mode_ii_energy - Removed
plasticity_calculate_fastener_member_strength - Removed
plasticity_calculate_heat_set_insert_retention - Removed
plasticity_calculate_interface_specimen_strengths - Removed
plasticity_calculate_mmb_mode_i_ii_energy - Removed
plasticity_calculate_rectangular_strength_from_coupon_data - Removed
plasticity_calculate_section_strength - Removed
plasticity_calculate_single_fastener_strength - Removed
plasticity_calculate_strength - Removed
plasticity_calculate_threaded_receiver_strength - Removed
plasticity_calculate_tongue_root_strength - Removed
plasticity_calculate_tongue_root_strength_from_coupon_data - Removed
plasticity_calibrate_turon_mixed_mode_law - Removed
plasticity_cap_sheet_holes - Removed
plasticity_capabilities - Removed
plasticity_chamfer - Removed
plasticity_check_fastener_group_layout - Removed
plasticity_check_fastener_stack - Removed
plasticity_check_interference - Removed
plasticity_cohesive_fem_report - Removed
plasticity_combine_material_coupon_data - Removed
plasticity_compare_static_fem_refinement_reports - Removed
plasticity_construction_history - Removed
plasticity_construction_journal - Removed
plasticity_convert_curve_vertices_to_control_points - Removed
plasticity_create_blind_hole - Removed
plasticity_create_blind_hole_pattern - Removed
plasticity_create_body_intersection_curves - Removed
plasticity_create_body_outlines - Removed
plasticity_create_box - Removed
plasticity_create_cantilever_snap_fit - Removed
plasticity_create_center_arc - Removed
plasticity_create_circle - Removed
plasticity_create_cone - Removed
plasticity_create_cone_development - Removed
plasticity_create_connector_opening - Removed
plasticity_create_constrained_surface - Removed
plasticity_create_construction_plane - Removed
plasticity_create_counterbore - Removed
plasticity_create_counterbore_pattern - Removed
plasticity_create_countersink - Removed
plasticity_create_countersink_pattern - Removed
plasticity_create_curves_from_regions - Removed
plasticity_create_cylinder - Removed
plasticity_create_dovetail_joint - Removed
plasticity_create_ellipse - Removed
plasticity_create_group - Removed
plasticity_create_heat_set_insert_pocket - Removed
plasticity_create_heat_set_insert_pocket_pattern - Removed
plasticity_create_helix - Removed
plasticity_create_hex_nut_pocket - Removed
plasticity_create_hex_nut_pocket_pattern - Removed
plasticity_create_hinge_barrel - Removed
plasticity_create_instance - Removed
plasticity_create_locating_pin_pair - Removed
plasticity_create_locating_pin_pair_pattern - Removed
plasticity_create_mating_enclosure_joint - Removed
plasticity_create_nurbs_curve - Removed
plasticity_create_pipes - Removed
plasticity_create_polyline - Removed
plasticity_create_printed_external_thread - Removed
plasticity_create_printed_hex_nut - Removed
plasticity_create_printed_hex_pair - Removed
plasticity_create_printed_hex_screw - Removed
plasticity_create_printed_thread_calibration_set - Removed
plasticity_create_radius_measurement - Removed
plasticity_create_rectangle - Removed
plasticity_create_regular_polygon - Removed
plasticity_create_rib - Removed
plasticity_create_round_vent_array - Removed
plasticity_create_screw_boss - Removed
plasticity_create_screw_boss_pattern - Removed
plasticity_create_section_analysis - Removed
plasticity_create_slot_profiles - Removed
plasticity_create_slotted_hole - Removed
plasticity_create_slotted_hole_pattern - Removed
plasticity_create_solid_from_sheet - Removed
plasticity_create_sphere - Removed
plasticity_create_split_screw_insert_joint - Removed
plasticity_create_tangent_arc - Removed
plasticity_create_tangent_circle - Removed
plasticity_create_text - Removed
plasticity_create_three_point_arc - Removed
plasticity_create_three_point_circle - Removed
plasticity_create_through_hole - Removed
plasticity_create_through_hole_pattern - Removed
plasticity_create_tongue_groove_joint - Removed
plasticity_create_topology_distance_measurement - Removed
plasticity_create_torus - Removed
plasticity_create_two_point_circle - Removed
plasticity_create_vertex_distance_measurement - Removed
plasticity_curve_pattern - Removed
plasticity_cut_cable_channel - Removed
plasticity_cut_printed_internal_thread - Removed
plasticity_cut_with_faces - Removed
plasticity_define_datum_axis - Removed
plasticity_define_datum_point - Removed
plasticity_deform_bodies_between_faces - Removed
plasticity_deform_curves_between_faces - Removed
plasticity_delete - Removed
plasticity_delete_curve_control_points - Removed
plasticity_delete_edges - Removed
plasticity_delete_faces - Removed
plasticity_delete_instances - Removed
plasticity_delete_measurement - Removed
plasticity_delete_named_selection - Removed
plasticity_delete_reference_meshes - Removed
plasticity_delete_section_analysis - Removed
plasticity_design_reference_request - Removed
plasticity_diagnose - Removed
plasticity_dissolve_faces - Removed
plasticity_dissolve_groups - Removed
plasticity_distribute_fastener_group_load - Removed
plasticity_download_and_import_parasolid - Removed
plasticity_download_and_import_reference_3mf - Removed
plasticity_download_and_import_reference_mesh - Removed
plasticity_download_and_import_step - Removed
plasticity_draft_faces - Removed
plasticity_duplicate_bodies - Removed
plasticity_duplicate_curves - Removed
plasticity_evaluate_curve_segments - Removed
plasticity_export_3mf - Removed
plasticity_export_hiddenline_svg - Removed
plasticity_export_obj - Removed
plasticity_export_parasolid - Removed
plasticity_export_step - Removed
plasticity_export_stl - Removed
plasticity_export_svg - Removed
plasticity_extend_curve_endpoints - Removed
plasticity_extend_sheet_edges - Removed
plasticity_extract_edges - Removed
plasticity_extract_faces - Removed
plasticity_extrude_faces - Removed
plasticity_extrude_profile - Removed
plasticity_extrude_regions - Removed
plasticity_fastener_group_plate_bearing_report - Removed
plasticity_fillet - Removed
plasticity_fillet_curve_vertices - Removed
plasticity_find_edges - Removed
plasticity_find_faces - Removed
plasticity_get_cad_reference_import - Removed
plasticity_get_step_import - Removed
plasticity_hollow_faces - Removed
plasticity_hollow_solids - Removed
plasticity_import_dcb_mode_i_energy_csv - Removed
plasticity_import_enf_mode_ii_energy_csv - Removed
plasticity_import_interface_fracture_csv - Removed
plasticity_import_interface_tensile_csv - Removed
plasticity_import_mmb_mode_i_ii_energy_csv - Removed
plasticity_import_parasolid - Removed
plasticity_import_reference_3mf - Removed
plasticity_import_reference_mesh - Removed
plasticity_import_step - Removed
plasticity_import_svg - Removed
plasticity_imprint_bodies - Removed
plasticity_imprint_curves_on_body - Removed
plasticity_insert_curve_knot - Removed
plasticity_insert_isoparam_edges - Removed
plasticity_insert_sheet - Removed
plasticity_inspect_arbitrary_section - Removed
plasticity_inspect_arbitrary_sections - Removed
plasticity_inspect_curve_planarity - Removed
plasticity_inspect_curve_structure - Removed
plasticity_inspect_fastener_group - Removed
plasticity_inspect_integral_rectangular_plate - Removed
plasticity_inspect_planar_section - Removed
plasticity_inspect_rectangular_member - Removed
plasticity_inspect_single_fastener_plate - Removed
plasticity_inspect_surface_structure - Removed
plasticity_inspect_tongue_root_section - Removed
plasticity_join_curves - Removed
plasticity_join_sheets - Removed
plasticity_list_appearance_materials - Removed
plasticity_list_cad_reference_imports - Removed
plasticity_list_construction_geometry - Removed
plasticity_list_curve_control_points - Removed
plasticity_list_curve_directions - Removed
plasticity_list_curve_endpoints - Removed
plasticity_list_curve_fragments - Removed
plasticity_list_curve_intersections - Removed
plasticity_list_curve_vertices - Removed
plasticity_list_dcb_mode_i_energy_tests - Removed
plasticity_list_enf_mode_ii_energy_tests - Removed
plasticity_list_fastener_group_tests - Removed
plasticity_list_groups - Removed
plasticity_list_instances - Removed
plasticity_list_material_coupon_data - Removed
plasticity_list_material_interface_tests - Removed
plasticity_list_measurements - Removed
plasticity_list_mmb_mode_i_ii_energy_tests - Removed
plasticity_list_named_selections - Removed
plasticity_list_printed_thread_qualifications - Removed
plasticity_list_reference_assets - Removed
plasticity_list_reference_meshes - Removed
plasticity_list_regions - Removed
plasticity_list_section_analyses - Removed
plasticity_list_step_imports - Removed
plasticity_loft_curves - Removed
plasticity_loft_faces - Removed
plasticity_loft_regions - Removed
plasticity_match_dcb_mode_i_energy_test - Removed
plasticity_match_enf_mode_ii_energy_test - Removed
plasticity_match_faces - Removed
plasticity_match_fastener_group_test - Removed
plasticity_match_material_coupon_data - Removed
plasticity_match_material_interface_test - Removed
plasticity_match_mmb_mode_i_ii_energy_test - Removed
plasticity_match_printed_thread_qualification - Removed
plasticity_measure - Removed
plasticity_measure_face_properties - Removed
plasticity_measure_fastener_grip_stack - Removed
plasticity_measure_linear_edges - Removed
plasticity_measure_nonparallel_planar_polygon_clearance - Removed
plasticity_measure_parallel_planar_face_clearance - Removed
plasticity_measure_planar_faces - Removed
plasticity_measure_point_distance - Removed
plasticity_measure_point_to_circular_edge - Removed
plasticity_measure_point_to_curved_edge - Removed
plasticity_measure_point_to_linear_edge - Removed
plasticity_measure_point_to_planar_face - Removed
plasticity_measure_solid_properties - Removed
plasticity_mirror - Removed
plasticity_move - Removed
plasticity_move_curve_control_points - Removed
plasticity_move_edges - Removed
plasticity_move_faces - Removed
plasticity_move_instances - Removed
plasticity_move_reference_meshes - Removed
plasticity_move_to_group - Removed
plasticity_offset_edges - Removed
plasticity_offset_face_loops - Removed
plasticity_offset_faces - Removed
plasticity_offset_planar_curves - Removed
plasticity_offset_regions - Removed
plasticity_offset_vertices - Removed
plasticity_open_document - Removed
plasticity_orient_bodies_for_print - Removed
plasticity_patch_closed_wires - Removed
plasticity_patch_regions - Removed
plasticity_patch_sheet_hole - Removed
plasticity_patch_solid_edge_loops - Removed
plasticity_plan_cohesive_layer_planes - Removed
plasticity_plan_single_material_strength_tests - Removed
plasticity_planarize_curves - Removed
plasticity_project_curve_pair - Removed
plasticity_project_curves_onto_body - Removed
plasticity_radial_face_pattern - Removed
plasticity_radial_pattern - Removed
plasticity_raise_curve_degree - Removed
plasticity_raise_surface_degree - Removed
plasticity_read_dcb_mode_i_energy_test - Removed
plasticity_read_enf_mode_ii_energy_test - Removed
plasticity_read_mmb_mode_i_ii_energy_test - Removed
plasticity_realize_instances - Removed
plasticity_rebuild_curves - Removed
plasticity_rebuild_face - Removed
plasticity_record_dcb_mode_i_energy_test - Removed
plasticity_record_enf_mode_ii_energy_test - Removed
plasticity_record_fastener_group_test - Removed
plasticity_record_material_coupon_data - Removed
plasticity_record_material_interface_test - Removed
plasticity_record_mmb_mode_i_ii_energy_test - Removed
plasticity_record_printed_thread_qualification - Removed
plasticity_rectangular_face_pattern - Removed
plasticity_rectangular_pattern - Removed
plasticity_redo - Removed
plasticity_reference_search_status - Removed
plasticity_refillet_faces - Removed
plasticity_refresh_datum - Removed
plasticity_remove_construction_plane - Removed
plasticity_remove_fillets - Removed
plasticity_rename - Removed
plasticity_rename_group - Removed
plasticity_rename_reference_mesh - Removed
plasticity_resolve_fastener_designation - Removed
plasticity_reverse_curves - Removed
plasticity_reverse_sheets - Removed
plasticity_revolve_profile - Removed
plasticity_rotate - Removed
plasticity_rotate_curve_control_points - Removed
plasticity_rotate_faces - Removed
plasticity_rotate_instances - Removed
plasticity_rotate_reference_meshes - Removed
plasticity_save_copy - Removed
plasticity_save_named_selection - Removed
plasticity_scale - Removed
plasticity_scale_curve_control_points - Removed
plasticity_scale_faces - Removed
plasticity_scale_instances - Removed
plasticity_scale_reference_meshes - Removed
plasticity_scan_arbitrary_sections - Removed
plasticity_scan_section_strength - Removed
plasticity_search_product_references - Removed
plasticity_section_strength_scan_report - Removed
plasticity_select_bodies - Removed
plasticity_select_curve_control_points - Removed
plasticity_select_curves - Removed
plasticity_select_edges - Removed
plasticity_select_faces - Removed
plasticity_select_nodes - Removed
plasticity_select_reference_meshes - Removed
plasticity_set_appearance_material - Removed
plasticity_set_block_dimensions - Removed
plasticity_set_locked - Removed
plasticity_set_radius_dimension - Removed
plasticity_set_rectangle_dimensions - Removed
plasticity_set_view - Removed
plasticity_set_visibility - Removed
plasticity_set_workplane - Removed
plasticity_size_member - Removed
plasticity_slide_curve_control_points - Removed
plasticity_split_curve_segment - Removed
plasticity_split_solid_by_plane - Removed
plasticity_split_solid_by_planes - Removed
plasticity_split_solid_to_build_volume - Removed
plasticity_static_fem_report - Removed
plasticity_strength_methods - Removed
plasticity_strength_report - Removed
plasticity_strength_request - Removed
plasticity_subdivide_curves - Removed
plasticity_sweep_regions - Removed
plasticity_thicken_faces - Removed
plasticity_thicken_sheets - Removed
plasticity_trim_curve_fragments - Removed
plasticity_undo - Removed
plasticity_unjoin_curves - Removed
plasticity_unjoin_faces - Removed
plasticity_unjoin_shells - Removed
plasticity_untrim_faces - Removed
plasticity_unwrap_face - Removed
plasticity_validate_bodies - Removed
plasticity_verify_fastener_group_load - Removed
plasticity_verify_fastener_group_plate_bearing - Removed
plasticity_verify_integral_plate_strength - Removed
plasticity_verify_member_strength - Removed
plasticity_verify_section_strength - Removed
plasticity_verify_single_fastener_strength - Removed
plasticity_verify_tongue_root_strength - Removed
plasticity_verify_tongue_root_strength_from_coupon_data - Removed
plasticity_wait_for_change
371 tool updates
v0.2.0- First observed
plasticity_activate_group - First observed
plasticity_align_cylindrical_faces - First observed
plasticity_align_linear_edges - First observed
plasticity_align_planar_faces - First observed
plasticity_align_vertices - First observed
plasticity_analyze_cohesive_interface - First observed
plasticity_analyze_cone_development - First observed
plasticity_analyze_design_reference - First observed
plasticity_analyze_edge_curvature - First observed
plasticity_analyze_face_draft - First observed
plasticity_analyze_material_interface_test_curve - First observed
plasticity_analyze_static_fem - First observed
plasticity_analyze_strength_task - First observed
plasticity_analyze_surface_continuity - First observed
plasticity_body_info - First observed
plasticity_boolean - First observed
plasticity_bridge_curve_vertices - First observed
plasticity_bridge_curves - First observed
plasticity_bridge_shell_edges - First observed
plasticity_bridge_surface - First observed
plasticity_calculate_dcb_mode_i_energy - First observed
plasticity_calculate_enf_mode_ii_energy - First observed
plasticity_calculate_fastener_member_strength - First observed
plasticity_calculate_heat_set_insert_retention - First observed
plasticity_calculate_interface_specimen_strengths - First observed
plasticity_calculate_mmb_mode_i_ii_energy - First observed
plasticity_calculate_rectangular_strength_from_coupon_data - First observed
plasticity_calculate_section_strength - First observed
plasticity_calculate_single_fastener_strength - First observed
plasticity_calculate_strength - First observed
plasticity_calculate_threaded_receiver_strength - First observed
plasticity_calculate_tongue_root_strength - First observed
plasticity_calculate_tongue_root_strength_from_coupon_data - First observed
plasticity_calibrate_turon_mixed_mode_law - First observed
plasticity_call - First observed
plasticity_cap_sheet_holes - First observed
plasticity_capabilities - First observed
plasticity_capture_snapshot - First observed
plasticity_chamfer - First observed
plasticity_changes_since - First observed
plasticity_check_fastener_group_layout - First observed
plasticity_check_fastener_stack - First observed
plasticity_check_interference - First observed
plasticity_cohesive_fem_report - First observed
plasticity_combine_material_coupon_data - First observed
plasticity_compare_static_fem_refinement_reports - First observed
plasticity_connect - First observed
plasticity_construction_history - First observed
plasticity_construction_journal - First observed
plasticity_convert_curve_vertices_to_control_points - First observed
plasticity_create_blind_hole - First observed
plasticity_create_blind_hole_pattern - First observed
plasticity_create_body_intersection_curves - First observed
plasticity_create_body_outlines - First observed
plasticity_create_box - First observed
plasticity_create_cantilever_snap_fit - First observed
plasticity_create_center_arc - First observed
plasticity_create_circle - First observed
plasticity_create_cone - First observed
plasticity_create_cone_development - First observed
plasticity_create_connector_opening - First observed
plasticity_create_constrained_surface - First observed
plasticity_create_construction_plane - First observed
plasticity_create_counterbore - First observed
plasticity_create_counterbore_pattern - First observed
plasticity_create_countersink - First observed
plasticity_create_countersink_pattern - First observed
plasticity_create_curves_from_regions - First observed
plasticity_create_cylinder - First observed
plasticity_create_dovetail_joint - First observed
plasticity_create_ellipse - First observed
plasticity_create_group - First observed
plasticity_create_heat_set_insert_pocket - First observed
plasticity_create_heat_set_insert_pocket_pattern - First observed
plasticity_create_helix - First observed
plasticity_create_hex_nut_pocket - First observed
plasticity_create_hex_nut_pocket_pattern - First observed
plasticity_create_hinge_barrel - First observed
plasticity_create_instance - First observed
plasticity_create_locating_pin_pair - First observed
plasticity_create_locating_pin_pair_pattern - First observed
plasticity_create_mating_enclosure_joint - First observed
plasticity_create_nurbs_curve - First observed
plasticity_create_pipes - First observed
plasticity_create_polyline - First observed
plasticity_create_printed_external_thread - First observed
plasticity_create_printed_hex_nut - First observed
plasticity_create_printed_hex_pair - First observed
plasticity_create_printed_hex_screw - First observed
plasticity_create_printed_thread_calibration_set - First observed
plasticity_create_radius_measurement - First observed
plasticity_create_rectangle - First observed
plasticity_create_regular_polygon - First observed
plasticity_create_rib - First observed
plasticity_create_round_vent_array - First observed
plasticity_create_screw_boss - First observed
plasticity_create_screw_boss_pattern - First observed
plasticity_create_section_analysis - First observed
plasticity_create_slot_profiles - First observed
plasticity_create_slotted_hole - First observed
plasticity_create_slotted_hole_pattern - First observed
plasticity_create_solid_from_sheet - First observed
plasticity_create_sphere - First observed
plasticity_create_split_screw_insert_joint - First observed
plasticity_create_tangent_arc - First observed
plasticity_create_tangent_circle - First observed
plasticity_create_text - First observed
plasticity_create_three_point_arc - First observed
plasticity_create_three_point_circle - First observed
plasticity_create_through_hole - First observed
plasticity_create_through_hole_pattern - First observed
plasticity_create_tongue_groove_joint - First observed
plasticity_create_topology_distance_measurement - First observed
plasticity_create_torus - First observed
plasticity_create_two_point_circle - First observed
plasticity_create_vertex_distance_measurement - First observed
plasticity_current_selection - First observed
plasticity_curve_pattern - First observed
plasticity_cut_cable_channel - First observed
plasticity_cut_printed_internal_thread - First observed
plasticity_cut_with_faces - First observed
plasticity_define_datum_axis - First observed
plasticity_define_datum_point - First observed
plasticity_deform_bodies_between_faces - First observed
plasticity_deform_curves_between_faces - First observed
plasticity_delete - First observed
plasticity_delete_curve_control_points - First observed
plasticity_delete_edges - First observed
plasticity_delete_faces - First observed
plasticity_delete_instances - First observed
plasticity_delete_measurement - First observed
plasticity_delete_named_selection - First observed
plasticity_delete_reference_meshes - First observed
plasticity_delete_section_analysis - First observed
plasticity_design_reference_request - First observed
plasticity_diagnose - First observed
plasticity_dissolve_faces - First observed
plasticity_dissolve_groups - First observed
plasticity_distribute_fastener_group_load - First observed
plasticity_download_and_import_parasolid - First observed
plasticity_download_and_import_reference_3mf - First observed
plasticity_download_and_import_reference_mesh - First observed
plasticity_download_and_import_step - First observed
plasticity_draft_faces - First observed
plasticity_duplicate_bodies - First observed
plasticity_duplicate_curves - First observed
plasticity_evaluate_curve_segments - First observed
plasticity_export_3mf - First observed
plasticity_export_hiddenline_svg - First observed
plasticity_export_obj - First observed
plasticity_export_parasolid - First observed
plasticity_export_step - First observed
plasticity_export_stl - First observed
plasticity_export_svg - First observed
plasticity_extend_curve_endpoints - First observed
plasticity_extend_sheet_edges - First observed
plasticity_extract_edges - First observed
plasticity_extract_faces - First observed
plasticity_extrude_faces - First observed
plasticity_extrude_profile - First observed
plasticity_extrude_regions - First observed
plasticity_fastener_group_plate_bearing_report - First observed
plasticity_fillet - First observed
plasticity_fillet_curve_vertices - First observed
plasticity_find_edges - First observed
plasticity_find_faces - First observed
plasticity_get_cad_reference_import - First observed
plasticity_get_step_import - First observed
plasticity_hollow_faces - First observed
plasticity_hollow_solids - First observed
plasticity_import_dcb_mode_i_energy_csv - First observed
plasticity_import_enf_mode_ii_energy_csv - First observed
plasticity_import_interface_fracture_csv - First observed
plasticity_import_interface_tensile_csv - First observed
plasticity_import_mmb_mode_i_ii_energy_csv - First observed
plasticity_import_parasolid - First observed
plasticity_import_reference_3mf - First observed
plasticity_import_reference_mesh - First observed
plasticity_import_step - First observed
plasticity_import_svg - First observed
plasticity_imprint_bodies - First observed
plasticity_imprint_curves_on_body - First observed
plasticity_insert_curve_knot - First observed
plasticity_insert_isoparam_edges - First observed
plasticity_insert_sheet - First observed
plasticity_inspect_arbitrary_section - First observed
plasticity_inspect_arbitrary_sections - First observed
plasticity_inspect_curve_planarity - First observed
plasticity_inspect_curve_structure - First observed
plasticity_inspect_fastener_group - First observed
plasticity_inspect_integral_rectangular_plate - First observed
plasticity_inspect_planar_section - First observed
plasticity_inspect_rectangular_member - First observed
plasticity_inspect_single_fastener_plate - First observed
plasticity_inspect_surface_structure - First observed
plasticity_inspect_tongue_root_section - First observed
plasticity_join_curves - First observed
plasticity_join_sheets - First observed
plasticity_list_appearance_materials - First observed
plasticity_list_bodies - First observed
plasticity_list_cad_reference_imports - First observed
plasticity_list_construction_geometry - First observed
plasticity_list_curve_control_points - First observed
plasticity_list_curve_directions - First observed
plasticity_list_curve_endpoints - First observed
plasticity_list_curve_fragments - First observed
plasticity_list_curve_intersections - First observed
plasticity_list_curve_vertices - First observed
plasticity_list_dcb_mode_i_energy_tests - First observed
plasticity_list_enf_mode_ii_energy_tests - First observed
plasticity_list_fastener_group_tests - First observed
plasticity_list_groups - First observed
plasticity_list_instances - First observed
plasticity_list_material_coupon_data - First observed
plasticity_list_material_interface_tests - First observed
plasticity_list_measurements - First observed
plasticity_list_mmb_mode_i_ii_energy_tests - First observed
plasticity_list_named_selections - First observed
plasticity_list_printed_thread_qualifications - First observed
plasticity_list_reference_assets - First observed
plasticity_list_reference_meshes - First observed
plasticity_list_regions - First observed
plasticity_list_section_analyses - First observed
plasticity_list_step_imports - First observed
plasticity_list_windows - First observed
plasticity_loft_curves - First observed
plasticity_loft_faces - First observed
plasticity_loft_regions - First observed
plasticity_match_dcb_mode_i_energy_test - First observed
plasticity_match_enf_mode_ii_energy_test - First observed
plasticity_match_faces - First observed
plasticity_match_fastener_group_test - First observed
plasticity_match_material_coupon_data - First observed
plasticity_match_material_interface_test - First observed
plasticity_match_mmb_mode_i_ii_energy_test - First observed
plasticity_match_printed_thread_qualification - First observed
plasticity_measure - First observed
plasticity_measure_face_properties - First observed
plasticity_measure_fastener_grip_stack - First observed
plasticity_measure_linear_edges - First observed
plasticity_measure_nonparallel_planar_polygon_clearance - First observed
plasticity_measure_parallel_planar_face_clearance - First observed
plasticity_measure_planar_faces - First observed
plasticity_measure_point_distance - First observed
plasticity_measure_point_to_circular_edge - First observed
plasticity_measure_point_to_curved_edge - First observed
plasticity_measure_point_to_linear_edge - First observed
plasticity_measure_point_to_planar_face - First observed
plasticity_measure_solid_properties - First observed
plasticity_mirror - First observed
plasticity_move - First observed
plasticity_move_curve_control_points - First observed
plasticity_move_edges - First observed
plasticity_move_faces - First observed
plasticity_move_instances - First observed
plasticity_move_reference_meshes - First observed
plasticity_move_to_group - First observed
plasticity_offset_edges - First observed
plasticity_offset_face_loops - First observed
plasticity_offset_faces - First observed
plasticity_offset_planar_curves - First observed
plasticity_offset_regions - First observed
plasticity_offset_vertices - First observed
plasticity_open_document - First observed
plasticity_orient_bodies_for_print - First observed
plasticity_patch_closed_wires - First observed
plasticity_patch_regions - First observed
plasticity_patch_sheet_hole - First observed
plasticity_patch_solid_edge_loops - First observed
plasticity_plan_cohesive_layer_planes - First observed
plasticity_plan_single_material_strength_tests - First observed
plasticity_planarize_curves - First observed
plasticity_project_curve_pair - First observed
plasticity_project_curves_onto_body - First observed
plasticity_radial_face_pattern - First observed
plasticity_radial_pattern - First observed
plasticity_raise_curve_degree - First observed
plasticity_raise_surface_degree - First observed
plasticity_read_dcb_mode_i_energy_test - First observed
plasticity_read_enf_mode_ii_energy_test - First observed
plasticity_read_mmb_mode_i_ii_energy_test - First observed
plasticity_realize_instances - First observed
plasticity_rebuild_curves - First observed
plasticity_rebuild_face - First observed
plasticity_reconcile - First observed
plasticity_record_dcb_mode_i_energy_test - First observed
plasticity_record_enf_mode_ii_energy_test - First observed
plasticity_record_fastener_group_test - First observed
plasticity_record_material_coupon_data - First observed
plasticity_record_material_interface_test - First observed
plasticity_record_mmb_mode_i_ii_energy_test - First observed
plasticity_record_printed_thread_qualification - First observed
plasticity_rectangular_face_pattern - First observed
plasticity_rectangular_pattern - First observed
plasticity_redo - First observed
plasticity_reference_search_status - First observed
plasticity_refillet_faces - First observed
plasticity_refresh_datum - First observed
plasticity_remove_construction_plane - First observed
plasticity_remove_fillets - First observed
plasticity_rename - First observed
plasticity_rename_group - First observed
plasticity_rename_reference_mesh - First observed
plasticity_resolve_fastener_designation - First observed
plasticity_reverse_curves - First observed
plasticity_reverse_sheets - First observed
plasticity_revolve_profile - First observed
plasticity_rotate - First observed
plasticity_rotate_curve_control_points - First observed
plasticity_rotate_faces - First observed
plasticity_rotate_instances - First observed
plasticity_rotate_reference_meshes - First observed
plasticity_save_copy - First observed
plasticity_save_named_selection - First observed
plasticity_scale - First observed
plasticity_scale_curve_control_points - First observed
plasticity_scale_faces - First observed
plasticity_scale_instances - First observed
plasticity_scale_reference_meshes - First observed
plasticity_scan_arbitrary_sections - First observed
plasticity_scan_section_strength - First observed
plasticity_screenshot - First observed
plasticity_search_product_references - First observed
plasticity_section_strength_scan_report - First observed
plasticity_select_bodies - First observed
plasticity_select_curve_control_points - First observed
plasticity_select_curves - First observed
plasticity_select_edges - First observed
plasticity_select_faces - First observed
plasticity_select_nodes - First observed
plasticity_select_reference_meshes - First observed
plasticity_set_appearance_material - First observed
plasticity_set_block_dimensions - First observed
plasticity_set_locked - First observed
plasticity_set_radius_dimension - First observed
plasticity_set_rectangle_dimensions - First observed
plasticity_set_view - First observed
plasticity_set_visibility - First observed
plasticity_set_workplane - First observed
plasticity_size_member - First observed
plasticity_slide_curve_control_points - First observed
plasticity_split_curve_segment - First observed
plasticity_split_solid_by_plane - First observed
plasticity_split_solid_by_planes - First observed
plasticity_split_solid_to_build_volume - First observed
plasticity_static_fem_report - First observed
plasticity_status - First observed
plasticity_strength_methods - First observed
plasticity_strength_report - First observed
plasticity_strength_request - First observed
plasticity_subdivide_curves - First observed
plasticity_sweep_regions - First observed
plasticity_thicken_faces - First observed
plasticity_thicken_sheets - First observed
plasticity_trim_curve_fragments - First observed
plasticity_undo - First observed
plasticity_unjoin_curves - First observed
plasticity_unjoin_faces - First observed
plasticity_unjoin_shells - First observed
plasticity_untrim_faces - First observed
plasticity_unwrap_face - First observed
plasticity_validate_bodies - First observed
plasticity_verify_fastener_group_load - First observed
plasticity_verify_fastener_group_plate_bearing - First observed
plasticity_verify_integral_plate_strength - First observed
plasticity_verify_member_strength - First observed
plasticity_verify_section_strength - First observed
plasticity_verify_single_fastener_strength - First observed
plasticity_verify_tongue_root_strength - First observed
plasticity_verify_tongue_root_strength_from_coupon_data - First observed
plasticity_wait_for_change
TDQS
Scored across 11 tools
Many tools have overlapping read purposes: plasticity_status, plasticity_list_bodies, plasticity_body_info, plasticity_current_selection, and plasticity_changes_since all return document/body info. Descriptions provide guidance to distinguish them, but an agent could easily pick the wrong read tool. plasticity_call adds a meta-tool that can invoke other operations, further blurring boundaries.
All tools use the plasticity_ prefix and mostly follow verb_noun or clear noun patterns (list_windows, connect, status, capture_snapshot, changes_since, list_bodies, body_info, reconcile, screenshot, call). Minor deviations like 'status' and 'connect' being verb-only, and 'call' being a generic meta-verb, but overall consistent.
11 tools is well within the 3-15 sweet spot and the set appears scoped to a 3D modeling session lifecycle plus a generic operation invoker. Each tool covers a distinct phase (connect, snapshot, diff, inspect, reconcile) without obvious redundancy in count.
The surface covers connection, status, selection, snapshots, diffs, body listing, body info, screenshot, and a generic call mechanism. It lacks explicit mutation tools, but plasticity_call may invoke registered operations, and reconcile handles uncertain mutations, so core lifecycle is mostly covered with a minor gap around direct mutation discovery.
Maintenance
Related MCP Connectors
- OwlCADOAuthcom.owlcad
Parametric 3D CAD for AI agents: build print-ready parts, check them, export STL, 3MF or STEP.
Agent-first CAD: editable .kcad.ts source, deterministic review, OpenCASCADE kernel.
Connect your AI to your own devices, 3D printers, factory tools and a shared agent task pool.
Exact-dimension geometry for AI agents: free STEP/STL files, dimension sheets, mating fit data.
91
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceGive your AI assistant the ability to inspect, measure, and compare 3D CAD models by dropping in a STEP file and asking engineering questions. Runs entirely on your machine with no cloud, no CAD license, and no setup.50 npm6MIT
- AlicenseNot gradedqualityBmaintenanceEnables people and general-purpose AI agents to inspect, model, edit, verify, and export local 3D projects through MCP tools, including print preparation, without requiring a hosted 3D service key.10MIT
- AlicenseCqualityCmaintenanceEnables an agent to define parameters in millimeters, build and validate parts or assemblies in a live Autodesk Fusion session, then export STEP, STL, 3MF, and F3D files. It also supports inspection and verification workflows before and after generated geometry is produced.33MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to design, modify, and verify exact B-rep 3D CAD models by running build123d scripts on an OpenCascade kernel, with live three.js preview, collision and FDM printability checks, text-based spatial perception, user notes/sketch annotations, version history, and one-click export to OrcaSlicer.1MIT