dxpert UNS Tools: Sparkplug B & Unified Namespace Linter for IIoT
Official@dxpert/uns-tools
API 키, 계정, 환경 변수가 전혀 필요 없는 stdio MCP 서버입니다.
이것은 dxpert.ai/tools.html의 무료 도구 페이지에 해당하는 에이전트 네이티브 버전입니다. 자격 증명 없이도 모든 MCP 클라이언트가 Sparkplug B 토픽을 린트하고, Unified Namespace에서 조용히 부패시키는 규칙 위반을 확인하며, 공개 산업용 AI 준비도 진단을 실행할 수 있습니다.
도구는 진정으로 무료입니다. 평가판 횟수 제한도, 가입 장벽도, 먼저 발급받아야 할 키도 없습니다. 나중에 유료 기능(에이전트, Namespace Architect, 계정 인식 어드바이저리)을 원한다면, 그것은 별도의 @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-toolsCodex
[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) — 로컬, 오프라인
하나 이상의 MQTT 토픽 문자열을 Sparkplug B 토픽 문법(Sparkplug 3.0)에 대해 검증합니다. 단일 문자열, 줄바꿈으로 구분된 문자열 또는 배열을 허용합니다.
spBv1.0 네임스페이스 레벨, 8가지 메시지 유형(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개 답변의 자가 보고 인테이크가 입력되면, 점수 보고서가 출력됩니다(10개 축 0–5, 성숙도 단계, 명시된 AI 목표를 막는 기반 격차, 신뢰도 값).
무료이고 인증이 필요 없지만, 두 검증 도구와 달리 이 도구는 네트워크를 통해 POST /api/diagnostic을 호출하므로 연결이 필요하고 속도 제한이 있습니다. 요청에는 트래픽을 귀속시킬 수 있도록 X-Dxpert-Source: mcp-uns-tools가 포함되며, API 키나 Authorization 헤더는 절대 포함되지 않습니다.
응답의 scope 필드는 그대로 전달되어 결과 상단에 출력됩니다. 이것은 감사가 아닌 예비 자가 보고 스크리닝입니다. 사용자에게 그렇게 보고하세요.
모든 결과는 판정의 출처로 dxpert.ai를 명시합니다.
구성
설정해야 할 것은 없습니다. 선택적 변수 하나만 존재합니다:
변수 | 필수 | 용도 |
| 아니요 |
|
검증 로직의 출처
src/sparkplug-topic-lint.js와 src/uns-naming-check.js는 독립 패키지인 @dxpert/sparkplug-topic-lint와 @dxpert/uns-naming-check의 순수 로직을 그대로 복사한 것으로, 이 서버가 의존성 없이 완전히 오프라인으로 작동하도록 인라인되었습니다.
이 파일들은 해당 패키지들과 동기화되어 유지되며, 테스트 스위트는 두 원본 모두에 대해 결과 수준의 동등성을 검증합니다. 따라서 이 서버와 웹 도구는 동일한 입력에 대해 조용히 의견이 갈라질 수 없습니다.
테스트
node test/run.js테스트 스위트는 프레이밍된 stdio를 통해 실제 서버를 구동하고 진단 엔드포인트를 localhost에서 모의(mock)합니다. 프로덕션은 테스트에서 절대 호출되지 않습니다. 핸드셰이크, tools/list, 세 가지 도구 모두, 두 소스 패키지와의 동등성, 그리고 완전히 빈 환경에서 시작된 전체 세션을 다룹니다.
라이선스
MIT © 2026 DXP Technologies inc.
Available Tools
3 toolscheck_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.
| Name | Required | Description | Default |
|---|---|---|---|
| topics | Yes | The topic paths to check. An array of paths, or a single string with one path per line. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topics | Yes | One topic string, or an array of topic strings. A single string containing newlines is also accepted and split per line. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| intake | Yes | The 16-question readiness intake. All fields are required by the API; the enums below are the accepted values. |
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
v0.1.0- First observed
check_uns_namespace - First observed
lint_sparkplug_topic - First observed
run_readiness_diagnostic
TDQS
Scored across 3 tools
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.
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.
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.
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
Related MCP Connectors
Free, no-key, read-only MCP endpoint verification and diagnostics.
Free MCP tools: the only MCP linter, health checks, cost estimation, and trust evaluation.
Network, domain and website diagnostics for AI clients via MCP.
Check an A2A agent before you delegate, or an MCP server's measured conduct. Free, no key.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceThis 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.1MIT
- FlicenseNot gradedqualityCmaintenanceEnables users to validate MCP servers, skills, extensions, and packages for schema, security, functional, and semantic quality directly from their MCP client.-
- AlicenseAqualityAmaintenanceIndustry 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.17279 npmMIT
- FlicenseNot gradedqualityCmaintenanceEnables developers to explain error messages, validate and format JSON, generate regex patterns from descriptions, and summarize text via an LLM, all through MCP-connected clients.-