AI 与 MCP 预览

给你的 AI 一台弄不坏的机床。

大语言模型写出的 G 代码看起来都对。对不对,Studio 告诉你。它内置的 MCP 服务器让 AI 助手摆好毛坯、在孪生上把程序跑一遍,读回发生了什么——报警、碰撞、切削力、颤振、零件的形状——然后再让程序变快。

内置于 Studio 0.2.0 · 23 个工具 · MCP 2024-11-05 至 2026-07-28 各版本 · stdio 与本机 HTTP

它们怎样连在一起

AI 客户端启动 TwinwrightStudio.exe --mcp,它连到你电脑上的孪生机主机。主机在两次对话之间保留它的孪生:默认是一台练习机(sandbox),只有你打开窗口的 AI 权限时,你窗口里的那台机床才会加入。每次仿真都在装夹的隐藏副本上、从一块新毛坯开始运行,比实时快。

两种接入 AI 的方式

用你已经在用的 AI 客户端,或者在 Studio 里直接和模型对话。两种方式用的是同样的工具、同样的孪生。

你的 AI 客户端,经 MCP

打开 AI 开关,点“连接”。

Studio 先把要写的内容给你看,再写进客户端的配置;或者打开客户端自己的一键安装链接。其他 MCP 客户端可以复制命令或本机网址粘贴进去。

  • Claude 桌面版、ChatGPT 桌面版(Codex 与 Work 模式):替你写好配置
  • Cursor、VS Code(GitHub Copilot)、LM Studio:打开它们的一键安装链接
  • Claude Code、Cherry Studio、Trae、Kimi Code 等:复制命令或 HTTP 网址
AI ▾ → 连接 AI 客户端。底部的提示:AI 碰不到实机,改动你窗口里的机床要你同意。
AI ▾ → 连接 AI 客户端。底部的提示:AI 碰不到实机,改动你窗口里的机床要你同意。
Studio 里的 AI 助手

自带密钥,或用本机模型。

AI 助手面板可以连 Anthropic、OpenAI、DeepSeek、通义千问(百炼)、Kimi、智谱 GLM 或任何兼容 OpenAI 的接口,也可以连你自己电脑上 LM Studio 或 Ollama 里的模型。它可以附上窗口里的程序、装夹和检查结果,并把孪生画的图直接显示在对话里。

  • 密钥用 Windows DPAPI 加密保存,只发给你选的提供方
  • 用本机模型时,什么都不离开你的电脑
  • “复制给 AI”“从 AI 粘贴”适用于任何聊天应用,不需要 MCP
AI 助手面板里的一张 result_image 结果图——出自自检,自检用一个脚本模拟模型来驱动面板。
AI 助手面板里的一张 result_image 结果图——出自自检,自检用一个脚本模拟模型来驱动面板。

AI 能做什么

23 个工具。每个都返回一段模型能据以推理的简短摘要,外加带结构定义的数据;每个结果都写明来自哪一台机床。

机床
machine_status状态、报警及其含义、是否回零、位置、刀具、毛坯;以及其他机床
machine_control回零、解锁、复位、保持、继续、停止、移动、上电、急停
machine_mdi逐行发送 MDI,每行一个应答,遇到第一处拒绝就停
装夹
setup_workpiece把毛坯放进虎钳、压在压板下、用胶带粘住——或用你自己的 STL
setup_tool主轴上的刀具和 M6 用的刀具表
setup_work_zero把 G54 设在毛坯的某个角或中心
setup_part用来比对的设计零件(STL)
setup_copy · setup_example把装夹复制到另一台孪生;按 15 个示例之一装好
程序
program_checkgrblHAL 检查模式、按装夹预览刀路、十二条静态规则
program_simulate在隐藏副本上从新毛坯开始跑完:时间、报警、碰撞、快移切料、负载、颤振、零件偏差
program_run · program_load在机床本身上运行或载入(你窗口里的机床会先问你)
program_debug · program_restart运行到某行、查看、单步;从某行重新开始的起始段
program_optimize · program_generate优化器与按特征生成
program_versions列出、取出、保存和对比版本
运行与结果
run_status · run_profile等待或停止长时间运行;逐行统计
result_compare与设计零件的偏差,数字形式
result_image图:工件、刀路、偏差图、最慢的行、随时间变化的曲线、两次运行对比
log_query查审计日志:谁、何时、对哪台机床、做了什么

一次真实的会话

2026 年 9 月 30 日经 MCP 对 Studio 0.2.0 的真实调用。由脚本扮演 AI 客户端;工具返回的是孪生的结果(有删节)。

