MCP server exposing TopologicPy spatial modeling to LLM agents. Enables creation, querying, transformation, and export of topological entities (Vertex, Edge, Wire, Face, Shell, Cell, CellComplex, Cluster, Graph) with support for boolean operations and IFC/OBJ/BREP I/O.
The server defines 19 tools with reasonable naming conventions (all start with action verbs: create_, list_, query_, get_, boolean, transform, dictionary, export_, import_, remove_). Tool descriptions exist and are moderately detailed (ranging 60-300 chars). However, schema completeness is inconsistent, most tools have well-formed input schemas with typed parameters and descriptions, but output schemas are not documented in the source. Parameter descriptions are present but variable in quality (some are helpful; others are generic). Error handling is minimal, tools lack recovery guidance and actionable error messages. A few tools (e.g., 'dictionary', 'transform') have overly broad responsibilities that could be split. Overall, definitions follow the verb_noun pattern well and are readable, but fall short of LLM-optimized clarity and lack structured output documentation.
Perform a boolean operation (union, intersection, difference, symmetric difference, self-merge) on two topologies.
Create a Cell (3D solid) from named Faces. Faces must form a closed watertight shell.
Create a Cell. shape: "prism"|"cylinder". Prism uses width/length/height, cylinder uses radius/height/sides.
Create a CellComplex by merging named Cells, sharing faces/edges/vertices at intersections.
Create a Cluster (unstructured collection) from named topologies.
Create an Edge (line segment) between two named vertices.
Create a Face from a named closed Wire (external boundary).
Output schemas not documented in source code. While input parameters are well-defined with types and descriptions, the tools lack documented return types. LLMs cannot infer what fields to expect from responses, forcing blind chaining and potential data extraction errors.
Error handling lacks recovery guidance. Tools return simple success messages but do not document failure modes or actionable error messages. E.g., 'Invalid topology name' should suggest 'call list_topologies() to see available names' or provide the list of available names. No distinction between retryable and user-fixable errors.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 61 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 29 | - | v1 |
Create a Face. shape: "rectangle"|"circle". Rectangle uses width/length, circle uses radius/sides.
Create a Graph representing topological adjacencies from a named topology.
Create a Vertex (point) at (x,y,z) and store it by name.
Create a Wire (polyline) from an ordered list of named vertices. Set close=True to connect last to first.
Get or set metadata dictionary on a named topology.
Export a named topology to a file in BREP, OBJ, or IFC format.
Get all sub-topologies of a given type from a named topology (e.g., all Cells within a CellComplex).
Import a topology from a BREP, OBJ, or IFC file and store it by name.
List all named topologies in the current session with their types and metadata.
Get detailed properties of a named topology: type, counts, centroid, volume, area, etc.
Remove a named topology from the session.
Transform a named topology: translate, rotate, scale, or reflect.
The 'boolean' tool has a generic name that does not clearly express the operation. It should be 'perform_boolean_operation' or similar. The name 'boolean' is ambiguous, it could refer to a boolean parameter, a boolean query, or a boolean operation. LLMs will struggle to disambiguate.
The 'transform' tool combines four distinct operations (translate, rotate, scale, reflect) into a single tool. While the 'operation' parameter disambiguates, the schema is ambiguous, parameters like 'angle', 'origin', and 'normal' are only relevant for specific operations. LLMs may pass irrelevant parameters. Consider splitting into transform_translate, transform_rotate, transform_scale, transform_reflect.
The 'dictionary' tool conflates two responsibilities: getting and setting metadata. This forces LLMs to reason about the 'action' parameter and data payload. Split into get_topology_metadata and set_topology_metadata for clarity and composability.
Parameter descriptions lack validation constraints. E.g., 'operation' parameters accept specific strings (union, intersection, difference, etc.) but the enum constraint is not visible in the schema. The description should state: 'operation: one of [union, intersection, difference, symmetric_difference, self_merge]'. Without explicit enums, LLMs may hallucinate invalid values.
The 'create_face_shape' and 'create_cell_shape' tools have overlapping and context-dependent parameters. E.g., 'create_face_shape' accepts width/length for rectangles but radius/sides for circles; the description does not make clear which apply when. The description states the mapping but the schema does not enforce it. Consider separate tools: create_face_rectangle and create_face_circle.
No confirmation or dry-run pattern for destructive operations. The 'remove_topology' tool has no preview, confirmation request, or undo capability. An agent could irreversibly delete a topology. Consider adding a confirm_removal or preview_removal step, or requiring explicit confirmation in the prompt.