MohoMCP
MCP(模型上下文协议)服务器 莫霍Pro 14 --使Claude Desktop和Claude Code等人工智能助手能够阅读、编写、动画和视觉操作MOHO动画项目。
完全跨平台:Windows和macOS。
建筑
┌─────────────────────┐ File-based IPC ┌──────────────────────┐
│ MCP Bridge Server │◄──────────────────► │ Moho Lua Plugin │
│ (TypeScript/Node) │ $TMPDIR/moho-mcp/ │ (runs inside MOHO) │
└────────┬────────────┘ JSON-RPC 2.0 └──────────────────────┘
│ MCP Protocol (stdio)
┌────────▼────────────┐
│ MCP Client/Host │
│ (Claude Desktop, │
│ Claude Code, etc) │
└─────────────────────┘三个组成部分:
- Moho Lua插件 -基于文件的IPC服务器运行在MOHO内部,通过MOHO的Lua 5.4 API处理读/写操作
- MCP网桥服务器 --Node.js进程将MCP协议(stdio)桥接到基于文件的JSON-RPC
- 静态知识资源 --Moho手册中的键盘快捷键和工具参考数据
能力
| 能力 | 描述 |
|---|---|
| 阅读 | 查询文档结构、图层、骨骼、动画关键帧、网格数据 |
| 写 | 设置骨骼/层变换、创建/删除关键帧、更改插值、重命名层 |
| 看 | 捕获渲染的场景帧或完整的MOHO UI屏幕截图 |
| 互动 | 将鼠标点击、拖动和键盘快捷键发送到MOHO窗口 |
| 知道 | 所有Moho 14工具和键盘快捷键的内置参考数据 |
可用工具(26)
只读工具
| 工具 | 说明 |
|---|---|
document_getInfo | 文档元数据(名称、路径、尺寸、FPS、帧范围) |
document_getLayers | 具有层次结构的全层树 |
layer_getProperties | 详细的图层特性(类型、可见性、变换) |
layer_getChildren | 组层的直接子女 |
layer_getBones | 列出骨骼层中的骨骼 |
bone_getProperties | 骨骼细节(位置、角度、比例、父对象) |
animation_getKeyframes | 图层上频道的关键帧 |
animation_getFrameState | 特定帧处的全层状态 |
mesh_getPoints | 矢量层中的点位置 |
mesh_getShapes | 形状数据(填充、笔划、曲线) |
写入工具
| 工具 | 说明 |
|---|---|
bone_setTransform | 在帧处设置骨骼角度/位置/比例(创建关键帧) |
bone_selectBone | 在MOHO UI中选择骨骼 |
animation_setKeyframe | 在任何通道上设置关键帧值(标量或vec2) |
animation_deleteKeyframe | 删除特定帧处的关键帧 |
animation_setInterpolation | 设置缓和模式(线性、平滑、ease_in、ease_out、step) |
document_setFrame | 导航到时间线上的特定帧 |
layer_setTransform | 在帧处设置图层平移/旋转/缩放 |
layer_setVisibility | 显示或隐藏图层 |
layer_setOpacity | 在帧处设置图层透明度 |
layer_setName | 重命名图层 |
layer_selectLayer | 在UI中选择一个层 |
视觉和输入工具
| 工具 | 说明 |
|---|---|
document_screenshot | 将场景渲染或完整的MOHO UI窗口捕获为PNG格式 |
input_mouseClick | 点击窗口相对坐标(左/右/中,单/双) |
input_mouseDrag | 使用可配置的步骤从A点拖动到B点 |
input_sendKeys | 发送键盘快捷键(例如。 ctrl+z, space, a) |
批量执行
| 工具 | 说明 |
|---|---|
batch_execute | 在一次IPC往返中执行多个操作(总共约300ms,而每个操作约300ms) |
性能提示: 总是喜欢 batch_execute 当你需要2+次手术时。一批10个操作与一个单独的调用所需的时间相同。知识资源
| 资源 | URI | 描述 |
|---|---|---|
| 快捷方式 | moho://shortcuts | 按类别组织的所有Moho 14键盘快捷键 |
| 工具 | moho://tools | 所有带有快捷键、描述和修改器的Moho 14工具 |
快速开始
1.安装MOHO插件
复制 moho-plugin/ 将内容放入MOHO的scripts文件夹,或使用提供的安装脚本:
窗户: 跑 install-plugin.bat (或手动复制到 C:\Program Files\Moho 14\Resources\Support\Scripts\Menu\)
macOS: 跑 chmod +x install-plugin.sh && ./install-plugin.sh (或手动复制到 /Applications/Moho 14/Moho Pro.app/Contents/Resources/Support/Scripts/Menu/)
要复制的文件:
MohoMCP_Server.luaMohoMCP_Poller.luajson.luamoho_mcp/(整个目录)
2.构建网桥服务器
cd bridge
npm install
npm run build3.开始一切
- 打开 莫霍Pro 14 并加载项目
- 首选 脚本>MohoMCP服务器 启动IPC服务器
- 启动MCP客户端(Claude Desktop或Claude Code)——网桥自动连接
4.配置克劳德桌面
添加到您的Claude桌面配置(claude_desktop_config.json):
{
"mcpServers": {
"moho-mcp": {
"command": "node",
"args": ["C:/path/to/MohoMCP/bridge/dist/index.js"]
}
}
}5.配置克劳德代码
地点a .mcp.json 在项目根目录中:
{
"mcpServers": {
"moho-mcp": {
"command": "node",
"args": ["C:/path/to/MohoMCP/bridge/dist/index.js"]
}
}
}配置
环境变量:
| 变量 | 默认值 | 描述 |
|---|---|---|
MOHO_MCP_IPC_DIR | /moho-mcp | 基于文件的IPC通信目录 |
内部计时(in bridge/src/config.ts):
| 设置 | 默认值 | 说明 |
|---|---|---|
| 轮询间隔 | 100ms | 网桥检查响应文件的频率 |
| 请求超时 | 10s | Lua响应的最大等待时间 |
| 渲染超时 | 30s | 截图操作的最大等待时间 |
| 每次操作的批处理超时 | 500ms | 批处理中每次操作的额外超时 |
| 最大批量 | 50 | 每台机器的最大操作数 batch_execute 呼叫 |
运作原理
基于文件的IPC
通信使用系统临时目录中的JSON文件(%TEMP%\moho-mcp\ 在Windows上, $TMPDIR/moho-mcp/ 在macOS上):
- 布里奇写道
req_.json(JSON-RPC 2.0请求) - MOHO Lua插件通过DrawMe/IsEnabled回调轮询请求文件
- Lua处理请求,写入
resp_.json - Bridge读取响应,清理文件
保持活力机制
MOHO只在UI重新绘制期间处理Lua回调。后台进程会定期强制重新绘制视口(~4 Hz),以保持轮询循环的活动状态,即使用户没有交互:
- 窗户: PowerShell进程调用Win32
RedrawWindow() - macOS: AppleScript进程推动Moho应用程序
安全
- 允许列表验证:只能调用显式注册的方法
- 参数验证:执行前检查所有参数类型
- pcall包装:所有Lua处理程序都封装在受保护的调用中——一个方法中的崩溃不会导致服务器崩溃
发展
cd bridge
npm install
npm run dev # Watch mode — recompiles on changes
npm test # Run test suite (61 tests)
npm run test:watch项目结构
MohoMCP/
├── bridge/ # TypeScript MCP Bridge Server
│ └── src/
│ ├── index.ts # Entry point & bootstrap
│ ├── config.ts # IPC directory, timeouts
│ ├── moho-client.ts # File-based IPC client
│ ├── protocol.ts # JSON-RPC 2.0 types
│ ├── tools.ts # 26 MCP tool registrations
│ ├── resources.ts # Static knowledge resources
│ ├── keep-alive.ts # Cross-platform viewport refresh
│ ├── platform-capture.ts # Platform dispatch → window capture
│ ├── platform-input.ts # Platform dispatch → input simulation
│ ├── window-capture.ts # Win32 screenshot capture
│ ├── darwin-capture.ts # macOS screenshot capture
│ ├── win32-input.ts # Win32 mouse & keyboard
│ ├── darwin-input.ts # macOS mouse & keyboard
│ └── __tests__/ # Vitest test suite
│
├── moho-plugin/ # Lua Plugin for MOHO 14
│ ├── MohoMCP_Server.lua # Menu script & DrawMe hooks
│ ├── MohoMCP_Poller.lua # Polling utilities
│ ├── json.lua # JSON library
│ └── moho_mcp/
│ ├── server.lua # File-based IPC server
│ ├── protocol.lua # JSON-RPC 2.0 protocol
│ ├── validator.lua # Method allow-list & validation
│ └── tools/ # Handler implementations
│ ├── document.lua
│ ├── layer.lua
│ ├── bone.lua
│ ├── animation.lua
│ ├── mesh.lua
│ └── batch.lua
│
├── docs/ # Documentation
│ ├── installation.md
│ └── tool-reference.md
│
└── schema/
└── tools.json # JSON Schema definitions平台支持
所有26个工具在两个平台上的工作方式相同。网桥在运行时自动检测操作系统并加载相应的本机后端,无需配置。
| 功能 | Windows | macOS |
|---|---|---|
| 读取工具(文档、图层、骨骼、网格) | Win32文件IPC | POSIX文件IPC |
| 编写工具(变换、关键帧) | Win32文件IPC | POSIX文件IPC |
场景截图(mode="scene") | Moho FileRender | Moho FileSender |
完整用户界面截图(mode="full") | Win32打印窗口API | screencapture -l |
| 鼠标输入(点击、拖动) | Win32用户32.dll P/调用 | clicliclick/CoreGraphics通过JXA |
| 键盘输入 | Win32 keybd_event | AppleScript系统事件 |
| 保持活动状态(视口刷新) | PowerShell+RedrawWindow | AppleScript进程微调 |
| 插件安装程序 | install-plugin.bat | install-plugin.sh |
Windows要求
- Windows 10/11
- 莫霍Pro 14
- Node.js >= 18.0.0
macOS要求
- macOS (在Ventura+上测试)
- 莫霍Pro 14
- Node.js >= 18.0.0
- 可访问权限 --输入模拟所需(系统设置>隐私和安全>辅助功能>添加您的终端/Claude桌面)
- 点击 (可选,推荐)--
brew install cliclick--提供更可靠的鼠标输入。没有它,就通过JXA回到CoreGraphics。
许可证
麻省理工学院——见 许可证 了解详情。