你
这是一个型腔程序,毛坯是压板压着的 60 × 40 × 10 mm 的 6061。加工前在 MC-1 上帮我检查一下。
助手
我在练习机上把毛坯压在压板下,主轴装上 6 mm 立铣刀,G54 设在毛坯左前上角,然后跑 grblHAL 的检查模式。
工具
setup_workpiece → {"placed": true, "material": "6061-T6", "fixture": "clamps", "mass_g": 64.8} setup_tool → {"tool": "flat 6 n3 L20", "stick_out_offset_mm": 4.5} setup_work_zero → {"g54_mpos": [-132.001, -97.001, -67.501]} program_check → {"refused": [{"line": 14, "code": 2, "text": "G1 X42 F", "error": "Missing the expected G-code word value or numeric value format is not valid."}]}
助手
第 14 行的 F 后面没有数值。改好之后控制器接受了每一行,但按装夹预览,动机床之前还能看出两个问题。
工具
program_check → {"refused": [], "preview": {"issues": [ {"line": 9, "kind": "rapid_cut", "text": "line 9: a rapid move (G0) cuts 1.00 mm into the workpiece"}, {"line": 58, "kind": "collision", "text": "line 58: collision tool/clamp2_strap at X 80.966 Y 62.049 Z -60.501 (machine mm)"}]}, "static_rules": [{"line": 9, "rule": "S10", "severity": "warning"}]}
助手
为了看清后果,我在装夹的隐藏副本上把它完整跑了一遍。
工具
program_simulate → {"completed": false, "simulated_time_s": 85.87, "final_state": "Alarm", "issues": [ "1 collision(s): tool/clamp2_strap at machine position [80.97, 62.05, -60.50] mm", "spindle overload: cutting power peaked at 1117 W, above the spindle's 800 W rating", "chatter: stability margin 1.72 > 1 at 14220 rpm and 1.00 mm depth", "lost steps X/Y/Z: 315 16 0 (1.25 um each): the drives fell behind", "ALARM:17 - Motor fault."], "run": "r1"}
助手
有两个真问题。第一层用快移下刀——800 W 的主轴冲到 1117 W,还颤振;最后的 G0 X0 Y0 让刀撞上左前方的压板。我把下刀改成 G1 Z-1 F150,停刀改成 G53 G0 Z-2,避开压板。
工具
program_simulate → {"completed": true, "simulated_time_s": 88.82, "issues": [], "material_removed_mm3": 1776.62, "chatter": {"max_margin": 0.806}, "replay_hash": "e1a6b55c7bc9e5aa", "run": "r2"}
助手
干净了:机床时间 1 分 29 秒,去除 1777 mm³——30 × 20 × 3 mm 的型腔减去刀具圆角。优化器还能再省一点。
工具
program_optimize → {"optimized": true, "verdict": "0.84 s faster (0.9 %), no line cuts heavier than the original's heaviest", "changes": [{"line": 19, "what": "F", "before": 600, "after": 730, "why": "a lighter cut: up to the spindle load limit"}, …], "saved": {"name": "pocket_v3.nc", "version": 1}}
助手
两个版本都存好了。程序可以上机床了:在机床上载入、设好零点、按循环启动,由你来做。

AI 看到的图

result_image 把孪生的结果画成图,旁边用文字写出关键数字。下面三张就来自上面那次会话。

第一次运行随时间的变化(timeline):12 s 处的快移下刀让主轴负载冲到 153 %、颤振裕度到 1.72;86 s 处刀撞上压板。
第一次运行随时间的变化(timeline):12 s 处的快移下刀让主轴负载冲到 153 %、颤振裕度到 1.72;86 s 处刀撞上压板。
改好后那次运行的工件(workpiece),按高度上色,夹在两块压板之间。
改好后那次运行的工件(workpiece),按高度上色,夹在两块压板之间。
改好后那次运行最慢的十二行,以及限制每一行的原因(profile)。
改好后那次运行最慢的十二行,以及限制每一行的原因(profile)。

设置

在 Studio 里:打开 AI 开关,然后 AI ▾ → 连接 AI 客户端,选你的客户端。要手工配置,就让客户端运行 TwinwrightStudio.exe(装在 %LOCALAPPDATA%\Programs\Twinwright Studio),参数为 --mcp:

