Civil3d-mcp defines 3 tools with decent naming and descriptions, but has notable gaps in schema completeness, parameter documentation, and error guidance. All tools start with action verbs (civil3d_execute, civil3d_query, civil3d_skills), which is good naming practice. Descriptions are present and informative (e.g., execute tool clearly states 'write access', query tool emphasizes 'READ-ONLY mode'). However, parameter descriptions lack specific format guidance and constraints. The execute and query tools expose arbitrary C# code execution, which raises security concerns. The skills tool has an enum-constrained action parameter, but category and query parameters lack validation. Output schemas are not explicitly documented. Error handling returns plain error text rather than actionable guidance.
Execute C# code in Civil 3D with write access. The code runs inside a committed transaction. Available globals: Document, CivilDoc, Database, Transaction, Editor. All Civil 3D namespaces are auto-imported. Return a value to get results back as JSON. Use this for operations that MODIFY the drawing (create, edit, delete objects).
Execute C# code in Civil 3D in READ-ONLY mode (no changes saved). Available globals: Document, CivilDoc, Database, Transaction, Editor. All Civil 3D namespaces are auto-imported. Return a value to get results as JSON. Use this for querying data: listing objects, getting properties, analyzing surfaces, etc.
Browse and read Civil 3D code skills (documented C# code templates). Use 'list' to see available skills, 'search' to find by keyword, 'get' to read the full skill with code template. Skills are pre-built C# patterns you can adapt and execute via civil3d_execute or civil3d_query.
Arbitrary code execution without sandboxing or validation. civil3d_execute and civil3d_query accept arbitrary C# code strings with no validation, lint checks, or runtime guards. An LLM could be tricked into executing malicious code (e.g., `System.IO.File.Delete()`, database corruption, privilege escalation). No mention of sandboxing, AST validation, or allowed namespaces whitelist.
Parameter descriptions lack format guidance and constraints. The 'code' parameter in both execute and query tools has no mention of: maximum code length, prohibited patterns (e.g., file access, network calls), syntax validation, timeout limits, or error recovery. An LLM might pass unbounded or syntactically invalid C# that wastes compute or crashes the session.
Output schemas not documented. Neither execute nor query tool documents the structure of returned results. The code examples show returning JSON, but there is no schema definition for success vs. error responses, field names, or data types. LLMs cannot reliably extract or chain results without knowing the structure.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 55 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 51 | - | v1 |
Error handling returns plain text strings instead of actionable guidance. execute and query both catch errors and return 'Execution failed: {message}' or 'Query failed: {message}'. These messages do not tell the LLM whether the error is retryable, user-fixable, or fatal. No recovery suggestions or next-step guidance.
skills tool lacks input validation and bounds. The 'category' and 'query' parameters are free-form strings with no enum, regex pattern, or length constraints. An LLM might pass a 10,000-character query, invalid UTF-8, or null bytes that crash the file system lookup. No mention of pagination or result limits.
No audit logging or permission checks. Civil3d_execute modifies the drawing (create, edit, delete). There is no evidence of: who called the tool, what code was executed, when it ran, or what changed. No permission gates to verify the caller has authority to modify the document. Modifications are unauditable.
Description parameter in civil3d_execute is optional but lacks guidance on when/why to use it. The description says 'for logging/audit trail', but there is no mention of character limits, required format, or whether it is actually used for audit purposes. Optional parameters without clear purpose confuse LLMs.