Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

OTDeck

MCPB · OTDECK-MCP-0.4.0.MCPB

Read MQTT, Modbus and OPC UA from AI agents; writes only after the user allows each in OTDeck.

32 Trust /100

Last scanned (4 hours ago)

Scores higher than 70% of MCPB servers

Category IoT and Hardware

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security0
  • No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
  • Known CVEs could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
  • Install-script risk not yet assessed.Unverified
  • Dependency health could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
Provenance & Transparency6
Schema Quality & AI Usability64
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 2714 tokens (~180/item across 15 items; 15 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management7
  • Stability observed for 2 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 16 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

What we tested

Checks we ran (12)

  • Source repository
  • Provenance
  • License
  • Maintenance
  • Security disclosure
  • Schema quality
  • Stability
  • Tool coverage
  • Injection markers
  • Destructive annotations
  • Judged manipulation
  • MCP protocol

Checks we could not complete (4)

These are gaps on our side, not findings about this package. We only credit what we can confirm, so a category made up entirely of them scores 0.

  • Malware scan in Supply Chain Security (scores 0 for this)No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.
  • Known CVEs in Supply Chain Security (scores 0 for this)Known CVEs could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).
  • Install scripts in Supply Chain Security (scores 0 for this)Install-script risk not yet assessed.
  • Dependency health in Supply Chain Security (scores 0 for this)Dependency health could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).

Does not apply to this package (2)

  • Endpoint SecurityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
  • Transport & ReachabilityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.

The score does not measure everything. What the score does not measure →

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 6 Nov 26 +1
    • Schema quality: 2305 → 2714 ▼ functional
  • 5 Nov 26 0
    • Stability: 0.00 → unverified ▼ security
  • 4 Nov 26 31

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 6 Nov 2026 · Analysed mcpb/https://github.com/otdeck/releases/releases/download/v0.4.0/otdeck-mcp-0.4.0.mcpb

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem mcpb
Reason No attestation published

Background: How many MCP packages publish verified provenance →

MCP tools · 15 exposed · ~2,555 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
browse ~124

List the children of an OPC UA node (hierarchical references): node id, browse and display name, node class. Start at i=85 (Objects) and descend; variables are what read_nodes reads.

NameTypeReqDescription
connectionstringyesOPC UA connection name or id
limitinteger–max children returned (default 200, max 1000)
node_idstring–node to list the children of, e.g. i=85 (Objects, the default), i=84 (Root) or ns=2;s=Plant1.Line1
NameTypeReqDescription
childrennull|arrayyes–
connectionstringyes–
node_idstringyes–
notestring––
rolestringyes–

No examples provided.

list_connections ~86

List the connections configured in OTDeck: name, protocol (mqtt, modbus, opcua), role (lab, staging, production), address, agents (read, or write when the user lets agents ask for writes), the tools for it, the Modbus register ranges and the OPC UA watch list set up in the app. Use the name as `connection` in other tools.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

list_events ~190

Listen to the events of an OPC UA object (default the Server object, every event) for wait_ms and return them newest first, plus the alarms the server still retains (Alarms & Conditions: active, acknowledged, confirmed, severity 1-1000). Read-only: acknowledging alarms is done by a person in the OTDeck app.

NameTypeReqDescription
connectionstringyesOPC UA connection name or id, see list_connections
limitinteger–at most this many events, newest first (default 50, at most 200)
min_severityinteger–only events with at least this severity (1-1000)
notifierstring–object whose events to receive (default i=2253, the Server object: every event)
wait_msinteger–how long to listen for new events (default 2000, at most 10000)
NameTypeReqDescription
alarmsnull|arrayyes–
connectionstringyes–
eventsnull|arrayyes–
notestring––
notifierstringyes–
rolestringyes–

No examples provided.

list_recordings ~44

List the recordings saved by the OTDeck app (newest first): id, name, start, length, sample count and per series the source and min/max/mean.

Input schema present but exposes no named parameters.

NameTypeReqDescription
recordingsnull|arrayyes–

No examples provided.

list_topics ~136

List MQTT topics seen on a connection with message counts, rate, retained flag and the last value (truncated). The first call on a connection listens for wait_ms to collect retained and live messages.

NameTypeReqDescription
connectionstringyesconnection name or id, see list_connections
filterstring–MQTT topic filter, default # (every topic); + matches one level, # the rest
limitinteger–max topics returned (default 500, max 5000)
wait_msinteger–on a fresh connection, how long to collect messages first (default 1500, max 10000)
NameTypeReqDescription
notestring––
topicsnull|arrayyes–
totalintegeryes–

No examples provided.

publish_message ~212

Ask the user to publish one MQTT message (QoS 0-2, optionally retained). Every call opens a window in the OTDeck app: the user sees the values now and the new ones with your reason, and allows or denies it (no answer in 60 s is a denial). Works only on connections the user set to Read and write for agents (OTDeck Pro).

