
EPICS Channel Access
io.github.K-Dense-AI由 GitHub 账号 K-Dense-AI 发布v0.1.2更新于 Oct 24, 2026
MCP server for EPICS Channel Access: read, monitor and guarded writes of process variables.
概览
让助手通过 Channel Access 读取、监视并在明确授权时写入实验室控制系统中的 EPICS 过程变量。
- 可以做什么
- 连接 EPICS IOC 或设施 CA 网关,提供读取单个或多个过程变量及其元数据、报警级别和限值的工具,可订阅某个 PV 一段时间并返回统计结果,也可查看 PV 的连接与访问权限。受保护的写入工具可设置一个或多个 PV,并会校验允许列表、IOC 访问权限、类型和控制限值。安全工具可执行由科学家配置的安全状态,命令日志会记录已发送的内容。
- 适用场景
- 适用于加速器、光束线、望远镜、聚变或物理实验室场景,让助手查看实时 EPICS 数值、监视信号漂移,或执行范围明确获授权的设定值更改。建议先以只读方式运行;仅在负责科学家或控制室授权后才启用写入。
- 运行要求
- 以 Python 包形式本地运行(uvx labmcp-epics),使用 stdio,仅限桌面。需要能访问 IOC 或 CA 网关的网络:UDP 5064/5065 与 TCP 5064。地址来自常规 EPICS_CA_* 环境变量或 LABMCP_ADDRESS 设置。未声明身份验证。内置模拟器可在无硬件时测试。
安装
在 SourceWeft 中
- 打开 控制台中的 EPICS Channel Access,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
EPICS Channel Access — MCP Server
Let an AI agent read, monitor and, when you allow it, carefully write EPICS process variables (PVs) over Channel Access. EPICS is the control system behind most particle accelerators, synchrotron and neutron beamlines, large telescopes, fusion experiments and many physics labs. The server uses caproto, a pure-Python CA implementation, so there is nothing to compile and no libca to install.
⚠️ Facility control systems are safety-critical. Writing a PV can move motors and sample stages, open shutters, ramp magnets or high voltage, and change cryogenic or vacuum systems. Follow your facility's rules. Get authorisation from the responsible scientist or control-room staff before enabling writes, and run with
--read-onlyunless writes are explicitly authorised. This server is not an interlock or a personnel-protection system and never replaces them. Where possible, connect through the facility's CA gateway with its access-security rules, and limit writes with--option put_allowlist=.
Try it without hardware
The simulator is a real Channel Access server running in-process. It is bound to 127.0.0.1 on random free ports, and the client is pointed only at that address (auto address list off), so it neither broadcasts on nor answers your network. It serves SIM:TEMP (°C, with alarm limits, following SIM:TEMP:SP while SIM:HEATER is On), SIM:MTR (a motor whose put-callback completes only when the move is done, with SIM:MTR:RBV, :DMOV, :STOP and :VELO), SIM:DET:FRAMES, SIM:SAMPLE (string), SIM:SPECTRUM (a 512-point waveform), SIM:BEAM:CURRENT and SIM:STATUS.
Connect to your control system
- Network: your computer must reach the IOCs, or the facility's CA gateway: UDP 5064/5065 and TCP 5064 through any firewall. Most facilities put control networks behind a gateway, so ask your controls group for its address.
- Address list: Channel Access finds PVs by UDP search. Either use your usual EPICS environment (
EPICS_CA_ADDR_LIST,EPICS_CA_AUTO_ADDR_LIST), or pass it explicitly: Passing an address list switches the automatic (broadcast) list off unless you add--option auto_addr_list=yes. With--option check_pv=<a PV you know exists>,--checkreads that PV and prints its value, or the reason it can't be reached. Without it,--checkonly confirms that the CA client starts.
Add to your MCP client
Claude Code (read-only, recommended)
Claude Desktop / Cursor / Windsurf (claude_desktop_config.json, .cursor/mcp.json, …)
Authorised writes (example: a beamline scientist lets the agent move only the sample stage and the filter wheel, and configures an emergency safe state):
Tools
Safety limits
Override at launch, e.g. --limit max_put_batch=4. The main write guards are options, not numeric limits:
Example prompts
- "What is the storage-ring current, and are any of the BL7 vacuum gauges in alarm?"
- "Read BL7:MONO:ENERGY and its readback, and tell me the units and control limits."
- "Monitor the sample temperature for 30 s and tell me whether it is still drifting."
- "Move the sample stage X to 12.5 mm and confirm the readback when the move is done."
- "Record the detector spectrum waveform and tell me where the peak is."
- "Stop everything: apply the safe state."
Notes
- Setpoint versus readback: for motor records,
NAME(VAL) is the target andNAME.RBVis the actual position.put_pvreturns the value read back from the PV you wrote, so read the readback PV separately to confirm physical motion. - Control limits come from the CA
DBR_CTRLresponse. EPICS convention treats equal low and high limits (normally 0/0) as "not configured", and those PVs are only type-checked. - NaN and infinity: JSON has neither. A NaN or infinite scalar value comes back as the text
"nan","inf"or"-inf", array elements asnull, a limit that is NaN (EPICS 3.16+ reports unset alarm limits that way) asnull, and waveform and monitor statistics leave such values out and count them (non_finite,non_finite_updates). - Alarms: every reading includes severity (
NO_ALARM,MINOR_ALARM,MAJOR_ALARM,INVALID_ALARM), status (HIHI,LOLO,UDF,COMM, …) andage_s, the time since the IOC timestamp, so stale values stand out. - Waveforms are downsampled by block averaging to
max_elements, with min/max/mean/argmax statistics. CHAR waveforms are also decoded to text (as_string), the usual EPICS long-string convention. When writing, a text value is accepted for CHAR waveforms. - pvAccess: only Channel Access is supported. caproto 1.x implements CA only, and pvAccess would need p4p, a compiled EPICS Base binding that is deliberately not a dependency. EPICS 7 IOCs serve their records over both CA and PVA, so this covers normal records. PVA-only data (for example NTNDArray images from areaDetector's PVA plugin, or QSRV group PVs) can't be read.
- The CA client is configured through
EPICS_CA_*environment variables, as in EPICS Base. The server sets them for its own process from--address/--optionand restores them on disconnect. Ifput_allowlistholds a comma, pass it on the command line or giveLABMCP_OPTIONSin its JSON form ({"put_allowlist": "BL7:(A|B){1,2}"}), because thea=1,b=2form splits on commas. get_command_logrecords every write (caput -c NAME value) and its read-back.
Hardware verification
来源:servers/protocols/epics/README.md,提交 46545ea
工具
0版本历史
2- v0.1.2最新Sep 27, 2026
- v0.1.0Sep 26, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分