Serpentine3D MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| serp_scene_infoA | Get the current scene: objects (name/kind/layer/bbox), layers, selection, bounds, and display mode. |
| 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. |
| 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). |
| 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] |
| serp_booleanA | Boolean operation between solids: 'union', 'difference' (targets minus tools), or 'intersection'. Tools are consumed. |
| 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) |
| serp_selectA | Select objects by names, kind (curve/surface/solid), or layer name. mode: 'replace', 'add', or 'clear' (clear ignores other args). |
| 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. |
| 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. |
| 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. |
| serp_importB | Import a file into the scene (.serp, .step/.stp, .obj). |
| serp_exportA | Export the scene (or current selection) to .serp, .step/.stp or .obj — format chosen by extension. |
| serp_measureA | Measure geometry. what: 'distance' (needs points=[[..],[..]]), 'length', 'area', 'volume', 'bbox', 'centroid' (need targets). |
| serp_undoA | Undo the last operation (or redo with redo=true). |
| 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 15 tools
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.
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.
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.
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.