Claude 桌面版 · claude_desktop_config.json
{
  "mcpServers": {
    "twinwright": {
      "command": "C:\\Users\\<你>\\AppData\\Local\\Programs\\Twinwright Studio\\TwinwrightStudio.exe",
      "args": ["--mcp"]
    }
  }
}
ChatGPT 桌面版 · %USERPROFILE%\.codex\config.toml
[mcp_servers.twinwright]
command = 'C:\Users\<你>\AppData\Local\Programs\Twinwright Studio\TwinwrightStudio.exe'
args = ["--mcp"]
VS Code · .vscode/mcp.json
{
  "servers": {
    "twinwright": {
      "type": "stdio",
      "command": "C:\\Users\\<你>\\AppData\\Local\\Programs\\Twinwright Studio\\TwinwrightStudio.exe",
      "args": ["--mcp"]
    }
  }
}
命令行
# Claude Code
claude mcp add twinwright -- "C:\Users\<你>\AppData\Local\Programs\Twinwright Studio\TwinwrightStudio.exe" --mcp
# 任何客户端经 HTTP,仅限本机
"C:\Users\<你>\AppData\Local\Programs\Twinwright Studio\TwinwrightStudio.exe" --mcp-http 8766 --mcp-token <你的令牌>
#   地址 http://127.0.0.1:8766/mcp,请求头 Authorization: Bearer <你的令牌>
审计日志

谁、何时、对哪台机床、做了什么。

Studio 在你的电脑上记一份审计日志:窗口里操作员的操作、每一次 AI 工具调用(带客户端的名字)、报警、碰撞、程序的开始和结束。每条记录都带着前一条的 SHA-256 哈希,跨天相连,所以改过或删掉的记录会露出来。

  • 五档详细程度,可按类别分别设置:机床、操作、程序、装夹、AI、系统
  • 在日志窗口或用 TwinwrightStudio.exe --audit-verify 校验哈希链;可导出 CSV
  • 默认保留 180 天或最多 2 GB;API 密钥和令牌会被遮住
审计日志窗口(Ctrl+L)。底部写着:1 个文件、83 条记录,哈希链从头到尾对得上。
审计日志窗口(Ctrl+L)。底部写着:1 个文件、83 条记录,哈希链从头到尾对得上。

从设计上让 AI 只待在孪生里

没有通往硬件的路

MCP 服务器和孪生机主机只启动、驱动仿真的机床,与真实的 MC-1 没有串口或网络连接;影子模式下 AI 只能读。

不打开就不接入

窗口的 AI 开关默认关闭。关闭时,AI 客户端只能在你看不到的练习机(sandbox)上工作;练习机的结果会写明这一点,AI 不会把它当成你的机床。

你的窗口要你点头

AI 想改动你窗口里的机床时,状态头会问“同意 / 拒绝”;60 秒不答视为拒绝。要不要问,由你决定。

仿真在副本上跑

program_simulate 在装夹的隐藏副本上、从新毛坯开始运行,试一个程序永远不会改变被问到的那台机床。

机床由人来开

AI 验证过的程序只是一个文件。由人把它载入真机、设好零点、按下循环启动。

可重放的证据

每次运行结束都有一个重放指纹:同一个程序、同样的装夹,在任何电脑上指纹都相同,所以 AI 说的话可以核对。

接下来

规划中

同匠云

为只能连互联网的客户端——claude.ai、网页版 ChatGPT、Gemini、微软 Copilot——提供托管的 MCP 接入点,带登录和按用户隔离的孪生。

规划中

可交互的结果卡片

在支持 MCP Apps 的客户端里,对话中的图可以旋转、点击。

规划中

给 AI 的数控基准测试

一组由孪生自动评分的加工任务,用来比较各个模型写 G 代码、改 G 代码的能力。

FAQ

哪些 AI 客户端能用?

凡是能启动本机程序的 MCP 客户端都可以:Claude 桌面版、Claude Code、ChatGPT 桌面版(Codex 与 Work 模式)、Cursor、VS Code、LM Studio、Cherry Studio、Trae 等。claude.ai、网页版 ChatGPT 这类网页端只能连互联网上的服务器,计划中的同匠云会提供。每个版本都用自动化的 MCP 客户端经 stdio 和 HTTP 测试,也在 LM Studio 里用本机模型测试;一键登记按各客户端公开的配置方式写入。

AI 能看到我的文件吗?

只能看到你给它的,或工具返回的。服务器在你的电脑上运行,同匠收不到任何东西。用云端模型时,你的提问和工具结果会按该提供方的条款发给它。

要花钱吗?

MCP 服务器和 AI 助手都是 Studio 的一部分,免费。云端模型由提供方按你的密钥计费;本机模型不花钱。

一次仿真要多久?

每次调用 40 秒内答复;更长的运行先返回运行编号,再用 run_status 取结果,因为有的客户端只给一次工具调用 60 秒。带材料去除的仿真通常比实时快几倍(示例 02 在一台当前的台式机上约 5.8 倍),精细的雕刻可能比实时还慢。

这是一个写 G 代码的 AI 吗?

不是。它让任何 AI——或任何程序——拿一台逼真的机床检验 G 代码,并凭证据改进它。配合你的 CAM、你自己的代码或 AI 助手使用都可以。