Static source inference · medium confidence · detected: Logging
Deprecated protocol patterns detected
Summary
AutoCAD MCP Pro shows decent foundational structure with 25 tools covering a broad design/CAD domain. However, critical gaps severely limit definition quality. Most tools (20/25) lack visible input schemas in the provided code, we can infer parameter names and types from descriptions, but cannot verify actual JSON Schema definitions are present and correct. Tool descriptions range from adequate to bare (e.g., 'Create entities in the drawing' for entity_create has no parameter detail). Parameter descriptions exist for most tools but many are terse (10-30 chars), below the 50-200 char production baseline. Error handling and recovery guidance are absent, no tool shows what errors can occur, how to interpret them, or what the agent should do next. Output schemas are completely undocumented; LLMs cannot plan tool chains without knowing what fields each tool returns. Naming is generally strong (verb-noun convention: drawing_open, layer_create, etc.), but several tools expose implementation details that should be abstracted (e.g., 'handle' is a COM/DXF concept, not user-friendly). The server does declare risk levels (READ_ONLY, WRITE, DESTRUCTIVE) which is good, but this is not yet part of the official MCP spec and adds custom non-standard metadata. Security is a concern: no evidence of permission gates, scope declarations, or audit trails despite tools modifying critical CAD files. Composition is reasonable, tools are mostly single-responsibility, but output chaining support is unknown. This server is a working implementation but falls short of production-grade tool definition standards.
Missing or incomplete input schemas for 12 tools (entity_create, analysis_stats, analysis_bounding_box, selection_get, block_list, and others). Cannot verify JSON Schema structure without seeing actual field definitions in source code.
Output schemas are completely undocumented across all 25 tools. LLMs cannot determine what fields each tool returns, breaking tool-chain planning and forcing wasteful discovery calls.
Document output schemas for all 25 tools. Specify the structure, field names, types, and any pagination metadata. E.g., entity_get should document it returns {handle: string, type: string, layer: string, x: number, y: number, ...}.
Expand parameter descriptions to 50-200 chars (production baseline). For entity_modify, change 'Modify entity attributes' to 'Modify entity attributes such as layer, color, linetype, or position. Pass the entity handle (obtainable from entity_get or selection_get) and the new attribute values as a JSON object.'
Add error handling documentation. For each destructive or I/O tool, document failure modes: 'Raises PermissionError if user lacks write access to drawing. Raises FileNotFoundError if drawing path does not exist. Raises ValueError if layer name is invalid (max 255 chars, no special chars except -_).'
Replace custom 'Risk' metadata with MCP-standard tool annotations. Rewrite tool definitions to include destructiveHint for entity_delete, drawing_new, entity_create; readOnlyHint for all analysis_* and selection_get tools.
Add pagination support and document limits. Tools returning lists should accept limit (default 50, max 500) and offset/cursor parameters. Return {items: [...], total_count: number, has_more: boolean} structure.
Provide parameter validation guidance. E.g., for block_insert, add: 'Accepts natural block names (existing in drawing) or full paths. Scale factors must be positive numbers (0.1 - 10.0 typical). Rotation in degrees (0-360). Attributes object keys must match block definition.'
Spec posture evidence
Inferred effective spec: 2025-06-18+.
Relies on Logging (deprecated) - log to stderr or use OpenTelemetry
No error handling or recovery guidance. Tools do not document what errors can occur, what they mean, or how agents should respond. E.g., drawing_open gives no hint about file-not-found, permission, or format errors.
Domain-specific parameter names (e.g., 'handle', 'tolerance') are not user-friendly. LLMs unfamiliar with DXF/COM will struggle to understand what a 'handle' is or when 'flatten_tolerance' should be used. Descriptions are too short (10-30 chars) to compensate.
No permission gates or scope declarations. Destructive tools (entity_delete, drawing_new, block_explode) have no visible access control. No audit trails or logging evidence for compliance.
Tool descriptions are generic or incomplete. E.g., 'Create entities in the drawing' (entity_create) lacks any guidance on what types of entities, required parameters, or expected return value. Average description length ~45 chars vs production baseline of 194 chars.
Custom risk metadata ('Risk: WRITE', 'Risk: DESTRUCTIVE') is non-standard. The MCP spec does not define these fields. Use standard tool annotations (readOnlyHint, destructiveHint, idempotentHint) instead.
No pagination guidance. Tools returning lists (analysis_entities_in_region, block_list, analysis_select_by_layer, analysis_select_by_type) do not document how many results are returned, whether pagination is supported, or how to iterate large result sets.
Add cross-tool chaining hints in descriptions. E.g., entity_create should note 'Returns entity handle, pass it to entity_modify, entity_delete, or entity_measure for further operations.' This helps agents plan multi-step sequences.
Implement permission gates. Each tool should verify the caller has necessary permissions before executing. Document required scopes: drawing_open requires 'read:drawings', entity_delete requires 'write:drawings:destructive'.
Reduce domain jargon or explain it. Replace bare 'handle' with 'Entity handle (unique identifier, e.g., "A2F")'. For tolerance parameters, explain: 'Tolerance for curve flattening in drawing units, smaller values give smoother results but slower computation. Typical range 0.01 - 1.0.'
Add dry-run or confirmation support for destructive operations. entity_delete and drawing_new could accept a dry_run=true parameter to simulate without executing, or require explicit confirmation=true.