CAD 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": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| create_pointB | Create a point at (x, y). Coordinates are converted from |
| create_lineC | Create a line from (x1,y1) to (x2,y2). Lengths use |
| create_circleC | Create a circle with centre (cx,cy) and radius. Lengths use |
| create_arcA | Create a circular arc: centre (cx,cy), radius, startAngle and endAngle in radians (counterclockwise from +X; mathematical Y-up). Radius uses |
| create_rectangleB | Axis-aligned rectangle: corner (x,y), width, height, optional cornerRadius. Lengths use |
| create_polygonC | Create a polygon path from vertices. |
| create_polylineB | Create a polyline. If |
| create_layerB | Create a named layer with optional color (e.g. #ff0000). Layers are keyed by name; default geometry layer is "0". |
| set_entity_layerC | Assign entities to a layer by name. |
| list_entitiesC | List entities. Optional |
| list_layersB | List all layers (name, color, visible, locked). |
| get_entity_propertiesC | Return one entity record by id. |
| delete_entityC | Remove an entity by id. |
| render_preview_svgC | Wireframe SVG preview of entities (mm). Optional entity_ids limits which shapes are drawn. |
| import_dxfA | Import DXF content (UTF-8 text or base64) into the scene: ensures layers exist and adds LINE, CIRCLE, ARC, POINT, LWPOLYLINE, and 2D POLYLINE entities (mm; arcs as radians internally). |
| export_dxfB | Export 2D entities to DXF (internal mm). Optional entity_ids limits which entities are written. |
| begin_transactionA | Start a nested editing transaction; pair with commit_transaction or rollback_transaction. |
| commit_transactionA | Commit the innermost active transaction. |
| rollback_transactionA | Discard changes since the matching begin_transaction and restore scene state. |
| push_undo_checkpointA | Record the current scene state on the undo stack (clears redo). Call before a batch of edits you want to revert in one step. |
| undoB | Restore the scene to the previous undo checkpoint. |
| redoB | Re-apply the last undone scene state. |
| geometry_backend_statusA | Report the current 3D geometry backend. Returns one of: { backend: "occt", available: true, version? } when OpenCascade.js is loaded, { backend: "occt-error", available: false, reason } when load failed, or { backend: "mock", available: false, reason } when running with the lightweight fallback. Use this to verify whether STEP/STL/IGES/GLTF tools are running on real OCCT or on stubbed geometry. |
| delete_layerA | Delete a layer by name. Entities on that layer are reassigned to the default layer 0. |
| rename_layerB | Rename an existing layer. Any entities on the old layer are updated to the new layer name. |
| set_layer_visibleC | Set whether a layer is visible in previews and listings. |
| set_layer_lockedC | Set whether a layer is locked against editing. |
| set_layer_colorA | Set or clear a layer display color. Pass an empty string to clear the stored color. |
| get_layer_listC | Alias for listing all layers. |
| get_entity_typeC | Get the entity type string for a specific entity id. |
| find_entities_by_layerC | Return entities assigned to a specific layer name. |
| find_entities_in_regionC | Find entities whose bounding boxes intersect the given region. |
| find_entities_by_propertyC | Find entities by direct field or property-bag value using exact matching. |
| get_bounding_boxC | Compute a bounding box for all entities or a selected subset. |
| get_curve_lengthC | Measure length or perimeter for a 2D entity in internal millimetres. |
| set_entity_propertyB | Set a mutable entity field ( |
| set_entity_colorC | Set entity color display metadata on one or more entities. |
| set_entity_linetypeC | Set entity linetype display metadata on one or more entities. |
| set_entity_lineweightC | Set entity lineweight display metadata on one or more entities. |
| mirror_2dC | Create mirrored copies of one or more entities across an axis line. |
| array_rectangularC | Create rectangular array copies using row and column spacing in the current units. |
| array_polarC | Create polar array copies around a center. Angle is in radians and includes the source entity. |
| offsetB | Create an offset copy of a supported 2D entity. Use left/right for open curves and inside/outside or inward/outward for closed curves. |
| create_boxC | Create a box solid at origin with width, height, and depth. |
| create_sphereC | Create a sphere solid. |
| create_cylinderC | Create a vertical cylinder solid. |
| create_coneC | Create a frustum or cone solid. |
| create_torusC | Create a torus solid. |
| create_prismC | Create a prism from a 2D profile entity and height. |
| create_revolutionC | Create a simplified revolved solid from a 2D profile around an axis. |
| boolean_unionC | union two 3D solids and return a simplified composite result. |
| boolean_subtractC | subtract two 3D solids and return a simplified composite result. |
| boolean_intersectC | intersect two 3D solids and return a simplified composite result. |
| fillet_3dC | Create a simplified filleted copy of a solid. |
| chamfer_3dC | Create a simplified chamfered copy of a solid. |
| shellC | Create a simplified shelled copy of a solid. |
| draft_angleC | Create a simplified drafted copy of a solid. |
| loftC | Create a simplified lofted solid from one or more profiles. |
| sweepC | Create a simplified swept solid from a profile and path. |
| set_parameterC | Create or replace a named parameter. |
| get_parameterC | Get a parameter by name. |
| list_parametersC | List all named parameters. |
| update_parameterC | Update an existing parameter value. |
| add_constraint_coincidentD | Add a coincident constraint. |
| add_constraint_parallelD | Add a parallel constraint. |
| add_constraint_perpendicularD | Add a perpendicular constraint. |
| add_constraint_tangentD | Add a tangent constraint. |
| add_constraint_concentricD | Add a concentric constraint. |
| add_constraint_equalD | Add a equal constraint. |
| add_constraint_symmetricD | Add a symmetric constraint. |
| add_constraint_horizontalC | Add a horizontal constraint. |
| add_constraint_verticalC | Add a vertical constraint. |
| add_constraint_fixedC | Add a fixed constraint. |
| add_constraint_midpointD | Add a midpoint constraint. |
| add_dimension_linearD | Add a dimension_linear constraint. |
| add_dimension_angularD | Add a dimension_angular constraint. |
| add_dimension_radialD | Add a dimension_radial constraint. |
| add_dimension_diameterD | Add a dimension_diameter constraint. |
| create_blockC | Create a block definition from entity ids. |
| insert_blockC | Insert a block definition by cloning its member entities. |
| explode_blockB | Explode an inserted block group back into loose entities. |
| list_blocksC | List block definitions. |
| edit_blockC | Return a block definition for editing. |
| define_attributeC | Define an attribute on a block definition. |
| create_groupC | Create a named group from entity ids. |
| ungroupC | Remove a group by id. |
| select_groupC | Return entities in a group. |
| create_assemblyC | Create an empty assembly. |
| add_componentC | Add a component reference to an assembly. |
| remove_componentC | Remove a component instance from an assembly. |
| mate_coincidentC | Create a coincident mate between two references. |
| mate_concentricC | Create a concentric mate between two references. |
| mate_distanceC | Create a distance mate between two references. |
| mate_angleC | Create a angle mate between two references. |
| mate_parallelC | Create a parallel mate between two references. |
| set_component_flexibleC | Mark a component as flexible or rigid. |
| create_exploded_viewC | Create an exploded view definition for an assembly. |
| add_explode_stepC | Add an explode step to an exploded view. |
| animate_explodeC | Return a simple explode animation plan. |
| measure_distanceC | Measure distance between two points. |
| measure_angleC | Measure angle between two lines. |
| measure_areaC | Measure planar area from an entity. |
| measure_perimeterC | Measure perimeter or curve length for an entity. |
| measure_volumeC | Measure solid volume. |
| measure_surface_areaC | Measure solid surface area. |
| measure_centroidC | Measure solid centroid. |
| measure_moment_of_inertiaC | Measure simplified moment of inertia from bbox. |
| measure_bounding_boxC | Measure the combined bounding box of entities. |
| measure_minimum_distanceB | Approximate minimum distance between two solids via bounding boxes. |
| check_interferenceC | Check component interference using transformed component bounding boxes. |
| check_clearanceC | Check if minimum distance meets a clearance threshold. Accepts entity ids or assembly component ids; use assembly_id to scope component lookup. |
| set_materialC | Attach material metadata to a solid. |
| get_mass_propertiesC | Return mass properties based on simplified volume and material density. |
| add_linear_dimensionC | Add a linear dimension annotation. |
| add_aligned_dimensionD | Add an aligned dimension annotation. |
| add_angular_dimensionC | Add an angular dimension annotation. |
| add_radius_dimensionD | Add a radius dimension. |
| add_diameter_dimensionC | Add a diameter dimension. |
| add_ordinate_dimensionC | Add an ordinate dimension. |
| add_baseline_dimensionD | Add baseline dimensions. |
| add_continued_dimensionD | Add continued dimensions. |
| add_textC | Add a single-line text annotation. |
| add_mtextC | Add a multi-line text annotation. |
| add_leaderC | Add a leader annotation. |
| add_multileaderC | Add a multileader annotation. |
| create_tableC | Create a table annotation. |
| set_table_cellC | Set a table cell value. |
| add_surface_finish_symbolD | Add symbol annotation add_surface_finish_symbol. |
| add_weld_symbolD | Add symbol annotation add_weld_symbol. |
| add_gdt_frameD | Add symbol annotation add_gdt_frame. |
| add_center_markD | Add symbol annotation add_center_mark. |
| add_center_lineD | Add symbol annotation add_center_line. |
| create_viewportC | Create a viewport entity. |
| set_view_standardC | Store active drawing standard in parameter state. |
| set_visual_styleC | Store active visual style in parameter state. |
| create_drawingC | Create a drawing sheet. |
| add_viewD | Add a add_view to a drawing. |
| add_section_viewD | Add a add_section_view to a drawing. |
| add_detail_viewD | Add a add_detail_view to a drawing. |
| add_auxiliary_viewD | Add a add_auxiliary_view to a drawing. |
| update_drawing_viewsC | Return current drawing state after a logical refresh. |
| render_previewC | Render current scene or selected entities to a base64 image payload. |
| generate_pdfC | Generate a minimal PDF summary for a drawing. |
| generate_svgC | Generate SVG for selected entities or the full scene. |
| create_map_layoutC | Create a map-oriented drawing layout using current project extent and drawing scale metadata. |
| apply_thesis_templateC | Apply a stored thesis/map template to an existing drawing and persist layout/export metadata. |
| add_north_arrowC | Add a north arrow symbol annotation for a map drawing. |
| add_scale_barC | Add a simple scale bar annotation to a map drawing. |
| add_legendC | Add a simple map legend annotation listing domain layers or categories. |
| add_coordinate_gridC | Add a coordinate grid using the provided extent and spacing. |
| batch_generate_svgC | Generate SVG files for one or more drawings and write them into an output directory. |
| batch_generate_pdfC | Generate summary PDF files for one or more drawings and write them into an output directory. |
| import_stepC | Import STEP content. |
| import_igesC | Import IGES content. |
| import_stlD | Import STL content. |
| import_objD | Import OBJ content. |
| import_svgD | Import SVG content. |
| import_pdf_as_underlayD | Import PDF_AS_UNDERLAY content. |
| export_stepC | Export entities to STEP-like text. |
| export_igesC | Export entities to IGES-like text. |
| export_stlC | Export entities to STL-like text. |
| export_objC | Export entities to OBJ-like text. |
| export_svgD | Export entities to SVG-like text. |
| export_gltfC | Export entities to GLTF-like text. |
| export_3mfC | Export entities to 3MF-like text. |
| import_dwgA | Import DWG by piping through LibreDWG's |
| export_dwgA | Export the current 2D scene to DWG by writing a DXF and converting via LibreDWG's |
| dwg_tools_statusA | Report whether LibreDWG's |
| import_csv_pointsC | Import CSV rows into point entities for sampling points or monitoring wells while preserving tabular attributes. |
| import_geojsonC | Import GeoJSON FeatureCollection data into point, line, polyline, and polygon entities. |
| import_shapefileC | Import ESRI Shapefile geometry and DBF attributes into point, line, polyline, and polygon entities. |
| export_geojsonB | Export 2D entities to a GeoJSON FeatureCollection while preserving layer and properties metadata. |
| export_shapefileB | Export 2D entities as a zipped ESRI Shapefile package and optionally write it to disk. |
| set_project_crsC | Set project CRS and optional origin metadata for resource/environment mapping workflows. |
| get_project_crsB | Return current project georeferencing metadata. |
| set_map_extentC | Set the current map extent used for paper layout, grids, and exports. |
| set_drawing_scaleC | Set a drawing scale factor between local drawing units and world coordinates. |
| transform_coordsB | Transform coordinates between local drawing space and world space using project origin and drawing scale. |
| reproject_pointA | Reproject a single point between two CRSes using proj4. |
| reproject_pointsC | Reproject many points between two CRSes in one call. Same |
| register_crs_definitionA | Register an EPSG-style CRS definition with proj4 so future reprojection tools can use it. |
| list_known_crsA | List CRS codes currently registered with proj4 in this session (pre-registered defaults plus any added via register_crs_definition). |
| create_sampling_pointC | Create a resource/environment sampling point with optional label, elevation, and attribute metadata. |
| create_monitoring_wellC | Create a monitoring well point with optional depth and screened interval metadata. |
| create_profile_lineC | Create a profile line used for section sampling and resource/environment transects. |
| create_boundary_polygonC | Create a study boundary or management zone polygon with domain metadata. |
| list_entities_by_domain_kindB | List entities tagged with a domain kind such as sampling_point, monitoring_well, or profile_line. |
| measure_polygon_area_statsC | Summarize polygonal area by entity, optionally grouped by a property field for study zones. |
| measure_profile_lengthC | Measure the length of a profile line or transect. |
| compute_section_areaC | Sample elevated points along a profile line and compute the section area against a baseline elevation. |
| compute_cut_fill_volumeC | Estimate cut/fill volume inside a polygon from enclosed elevated sample points and a base elevation. |
| compute_grid_surface_volumeC | Estimate surface volume from elevated point samples and a representative cell area. |
| import_geotiff_metadataA | Read a GeoTIFF file and return width / height / sample format / bbox / origin / resolution / CRS without attaching it to the session. Use attach_raster_layer to keep it as a session basemap. |
| attach_raster_layerB | Attach a GeoTIFF on disk to the session as a raster basemap layer. Returns the assigned layer id and parsed metadata. Use list_raster_layers / render_raster_layer_png afterwards. |
| list_raster_layersB | List all raster (basemap) layers attached to the session. |
| get_raster_layerB | Return one raster layer record by id. |
| remove_raster_layerB | Remove a raster layer by id. |
| set_raster_layer_visibleC | Toggle a raster layer's visibility flag. |
| rename_raster_layerC | Rename a raster layer for human reference. |
| render_raster_layer_pngA | Decode an attached raster layer (or a GeoTIFF on disk) into a PNG preview. Single-band rasters are auto-stretched to grayscale; multi-band rasters use the first three bands. Returns base64 PNG bytes; pass |
| create_ellipseC | Create an ellipse with radii and rotation. |
| create_splineC | Create a control-point spline entity. |
| trimC | Trim a line-like entity by shortening it toward its midpoint. |
| extendC | Extend a line-like entity by 20 percent. |
| fillet_2dC | Create a simple arc fillet between two lines using their intersection midpoint. |
| chamfer_2dC | Create a simple chamfer line between two lines. |
| get_face_normalC | Return a simplified face normal for an axis-aligned face id. |
| get_edge_listC | Return simplified edge ids for a solid. |
| get_face_listC | Return simplified face ids for a solid. |
| get_vertex_listC | Return solid bbox corner vertices. |
| get_topologyC | Return simplified brep-like topology for a solid. |
| new_projectA | Start a new empty CAD project (default layer 0, no entities). Optional project name. |
| get_project_infoB | Return current project metadata and scene counts. |
| save_projectB | Save the current scene to a project JSON file on disk (cad-mcp-project v1). |
| load_projectB | Load a project JSON file from disk and replace the current scene (undo/redo cleared). |
| open_projectA | Alias for load_project: load a project JSON file from disk and replace the current scene. |
| autocad_statusA | Inspect a running AutoCAD application through COM: window/process identity, current binding, active document and idle state. This does not establish a persistent binding or operate on the internal CAD session. |
| autocad_list_documentsA | List COM-reachable AutoCAD applications and their open documents. Returns data.applications and data.documents with window/process identity for target selection. COM may not expose every same-version AutoCAD process. |
| autocad_attachA | Bind this MCP server to a COM-reachable AutoCAD application window/process and document. Use a decimal windowHandle and document name/full path returned by status/list calls; omit them to select the current target. activate defaults to true and activates the selected document; false only establishes the binding without activating it. Later commands reject if the bound document is no longer active. COM may not expose every same-version AutoCAD process. |
| autocad_detachA | Clear this MCP server's AutoCAD binding. Does not close AutoCAD, close a document, or discard drawing changes. |
| autocad_activate_documentA | Activate an already-open AutoCAD document by its exact name or full path and update the binding to that document. Does not open files. Use autocad_list_documents to identify the target. |
| autocad_get_variablesA | Read 1–50 AutoCAD system variables from the live document, for example CMDACTIVE, CMDNAMES, CLAYER or INSUNITS. Use readback to verify command effects; an idle state alone does not prove command success. |
| autocad_list_layersB | List layers from the live AutoCAD document through COM, respecting the current application/document binding. Separate from the internal CAD session's list_layers. |
| autocad_list_modelspace_entitiesA | List entities from the live AutoCAD document's ModelSpace, respecting the current binding. Optional filters: layer, objectName, limit. Separate from the internal CAD session's list_entities. |
| autocad_send_commandA | Submit a raw command to the live AutoCAD document. Rejects a busy document or a bound document that is no longer active. Example: |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| cad-session-intro | Starter context for working with the CAD MCP server (placeholder). |
| design_part | Guide the model through requirements, material choice, critical dimensions, and CAD-friendly modeling steps. |
| generate_drawing | Produce drawing views, sheet layout, and annotation strategy from the current 3D or 2D scene. |
| dimension_drawing | Plan complete, standards-aware dimensions and notes for the current drawing or layout. |
| create_assembly | Plan component structure, mates, and assembly order from a parts list or current scene. |
| optimize_design | Review the model for weight, manufacturability, maintainability, and simplification opportunities. |
| check_manufacturability | Review the design for process-specific manufacturing risks and documentation gaps. |
| create_parametric | Identify driving dimensions and propose a reusable parameter scheme for the current design. |
| research_sampling_workflow | Resource/environment domain workflow: ingest CSV sampling points, set CRS, clip by boundary polygon, compute area / count / class statistics, and emit an A3 thesis-style map. |
| profile_section_workflow | Pick a profile line, sample elevations along it, build a section figure, and produce an A4 thesis-style figure. |
| cut_fill_report | Estimate simplified cut/fill between an existing-surface DEM and a design-surface DEM (or a flat target elevation) within a boundary, and produce a short report. |
| georeferenced_basemap_setup | Walk through attaching a GeoTIFF as a raster basemap, aligning it with the project CRS, and overlaying vector layers on top. |
| dwg_dxf_round_trip | Verify that a DWG file can be imported via LibreDWG, edited, and exported back without losing layers or core entities. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| cad-templates-list | Available drawing/map template files (JSON) |
| cad-templates-thesis-a3-map | A3 thesis map layout template (JSON) |
| cad-templates-thesis-a4-figure | A4 thesis figure layout template (JSON) |
| cad-project-current | Project metadata and server version (JSON) |
| cad-project-georef | CRS, origin, extent, and drawing scale metadata (JSON) |
| cad-project-extent | Active project extent for mapping and layout workflows (JSON) |
| cad-entities-list | All entities in the current scene (JSON array) |
| cad-domain-sampling-points | Sampling point entities and attributes in the current scene (JSON) |
| cad-domain-profile-lines | Profile line entities used for section and transect work (JSON) |
| cad-layers-list | Layer definitions for the current scene (JSON) |
| cad-preview-current | Current SVG preview for the active scene |
| cad-parametrics-variables | Named parameters driving the model (JSON object) |
| cad-history-undo-stack | Current undo and redo stack sizes (JSON) |
| cad-blocks-library | Static block catalog placeholder (JSON) |
| cad-materials-library | Static materials catalog placeholder (JSON) |
| cad-linetypes-list | Built-in line type definitions (JSON) |
| cad-text-styles | Built-in text styles (JSON) |
| cad-dimension-styles | Built-in dimension styles (JSON) |
| cad-standards-iso | Starter ISO drafting rules (JSON) |
| cad-standards-ansi | Starter ANSI drafting rules (JSON) |
TDQS
Scored across 225 tools
Many tools overlap heavily: dimension annotations vs dimension constraints (add_dimension_linear vs add_linear_dimension, add_dimension_angular vs add_angular_dimension), multiple measurement/bounding-box tools, aliases like open_project and get_layer_list, and parallel internal-CAD vs AutoCAD COM operations. With 225 tools, an agent faces frequent ambiguity and near-duplicate selection risks.
Names are overwhelmingly snake_case, but verb conventions are inconsistent (create/add/set/get/list/measure/compute/import/export/generate/render/apply), with direct aliases and a few single-word or noun-first tools (offset, shell, loft, draft_angle). Still generally readable, but not a predictable verb_noun pattern throughout.
225 tools is an extreme mismatch for an MCP server, far beyond the 3-15 well-scoped range. The set is massively overgrown and likely overwhelming for agents to navigate.
The surface is broad across 2D/3D creation, annotation, dimensions, layers, blocks, constraints, assemblies, measurement, import/export, and geospatial workflows. However, core CAD editing gaps remain (e.g., no obvious move/rotate/scale for existing 2D entities), and many tools are explicitly simplified or stub-like.