Skip to main content
Glama
chisomobanzi

Serpentine3D MCP Server

by chisomobanzi

Serpentine3D

An open-source NURBS surface modeller for Linux, Windows & macOS — a Rhino-style freeform workflow with native AI integration.

Download for Linux · Windows · macOS · Website

Serpentine3D (serp3d) is a freeform surface modeller in the spirit of Rhinoceros 3D — BREP/NURBS geometry on the OpenCASCADE kernel, not meshes. It is built for set designers, architects, and industrial designers who want a genuine Rhino-style workflow: a command line that prompts for input, layers, object snaps to a construction plane, STEP/OBJ/FBX interchange, and a dark, focused interface. The whole modelling engine also runs headless, so the same geometry you build by hand can be scripted, batch-processed, or driven by an AI.

Named after the serpentine stone of Zimbabwean Shona sculpture, and the S-curve at the heart of NURBS geometry.

Two interlinked bands modelled and rendered in Serpentine3D

Why

  • No open-source freeform NURBS surface modeller exists. FreeCAD is parametric solid CAD; Blender is mesh-based. Serpentine3D fills the freeform surface-modelling gap — on Linux, Windows and macOS alike.

  • First CAD tool with native AI integration. The bundled MCP server lets Claude (or any MCP client) see your viewport, create geometry, run any command, and manage the scene.

  • Headless-first. The modelling core is fully decoupled from the GUI — script it (serp3d-batch), import it as a Python library, or drive it over MCP. Repeatable, configurable, light, CI-friendly.

Related MCP server: Rhino MCP

Install

Download

Platform

Download

Notes

Linux

Serpentine3D-x86_64.AppImage

chmod +x and run — nothing to install

Windows

Serpentine3D-Setup-x86_64.exe

Installer (Inno Setup)

macOS (Apple Silicon)

Serpentine3D-arm64.dmg

Drag to Applications

Each download bundles the OpenCASCADE kernel and Python runtime — nothing else to install. The GUI needs a GPU with OpenGL 3.3 drivers, which any normal desktop has; GPU-less VMs and remote-desktop sessions that only expose OpenGL 1.1 get a clear message instead of a viewport. Headless use (serp3d-batch, the MCP server, file conversion) works anywhere.

From source

Requires Python 3.10+.

git clone https://github.com/chisomobanzi/Serpentine3D && cd Serpentine3D
python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/serp3d        # launch

The OpenCASCADE kernel installs as pip wheels (cadquery-ocp) — no conda, no system packages. The same install works on Linux, Windows and macOS; the full test suite (360+ tests) passes on all three.

The command line

Everything works Rhino-style: type a command, answer its prompts. Prompts accept typed coordinates (10,5,0, relative @5,0,0) or viewport clicks on the construction plane. Tab completes command names, Up/Down recall history, Enter on an empty line repeats the last command, Escape cancels. As in Rhino, a right-click in the viewport acts as Enter — it runs whatever you've typed, commits a value mid-command, or repeats the last command.

Commands

Curves

line polyline curve (NURBS by control points) interpcrv (through the points) circle arc ellipse rectangle helix textobject blendcrv project pull intersect

Surfaces

extrude revolve loft sweep1 sweep2 planarsrf patch/networksrf offsetsrf unrollsrf

Solids

box sphere cylinder cone torus filletedge chamferedge (both pick edges directly; fillets chain and take start,end variable radii) shell cap contour section booleansplit pushpull

Deform

twist taper bend flow (curve-to-curve) extend matchcrv

Booleans

booleanunion booleandifference booleanintersection

Transform

move copy rotate scale scalenu mirror array

Edit

join explode trim split offset fillet rebuild pointson/pointsoff (control points, curves and surfaces) dir/flip (curve direction and surface normals) delete hide show rename undo redo

Select

selall selnone selcrv selsrf selsolid sellayer selname sellast invert isolate unisolate

Organise

group/ungroup lock/unlockall lockother (lock all but the picked) block insert blocklist count bringtofront/sendtoback bringforward/sendbackward (draw order)

Camera

camera (lens mm, cinema sensors, placement, 2.39/1.85 frame guides) units cplane

Array

array (grid) arraypolar arraypath (along a curve)

Analysis

distance length area volume curvature zebra curvaturegraph (combs) draftanalysis printcheck (3D-print readiness: watertight, thin walls, overhangs, size)

View

top front right perspective 4view/1view zoomextents undoview/redoview (a history for the camera, per pane) wireframe shaded ghosted rendered technical grid snap

Render

material (Matte/Plastic/Metal/Glass/custom PBR — flows into GLB/USD export) rendered

Capture

turntable (clean model clip) turntableui (portrait story with the app UI)

Layers

layer (new/current/show/hide/rename/weight/linetype) — or use the Layers panel

Linetypes

linetype — dashed/dotted/hidden/center/… per object or ByLayer (layers carry a linetype too); dashes render in the viewport and in exported layout sheets (PDF/SVG)

Meshes

heavy OBJ/3DM/FBX props stay native meshes (instant display); meshtobrep / breptomesh convert

Files

new open save import export (.serp is a zip container with thumbnail + metadata)

Live

recordhistory — loft/extrude/revolve outputs rebuild when their input curves are edited

Most commands have Rhino-compatible aliases (l, pl, c, m, co, mi, ...). Command options appear as clickable chips under the prompt (Cap=Yes, BothSides=No, Style=Normal) and can be typed Rhino-style (cap=n) at any moment without losing your place; numeric prompts show a live gold ghost preview of the result while you type. help (or F1) opens a searchable command reference. Arrow keys nudge the selection along the CPlane (Shift ×10, Ctrl ×0.1).

