
OPC-UA MCP Server
io.github.mwieczorkiewicz由 GitHub 帳號 mwieczorkiewicz 發布v1.0.0更新於 Oct 27, 2026
Read, write, browse, search, and subscribe to live data on an OPC-UA industrial automation server.
概覽
讓助理讀取、寫入、瀏覽、搜尋並訂閱 OPC-UA 工業自動化伺服器即時資料的 MCP 伺服器。
- 可以做什麼
- 依節點 ID 或瀏覽名稱讀取節點值,寫入時會做型別驗證
- 逐層或遞迴瀏覽位址空間,並檢視節點中繼資料
- 透過背景探索索引搜尋與模糊比對節點名稱
- 訂閱推送式即時更新,列出並取消訂閱
- 管理連線,檢視伺服器資訊、探索統計與診斷資訊
- 適用情境
- 適合需要檢視或修改 OPC-UA 伺服器(例如 PLC、SCADA 系統)即時數值的情境,例如依名稱查找變數、持續監控數值,或在工程與除錯時寫入設定值。
- 執行需求
- 以本機程序執行(建置需 Go 1.26+,也可使用已發布的容器映像);內附測試伺服器可選用 Docker。需以 OPCUA_ENDPOINT 指定目標伺服器。使用者名稱密碼驗證需 OPCUA_USERNAME 與 OPCUA_PASSWORD;憑證驗證需憑證與金鑰檔案。需能連線至 OPC-UA 端點。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 OPC-UA MCP Server,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
OPC-UA MCP Server
An MCP server that lets an LLM read, write, browse, search, and subscribe to live data on an OPC-UA industrial automation server - over stdio or HTTP, with a persistent cache and a searchable index of the address space built in.
https://github.com/user-attachments/assets/0b676e6e-17ce-42f5-918f-9a615e939008
Quick start
The fastest way to see it working end-to-end, using the bundled Microsoft OPC-UA test server and a public tunnel Claude can reach:
Paste that URL into Claude at Settings → Connectors → Add custom
connector, then ask it to browse the server or read a value. Stop with
make compose-down when you're done - see
docs/deployment.md for what that tunnel exposes and
how to run against your own OPC-UA server instead.
Building and running locally
Requires Go 1.26+ and, optionally, Docker for the test server / containerized deployment.
What it does
- Read / write node values, with type validation on writes so a mismatched value is rejected before it reaches the device.
- Browse the address space one level at a time or recursively, and look nodes up by name instead of by node ID.
- Subscribe to push-based live updates - subscriptions persist across restarts and are automatically re-established on reconnect.
- Cache reads, browse results, and type info on disk (bbolt), so repeat lookups don't round-trip to the device; writes invalidate the relevant entry automatically.
- Discover and search the address space in the background, indexed with Bleve for fuzzy/partial browse-name lookups.
- Anonymous, username/password, or certificate auth, with configurable OPC-UA security policy and mode.
See docs/architecture.md for how the caching layer, subscription manager, and discovery index fit together.
MCP tools
Read-only mode
Set MCP_READ_ONLY=true to expose only tools that don't change anything on
the OPC-UA server or the connection: opcua_write, opcua_disconnect,
opcua_subscribe and opcua_unsubscribe are hidden from tools/list, and a
client that calls one of them by name gets an error instead of running it.
opcua_connect and the discovery tools stay available.
To approve specific tools on top of the read-only set, list them in
MCP_ALLOWED_TOOLS, for example MCP_ALLOWED_TOOLS=opcua_subscribe,opcua_unsubscribe.
An unknown tool name stops the server at startup, so a typo can't silently
leave a tool disabled. Any tool added in a future release is excluded from
read-only mode until it is classified as read-only.
MCP resources
Configuration
Configuration is loaded (via viper) from three sources, in ascending order of precedence:
- Built-in defaults (shown in the tables below).
- An optional config file - TOML, YAML, JSON, or any other format viper
supports. By default
./config.{yaml,yml,toml,json,...}is read if present; point at an explicit path withCONFIG_FILE=/path/to/config.toml. A config file is entirely optional - env vars alone are still enough. - Environment variables (
SERVER_*,OPCUA_*,MCP_*,SEARCH_*,STORE_*) - always win over the config file, so existing env-var-only deployments keep working unchanged.
A config file mirrors the env var names, lowercased and nested under each
prefix, e.g. SERVER_HTTP_PORT becomes:
Server
OPC-UA connection
MCP
Discovery and search
Persistent store
Backs read-through caching and subscription persistence with an on-disk bbolt database.
If the store fails to open (e.g. a stale lock from a prior ungraceful shutdown, or a read-only filesystem), the server logs a warning and keeps running with caching forced off and subscription tools returning an error - every other tool is unaffected.
Telemetry
opcua-mcp collects anonymous, aggregate usage telemetry (which tools get used, cache hit rate, error categories - never node IDs, endpoint URLs, node values, or credentials) to help prioritize maintenance of this open-source project. It's on by default; see docs/telemetry.md for exactly what is and isn't collected.
Opt out with either:
Docker
Multi-stage build on Chainguard's minimal Go image, running from scratch -
no shell, small attack surface. Mount ./search_index and
./mcp_opcua_store.db as volumes to persist discovery/cache/subscription
state across restarts. Full auth-mode examples, the Compose dev stack, and
the Claude-connector tunnel setup are in
docs/deployment.md.
Development
VS Code launch configs are in .vscode/launch.example.json - copy to
.vscode/launch.json to get stdio/HTTP/auth debug targets that start and
stop the test server automatically. make help lists every available
target.
Tests are table-driven and mock the OPC-UA client at the opcuaClient
interface seam (internal/opcua/mock_client_test.go) rather than against a
live/simulated server - see docs/architecture.md for
how the pieces being tested fit together, and
docs/COMMIT_CONVENTION.md for this repo's
commit message format.
Changelog
Unreleased
- New: read-only mode.
MCP_READ_ONLY=truehides and rejectsopcua_write,opcua_disconnect,opcua_subscribeandopcua_unsubscribe;MCP_ALLOWED_TOOLSre-enables named tools. Off by default, so existing setups see all 18 tools as before. - New: automatic recovery from a dead OPC-UA session. When the server
rejects a request with
BadSessionIDInvalidorBadServerNotConnected(for example after the server restarted or dropped the session), the client reconnects once with the same security settings and retries reads once. Writes are not replayed: they return an error saying the write was not applied, and the next call uses the new session. Subscriptions are restored after the reconnect. - Changed:
opcua_connectverifies the connection. When already connected it now probes the server and rebuilds the session if it is no longer usable, instead of only reporting "Already connected". - Fixed:
opcua_disconnectstays disconnected. Disconnecting no longer makes the subscription reconnect watcher bring the connection back.
Contributing
Fork it, make your changes, open a PR - see CONTRIBUTING.md.
License
來源:README.md,提交 62f6121
工具
0版本歷史
1- v1.0.0最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分