基于 pycatia 的 CATIA 自动化 REST API 服务 (CATIA automation REST API service based on pycatia)
This MCP server presents as a Flask-based REST wrapper for CATIA automation. However, it is NOT actually an MCP server, it lacks MCP protocol implementation entirely. The codebase shows Flask blueprints registering HTTP endpoints (e.g., '/api/sketch/create_sketch'), JWT authentication, and Pydantic validation, but contains zero MCP-specific code: no tool_use handling, no MCP request/response envelopes, no resource_list implementations, no prompt_list. Tools are inferred to exist based on API blueprint definitions, not explicitly registered via an MCP server interface. For the 39 tools described: most have minimal descriptions (many 20-40 chars, well below the 50-200 char baseline for LLM optimization). Parameter descriptions are present but generic ('Name of the sketch', 'Array of points'). Input schemas are readable from the rubric but NOT visible in the actual source code provided, only the API route signatures and request.get_json() extraction. No output schemas are documented. Error handling is delegated to @api_exception_handler decorators without visibility into recovery guidance. The tool definitions themselves violate MCP composition principles: 25 tools are WRITE operations with no corresponding READ/discovery tools, forcing an agent to guess parameter values; related operations like 'create_sketch' and 'draw_polyline' are separate with no cross-linking; batch operations (add_constraints_batch) exist alongside single-item variants, inviting inefficient loops. Schema scores are capped at 0 for most tools because the actual JSON Schema validation code is not shown, only Flask request parsing is visible. This is a domain-specific CAD automation service wrapped in Flask, not an MCP server.
新建Body (Add a new body to the part)
添加装配约束 (Add a constraint between parts in an assembly)
批量约束 (Add multiple constraints in batch)
添加零部件 (Add a part to an assembly)
复杂倒角 (Create a complex chamfer with mode parameter)
复杂圆角 (Create a complex fillet with type parameter)
复杂孔 (Create a complex hole with additional parameters)
NOT AN MCP SERVER: This is a Flask REST API, not an MCP server. No MCP protocol implementation detected. No tool_use handling, no CallToolRequest/CallToolResult envelopes, no MCP server interface. Tools are Flask route handlers, not MCP tool definitions.
SCHEMA NOT VISIBLE: Input schemas are inferred from the tool summary but actual JSON Schema validation code is not shown in the source. Cannot verify parameter types, required fields, or constraints. Schema scores capped at 0 per HARD SCORING RULES.
DESCRIPTIONS TOO SHORT: Tool descriptions are 20-40 characters (e.g., '新建草图 (Create a new sketch on a plane)' = 38 chars). Baseline is 50-200 chars for LLM optimization. Descriptions must explain WHAT, WHEN, and WHAT IT RETURNS. Currently they are transliteration-heavy Chinese labels with minimal English context.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 30 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 42 | - | v1 |
AI知识库 (Build a model from enterprise knowledge base/standard parts library)
AI建模 (Generate modeling suggestions from natural language description)
阵列 (Array sketch elements with count and spacing)
布尔运算 (Perform boolean operations: union, subtract, or intersect)
倒角 (Create a chamfer on an edge)
新建装配 (Create a new assembly product)
新建草图 (Create a new sketch on a plane)
多段线 (Draw polyline with multiple points)
样条 (Draw spline curve through points)
圆角 (Create a fillet on an edge)
获取B-Rep (Get B-Rep topology data)
获取参数 (Get a parameter value)
获取零件属性 (Get a part property)
旋转切除 (Groove: revolve a sketch to cut into a solid)
分组 (Group sketch elements together)
孔 (Create a hole at a point reference)
参数关联 (Link a target parameter to a source parameter)
放样 (Loft: create a surface through multiple section sketches)
测量体 (Measure a body's properties)
测量边 (Measure an edge's properties)
测量面 (Measure a face's properties)
镜像 (Mirror sketch elements along an axis)
拉伸 (Pad: extrude a sketch to create a 3D solid)
切除 (Pocket: cut into a 3D solid using a sketch)
投影 (Project geometry from one sketch to another)
移除零部件 (Remove a part from an assembly)
设为当前Body (Set a body as the current active body)
元素属性 (Set properties of sketch elements like color and linetype)
设置参数 (Set a parameter value)
设置零件属性 (Set a part property)
旋转 (Shaft: revolve a sketch around an axis)
扫掠 (Sweep: sweep a profile sketch along a guide)
NO OUTPUT SCHEMAS DOCUMENTED: Tools return jsonify({'result': ...}) with no documented structure. Agents cannot plan downstream calls or extract specific fields. No visibility into whether 'result' is a string, object, array, or complex nested structure.
COMPOSITION VIOLATION: 25 WRITE tools with no corresponding READ/discovery tools. Agent cannot discover what bodies, sketches, or constraints exist before operating on them. Must guess or fail blindly. Violates pattern:tool-chain.
PARAMETER DESCRIPTIONS GENERIC: 'Name of the sketch', 'Array of points', 'Index of the element', these lack actionable context. No mention of format (string vs integer), constraints (max length, valid range), or dependencies. LLM cannot self-correct invalid input.
NO ENUM CONSTRAINTS: Tools accepting enumerated values (constraint_type: 'coincident'|'contact'|'offset', or hole_type, chamfer_mode) do not declare these as JSON Schema enums. Free-form strings invite hallucinated invalid values.
ERROR HANDLING OPAQUE: @api_exception_handler decorator hides recovery guidance. No visibility into whether errors are retryable, user-fixable, or fatal. Agent receives 500 or 400 with no actionable next step.
BATCH + SINGLE VARIANTS COEXIST: add_constraints_batch alongside implicit single-constraint variant. Agents often call the wrong one, wasting rounds. Consolidate or make the pattern explicit with clear naming (add_single_constraint vs add_multiple_constraints).
NO IDEMPOTENCY DECLARED: Tools creating or modifying state (pad, pocket, boolean_operation) do not document whether repeated calls are safe. Risk of duplicate features or side effects on retry.
MISSING PREREQUISITES: Tools like draw_polyline require a sketch_name parameter, but no tool documents how to discover valid sketch names. Agent must guess or call an undocumented discovery endpoint.