# OPC-UA MCP Server

Даёт агенту чтение, запись и подписку на живые данные OPC-UA-сервера промышленной автоматизации. Пригодится, когда нужно смотреть значения тегов прямо из чата.

- MCP-сервер · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 5
- Автор: mwieczorkiewicz
- Лицензия: MIT · policy=link-only · показываем только описание, файл — у автора
- Исходник: https://github.com/mwieczorkiewicz/opcua-mcp
- Обновлён: 2026-08-05
- HTML: https://affpapa.org/nevibecode/mcp/opc-ua-mcp-server

## Что делает

Сервер поднимается по stdio или HTTP и держит соединение с OPC-UA-эндпоинтом. Внутри — дисковый кэш на bbolt: повторные чтения и обход адресного пространства не дёргают устройство каждый раз, а запись сама сбрасывает устаревшую запись кэша. Отдельно в фоне строится поисковый индекс адресного пространства на Bleve, поэтому узел можно искать по имени, а не по node ID, и находить похожие имена по частичному совпадению.

Инструментов много: `opcua_read`, `opcua_write` с проверкой типа перед отправкой на устройство, `opcua_browse` и `opcua_browse_nodes` для обхода дерева, `opcua_subscribe` для push-обновлений. Подписки переживают перезапуск и восстанавливаются при переподключении. Есть `opcua_get_value_by_name`, `opcua_node_info`, диагностика вроде `opcua_debug_search` и `opcua_discovery_stats`. Ресурсы — `opcua://node/{node_id}` и `opcua://server`.

Аутентификация — анонимная, по логину с паролем или по сертификату, политика и режим безопасности настраиваются. Конфиг читается из встроенных значений, файла (TOML, YAML, JSON) и переменных окружения; переменные всегда перебивают файл. Для `OPCUA_AUTH_MODE=username` нужны `OPCUA_USERNAME` и `OPCUA_PASSWORD`, для режима с сертификатом — `OPCUA_CERT_FILE` и `OPCUA_KEY_FILE`. Сборка из исходников требует Go 1.26+.

## Требования
- Нужно: Docker
- Переменные окружения: `OPCUA_ENDPOINT`, `OPCUA_AUTH_MODE`, `OPCUA_USERNAME`, `OPCUA_PASSWORD`, `OPCUA_SECURITY_POLICY`, `OPCUA_SECURITY_MODE`, `SERVER_TRANSPORT` — это ключи и токены: значения спроси у человека, в репозиторий и общие файлы не записывай.

## Установка

### Claude Code (родная платформа)

**Командой платформы**
```bash
claude mcp add --env OPCUA_ENDPOINT=<OPCUA_ENDPOINT> --env OPCUA_AUTH_MODE=<OPCUA_AUTH_MODE> --env OPCUA_USERNAME=<OPCUA_USERNAME> --env OPCUA_PASSWORD=<OPCUA_PASSWORD> --env OPCUA_SECURITY_POLICY=<OPCUA_SECURITY_POLICY> --transport stdio opc-ua-mcp-server -- docker run -i --rm -e OPCUA_ENDPOINT -e OPCUA_AUTH_MODE -e OPCUA_USERNAME -e OPCUA_PASSWORD -e OPCUA_SECURITY_POLICY ghcr.io/mwieczorkiewicz/opcua-mcp:main-29734c4
```
Вместо <…> подставьте свои значения. Ещё 2 переменные окружения — в README сервера

### Codex

**Командой платформы**
```bash
codex mcp add opc-ua-mcp-server --env OPCUA_ENDPOINT=<OPCUA_ENDPOINT> --env OPCUA_AUTH_MODE=<OPCUA_AUTH_MODE> --env OPCUA_USERNAME=<OPCUA_USERNAME> --env OPCUA_PASSWORD=<OPCUA_PASSWORD> --env OPCUA_SECURITY_POLICY=<OPCUA_SECURITY_POLICY> -- docker run -i --rm -e OPCUA_ENDPOINT -e OPCUA_AUTH_MODE -e OPCUA_USERNAME -e OPCUA_PASSWORD -e OPCUA_SECURITY_POLICY ghcr.io/mwieczorkiewicz/opcua-mcp:main-29734c4
```
Вместо <…> подставьте свои значения. Ещё 2 переменные окружения — в README сервера

### Cursor

**Файл настроек**
Файл `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "opc-ua-mcp-server": {
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "-e",
                "OPCUA_ENDPOINT",
                "-e",
                "OPCUA_AUTH_MODE",
                "-e",
                "OPCUA_USERNAME",
                "-e",
                "OPCUA_PASSWORD",
                "-e",
                "OPCUA_SECURITY_POLICY",
                "ghcr.io/mwieczorkiewicz/opcua-mcp:main-29734c4"
            ],
            "env": {
                "OPCUA_ENDPOINT": "<OPCUA_ENDPOINT>",
                "OPCUA_AUTH_MODE": "<OPCUA_AUTH_MODE>",
                "OPCUA_USERNAME": "<OPCUA_USERNAME>",
                "OPCUA_PASSWORD": "<OPCUA_PASSWORD>",
                "OPCUA_SECURITY_POLICY": "<OPCUA_SECURITY_POLICY>"
            }
        }
    }
}
```
Вместо <…> подставьте свои значения. Ещё 2 переменные окружения — в README сервера

### GitHub Copilot

**Файл настроек**
Файл `.vscode/mcp.json`:
```json
{
    "servers": {
        "opc-ua-mcp-server": {
            "type": "stdio",
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "-e",
                "OPCUA_ENDPOINT",
                "-e",
                "OPCUA_AUTH_MODE",
                "-e",
                "OPCUA_USERNAME",
                "-e",
                "OPCUA_PASSWORD",
                "-e",
                "OPCUA_SECURITY_POLICY",
                "ghcr.io/mwieczorkiewicz/opcua-mcp:main-29734c4"
            ],
            "env": {
                "OPCUA_ENDPOINT": "<OPCUA_ENDPOINT>",
                "OPCUA_AUTH_MODE": "<OPCUA_AUTH_MODE>",
                "OPCUA_USERNAME": "<OPCUA_USERNAME>",
                "OPCUA_PASSWORD": "<OPCUA_PASSWORD>",
                "OPCUA_SECURITY_POLICY": "<OPCUA_SECURITY_POLICY>"
            }
        }
    }
}
```
Вместо <…> подставьте свои значения. Ещё 2 переменные окружения — в README сервера

### Gemini CLI

**Командой платформы**
```bash
gemini mcp add -e OPCUA_ENDPOINT=<OPCUA_ENDPOINT> -e OPCUA_AUTH_MODE=<OPCUA_AUTH_MODE> -e OPCUA_USERNAME=<OPCUA_USERNAME> -e OPCUA_PASSWORD=<OPCUA_PASSWORD> -e OPCUA_SECURITY_POLICY=<OPCUA_SECURITY_POLICY> opc-ua-mcp-server docker run -i --rm -e OPCUA_ENDPOINT -e OPCUA_AUTH_MODE -e OPCUA_USERNAME -e OPCUA_PASSWORD -e OPCUA_SECURITY_POLICY ghcr.io/mwieczorkiewicz/opcua-mcp:main-29734c4
```
Вместо <…> подставьте свои значения. Ещё 2 переменные окружения — в README сервера

_Часть страницы не вошла по размеру — она есть в HTML-версии._

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
