Skip to main content
Glama
design.md9.26 kB
# Maya MCP Server 设计文档 ## 概述 Maya MCP Server 是一个实现模型上下文协议(MCP)的服务器,允许AI助手通过标准化接口连接到Autodesk Maya并执行各种3D建模、动画和渲染操作。系统采用客户端-服务器架构,包含三个主要组件: 1. **MCP Server** - 实现MCP协议的Python服务器,处理AI客户端请求 2. **Maya Plugin** - 在Maya中运行的Python插件,提供本地API接口 3. **Communication Bridge** - 连接MCP服务器和Maya插件的通信桥梁 ## 架构 ### 系统架构图 ```mermaid graph TB AI[AI Assistant/Client] --> MCP[MCP Server] MCP --> Bridge[Communication Bridge] Bridge --> Plugin[Maya Plugin] Plugin --> Maya[Maya Application] subgraph "MCP Server Process" MCP Bridge end subgraph "Maya Process" Plugin Maya end ``` ### 通信流程 ```mermaid sequenceDiagram participant AI as AI Client participant MCP as MCP Server participant Bridge as Comm Bridge participant Plugin as Maya Plugin participant Maya as Maya App AI->>MCP: MCP Request (create_cube) MCP->>Bridge: Parse & Validate Bridge->>Plugin: HTTP/Socket Request Plugin->>Maya: maya.cmds.polyCube() Maya-->>Plugin: Result Plugin-->>Bridge: Response Bridge-->>MCP: Formatted Response MCP-->>AI: MCP Response ``` ## 组件和接口 ### 1. MCP Server 组件 **职责:** - 实现MCP协议规范 - 处理工具发现和执行请求 - 管理与AI客户端的连接 - 验证和路由命令到Maya **主要接口:** ```python class MayaMCPServer: async def list_tools() -> List[Tool] async def call_tool(name: str, arguments: dict) -> ToolResult async def get_server_info() -> ServerInfo ``` ### 2. Maya Plugin 组件 **职责:** - 在Maya启动时自动加载 - 提供HTTP/Socket服务器接口 - 执行Maya Python API命令 - 管理场景状态和对象操作 **主要接口:** ```python class MayaMCPPlugin: def initialize_server(self, port: int) def execute_command(self, command: str, args: dict) -> dict def get_scene_info() -> dict def handle_shutdown(self) ``` ### 3. Communication Bridge **职责:** - 管理MCP服务器与Maya插件之间的通信 - 处理连接重试和错误恢复 - 序列化/反序列化数据 **通信协议:** - 使用HTTP REST API或WebSocket连接 - JSON格式数据交换 - 支持异步操作和回调 ## 数据模型 ### MCP工具定义 ```python @dataclass class MayaTool: name: str description: str input_schema: dict # 示例工具 MAYA_TOOLS = [ MayaTool( name="maya_create", description="Create Maya objects (cube, sphere, etc.)", input_schema={ "type": "object", "properties": { "object_type": {"type": "string", "enum": ["polyCube", "sphere"]}, "name": {"type": "string"} }, "required": ["object_type"] } ), MayaTool( name="maya_select", description="Select Maya objects by name", input_schema={ "type": "object", "properties": { "objects": {"type": "array", "items": {"type": "string"}} }, "required": ["objects"] } ), MayaTool( name="maya_execute", description="Execute arbitrary Maya Python command", input_schema={ "type": "object", "properties": { "command": {"type": "string"} }, "required": ["command"] } ) ] ``` ### Maya场景数据模型 ```python @dataclass class MayaObject: name: str type: str transform: dict # position, rotation, scale attributes: dict @dataclass class SceneInfo: selected_objects: List[str] all_objects: List[MayaObject] current_time: float scene_name: str ``` ### 通信消息格式 ```python @dataclass class MayaRequest: command: str arguments: dict request_id: str @dataclass class MayaResponse: success: bool result: Any error: Optional[str] request_id: str ``` ## 正确性属性 *属性是一个特征或行为,应该在系统的所有有效执行中保持为真——本质上是关于系统应该做什么的正式声明。属性作为人类可读规范和机器可验证正确性保证之间的桥梁。* **属性 1: 服务器启动后端口监听** *对于任何* 有效的端口号,当MCP服务器或Maya插件启动时,应该在指定端口上成功监听连接 **验证需求: 1.2, 2.2** **属性 2: 配置参数应用** *对于任何* 有效的配置参数集,服务器启动时应该正确读取并应用所有配置设置,包括支持热重载 **验证需求: 1.5, 6.1, 6.2** **属性 3: 资源清理一致性** *对于任何* 运行中的服务器或插件,当关闭时应该正确清理所有资源和连接 **验证需求: 2.4** **属性 4: Maya对象操作一致性** *对于任何* 有效的Maya对象操作(创建、选择、变换、删除),操作应该成功执行并返回正确的结果状态 **验证需求: 3.1, 3.2, 3.3, 3.5** **属性 5: 场景查询完整性** *对于任何* 场景查询请求,返回的信息应该准确反映当前Maya场景的实际状态 **验证需求: 4.1, 4.2, 4.3** **属性 6: 错误信息质量** *对于任何* 失败的操作或无效的命令,系统应该返回详细且有用的错误信息 **验证需求: 5.2, 5.5** **属性 7: 日志记录完整性** *对于任何* 系统操作,应该在日志中记录相应的操作信息和状态变化 **验证需求: 1.4, 6.3** **属性 8: 状态查询准确性** *对于任何* 状态查询请求,返回的服务器健康状态和连接信息应该准确反映实际状态 **验证需求: 6.4** **属性 9: Python代码执行安全性** *对于任何* 有效的Python代码,系统应该在Maya环境中安全执行并返回正确的结果,同时拒绝危险操作 **验证需求: 7.1, 7.2, 7.5** **属性 10: 动态脚本管理** *对于任何* 项目脚本或模块,系统应该支持动态导入、热重载和错误报告 **验证需求: 8.1, 8.2, 8.4** **属性 11: 调试信息详细性** *对于任何* 调试请求,系统应该提供详细的执行信息、变量状态和调试输出 **验证需求: 8.3, 6.5** **属性 12: 测试执行准确性** *对于任何* 模块测试请求,系统应该正确执行测试函数并返回准确的测试结果 **验证需求: 8.5** **属性 13: 安装部署一致性** *对于任何* 标准MCP安装流程,Maya MCP Server应该正确部署并支持版本管理 **验证需求: 9.3, 9.4** ## 错误处理 ### 错误分类和处理策略 **1. 连接错误** - Maya未运行: 返回连接错误,建议启动Maya - 插件未加载: 检测并提示用户加载插件 - 网络中断: 自动重试连接,记录状态 **2. 命令执行错误** - 无效命令: 返回格式错误信息和正确示例 - 语法错误: 返回详细的Python语法错误信息 - 运行时错误: 返回完整的错误堆栈和行号 **3. 资源错误** - 对象不存在: 返回适当的错误信息,不中断流程 - 文件不存在: 提供文件路径建议和创建选项 - 权限错误: 返回权限问题说明和解决方案 **4. 超时和性能错误** - 代码执行超时: 终止执行并返回超时错误 - 内存不足: 提供内存使用建议 - 响应超时: 实现重试机制 ### 错误响应格式 ```python @dataclass class ErrorResponse: error_code: str error_message: str details: dict suggestions: List[str] timestamp: str ``` ## 测试策略 ### 双重测试方法 本项目采用单元测试和基于属性的测试相结合的方法: **单元测试:** - 验证特定示例和边缘情况 - 测试组件间的集成点 - 覆盖错误条件和异常处理 - 验证MCP协议实现的正确性 **基于属性的测试:** - 使用Hypothesis库进行Python属性测试 - 每个属性测试运行最少100次迭代 - 验证跨所有输入的通用属性 - 每个测试都标记对应的设计文档属性 **测试库选择:** - **单元测试**: pytest + pytest-asyncio - **属性测试**: Hypothesis - **Mock测试**: unittest.mock - **集成测试**: pytest-integration **测试标记格式:** 每个基于属性的测试必须使用以下格式标记: ```python # **Feature: maya-mcp-server, Property {number}: {property_text}** ``` ### 测试环境配置 **Maya测试环境:** - 使用Maya的mayapy解释器运行测试 - 模拟Maya场景状态进行测试 - 支持无头模式测试(不需要GUI) **MCP测试环境:** - 模拟MCP客户端连接 - 测试MCP协议消息格式 - 验证工具发现和执行流程 **集成测试:** - 端到端测试完整的AI->MCP->Maya流程 - 测试多客户端并发连接 - 验证长时间运行的稳定性 ### 持续集成 **自动化测试流程:** 1. 代码提交触发测试 2. 运行单元测试和属性测试 3. 执行集成测试 4. 生成测试覆盖率报告 5. 验证MCP协议兼容性 **测试覆盖率目标:** - 单元测试覆盖率: >90% - 属性测试覆盖率: 所有正确性属性 - 集成测试覆盖率: 所有主要用例场景

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Jeffreytsai1004/maya-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server