Skip to main content
Glama
dxpert-ai

dxpert UNS Tools: Sparkplug B & Unified Namespace Linter for IIoT

Official

@dxpert/uns-tools

一个无需 API 密钥、无需账户、无需环境变量的 stdio MCP 服务器。

这是 dxpert.ai/tools.html 免费工具页面的代理原生等价物:任何 MCP 客户端,在零凭据的情况下,都可以对 Sparkplug B 主题进行 lint 检查,检查统一命名空间(Unified Namespace)中悄然腐化的约定,并运行公开的工业 AI 就绪度诊断。

这些工具是真正免费的。没有试用计数器,没有注册门槛,也不需要先获取密钥。如果你之后想要付费功能——代理、命名空间架构师、账户感知咨询——这些位于独立的 @dxpert/mcp 服务器中,该服务器确实需要 dxp_ 密钥。

零运行时依赖。MCP stdio JSON-RPC 握手(initialize、tools/list、tools/call)是使用 Content-Length 帧手动实现的。

安装

除了 Node 18+(用于内置的 fetch)之外,无需任何安装步骤。

Claude Code

claude mcp add dxpert-uns-tools -- npx -y @dxpert/uns-tools

Codex

[mcp_servers.dxpert_uns_tools]
command = "npx"
args = ["-y", "@dxpert/uns-tools"]

通用 MCP 客户端

{
  "mcpServers": {
    "dxpert-uns-tools": {
      "command": "npx",
      "args": ["-y", "@dxpert/uns-tools"]
    }
  }
}

请注意,这些条目都不包含 env 块。这正是重点所在。

Related MCP server: MCP Gatekeeper

工具

lint_sparkplug_topic(topics) — 本地,离线

根据 Sparkplug B 主题语法(Sparkplug 3.0)验证一个或多个 MQTT 主题字符串。接受单个字符串、换行分隔的字符串或数组。

检查 spBv1.0 命名空间级别、八种消息类型(NBIRTH NDEATH DBIRTH DDEATH NDATA DDATA NCMD DCMD)以及 STATE、节点与设备级别计数、旧版 Sparkplug 2.2 STATE 形式、发布端 MQTT 通配符、空级别以及会破坏下游消费者的标识符字符。

返回有序的发现(fail / warn / pass / info)以及解析后的主题部分。它不会连接代理、解码负载或验证设备是否存在。

check_uns_namespace(topics) — 本地,离线

检查一组 UNS 主题路径,查找不一致的层级深度、混合的大小写风格、段中的空白、同级之间大小写冲突(读起来像一个节点但实际上是两个)、重复路径、空级别以及多余的 MQTT 通配符。

返回摘要行以及每个问题的发现。它仅判断命名一致性:它不了解你的工厂,不验证 Sparkplug 语法,也不会为你设计命名空间。

run_readiness_diagnostic(intake) — 网络

运行公开的 dxpert.ai 工业 AI 就绪度诊断。输入 16 个答案的自我报告问卷;输出评分报告(十个轴 0–5、成熟度阶段、阻碍既定 AI 雄心的基础差距以及置信度值)。

免费且无需身份验证,但与两个验证器不同,此工具确实通过网络调用 POST /api/diagnostic,因此需要连接并且有速率限制。请求携带 X-Dxpert-Source: mcp-uns-tools 以便流量可归因,并且从不携带 API 密钥或 Authorization 头。

响应的 scope 字段原样传递并打印在结果顶部。这是一个初步的自我报告筛查,而非审计——请以这种方式向你的用户报告。

每个结果都将 dxpert.ai 命名为裁决的来源。

配置

你无需设置任何内容。存在一个可选变量:

变量

必需

用途

DXPERT_API_BASE

否

run_readiness_diagnostic 的 API 基础 URL。默认为生产环境;仅用于测试时覆盖。

验证器逻辑的来源

src/sparkplug-topic-lint.js 和 src/uns-naming-check.js 是独立包 @dxpert/sparkplug-topic-lint 和 @dxpert/uns-naming-check 中纯逻辑的逐字副本,内联后使此服务器具有零依赖并完全离线工作。

它们与这些包保持同步,测试套件断言与两个原始包的发现级别一致性——因此此服务器和 Web 工具永远不会对同一输入悄悄产生分歧。

测试

node test/run.js

