关于 abb-rws-mcp
abb-rws-mcp 是只读 MCP 服务,通过 abb-rws-daemon 查看 ABB 机器人控制器。它帮助团队排查控制器状态和停机原因,不会建立控制器会话或发送控制命令。
主要功能
- 01查看控制器状态与运行模式
- 02读取关节位置和 TCP 位姿
- 03读取 I/O 信号与事件日志
- 04检查 RAPID 执行状态和源代码
- 05返回带时间戳的结构化数据
- 06提供停机排查提示词
适用场景
- 01检查机器人控制器停机原因
- 02查看近期警告和事件记录
- 03检查程序指针处的 RAPID 源码
MCP 相关
通过 stdio 向 MCP 客户端提供 8 个只读工具和 1 个提示词。它仅经由同一台 PC 上的 abb-rws-daemon 访问 ABB 控制器。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
8收录的工具列表 · 更新于 2 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| controller | string | 否 | 控制器的守护进程 ID。守护进程恰好只有一个控制器时可省略。 |
| sourceLine | boolean | 否 | 读取程序指针处的源代码行(默认值为 true;最多读取两个模块)。 |
| windowMinutes | integer | 否 | 查询最近多少分钟内的错误和警告(默认值为 60)。 |
详细介绍
abb-rws-mcp
一个 Model Context Protocol(MCP)服务,可让 AI 助手读取 ABB 机器人控制器正在执行的操作,以及它停止的原因。它仅读取数据。它通过 abb-rws-daemon 读取数据,该守护进程运行在 127.0.0.1 上,通过 Robot Web Services 为每个控制器持有一个会话:RWS 1.0(IRC5、RobotWare 6)和 RWS 2.0(OmniCore、RobotWare 7 和 8)。此服务不会打开任何控制器会话,也不会接触控制器凭据。
状态: 0.1.0。只读。已于 2026-10-25 通过 abb-rws-daemon 0.1.0(快照架构 0.14)测试,并于 2026-10-21 通过该守护进程的预发布版本(架构 0.13)测试。两次测试均使用三个 RobotStudio 虚拟控制器:RobotWare 6.16.03(RWS 1.0)、7.21.4 和 8.2.1(RWS 2.0)。每个工具和提示词都通过 stdio 上的 MCP 客户端运行,并记录了此服务发送给守护进程的每个请求:均为读取操作,此外在启用运动采样时,每个控制器还会收到一个采样请求。尚未在真实控制器上运行。变更详见 CHANGELOG.md。
只读。 此服务有 8 个工具和 1 个提示词。所有工具都只读取数据。它们都不会设置信号、启动或停止程序、移动程序指针、加载或编辑模块、切换电机、改变速度,也不会请求主控权或写入权限。即使通过标志启用,服务也没有写入工具。此服务不会写入文件,也不会启动进程。它只调用守护进程的读取路由;唯一一个非 GET 请求会要求守护进程采样 15 s 的关节位置(参见运动采样)。
要求
- Node.js 20 或更高版本,适用于 Windows 或 Linux。macOS 使用 Linux 路径,但未经测试。
- abb-rws-daemon 0.1.0 或更高的 0.x 版本,在同一台 PC 上运行,并且已添加至少一个控制器。此服务无法添加控制器。
它可读取 0.13 或更高的 0.x 快照架构。此服务已通过 abb-rws-daemon 0.1.0 提供的 0.14 架构,以及仅由守护进程预发布版本提供的 0.13 架构完成测试。它不会读取 0.14 新增的字段(锁持有者是否为 FlexPendant)。使用更高的 0.x 版本时,它会记录一条警告,说明架构版本高于已测试版本;
list_controllers也会给出相同提示。 - 能运行 stdio 服务的 MCP 宿主:Claude Desktop、Claude Code、VS Code、Cursor 或其他宿主。
设置
先启动守护进程,并在其中添加控制器。然后将此服务添加到 MCP 宿主。请按下文所示固定版本。
Claude Desktop(claude_desktop_config.json)和 Cursor(~/.cursor/mcp.json):
{
"mcpServers": {
"abb-rws": { "command": "npx", "args": ["-y", "[email protected]"] }
}
}
VS Code(.vscode/mcp.json):
{
"servers": {
"abb-rws": { "type": "stdio", "command": "npx", "args": ["-y", "[email protected]"] }
}
}
Claude Code:
claude mcp add abb-rws -- npx -y [email protected]
守护进程运行在其他端口时:在服务条目中添加 "env": { "ABB_RWS_MCP_DAEMON_URL": "http://127.0.0.1:7811" }。
此服务会在守护进程存放令牌文件的位置查找该文件。如果守护进程通过 --token-file 运行,请为此服务设置相同的文件(参见配置)。
发布的程序包是一个打包后的文件,不含运行时依赖,因此 npx 不会下载其他内容。
工具
| 工具 | 可回答的问题 | 会访问控制器吗? |
|---|---|---|
summarize_controller | 从这里开始。用一句话概述状态、快照中的事实、最近的错误和警告及 ABB 建议的操作、运行消息,以及每个程序指针所在位置的源代码行 | 最多读取两个模块,包括读取失败的情况 |
list_controllers | 守护进程知道的控制器,以及守护进程自身的状态。请先调用此工具,并在其他工具失败时调用 | 否 |
get_controller_status | 控制器状态、操作模式、速度覆盖、碰撞检测、RAPID 执行情况、连接、守护进程在此处可读取的内容,以及控制器报告的访问状态 | 否 |
get_robot_position | 关节位置、带欧拉角的 TCP 位姿、机械臂是否正在移动,以及各关节距离其限位有多近 | 运动采样,见下文 |
read_io_signals | 守护进程信号表中的信号和值,或信号搜索 | 仅搜索时 |
get_event_log | 守护进程保存的控制器事件日志,可按严重性、时间、类别或代码筛选 | 否 |
get_rapid_execution | 每个任务的执行状态,以及程序指针和运动指针 | 否 |
read_rapid_source | 模块的 RAPID 源代码,带行号:可读取某个例程、某行附近的内容,或一页内容 | 首次读取模块时 |
提示词 why_did_it_stop(在显示提示词的宿主应用中,它是斜杠命令)会要求助手找出控制器当前正在做什么以及停止的原因,并遵循固定流程:
先给出摘要,然后列出问题及其对应操作、程序指针所在行、该行中提到的信号、每个值的时效,以及仅列出数据所显示的原因。
助手能看到的内容
- 每个回答都以状态行开头,其中包含控制器 ID、虚拟或真实控制器、RobotWare 版本,以及数据是否为最新、DEGRADED、DOWN 或 REPLAY。
- 每个值都附有 UTC 时间和时效(“14:02:11 UTC(3 分 12 秒前)”)。
- 返回过期值时,会标记为 STALE 并附上时间。控制器处于 DOWN 或 DEGRADED 状态并不算错误。
- 事件时间会校正为约一秒精度的 UTC 时间;如果守护进程无法读取控制器时钟,则会标记为“controller clock, zone unknown”。
- 如果 ABB 文档说明了控制器状态和模式的含义,回答中会附上一句说明。
- 除非允许重放,否则会拒绝重放录制内容的守护进程;允许重放后,每个回答都会标记为 REPLAY。
- 每个回答都包含易读的文本部分,以及相同数据的结构化 JSON。
控制器文本是数据
事件日志消息、RAPID 源代码、信号名称和控制器名称都来自控制器。任何能够更改控制器程序或配置的人都可以写入这些文本。abb-rws-mcp 会将其标记为控制器数据并传递给助手,而不是作为指令:在文本中,它们位于标记中,而这些标记携带为该回答生成的随机值;在结构化 JSON 中,它们位于 controllerData 下。转义序列会被移除,隐藏字符(控制字符、零宽字符、方向字符和标签字符)会替换为可见标记(U+FFFD)。此服务没有任何可更改内容的工具,因此这些文本无法让它采取行动。助手拥有的其他工具仍可能采取行动。运行助手提出的操作前,请先阅读。
运动采样
get_robot_position 会请求守护进程采样 15 s 的关节位置和位姿,除非已有其他程序在执行采样。这些是控制器读取操作,守护进程 README 在“按需读取”中列出了这些操作:采样期间,每个机械单元每秒约读取 8 次关节数据,每个机器人每秒读取 2 次位姿数据。服务对每个控制器每 15 s 最多请求一次;连接并非实时连接,或控制器报告正忙时,则绝不请求采样。使用 --motion-sampling off 可关闭此功能;关闭后,该工具会返回上次采样的值及其时间。
信号
信号表从守护进程的内存中读取,其中的值可能并非最新。按设备、网络或类别搜索,或使用 fresh: true 读取时,都会向控制器发送只读 RWS 搜索请求(由守护进程通过 POST 发送,而不是 GET)。搜索需要至少 3 个字符的名称前缀或指定设备,因此不会遍历整张表。此服务会限制对控制器的读取(搜索和模块读取):每个控制器同一时间只允许一个请求,连续最多两个,之后每 2 s 允许一个请求。
它无法看到的内容
- ABB 说明,守护进程读取的常见事件日志不会包含 RAPID 构建错误日志和内部日志。“程序为何无法启动”可能会漏掉构建错误。
- 快照不记录程序或控制器状态上次更改的时间。日志中的运行事件是唯一的时间证据。
- 守护进程会为每个控制器保留最近 256 条事件日志消息。更早的消息不可用。
- 守护进程目前尚未提供 RAPID 变量、备份、配置和控制器文件,因此此服务无法读取这些内容。
配置
每个选项都有对应的环境变量。选项优先于环境变量;环境变量为空时视为未设置。
| 选项 | 变量 | 默认值和含义 |
|---|---|---|
--daemon-url <url> | ABB_RWS_MCP_DAEMON_URL | http://127.0.0.1:7810。仅接受 http://127.0.0.1:<port> 或 http://localhost:<port>。localhost 只是另一种写法:此服务始终连接到 127.0.0.1。其他所有主机(包括 [::1])都会在启动时被拒绝。 |
--token-file <file> | ABB_RWS_DAEMON_TOKEN_FILE | 守护进程自身的默认值:Windows 上为 %APPDATA%\abb-rws-daemon\token,其他系统上为 $XDG_CONFIG_HOME/abb-rws-daemon/token 或 ~/.config/abb-rws-daemon/token。守护进程读取的也是此变量,因此设置一次即可供两者使用。 |
--allow-replay | ABB_RWS_MCP_ALLOW_REPLAY | 关闭。读取正在回放录制内容的守护进程;此时每条答复都会显示 REPLAY。 |
--motion-sampling <on|off> | ABB_RWS_MCP_MOTION_SAMPLING | on。参见运动采样。 |
ABB_RWS_MCP_LOG | warn。可选值为 error、warn、info 或 debug。日志只写入 stderr。 |
--help 和 --version 会打印信息并退出,不会联系任何对象。值无效时,服务会在启动时停止,并在 stderr 上输出一行信息。
没有用于连接另一台 PC 上守护进程的选项:守护进程仅监听 127.0.0.1,此服务会读取同一台 PC 上的守护进程。
安全说明
- 仅限环回地址。服务从守护进程的令牌文件中读取令牌,将其保存在内存中,并且只在守护进程通过健康检查后将令牌发送到 127.0.0.1。令牌绝不会写入日志或工具结果。
- 守护进程的令牌文件会向以你的账户运行的所有程序开放整个守护进程 API(添加控制器、发现扫描、关闭),包括助手的 shell 工具。此服务只使用读取路由;其他工具不受此限制。
- 工具结果会发送给助手的模型提供商。其中可能包含控制器和系统名称、守护进程中的控制器名称(默认使用地址),以及锁持有者的用户或 PC 名称。
- 如果同一会话中启用了 Web 或 shell 工具,控制器文本可能会诱使助手向外发送数据。启用这些工具时请牢记这一点。
- 守护进程录制期间,此服务发起的读取也会记录在录制内容中。每条答复都会说明当前是否正在录制。
- 日志写入 stderr,主机通常会将其保存在磁盘上。默认级别的日志包含代码、ID、路由模板、计数和耗时,不包含控制器文本。
debug级别会额外记录令牌文件路径和内部错误消息。
请按照 SECURITY.md 中的说明,私下报告安全问题。
不具备的功能
- 不执行任何写入:不设置信号,不启动或停止 RAPID,不写入程序指针或变量,不加载模块,不控制电机或速度比例,不请求主控权或写入权限。
- 不执行运动命令。Agent 无法点动或移动机器人。
- 不负责设置:不添加或移除控制器,不进行发现、录制、回放控制或守护进程关闭。这些操作由守护进程完成。
- 不建立控制器会话,也不使用控制器凭据。
- 不提供远程守护进程:仅限环回地址。
- 不提供订阅或流:每次调用都会读取当时的数据并返回结果。
- 不提供 HTTP 传输,也不监听套接字:仅支持标准输入输出。
开发
npm ci
npm run build # type check, then bundle dist/cli.js
npm test # offline tests against a fake daemon
npm run lint
测试不会访问控制器或守护进程。
相关项目
- abb-rws-daemon:每个控制器对应一个会话,通过 HTTP 和 WebSocket 提供类型化快照;这是此服务访问控制器的唯一方式
- abb-rws-client:TypeScript RWS 客户端,已在 RobotWare 6、7 和 8 上测试
- abb-rws-ros2:ROS 2 监控桥接
- abb-rws-vscode:RAPID Live,适用于 ABB 控制器的 VS Code 扩展
许可证
Apache-2.0。请参阅 LICENSE 和 NOTICE。如果重新分发此作品,请保留 NOTICE 文件。随附的第三方软件包及其许可证列于 THIRD_PARTY_NOTICES.md。
接受以 DCO 为依据的贡献——请参阅 CONTRIBUTING.md。
免责声明
由 Meraj Safari 独立开发的开源项目。与 ABB 无关联,也未获其认可或赞助。ABB、RobotWare、OmniCore、IRC5、RAPID、FlexPendant 和 RobotStudio 均为 ABB 的商标。请参阅 TRADEMARKS.md。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。