Navigation & shortcuts

  • Middle mouse orbit in perspective, pan in Top/Front/Right · Shift+Middle pan · Ctrl+Middle orbit anywhere · Scroll zoom

  • F1–F4 top/front/right/perspective · Ctrl+E zoom extents · F7 grid

  • Ctrl+Z / Ctrl+Y undo/redo · Ctrl+A select all · Delete delete selection

  • Ctrl+S / Ctrl+O / Ctrl+N save/open/new

  • Click to select (Shift-click adds, Ctrl-click removes), click empty space to deselect

  • Box selection: drag left-to-right for a window (fully enclosed, gold box), right-to-left for a crossing (anything touched, white box); Shift adds, Ctrl removes

  • Control points: pointson (F10) shows CVs on curves — drag a CV to edit the curve live; pointsoff (F11) hides them

  • Object snaps — end, mid, center, quadrant, intersection, perpendicular, and nearest-point, each with a distinct cursor marker. Toggle types on the osnap bar under the command line, or in Settings. gridsnap snaps picked points to the grid

  • Launch with a file: serp3d model.serp (or any importable format)

Drafting & documentation

Serpentine3D has a full two-space drafting workflow — model in 3D, document in 2D, print to PDF — without leaving the app:

A drafting sheet with dimensioned detail views and hidden-line rendering

  • Layouts (layout): paper-space sheets (A4–A0, Letter, Tabloid or custom) with tabs at the bottom of the viewport: [Model] [Sheet 1] …

  • Detail views (detail): live windows into the model placed on the sheet — pick two corners, a view direction (top/front/right/…/perspective) and a scale (1:10, 1:50, …). Double-click a detail to enter it, then pan (nav-button drag) and zoom (wheel changes the scale); click outside to exit. detailscale, detailmode, detaillock, detailborder, detaildelete manage the active detail.

  • Hidden-line rendering: each detail can be technical (hidden lines removed), hidden (dashed hidden lines), wireframe or shaded — powered by OCCT's HLR engine, isolated in a worker process so degenerate geometry can never crash the app. The same engine drives the model-space technical display mode.

  • make2d: project the current view (or a selection) into real, editable 2D curves on Make2D visible / Make2D hidden layers.

  • Annotations: multiline text, leader, dim / dimradius / dimdiameter / dimangle, hatch (pick corners or Mode=Region to click inside detail linework), scalebar, titleblock, sheetindex and per-sheet revision tables. Everything on a sheet is selectable — drag to move, grips resize detail frames, Delete removes, annotedit edits — and dimensions picked inside a detail are associative: they re-project when the detail pans or rescales. dimstyle manages named text/arrow styles.

  • exportpdf (Ctrl+P): true vector PDF — linework stays crisp at any zoom; shaded details are embedded as rendered images. Layouts save/load with the .serp file.

The gumball

The gumball with a face selected for push/pull editing

Select anything and a gumball appears: drag the arrows to move along an axis, the pads to move in a plane, the circles to rotate (Shift snaps to 15°), the square knobs to scale along an axis (Shift = uniform). Alt-drag moves a copy. Escape cancels a drag. gumball toggles it.

Ctrl+Shift-click a face of a solid and the gumball becomes a push/pull handle along the face normal — drag it, or type a distance, to extrude the face outward or carve it inward; the solid rebuilds live and the handle stays on the moved face for repeated pulls. A curved face (a cylinder or cone wall, a sphere) offsets instead — push it to grow or shrink the radius, adjacent faces extending to meet it. Select several faces and one handle offsets them all together, each along its own normal — inflate a shape, or grow a slab from both sides at once.

Each axis carries two boxes. The filled one on the shaft extrudes: a curve grows a surface along the axis and stays where it is, a closed curve gives you the solid it encloses, and a surface becomes the solid it sweeps out. A selected edge grows a surface of its own and leaves the object it came off alone. The filled box only appears on an axis where there is something to grow, so a solid does not offer one at all, and a flat surface offers one only on the axis it faces: swept the other two ways it would come back as the surface it already is. Ctrl and a translate arrow does the same thing if that is the habit you arrived with.

The hollow box on the far side of the pivot, at the end of the dashed leader that mirrors the arrow, is scale. Type a distance for either instead of dragging.

Ctrl+Shift-click one or more edges and the gumball becomes a fillet handle — drag it outward, or type a radius, to round the edges; every selected edge fillets together at that radius, previewing live. Hold Alt while dragging to chamfer instead of fillet.

Ctrl+Shift-click one segment of a polyline or polycurve and the whole gumball stands on that segment: move, turn or scale it and the segments it meets stretch after it, so dragging one side of a rectangle resizes the rectangle. A straight neighbour stays straight; an arc keeps its far end. Press Delete with a segment held and the segment goes: a side out of a closed curve opens it, and a middle segment out of an open one leaves the runs either side as separate curves.

Units

units sets the document units (mm/cm/m/in/feet-and-inches) with an optional model rescale. Every prompt then accepts unit input — 3'6", 2' 4 1/2", 30cm, 1.5in — and coordinates support polar entry (10<45) and Shift-ortho constraint while picking. Tab locks the direction you are pointing in for any direction, not just the four ortho ones, leaving the cursor to set only the distance along it.

Scripting & automation

