EPICS Channel Access — MCP-сервер для Claude Code: чтение и запись PV
Даёт агенту доступ к процессным переменным EPICS: чтение, мониторинг и запись, если её разрешить. Пригодится на ускорителях и лабораторных установках.
claude mcp add --env LABMCP_ADDRESS=<LABMCP_ADDRESS> --env LABMCP_SIMULATE=<LABMCP_SIMULATE> --env LABMCP_READ_ONLY=<LABMCP_READ_ONLY> --env LABMCP_LIMITS=<LABMCP_LIMITS> --transport stdio epics -- uvx labmcp-epicsЧто делает EPICS Channel Access
Сервер подключается к EPICS по Channel Access и отдаёт агенту инструменты для работы с процессными переменными. Читать можно всё: get_pv вернёт значение с единицами, точностью, лимитами и статусом аварии, get_pvs заберёт сразу пачку переменных, а monitor_pv подпишется на изменения и соберёт статистику за указанное число секунд. Отдельно есть pv_info — показывает, какой IOC обслуживает переменную и есть ли у клиента право записи.
Запись вынесена в put_pv и put_pvs и по умолчанию не работает. Чтобы она вообще прошла, переменная должна попасть в список разрешённых через --option put_allowlist=, IOC должен дать доступ на запись, а значение — уложиться в лимиты DRVL/DRVH. Запускать сервер стоит с --read-only, пока ответственный за установку не разрешит обратное: запись в PV двигает моторы, открывает затворы и меняет уставки магнитов. В read-only остаётся доступным apply_safe_state — аварийная запись заранее прописанных безопасных состояний.
Ничего компилировать не нужно: под капотом caproto, реализация CA на чистом Python, поэтому libca не требуется. Проверить связь до подключения к железу можно на встроенном симуляторе — uvx labmcp-epics --simulate --check поднимает настоящий CA-сервер на 127.0.0.1 со случайными портами и набором тестовых PV вроде SIM:TEMP и SIM:MTR. Для реальной сети нужен доступ к IOC или шлюзу: UDP 5064 и 5065, TCP 5064.
Какие задачи решает
- прочитать показания вакуумных датчиков пучковой линии
- следить за током пучка и ловить выбросы
- проверить, есть ли у клиента право записи в PV
- сдвинуть образец или фильтрующее колесо по разрешению
- вывести установку в безопасное состояние одной командой
Примеры запросов агенту
- Прочитай
BL7:RING:Iи скажи, есть ли авария. - Помониторь
SIM:TEMPдесять секунд и покажи статистику. - Переведи
BL7:SAMPLE:X.STOPв 1, запись разрешена.
Как установить EPICS Channel Access
Командой платформы
claude mcp add --env LABMCP_ADDRESS=<LABMCP_ADDRESS> --env LABMCP_SIMULATE=<LABMCP_SIMULATE> --env LABMCP_READ_ONLY=<LABMCP_READ_ONLY> --env LABMCP_LIMITS=<LABMCP_LIMITS> --transport stdio epics -- uvx labmcp-epicsВместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from labmcp-epics <команда>
Командой платформы
codex mcp add epics --env LABMCP_ADDRESS=<LABMCP_ADDRESS> --env LABMCP_SIMULATE=<LABMCP_SIMULATE> --env LABMCP_READ_ONLY=<LABMCP_READ_ONLY> --env LABMCP_LIMITS=<LABMCP_LIMITS> -- uvx labmcp-epicsВместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from labmcp-epics <команда>
Файл настроек
{
"mcpServers": {
"epics": {
"command": "uvx",
"args": [
"labmcp-epics"
],
"env": {
"LABMCP_ADDRESS": "<LABMCP_ADDRESS>",
"LABMCP_SIMULATE": "<LABMCP_SIMULATE>",
"LABMCP_READ_ONLY": "<LABMCP_READ_ONLY>",
"LABMCP_LIMITS": "<LABMCP_LIMITS>"
}
}
}
}Вместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from labmcp-epics <команда>
Файл настроек
{
"servers": {
"epics": {
"type": "stdio",
"command": "uvx",
"args": [
"labmcp-epics"
],
"env": {
"LABMCP_ADDRESS": "<LABMCP_ADDRESS>",
"LABMCP_SIMULATE": "<LABMCP_SIMULATE>",
"LABMCP_READ_ONLY": "<LABMCP_READ_ONLY>",
"LABMCP_LIMITS": "<LABMCP_LIMITS>"
}
}
}
}Вместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from labmcp-epics <команда>
Командой платформы
gemini mcp add -e LABMCP_ADDRESS=<LABMCP_ADDRESS> -e LABMCP_SIMULATE=<LABMCP_SIMULATE> -e LABMCP_READ_ONLY=<LABMCP_READ_ONLY> -e LABMCP_LIMITS=<LABMCP_LIMITS> epics uvx labmcp-epicsВместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from labmcp-epics <команда>
По шагам, с командами для каждой платформы: Как подключить MCP-сервер: Claude Code, Codex, Cursor, VS Code, Gemini CLI и другие
Вопросы о EPICS Channel Access
Как установить EPICS Channel Access в Claude Code?
Выполните claude mcp add labmcp-epics -- uvx labmcp-epics. Для передачи адреса, режима симуляции, read-only и лимитов есть вариант с переменными окружения: `claude mcp add --env LABMCP_ADDRESS=<LABMCP_ADDRESS> --env LABMCP_SIMULATE=<LABMCP_SIMULATE> --env LABMCP_READ_ONLY=<LABMCP_READ_ONLY> --env LABMCP_LIMITS=<LABMCP_LIMITS> --transport stdio epics -- uvx labmcp-epics`.
Что делает EPICS Channel Access?
Позволяет агенту читать процессные переменные EPICS, подписываться на их изменения и писать значения, если запись разрешена списком и правами IOC.
Можно ли попробовать без железа?
Да, команда uvx labmcp-epics --simulate --check поднимает CA-сервер прямо в процессе на 127.0.0.1 и отдаёт тестовые PV. Настоящая сеть не затрагивается.