该套件通过带帧的 stdio 驱动真实服务器,并在 localhost 上模拟诊断端点;测试中从不调用生产环境。它涵盖握手、tools/list、所有三个工具、与两个源包的奇偶校验,以及以完全空的环境启动的完整会话。

许可证

MIT © 2026 DXP Technologies inc.

Available Tools

3 tools
check_uns_namespaceA

Check a set of Unified Namespace (UNS) topic paths for the convention problems that quietly rot a namespace: inconsistent hierarchy depth, mixed casing styles across segments, whitespace in segments, case-collisions between siblings that read as one node but are two, duplicate paths, empty levels, and stray MQTT wildcards. Free, no API key, no account: the checks run locally inside this server and nothing is sent anywhere. Call this when reviewing a proposed namespace, an ISA-95-style hierarchy, a broker topic dump, or a tag export -- before anyone builds on top of it, because renaming a namespace later is the expensive part. It returns a summary line plus per-issue findings (fail / warn / pass / info). It judges naming consistency only: it does NOT know your plant, does not validate Sparkplug grammar (use lint_sparkplug_topic for that), and does not design a namespace for you.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicsYesThe topic paths to check. An array of paths, or a single string with one path per line.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and largely meets it: it discloses no auth/account/key requirement, local-only execution ('nothing is sent anywhere'), the return shape (summary line plus per-issue fail/warn/pass/info findings), and the scope boundary. It never explicitly states read-only/idempotent behavior, though 'check' and 'nothing is sent anywhere' strongly imply it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense paragraph that front-loads the purpose and the check taxonomy before moving to usage, guarantees, and exclusions. It is on the long side, but each clause adds routing or behavioral value, so there is little waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema and no annotations, the description explains the return format, the execution model, the scope limits, and when to reach for it. An agent has everything needed to call it correctly and interpret the results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter's schema already documents the string-or-array oneOf form with a per-line convention. The description body adds no further syntax, size limits, or encoding detail, so the schema does the heavy lifting — the baseline 3 for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (check) and resource (Unified Namespace topic paths) and enumerates the exact class of problems it detects (hierarchy depth, casing, whitespace, case-collisions, duplicates, empty levels, wildcards). It explicitly distinguishes itself from the sibling lint_sparkplug_topic, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit triggering contexts (reviewing a proposed namespace, an ISA-95 hierarchy, a broker topic dump, a tag export) plus timing guidance (before anyone builds on top of it). It also names the exclusion and the alternative: it does not validate Sparkplug grammar, use lint_sparkplug_topic instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lint_sparkplug_topicA

Validate one or more MQTT topic strings against the Sparkplug B topic grammar (Sparkplug 3.0). Free, no API key, no account: the grammar runs locally inside this server and nothing is sent anywhere. Call this whenever a topic that is meant to be Sparkplug appears in a config, a broker trace, a code review, or a user question -- it is faster and far more reliable than reasoning about the grammar from memory. It checks the spBv1.0 namespace level, the eight message types (NBIRTH/NDEATH/DBIRTH/DDEATH/NDATA/DDATA/NCMD/DCMD) plus STATE, node-vs-device level count, the legacy Sparkplug 2.2 STATE form, publish-side MQTT wildcards, empty levels, and identifier characters that break downstream consumers. It returns ordered findings (fail / warn / pass / info) with the parsed topic parts, not a yes/no. It does NOT connect to a broker, decode payloads, or check whether the device actually exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicsYesOne topic string, or an array of topic strings. A single string containing newlines is also accepted and split per line.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden and does so: it discloses the local-only execution model (no API key, nothing sent anywhere), the exact grammar areas checked, the return shape (ordered fail/warn/pass/info findings with parsed parts, not a boolean), and three things it explicitly does not do.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and cost model, then scope, then return shape, then exclusions; every sentence contributes. It runs slightly long and the message-type enumeration is dense, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description fully compensates by describing the return format, severity vocabulary, and negative scope. An agent has everything needed to decide to call it and to interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

One parameter with 100% schema description coverage; the schema already documents the string-or-array union and the newline-splitting behavior. The description only restates 'one or more MQTT topic strings', adding nothing the schema does not already say, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Validate ... MQTT topic strings against the Sparkplug B topic grammar') with version scope (Sparkplug 3.0). The scope is narrow enough that an agent can distinguish it from check_uns_namespace and run_readiness_diagnostic without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger list (topic appears in a config, broker trace, code review, or user question) and explicit non-goals (does not connect to a broker, decode payloads, or check device existence). It never routes to the sibling tools, so the alternative-selection clause is missing, but the when/when-not guidance is unusually clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_readiness_diagnosticA