NameTypeReqDescription
connectionstringyesMQTT connection name or id (it must be set to Read and write for agents)
encodingstring–text (default), hex or base64
payloadstringyesmessage payload (up to 64 KB)
qosinteger–0 (default), 1 or 2
reasonstringyesone sentence for the user: why this message is needed; shown in OTDeck before they allow it
retainboolean–keep the message on the broker for new subscribers
topicstringyestopic name, without + or #
NameTypeReqDescription
connectionstringyes–
resultstringyes–
writtennull|arrayyes–

No examples provided.

read_history ~219

Read the raw history an OPC UA server keeps for a node (HistoryRead): values with time, number and status, plus min/max/mean, for a time range (default the last hour). The node's AccessLevel must include history read; OTDeck pages through the server's continuation points and releases what it does not read.

NameTypeReqDescription
connectionstringyesOPC UA connection name or id, see list_connections
fromstring–start, RFC 3339 (default: seconds before to)
max_valuesinteger–at most this many values (default 500; at most 5000, 1000 on production connections)
node_idstringyesnode id of a variable whose AccessLevel includes history read, e.g. ns=2;s=Plant1.Line1.Press.Temperature
secondsinteger–length of the range ending at to when from is not given (default 3600)
tostring–end, RFC 3339 (default: now)
NameTypeReqDescription
connectionstringyes–
countintegeryes–
fromstringyes–
maxnull|number––
meannull|number––
minnull|number––
moreboolean––
node_idstringyes–
notestring––
rolestringyes–
tostringyes–
valuesnull|arrayyes–

No examples provided.

read_nodes ~99

Read the current Value of OPC UA nodes: value (strings and arrays truncated), number when numeric, data type, status (Good/Uncertain/Bad with its meaning) and timestamps.

NameTypeReqDescription
connectionstringyesOPC UA connection name or id
node_idsnull|arrayyesnode ids to read the Value of, e.g. ns=2;s=Plant1.Line1.Press.Temperature (find them with browse)
NameTypeReqDescription
connectionstringyes–
rolestringyes–
valuesnull|arrayyes–

No examples provided.

read_recording ~147

Read a recording: its summary and, per series, statistics and thinned points (≤500, minima and maxima kept) for an optional time range. Reads the file only; no device is contacted.

NameTypeReqDescription
fromstring–RFC 3339 start time (default: the beginning)
idstringyesthe recording id from list_recordings
pointsinteger–points per series, up to 500 (default 100); min and max of each interval are kept
seriesnull|array–labels of the series to return (default: all)
tostring–RFC 3339 end time (default: the end)
NameTypeReqDescription
completebooleanyes–
endedstring––
idstringyes–
namestringyes–
notestring––
samplesintegeryes–
secondsnumberyes–
seriesnull|arrayyes–
startedstringyes–

No examples provided.

read_registers ~391

Read Modbus coils, discrete inputs, holding or input registers and decode them (int16/uint16/int32/uint32/int64/uint64/float32/float64/string/hex/bool) with byte and word order. Addresses are 0-based protocol addresses. Use `range` to read a range configured in the app; such a range may carry a scale (value and number are then scaled, raw_value is the register value), a unit and a description from the register map. A device exception is returned in plain words in `error` (with the code in `exception`), not as a failed call.

NameTypeReqDescription
addressinteger–0-based protocol address of the first register (register 40001 in 1-based notation is holding address 0)
byte_orderstring–big (AB, default) or little (BA): byte order inside each register
connectionstringyesModbus connection name or id, see list_connections
countinteger–number of values to read (default 1); a float32 takes 2 registers, a float64 4
lengthinteger–for type string: registers per string (2 characters each)
rangestring–label or id of a register range configured in the app (list_connections shows them); replaces table/address/count/type
tablestring–coils, discrete (discrete inputs), holding (default) or input (input registers)
typestring–bool, int16, uint16 (default), int32, uint32, int64, uint64, float32, float64, string or hex; coils and discrete inputs are always bool
word_orderstring–high (default, ABCD) or low (CDAB): which register holds the high word of 32/64-bit values
NameTypeReqDescription
atstring––
connectionstringyes–
errorstring––
exceptioninteger––
notestring––
rangeobjectyes–
rolestringyes–
valuesnull|arrayyes–

No examples provided.

read_topic ~110

Read the latest value of an MQTT topic (or of every topic matching a filter, up to 100). Waits up to wait_ms when no value is known yet; retained values arrive at once.

NameTypeReqDescription
connectionstringyesconnection name or id
topicstringyestopic name, or a filter with + and # for several topics
wait_msinteger–how long to wait for a value when none is known yet (default 3000, max 30000)
NameTypeReqDescription
notestring––
valuesnull|arrayyes–

No examples provided.

sample_messages ~132

Listen to an MQTT topic filter and return the messages that arrive (up to limit, for at most wait_ms). Payloads are decoded as JSON or text (binary as hex) and truncated to a few KB.

NameTypeReqDescription
connectionstringyesconnection name or id
filterstringyesMQTT topic filter, e.g. factory/line1/# or +/+/temperature
limitinteger–max messages (default 20, max 200)
wait_msinteger–how long to listen (default 5000, max 30000); returns early when limit is reached
NameTypeReqDescription
messagesnull|arrayyes–
notestring––

No examples provided.

trend_snapshot ~133

