mcpField
T
topiclint

topiclint

ローカル
github.com/CloudCorpRecords開発ツール01 週間前に更新

topiclint について

topiclintは、Sparkplug Bの文法に沿ったMQTTトピックの検査と、Unified Namespaceパスの命名一貫性の確認を行うローカルCLI兼stdio MCPサーバーです。ブローカーに接続せず、構文や命名上の問題を報告します。

主な機能

  1. 01Sparkplug Bトピックの文法検査
  2. 02UNSパスの一貫性確認
  3. 03重複パスと空の階層を検出
  4. 04ワイルドカードと空白を指摘
  5. 05命名規則と階層深度を報告

活用シーン

  1. 01ブローカーへの公開前にトピックを検証
  2. 02名前空間設計時にUNSパスを確認
  3. 03大文字小文字や階層深度の不統一を発見

MCP 対応

MCPクライアントに2つのツールを公開します。一方はSparkplugトピックを解析・検査し、もう一方はパス群のUNS命名上の問題を確認します。どちらもネットワークを使わずローカルで動作します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"cloudcorprecords-topiclint": {
"command": "npx",
"args": [
"-y",
"@reneturcios/topiclint"
]
}
}
}
起動コマンドnpx -y @reneturcios/topiclint

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@reneturcios/topiclint0.1.0
ocighcr.io/cloudcorprecords/topiclint:0.1.0

ツール

2

掲載時のツール一覧 · 1 週間前に更新

パラメーター型必須説明
topicsanyはいSparkplug B のトピック文法に照らして検証する、または UNS の命名規則との一貫性を確認する MQTT トピック文字列。

詳細

topiclint

topiclint は、MQTT トピック文字列がブローカーに届く前、または名前空間設計のレビューにかけられる前に検査します。個々のトピックを Sparkplug B のトピック文法(Sparkplug 3.0)に照らしてリントし、Unified Namespace(UNS)のトピックパス一式を対象に、命名の一貫性をチェックします。大文字・小文字の混在、階層の深さの不揃い、よく似た兄弟ノードなど、名前空間を閲覧、クエリ、引き継ぎしにくくするズレを検出します。1つのバイナリで、コマンドラインインターフェースと stdio MCP サーバーを提供します。

すべてローカルで実行され、オフラインで使用できます。ブローカーへの接続、ネットワークアクセス、API キー、アカウントは不要です。リントで検証するのは文法のみであり、ペイロードのデコードやデバイスの存在確認は行いません。命名チェックで判定するのは一貫性のみであり、プラントの構成を把握したり、名前空間を設計したりすることはありません。

インストール

npx @reneturcios/topiclint lint spBv1.0/Plant1/NBIRTH/Edge1

または、コンテナーイメージを実行します。

docker run -i ghcr.io/cloudcorprecords/topiclint

コンテナーはデフォルトで MCP サーバーを起動します(下記参照)。CLI として使用するには、CLI 引数を渡してください。

CLI

topiclint lint spBv1.0/Plant1/NBIRTH/Edge1 spBv1.0/Plant1/DDATA/Edge1/Dev1
topiclint check enterprise/site1/line1 enterprise/site1/line2

topiclint --version

各トピックまたはパスは1つの引数として指定します。1つの引数に、改行区切りのリストを指定することもできます。どちらのコマンドも JSON レポートを出力します。検出結果が多数含まれていても、実行は成功です。検出結果は出力であり、エラーではありません。終了コード:成功時は 0、実行時エラーは 1、使用方法のエラーは 2 です。

Sparkplug リントのチェック内容

各トピックについて、spBv1.0 名前空間レベル、メッセージタイプ(NBIRTH、NDEATH、DBIRTH、DDEATH、NDATA、DDATA、NCMD、DCMD、および STATE のいずれか)、レベル数(ノードメッセージと STATE は正確に4レベル、デバイスメッセージは正確に5レベル)、レガシーな Sparkplug 2.2 の STATE 形式(名前空間を含まない STATE/<host_id>。独立した失敗として報告)、パブリッシュ側の MQTT ワイルドカード(+ / #)、空のレベル、グループ、ノード、デバイスの各レベルにおける識別子の文字をチェックします。空白文字は失敗となり、[A-Za-z0-9_-] 以外の文字は警告となります。どちらも、トピックを分割、引用、またはマッピングする下流のコンシューマーを妨げるためです。

各結果には、解析されたトピックの各要素(名前空間、グループ ID、メッセージタイプ、エッジノード ID、デバイス ID)と、fail / warn / pass / info のレベルが付いた順序付きの検出結果が含まれます。

UNS チェックの内容

パス一式を対象に、パスの重複、空のレベル、セグメント内の空白文字、不要な MQTT ワイルドカードを検出し、いずれも失敗とします。同じ親の下にある、名前の大文字・小文字だけが異なる兄弟ノードは、大文字・小文字の衝突として失敗になります。1つのノードに見えても、実際には2つあるためです。階層の深さの不一致と、大文字・小文字のスタイル(lower、upper、snake_case、kebab-case、PascalCase、camelCase)の混在は警告となります。レポートの冒頭には1行の要約が表示され、その後に問題ごとの検出結果が続きます。

MCP サーバー

1つのバイナリで両方の機能を提供します。mcp サブコマンドで stdio MCP サーバーを起動します。

npx -y @reneturcios/topiclint mcp

MCP クライアントの設定:

{
  "mcpServers": {
    "topiclint": {
      "command": "npx",
      "args": ["-y", "@reneturcios/topiclint", "mcp"]
    }
  }
}
ツール

どちらのツールも、単一の topics 引数を受け取ります。引数は、単一の文字列、改行区切りの文字列、またはトピック文字列の配列です。

ツール入力返される内容
lint_sparkplug_topictopics(文字列または文字列の配列)トピックごとに解析された各要素と順序付きの検出結果。成功数・失敗数と要約も含まれます。
check_uns_namespacetopics(文字列または文字列の配列)パス一式の要約行と、問題ごとの検出結果。

開発

npm install
npm run build   # tsc -> dist/
npm test        # node test runner over test/*.test.ts, no network
npm run dev     # run the CLI from source via tsx

ライセンス

MIT — LICENSE を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。