The modelling engine runs with or without a GUI, so anything you can do by hand can be automated:

  • Python console (Tools menu, Ctrl+`): the live scene, geometry builders and the full API in an interactive session.

  • serpentine3d.scripting.Document: the same power headless — doc.add(geo.make_box(...)), doc.run("filletedge", [...]), doc.export("part.step"). The command layer is decoupled from Qt, so every interactive command runs offscreen.

  • serp3d-batch script.py: run scripts from the command line / CI with doc, geo and args predefined. No display needed.

  • MCP server (serp3d-mcp): the same modelling surface as tools an AI agent can call — full CRUD over the scene (see below).

  • Autosave & crash recovery: every 5 minutes (configurable); on launch after a crash Serpentine3D offers to restore the autosave.

  • Drop a ~/.config/serpentine3d/template.serp to start every new document from your own template (units, layers, title blocks).

Settings

Tools → Settings (Ctrl+,) — five flat pages, changes apply instantly:

  • Mouse — orbit with the middle or right mouse button, scroll direction, orbit/zoom speed

  • Keyboard — bind any key to any command; import from a text file (F5 zoomextents per line) or JSON

  • Aliases — custom command aliases; imports Rhino alias exports (Options → Aliases → Export) and maps known commands automatically

  • Object Snaps and Display (grid size)

Settings live in ~/.config/serpentine3d/settings.json.

File formats

Format

Import

Export

Notes

.serp

Native: JSON scene + embedded binary BREP

.step / .stp

Exact BREP exchange via OCCT

.3dm

Rhino: exact NURBS curves both ways; breps/surfaces import as untrimmed NURBS faces, export as meshes; layers preserved

.obj

Tessellated mesh with .mtl colours

.fbx

Autodesk FBX (binary) — tessellated meshes; imports/exports cleanly to Blender, Maya, Unreal, Unity

.stl

3D printing — watertight binary STL (or ASCII) for slicers, with draft→ultra mesh-quality presets on export; imports both

.3mf

3D printing — modern container (real units, colour, multi-part); Bambu Studio / PrusaSlicer / Cura prefer it over STL

.dxf

Curves/meshes with layers; layout sheets export at paper scale

.svg

Paths import as curves (béziers exact); layouts export as vector SVG

.glb

Binary glTF with materials (Unreal/Blender/web)

.usda

USD for virtual-production pipelines

.e57

Point clouds: separate registered scans, RGB colours, Cartesian/spherical coordinates; metres converted to model units

The assistant (AI modelling)

The AI assistant modelling geometry alongside the viewport

Serpentine3D has a built-in AI assistant: open it from the View menu (or type ai, or Ctrl+Shift+A), describe what you want, and it builds real BREP geometry in your live scene —

a spiral staircase, 3 m tall, 14 steps, 900 mm radius fillet every edge of the box 2 mm what's the volume of the hull?

It works with the full command set (the same commands you type), can measure and inspect the scene, and can look at the viewport — it takes a screenshot, checks its own work, and fixes mistakes before answering. Everything it does streams into the panel as it happens, and everything is undoable.

Bring your own Anthropic API key (Settings → Assistant, or the ANTHROPIC_API_KEY environment variable — get one at console.anthropic.com). Usage is billed to your Anthropic account; the assistant never phones home anywhere else, and the key never leaves your machine except to call the API.

MCP server (AI integration)

Prefer driving Serpentine3D from an external agent (Claude Code, Claude Desktop)? The same modelling surface is exposed as MCP tools. Start the app, then register the server with your MCP client:

claude mcp add serpentine3d -- /path/to/.venv/bin/serp3d-mcp

Tools: serp_scene_info, serp_screenshot (returns an image of the viewport), serp_create_curve, serp_create_surface, serp_boolean, serp_transform, serp_select, serp_command (run any command with its interactive inputs), serp_layers, serp_import, serp_export, serp_measure, serp_undo, serp_viewport.

The combination of serp_screenshot and serp_command means an AI assistant can model alongside you: it sees what you see and can operate every tool the command line offers. The bridge is a localhost-only JSON-RPC socket (~/.serpentine3d/rpc.port); set SERP3D_NO_RPC=1 to disable it.

Architecture

serpentine3d/
├── core/          # kernel layer: geometry builders, tessellation,
│                  #   scene graph, layers, selection, undo history
├── commands/      # generator-based interactive commands (Rhino-style
│                  #   prompt protocol, shared by GUI + MCP)
├── ui/            # Qt: GL viewport, command line, panels, dark theme
├── fileio/        # .serp, STEP, 3DM, OBJ, FBX, STL, DXF, SVG, GLB, USD
├── scripting.py   # stable headless Document API (serp3d-batch)
├── mcp_server/    # stdio MCP server -> RPC bridge
├── api.py         # programmatic API over a running session
└── rpc.py         # localhost JSON-RPC bridge

Geometry is exact BREP on OpenCASCADE 7.9 (via the OCP pybind11 bindings); the viewport tessellates on demand with trim-aware isocurve display. Commands are Python generators that yield typed input requests — the same command code serves typed input, viewport clicks, and MCP calls.

Plugins

Drop a .py file into ~/.serpentine3d/plugins/ defining serpentine3d_plugin(ctx), or ship a package with a serpentine3d.plugins entry point — plugins register first-class commands (with prompts, osnaps, undo and MCP support for free) and menu items. See docs/scripting.md.

Development

.venv/bin/pip install -e ".[dev]"
.venv/bin/pytest            # unit tests (geometry, scene, commands, file I/O)

Keep the lights on

Serpentine3D is free and always will be. No subscription, no licence server, no "upgrade to Pro." One person builds and maintains this in the hours between other work.

If it's useful to you, a small contribution helps keep development moving: bug fixes shipped, features added, servers paid for. Not required. Never expected. But genuinely appreciated.

Bug reports, sample files and documentation fixes are worth as much and cost nothing: see CONTRIBUTING.md. Not here yet is the running list of what is missing, if you are looking for somewhere to start.

License

MIT

Available Tools

15 tools
serp_booleanA

Boolean operation between solids: 'union', 'difference' (targets minus tools), or 'intersection'. Tools are consumed.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolsYes
targetsYes
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

The description discloses that 'tools are consumed', which is a key side effect not covered by annotations (none provided). It omits whether targets are also consumed or replaced, and does not describe the output or whether the operation modifies the scene in place.

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

Conciseness5/5

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

The description is a single, information-dense sentence with no redundant phrases. Every clause adds value: the operation types, the difference semantics, and the consumption warning.

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

Completeness3/5

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

The description covers the core operation and tool consumption, but lacks details on whether targets are also destroyed, how solids are referenced, and what the tool returns (though an output schema exists). These gaps leave room for misinterpretation in a destructive operation.

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

Parameters4/5

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

With schema description coverage of 0%, the description compensates by explaining the valid values for 'operation' and the roles of 'targets' vs 'tools' (especially in the difference operation). This adds meaningful context over the bare schema.

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

Purpose5/5

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

The description clearly states the tool performs boolean operations on solids, listing the three specific operations. This distinguishes it from sibling tools like serp_transform or serp_create_surface, which handle different geometric modifications.

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

Usage Guidelines4/5

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

It provides context for when this tool is appropriate (combining or subtracting solids) via the operation list and clarifies the difference operation semantics ('targets minus tools'). However, it does not explicitly mention alternatives or exclusion cases.

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

serp_commandA

Run any Serpentine3D command exactly as if typed in the command line, supplying its interactive inputs in order.

Examples: command='circle', inputs=['0,0,0', '5'] command='extrude', inputs=['Curve 01', '', '20', 'Yes'] (object name(s), then '' to end selection, then distance, then cap) command='zoomextents'

Selection prompts accept object names, 'all', or '' to finish.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputsNo
commandYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are provided, so the description carries full responsibility. It reveals key behavioral traits: inputs are supplied in order, selection prompts accept object names, 'all', or '' to finish, and it uses examples to illustrate interaction. This adds significant value beyond the bare schema.

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

Conciseness4/5

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

The description is front-loaded with the main purpose, followed by compact examples and a clarifying note on selection prompts. Every section serves a purpose, and while not the shortest, it is well-structured and appropriately detailed.

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

Completeness4/5

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

Given the tool's generic nature and the presence of an output schema, the description provides necessary invocation details. It covers input formatting and selection behavior comprehensively. It could mention error handling or command-specific outputs, but the output schema likely covers return values.

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

Parameters4/5

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

Despite 0% schema description coverage, the description compensates by explaining 'command' as the command line string and 'inputs' as the ordered array of interactive inputs. Examples (circle, extrude, zoomextents) provide concrete usage semantics, making parameter meaning clear.

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

Purpose5/5

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

The description clearly states the tool runs any Serpentine3D command with interactive inputs, using specific verbs and a clear resource. It distinguishes itself from sibling-specific tools by being the generic catch-all command runner.

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

Usage Guidelines3/5

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

The description implies usage for arbitrary commands not covered by dedicated sibling tools, but it does not explicitly mention when to prefer this tool over alternatives or any exclusions. The guidance is inferred from the 'any command' phrasing.

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

serp_create_curveB

Create a NURBS curve from 3D points [[x,y,z], ...].

kind: 'interp' (curve passes through the points), 'control' (points are control vertices), 'polyline' (straight segments), 'line' (two points).

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNointerp
nameNo
closedNo
degreeNo
pointsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of disclosing side effects. It explains how 'kind' interprets the points, but it does not state whether the curve is added to the scene, what the return value is, or any consequences. This is a notable gap for a creation tool.

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

Conciseness5/5

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

The description is compact and front-loaded, stating the primary purpose in the first sentence and then enumerating the meaningful 'kind' options in the second. Every word earns its place; there is no filler or redundancy.

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

Completeness2/5

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

With 5 parameters, no annotations, and zero schema-level descriptions, this tool needs more context. The description only covers 'points' and partially 'kind', omitting the behavior of 'degree', 'closed', and 'name'. It is not enough for reliable invocation in varied scenarios.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaning for 'points' (3D coordinates) and 'kind' (four interpretation modes), but it leaves 'closed', 'degree', and 'name' completely unexplained, making it hard for an agent to set them correctly.

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

Purpose5/5

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

The description opens with a specific verb-resource pair: 'Create a NURBS curve from 3D points.' This clearly distinguishes it from sibling tools like create_surface or transform, and it immediately states the core input format.

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

Usage Guidelines3/5

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

The description implies this tool is for making curves from given 3D points and defines the 'kind' options, which helps choose call behavior. However, it never explicitly tells when to prefer this over alternatives like create_surface, nor does it mention any exclusions or prerequisites.

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

serp_create_surfaceA

Create a surface/solid from existing curves (referenced by name).

operation: 'extrude' params: direction [x,y,z] (default [0,0,1]), distance (default 10), cap (bool, default true - closed profiles become solids) 'revolve' params: axis_point, axis_dir, angle (degrees, default 360) 'loft' curves: 2+ profiles in order; params: ruled (bool) 'planar' flat surface from one closed planar curve 'sweep' curves: [profile, rail]

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
curvesYes
paramsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral disclosure. It does reveal operation-specific behavior, such as 'closed profiles become solids' for extrude with cap, and defaults for distance and angle. However, it does not disclose whether the operation modifies source curves, what happens on failure, or what the output object is (e.g., its name or type). This is a moderate level of transparency.

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

Conciseness5/5

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

The description is compact and well-structured. It leads with a one-sentence purpose, then a bullet-style list of operations and their parameters. Every line adds value with no redundancy or padding.

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

Completeness4/5

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

Given the tool's complexity (five operations, variable params) and the existence of an output schema (which can convey return value details), the description covers the core usage well: it specifies prerequisites (existing curves), operation parameters, and defaults. It falls short only on the unexplained `name` parameter and edge-case behaviors, but overall it is sufficiently complete for typical use.

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

Parameters4/5

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

Schema description coverage is 0%, so the description compensates by detailing `operation` values and the structure of `params` for each operation, including defaults and example vector format (e.g., direction [x,y,z]). It also explains how `curves` should be provided (order, count). The only gap is the `name` parameter, which is likely the output name but is not explained.

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

Purpose5/5

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

The description clearly states the tool's function: 'Create a surface/solid from existing curves'. It specifies the resource (curves) and the result (surface/solid), and enumerates the supported operations (extrude, revolve, loft, planar, sweep), which distinguishes it from sibling tools like serp_create_curve (which creates curves) and serp_boolean (which operates on existing solids).

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

Usage Guidelines4/5

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

The description gives a clear context for use: creating surfaces/solids from existing curves. It does not explicitly compare with alternatives or state when not to use it, but the purpose is so specific that an agent can readily infer appropriate usage scenarios. No exclusions are mentioned, but none are needed for such a specialized tool.

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

serp_exportA

Export the scene (or current selection) to .serp, .step/.stp or .obj — format chosen by extension.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
selected_onlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It clearly discloses the file-writing behavior and format selection, but it does not mention whether existing files are overwritten, whether directories must exist, or any error conditions. For a straightforward export tool, this is moderate transparency.

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

Conciseness5/5

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

The description is a single sentence that front-loads the action ('Export') and includes the essential qualifiers: target (scene/selection), formats, and format selection mechanism. Every word earns its place; no redundancy.

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

Completeness4/5

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

The tool is conceptually simple, and the description covers the core behavior and parameters. An output schema exists, so return-value documentation is not needed. The main missing context is file-overwrite behavior and potential failure modes, but overall the description is sufficiently complete for this export tool.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaning to the 'path' parameter by explaining that the extension determines the format, and it clarifies that 'selected_only' controls whether the scene or current selection is exported. This is valuable context beyond the raw schema.

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

Purpose5/5

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

The description clearly states the tool exports a scene or selection to specific 3D file formats (.serp, .step/.stp, .obj), with the format determined by the file extension. This is a specific verb+resource+behavior that distinguishes it from siblings like serp_import and serp_screenshot.

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

Usage Guidelines4/5

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

The description provides clear context: you can export either the whole scene or the current selection, and the format is chosen by the file extension. It does not explicitly mention when to use this over alternatives, but among the siblings only serp_screenshot is a visual export, and this tool's purpose is distinct enough that no exclusion is necessary.

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

serp_importB

Import a file into the scene (.serp, .step/.stp, .obj).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description bears full responsibility for behavioral disclosure, but it only states the import action and supported formats. It does not mention side effects (e.g., overwrites, new objects), permissions, or failure modes, which is a significant gap for a mutation-like tool.

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

Conciseness5/5

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

The description is one concise sentence, front-loaded with the verb and resource, with no unnecessary words. Every word earns its place by listing the key file formats.

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

Completeness3/5

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

Given the low complexity (one parameter) and presence of an output schema, the description provides a minimal but adequate understanding of the tool's core function. However, it lacks usage guidelines and behavioral details, which would be expected for a tool that imports external files and could have side effects.

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

Parameters3/5

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

The schema has a single `path` parameter with 0% description coverage, so the description must compensate. The description implies that `path` is the file to import and lists supported formats, providing some meaning beyond the schema. However, it lacks details on path syntax, absolute vs. relative paths, or additional constraints.

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

Purpose5/5

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

The description clearly states the action (import) and the resource (a file into the scene), and lists supported file formats. This distinguishes it from siblings like serp_create_curve (creating geometry) and serp_export (exporting files).

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or restrictions. It only states the basic function, leaving the agent without clear usage context.

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

serp_layersB

Manage layers. action: 'list', 'create', 'rename', 'visible', 'current', 'color' (color as [r,g,b] 0-1), 'assign' (move objects to layer), 'delete'. A layer can live under another: pass parent to 'create', and name a layer by its path ('Walls::Interior') where two layers share a name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
colorNo
actionNolist
parentNo
objectsNo
visibleNo
new_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

With zero annotations, the description carries the full behavioral burden. It adds real value: color must be [r,g,b] 0-1, 'assign' means moving objects to a layer, and path naming disambiguates same-named layers. However, it omits destructive side effects (does 'delete' remove the layer's objects? what does 'current' change?) and gives no return-format note. Useful but incomplete for a tool with multiple mutating actions.

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

Conciseness3/5

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

The content is dense and every sentence carries information, but it is a run-on block that mixes action dispatch syntax with a parenthetical for color and a trailing path-note. The path/parent explanation is jammed onto the end with a comma splice. Information-valuable but poorly structured and hard to parse.

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

Completeness3/5

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

An output schema exists, so return values need no explanation. But for a 7-parameter, 8-action dispatch tool with 0% schema coverage and no annotations, key call semantics are missing: how rename uses name/new_name, how visible toggles per layer, and whether delete cascades to objects. The action list, color, and parent are covered; the rest is left to inference.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate for all 7 parameters. It explicitly explains color format, the parent semantics for nesting, and implies objects via 'assign'. But new_name (the rename mechanism) and visible are never mentioned — an agent cannot know how rename or visibility toggling work. Partial coverage only.

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

Purpose4/5

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

'Manage layers' is a generic opener, but the enumerated action list (list, create, rename, visible, current, color, assign, delete) makes the resource and scope concrete. It clearly distinguishes from siblings — none of serp_scene_info, serp_select, or serp_command handle layer management.

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

Usage Guidelines3/5

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

The description gives in-tool usage guidance (pass parent to create, name by path 'Walls::Interior') that helps an agent call it correctly, but it never states when to use this tool versus alternatives. For a multi-action dispatch tool in a suite that includes serp_command and serp_select, there is no differentiation or exclusion guidance.

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

serp_measureA

Measure geometry. what: 'distance' (needs points=[[..],[..]]), 'length', 'area', 'volume', 'bbox', 'centroid' (need targets).

ParametersJSON Schema
NameRequiredDescriptionDefault
whatYes
pointsNo
targetsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of disclosing behavioral traits. It does not state whether the tool is read-only, whether it operates on existing geometry, what 'targets' means, or what happens if the required parameter is missing. The terse description leaves significant ambiguity for an agent.

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

Conciseness4/5

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

The description is a single, dense sentence that front-loads the core action ('Measure geometry') and then conveys the parameter dependencies efficiently. Every part earns its place, but the compact format could be slightly improved with clearer separation of the measurement modes.

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

Completeness3/5

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

The tool has three parameters, one required, and no annotations. The output schema exists but is not shown, so the description need not cover return values. However, it fails to explain target references, side effects, error conditions, or how the tool relates to the current scene, leaving it incomplete for nuanced usage.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It adds the allowed values for 'what' and the dependency between 'what' and the other parameters, which is meaningful. However, it does not explain the coordinate format for 'points' or what 'targets' refer to (object names, IDs, etc.), leaving gaps that the schema does not fill.

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

Purpose5/5

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

The description clearly states the tool measures geometry and enumerates specific measurement types (distance, length, area, volume, bbox, centroid). This verb+resource pairing is distinct and establishes a clear purpose separate from sibling tools that create, transform, or select geometry.

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

Usage Guidelines4/5

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

The description provides clear usage context by specifying which parameter is needed for each measurement type ('distance' needs points; others need targets). While it doesn't explicitly exclude alternatives or say 'use this when you need X', the mapping of parameter dependencies gives practical guidance on how to invoke it correctly.

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

serp_prepare_scriptA

Open Python in a new editable Script draft without executing it.

Existing drafts and geometry are preserved. Scripts can use doc (a working document), geo (geometry helpers), and selected (selected SceneObjects). The user can edit the draft, Run to preview, then Keep or Discard its changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoAssistant.py
sourceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses non-execution, that existing drafts and geometry are preserved, and the post-call user workflow (edit/preview/Keep/Discard). It omits permission or failure-mode details, keeping it short of a 5.

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

Conciseness4/5

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

Three short sentences, front-loaded with the action and its key constraint, with no redundant restatement of the name. The namespace and workflow lines are borderline but earn their place by adding context.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and the description covers side effects, workflow, and execution semantics. The remaining gap is argument documentation, which is minor given the otherwise complete behavioral picture.

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

Parameters2/5

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

Schema description coverage is 0% for two parameters, so the description must compensate. It explains runtime namespaces (doc, geo, selected) but says nothing about the required 'source' parameter or the 'title' default, leaving the actual arguments undocumented.

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

Purpose4/5

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

The first sentence gives a specific verb and resource ('Open Python in a new editable Script draft') plus an explicit boundary ('without executing it'). It implicitly distinguishes itself from execution-oriented siblings like serp_command, though it never names a sibling directly.

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

Usage Guidelines3/5

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

The workflow sentence ('user can edit the draft, Run to preview, then Keep or Discard') implies when this tool fits: staging a script for review rather than running it. However, no explicit when-to-use vs. alternative guidance or prerequisites are stated for the sibling set.

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

serp_scene_infoA

Get the current scene: objects (name/kind/layer/bbox), layers, selection, bounds, and display mode.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description must carry behavioral transparency. It clearly indicates a read operation ('Get') and enumerates the returned data, which is adequate. However, it omits potential edge cases like empty scenes or performance implications of returning the full scene.

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

Conciseness5/5

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

The description is a single, well-structured sentence that leads with the action and resource, followed by a concise enumeration of return fields. Every word adds value, with no unnecessary text.

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

Completeness4/5

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

For a no-parameter, read-only tool with an output schema, the description sufficiently covers what the tool does. It could benefit from a note on when to prefer it over more targeted sibling tools, but that gap is captured in the usage dimension.

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

Parameters4/5

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

The tool has zero parameters, so the schema is already fully covered and the baseline is 4. The description adds no parameter details, but none are needed since there are no inputs to explain.

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

Purpose5/5

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

The description uses 'Get' with a specific resource ('current scene') and lists the exact data returned (objects, layers, selection, bounds, display mode). This clearly distinguishes it from sibling tools like serp_layers or serp_select, which focus on individual aspects.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus siblings such as serp_layers or serp_select. It simply states what it does, leaving the agent to infer usage context from the sibling names.

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

serp_screenshotA

Capture the current 3D viewport so you can see the model. Returns a PNG image. Use after making changes to check the result.

ParametersJSON Schema
NameRequiredDescriptionDefault
widthNo

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It clearly states the action (capture the current 3D viewport) and the return type (PNG image). Since this is a non-destructive capture, no warnings about side effects are necessary, but it could mention that it uses the active camera/viewpoint.

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

Conciseness5/5

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

The description consists of two short sentences. The first sentence conveys the core function and purpose, and the second adds a usage hint. Every word earns its place; no redundancy or filler.

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

Completeness4/5

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

For a simple screenshot tool with one optional parameter and no output schema, the description is largely complete: it states what is captured, the return format, and when to use it. The only gap is that it does not explicitly mention the width parameter or clarify that it captures the current viewport state (camera, layers, etc.), but overall it provides enough context for an agent to invoke it correctly.

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

Parameters2/5

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

The schema has one parameter (width) with 0% description coverage, and the description never mentions width or its meaning. The parameter name is somewhat self-explanatory, but the description does not compensate for the low schema coverage or clarify how width affects the output (e.g., pixels, aspect ratio).

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

Purpose5/5

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

The description uses a specific verb ('capture') and resource ('current 3D viewport'), clearly distinguishing it from sibling tools like serp_scene_info or serp_viewport. It also states the purpose ('so you can see the model'), making it immediately obvious what the tool does.

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

Usage Guidelines4/5

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

It explicitly recommends using this tool after making changes to check the result, giving a clear use case. However, it does not mention when not to use it or name alternatives (e.g., serp_viewport for viewport control), so it lacks explicit exclusions.

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

serp_selectA

Select objects by names, kind (curve/surface/solid), or layer name. mode: 'replace', 'add', or 'clear' (clear ignores other args).

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo
modeNoreplace
layerNo
namesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It successfully communicates selection-mode semantics and the special behavior of 'clear'. It could go further by explaining whether criteria combine with AND/OR, but the core behavioral traits are adequately disclosed.

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

Conciseness5/5

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

The description is compact and front-loaded: the first sentence states the primary action and criteria, and the second sentence provides essential mode information. Every phrase adds value without redundancy.

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

Completeness4/5

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

The tool has four optional parameters, no annotations, and an output schema is present, so return values need not be explained. The description covers all parameters and key behaviors, though it leaves some edge cases (e.g., whether multiple criteria are combined) undocumented. Overall, it is sufficiently complete for a selection tool.

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

Parameters4/5

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

Schema property descriptions are absent (0% coverage), so the description must add meaning. It compensates well by explaining the meaning of 'kind' with the allowed values (curve/surface/solid) and clarifying mode behavior. It does not define the exact expected format for 'names' or the default behavior when 'mode' is omitted, but the overall parameter semantics are much clearer thanks to the description.

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

Purpose5/5

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

The description clearly states the action ('Select objects') and the criteria (names, kind, layer), which makes the tool's purpose immediately understandable. It is distinct from sibling tools like serp_create_curve or serp_boolean, focusing specifically on selection.

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

Usage Guidelines4/5

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

The description explains the mode parameter ('replace', 'add', 'clear') and highlights the non-obvious behavior that 'clear ignores other args', which is directly useful for invoking the tool. It does not explicitly name alternative tools or exclusions, but no sibling tool is a selection tool, so the intended usage context is clear.

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

serp_transformA

Transform objects (by name).

operation/params: 'move' offset [dx,dy,dz] 'copy' offset [dx,dy,dz] 'rotate' center [x,y,z], axis [x,y,z] (default Z), angle degrees 'scale' center, factor (uniform) or factors [sx,sy,sz] 'mirror' plane_point, plane_normal, keep_original (bool)

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
targetsYes
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It only lists parameter syntax and does not reveal side effects such as whether 'move' mutates the original, whether 'copy' creates new objects, or the exact semantics of 'keep_original' in mirror. This is a significant gap for a mutation tool.

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

Conciseness4/5

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

The description is compact and structured as a syntax reference, with no verbose fluff. The multiline operation/params listing is efficient, though it could be slightly clearer with examples or expanded explanations for each operation.

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

Completeness4/5

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

The tool has an output schema, so return values need not be described. All five operations and their parameters are documented, making the description sufficient for most selection and invocation needs. However, the lack of behavioral context (side effects, safety) prevents a perfect score.

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

Parameters5/5

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

The schema only provides a generic 'params' object with no internal structure. The description fully specifies the parameter layout for each operation, including defaults (e.g., axis defaults to Z) and parameter formats (offset, center, factor, plane_point). It also clarifies that targets are object names. This adds substantial meaning beyond the schema.

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

Purpose5/5

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

The description clearly states 'Transform objects (by name)' and enumerates five specific operations (move, copy, rotate, scale, mirror), distinguishing it from sibling tools like boolean, create, or measure. The verb+resource is clear and specific.

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

Usage Guidelines4/5

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

The description makes the tool's scope obvious (any transformation operation) and implies when to use it. However, it does not explicitly discuss alternatives or scenarios where another tool would be preferred, so it falls short of a full 5.

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

serp_undoA

Undo the last operation (or redo with redo=true).

ParametersJSON Schema
NameRequiredDescriptionDefault
redoNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of disclosure. It indicates undo/redo are state-changing operations but does not mention potential side effects, such as whether undone operations can be recovered, whether the undo history is limited, or whether it affects only certain object types. This is a significant gap for a mutation tool.

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

Conciseness5/5

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

The description is a single sentence that conveys the core functionality and the optional parameter in a compact, front-loaded manner. Every word contributes meaning, with no unnecessary elaboration.

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

Completeness4/5

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

For a simple one-parameter tool with an output schema, the description is largely sufficient. It covers the main behavior and parameter semantics. However, it omits caveats like the scope of 'last operation' (e.g., across all scenes or within current scene), which could be relevant in a complex 3D environment.

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

Parameters5/5

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

The schema only defines `redo` as a boolean with a default, but the description explicitly explains its meaning: setting `redo=true` triggers redo instead of undo. This directly adds semantic value beyond the raw schema, making the parameter's effect completely clear.

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

Purpose5/5

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

The description clearly states the tool's function: undoing the last operation, with an explicit mention of the redo capability via the `redo` parameter. It is distinct from sibling tools, which focus on creation, measurement, transformation, etc., so there is no ambiguity about what this tool does.

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

Usage Guidelines3/5

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

The description implies usage (i.e., after performing an operation to reverse it), but it does not explicitly state when to use it vs. alternatives, nor does it mention any prerequisites or exclusions. For a standard undo/redo tool, this is acceptable but lacks explicit guidance.

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

serp_viewportA

Adjust the viewport. view: top/front/right/left/back/bottom/ isometric/perspective. display_mode: wireframe/shaded/ghosted. zoom_extents fits all objects in view.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNo
display_modeNo
zoom_extentsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the zoom_extents effect and lists parameter options, but does not disclose whether the viewport change impacts the active view persistently or requires an open scene. This is adequate for a simple view control but lacks deeper behavioral context.

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

Conciseness5/5

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

The description is compact and information-dense, with each parameter listed along with its valid options in a single sentence. There is zero filler—every word contributes to understanding the tool.

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

Completeness4/5

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

Given the tool's simplicity, the presence of an output schema, and full parameter documentation, the description is largely complete. It lacks mention of prerequisites (e.g., active viewport) and side effects, but for a viewport adjustment tool this is likely sufficient. A slightly more complete description would note that changes affect the current view only.

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

Parameters5/5

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

The input schema has no descriptions (0% coverage), so the description fully compensates by documenting each parameter: view lists all valid orientations, display_mode lists valid visual styles, and zoom_extents explains its behavior. This is comprehensive for a 3-parameter tool and adds significant meaning beyond the schema.

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

Purpose5/5

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

The description explicitly states the tool's function ('Adjust the viewport') and enumerates all view orientations and display modes, making its purpose unambiguous. It clearly distinguishes itself from sibling tools by focusing solely on viewport manipulation.

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

Usage Guidelines3/5

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

The description implies usage (adjusting the viewport) but provides no explicit when-to-use or alternative guidance. It does not mention when to prefer this over other scene tools, though the intent is clear from the name and context.

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

Tool Schema Changelog

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

  1. 1 tool updatev0.10.0
    • Addedserp_prepare_script
  2. 1 tool updatev0.8.3
    • Changedserp_layers1 field changed
      • addedInput schema / properties / parent
        Added value: +{
        +  "default": "",
        +  "title": "Parent",
        +  "type": "string"
        +}
  3. 14 tool updatesv0.5.6
    • First observedserp_boolean
    • First observedserp_command
    • First observedserp_create_curve
    • First observedserp_create_surface
    • First observedserp_export
    • First observedserp_import
    • First observedserp_layers
    • First observedserp_measure
    • First observedserp_scene_info
    • First observedserp_screenshot
    • First observedserp_select
    • First observedserp_transform
    • First observedserp_undo
    • First observedserp_viewport

TDQS

A3.9/5.0

Scored across 15 tools

Disambiguation4/5

Each tool has a clearly distinct purpose tied to a resource or action (curves, surfaces, booleans, transform, layers, measurement). The catch-all serp_command overlaps with nearly every other tool (e.g. extrude via command vs. serp_create_surface), but it is explicitly framed as an escape hatch, which mitigates confusion.

Naming Consistency5/5

Every tool follows the same serp_<verb>_<noun>/serp_<noun> snake_case pattern (serp_create_curve, serp_boolean, serp_layers, serp_measure). Naming is fully predictable and consistent across all 15 tools.

Tool Count5/5

15 tools is well within the ideal 3-15 range and each one earns its place covering a distinct modeling operation. No tool feels redundant or padded.

Completeness4/5

The surface covers the full modeling lifecycle: create (curve/surface), edit (transform, boolean), organize (select, layers), I/O (import/export), inspect (scene_info, measure, screenshot), and viewport/undo. The only noticeable gap is an explicit delete/remove-object operation, though serp_command and serp_undo partially compensate.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI-assisted 3D modeling and scene control in Autodesk Maya through natural language commands, supporting object creation, transformation, material application, and more.
    16 npm
    7
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI-powered 3D modeling in Rhino 8 through 135+ tools for geometry, transformations, booleans, layers, materials, and more, using natural language.
    6
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI-driven 3D modeling in Blender by providing tools to create primitives, apply modifiers and materials, set up lighting and cameras, capture viewport snapshots, export assets, inspect scenes, and execute Python commands via natural language.
    10
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI clients such as Codex, Claude, and Cursor to control Rhino and Grasshopper through natural language, including creating and modifying geometry, managing layers, inspecting scenes, and running Grasshopper operations.
    MIT