Recent values of the series on the OTDeck app's trend panel (what the engineer is watching): per series the source, min/max/mean and thinned points over the last `seconds` (≤300). Needs the app running with values on its trend panel.

NameTypeReqDescription
pointsinteger–points per series, up to 300 (default 60); min and max of each interval are kept
secondsinteger–how far back, up to 300 (default 60)
seriesnull|array–labels or ids of the series to return (default: all on the panel)
NameTypeReqDescription
notestring––
seriesnull|arrayyes–
writtenAtstringyes–

No examples provided.

write_nodes ~161

Ask the user to write the Value of OPC UA nodes; OTDeck converts the text to each node's data type. Every call opens a window in the OTDeck app: the user sees the values now and the new ones with your reason, and allows or denies it (no answer in 60 s is a denial). Works only on connections the user set to Read and write for agents (OTDeck Pro).

NameTypeReqDescription
connectionstringyesOPC UA connection name or id (it must be set to Read and write for agents)
reasonstringyesone sentence for the user: why this write is needed; shown in OTDeck before they allow it
writesnull|arrayyesnodes and their new values (up to 25)
NameTypeReqDescription
connectionstringyes–
resultstringyes–
writtennull|arrayyes–

No examples provided.

write_registers ~371

Ask the user to write Modbus holding registers (functions 06/16) or coils (05/15) at consecutive 0-based addresses, encoded like read_registers decodes them. Every call opens a window in the OTDeck app: the user sees the values now and the new ones with your reason, and allows or denies it (no answer in 60 s is a denial). Works only on connections the user set to Read and write for agents (OTDeck Pro).

NameTypeReqDescription
addressintegeryes0-based protocol address of the first register or coil
byte_orderstring–big (default) or little
connectionstringyesModbus connection name or id, see list_connections (it must be set to Read and write for agents)
reasonstringyesone sentence for the user: why this write is needed; shown in OTDeck before they allow it
scalenumber–multiplier of a scaled register (the scale read_registers reports for the range, e.g. 0.1): values are then engineering values and the register gets value / scale, which must be a whole number for in…
tablestring–holding (default) or coils; input registers and discrete inputs cannot be written
typestring–holding registers: int16, uint16 (default), int32, uint32, int64, uint64, float32, float64; a 32-bit value takes 2 registers
valuesnull|arrayyesvalues to write to consecutive addresses (up to 100), as text: numbers for registers, true/false or 1/0 for coils
word_orderstring–high (default) or low
NameTypeReqDescription
connectionstringyes–
resultstringyes–
writtennull|arrayyes–

No examples provided.

Install

How do I install the OTDeck MCP server?

OTDeck ships as an MCPB bundle, a single file you download and open in an MCP host that supports MCPB bundles, such as Claude Desktop. The host reads the launch command from the bundle's own manifest, so there is no command to copy. Before opening it, check the file's SHA-256 matches the one the MCP registry declares for it, 5bec1b4327ee5604ca42e8f459ecf8adac1bbecec9ed50fe0996681872a0ac13; the commands to do that are on this page. If it does not match, do not open it.

mcpb · otdeck-mcp-0.4.0.mcpb

Download bundle

Check the download matches the SHA-256 the MCP registry declares before you open it. If it does not match, do not open the file.

SHA-256

5bec1b4327ee5604ca42e8f459ecf8adac1bbecec9ed50fe0996681872a0ac13

macOS / Linux

echo "5bec1b4327ee5604ca42e8f459ecf8adac1bbecec9ed50fe0996681872a0ac13  otdeck-mcp-0.4.0.mcpb" | shasum -a 256 -c

Windows (PowerShell)

(Get-FileHash -Algorithm SHA256 .\otdeck-mcp-0.4.0.mcpb).Hash -eq "5bec1b4327ee5604ca42e8f459ecf8adac1bbecec9ed50fe0996681872a0ac13"

Run it in the folder you saved the bundle to, then open the file with an MCPB-capable host such as Claude Desktop.

Common questions

What is the OTDeck MCP server?

OTDeck is an MCP server listed in the public MCP registry as com.otdeck/otdeck-mcp. Read MQTT, Modbus and OPC UA from AI agents; writes only after the user allows each in OTDeck. This page covers its MCPB bundle (https://github.com/otdeck/releases/releases/download/v0.4.0/otdeck-mcp-0.4.0.mcpb).

Is the OTDeck MCP server safe to use?

OTDeck scores 32 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the OTDeck MCP server expose?

OTDeck exposes 15 tools: browse, list_connections, list_events, list_recordings, list_topics, and 10 more. Their descriptions and schemas cost roughly 2,555 tokens of context every time the server is loaded.

What did VerifyMCP test on the OTDeck MCP server?

VerifyMCP ran 12 checks on OTDeck, covering Source repository, Provenance, License, Maintenance and 8 more. 4 items could not be completed, a gap on our side rather than a finding about OTDeck: Malware scan, Known CVEs, Install scripts and Dependency health. One category scores 0 for that reason, because we only credit what we can confirm. Endpoint Security and Transport & Reachability do not apply to an MCPB bundle, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.