# RevitCopilot **Repository Path**: YY.YY/revit-copilot ## Basic Information - **Project Name**: RevitCopilot - **Description**: Revit MCP完整项目 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-05-07 - **Last Updated**: 2025-05-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 原理 * Command内部包含了外部事件,外部事件类里面定义了参数和方法,在Command中实例化外部事件类,并将MCP 服务的JsonRpc消息中的参数取出来,赋给外部事件,收到消息后实例化一个Command,从而创建一个外部事件并执行。需要定义很多个外部事件 * 或者是直接通过反射执行定义好的方法,将参数也传递过来,关键点在于不同的方法参数不一样,反射怎么处理参数 public abstract object Execute(JObject parameters, string requestId); 现在,整个通信流程如下: 1. MCPServer客户端通过SocketService连接到RevitCopilot服务端 2. 客户端发送包含方法名和参数的JSON-RPC请求 3. 服务端解析请求,提取方法名和参数 4. 服务端通过ExecCommandService设置命令参数并触发外部事件 5. Revit执行对应的命令,并返回结果 6. 服务端将结果封装为JSON-RPC响应并发送回客户端 添加一个CommandExecuted事件,当命令执行完成时触发该事件并传递请求ID和执行结果。这样SocketService就可以订阅这个事件,在命令执行完成后获取结果并发送给客户端,而不需要创建额外的Socket连接