Run the public dxpert.ai industrial AI-readiness diagnostic: a 16-answer self-reported intake in, a scored report out (ten axes 0-5, a maturity stage, the foundation gaps blocking the stated AI ambition, and a confidence value). Free and requires no API key or account, but unlike the two validators this one DOES call the dxpert.ai API over the network, so it needs connectivity and is rate limited. Call this when someone asks how ready a plant or site is for AI/analytics, what is blocking them, or where to start -- and you can supply honest answers to the intake fields. Ask the user for the values you do not have rather than guessing them; the verdict is only as good as the intake. The response carries a "scope" field which this tool passes through verbatim: it is a preliminary self-reported screening, not an audit, and should be reported to the user as such.

ParametersJSON Schema
NameRequiredDescriptionDefault
intakeYesThe 16-question readiness intake. All fields are required by the API; the enums below are the accepted values.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden, and it does: free, no API key or account, DOES call the dxpert.ai API, requires connectivity, and is rate limited. It also warns the verdict is only as good as the intake and that the 'scope' field must be reported as a preliminary self-reported screening, not an audit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with verb, resource, and the input/output pairing, and every sentence carries non-redundant information. It is dense and the sentences run long, which slightly taxes readability, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, the description covers connectivity, rate limits, auth (none), what comes back, and how to frame the result to the user. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the nested intake object is fully documented, so the baseline is 3. The description earns above baseline by telling the agent to ask the user for missing values rather than guess them and by warning that the result quality depends on honest intake answers, adding actionable semantics the schema cannot express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Precise verb+resource (runs the dxpert.ai industrial AI-readiness diagnostic), with the input stated (a 16-answer self-reported intake) and the output characterized (ten axes 0-5, maturity stage, foundation gaps, confidence). It also explicitly contrasts itself with 'the two validators,' letting an agent separate it from its siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete triggering conditions ('how ready a plant or site is for AI/analytics, what is blocking them, or where to start') plus a precondition (you can supply honest answers to the intake). It distinguishes itself from the validators by noting it calls the network while they do not, but does not name those alternatives explicitly, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.1.0
    • First observedcheck_uns_namespace
    • First observedlint_sparkplug_topic
    • First observedrun_readiness_diagnostic

TDQS

A4.4/5.0

Scored across 3 tools

Disambiguation4/5

The three tools target distinct capabilities, and the descriptions explicitly cross-reference each other (check_uns_namespace notes it does not validate Sparkplug grammar and points to lint_sparkplug_topic), which strongly reduces misselection. However, lint_sparkplug_topic and check_uns_namespace both operate on MQTT topic strings and could be confused at a glance by an agent skimming names.

Naming Consistency5/5

All three names follow a consistent snake_case verb_noun pattern: lint_sparkplug_topic, check_uns_namespace, run_readiness_diagnostic. The verbs differ (lint/check/run) but each reflects a genuinely different action, and no camelCase or stylistic mixing appears.

Tool Count4/5

Three tools is at the low edge of the well-scoped range but each represents a substantial, distinct capability rather than a thin wrapper. The set is minimal but defensible; the readiness diagnostic sits somewhat apart in domain from the two validators, making the set feel slightly narrow for a general 'tools' server.

Completeness3/5

Coverage is diagnostic-only: you can validate Sparkplug topics, audit UNS naming, and score readiness, but there is no way to normalize/fix namespaces, generate compliant topics, or decode payloads (explicitly excluded). For a toolkit scoped to UNS/Sparkplug diagnostics this is workable, but notable gaps remain around remediation and payload-level checks.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    This MCP server enables AI agents to read MQTT and Sparkplug B data via tools like list_topics, get_latest, and read_all, providing read-only access to latest sensor values.
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Industry 4.0 / IIoT AI agents for manufacturing: explain OEE losses per shift, triage machine alarms, find downtime root causes, prepare predictive-maintenance jobs and write shift reports from Unified Namespace (UNS), MQTT or historian data. Plus an industrial AI-readiness diagnostic and a vendor-neutral digital-transformation advisor. Works in Claude Code, Codex and any MCP client.
    1
    7
    279 npm
    MIT