Skip to main content
Glama

Nominal MCP Server

Nominal ハードウェアテストプラットフォーム向けの MCP サーバーです。Claude Code、Cursor、その他の MCP クライアントから、エディタを離れることなく、テストデータの取得、テレメトリチャネルの調査、分析の実行、結果の書き戻しができます。

MCP 2026-07-28(現行リビジョン)を実装し、2025-11-25、2025-06-18、2025-03-26、2024-11-05 との後方互換性を備えています。

10 tools  ·  467 API operations reachable  ·  2,992 tokens of tools/list  ·  OAuth 2.1

クイックスタート

公開インスタンスはまだ稼働していません。 約2分で自分専用のインスタンスをデプロイできます。Cloudflare の無料プランで快適に動作します。

デプロイする

git clone https://github.com/elirapport1/nominal-mcp && cd nominal-mcp && npm ci
npx wrangler login
npx wrangler kv namespace create OAUTH_KV      # paste the id into wrangler.toml
openssl rand -base64 32 | npx wrangler secret put TOKEN_SECRET
openssl rand -base64 32 | npx wrangler secret put HANDLE_SECRET
npx wrangler deploy

接続する

claude mcp add --transport http nominal https://<your-worker>.workers.dev/mcp

ブラウザウィンドウが開きます。自分の Nominal API キー(Nominal アプリ → Settings → API keys)を貼り付けます。キーはこのサーバーにスコープされたアクセストークンに暗号化され、平文で保存されることはありません。Nominal へのすべてのリクエストはあなたの認証情報で行われるため、この接続があなたのアカウントで既に確認できる以上の情報を参照することは決してありません。

または stdio で実行する

NOMINAL_API_KEY=<key> \
NOMINAL_MCP_URL=https://<your-worker>.workers.dev/mcp \
npx github:elirapport1/nominal-mcp

(リポジトリから直接実行します。npm には公開されていないため、素の npx nominal-mcp は解決されません。)

お使いの Nominal が GovCloud デプロイメントでない場合は、NOMINAL_BASE_URL も設定してください。商用は https://api.nominal.io/api で、*.nominal.io 配下のプライベートクラウドおよびオンプレミスのホストが受け付けられます。

MCP 認証仕様に従い、stdio サーバーは OAuth フローを実行する代わりに環境から認証情報を読み取ります。ディスクに何も書き込まれません。


Related MCP server: Apollo Universal MCP Server

依頼できること

「エンジン A の最後のホットファイア試験を探して、燃焼室圧力が 900 psi を超えたかどうか 教えてください。」

「run 14 と run 15 のバルブ指令遅延を比較してください。」

「このランで T+4.2s のイベントにフラグを立て、anomaly というラベルを付けてください。」


ツール

ツール

説明

nominal_search

アセット、ラン、データセット、ワークブック、チェックリスト、イベント、ビデオを検索

nominal_get

nominal:// URI、RID、またはデータセット UUID を完全な詳細に解決

nominal_list_runs

アセットのランを新しい順に、時間ウィンドウ付きで取得

nominal_describe_channels

ラン/データセット上のチャネルを、単位、型、タグ付きで取得

nominal_query_channels

最大10チャネルの統計情報と間引かれたトレース

nominal_compute

チャネル上の1つの集計をサーバー側で計算

nominal_export

フル解像度データ用のプリサインド URL

nominal_write

イベント、コメント、またはランメタデータを作成

nominal_api_search

467 の API オペレーションをキーワードで検索

nominal_api_call

実際のシグネチャに対して検証して1つ実行

さらに、nominal:// 配下のリソースと、4つのワークフロープロンプト(investigate_anomaly、compare_runs、summarize_run、preflight_check)があります。


知っておくべき3つの設計判断

467 のオペレーション、10 のツール。 Nominal の API には 57 のサービスにわたる 467 のエンドポイントがあります。これらをツールスキーマとして公開すると、何かを入力する前に tools/list だけで約 163,000 トークン を消費します。代わりに nominal_api_search がオペレーションのディスクリプタを返し、nominal_api_call がそれらを実行するため、実際に調べたオペレーションごとに約 120 トークンしか支払いません。tools/list は 2,992 トークンに固定され、公開キャッシュが可能です。

どのツールもデータセットを返しません。 1回のランでギガバイト規模の時系列になることがあります。nominal_query_channels は統計情報に加え、最大200バケットに間引かれた最小/最大/平均トレースと、署名付きハンドルを返します。バルクデータはプリサインド URL を通じて外部に渡り、コンテキストウィンドウに入ることはありません。

あなたの認証情報であり、私たちのものではありません。 サービスアカウントは存在しません。OAuth フローはあなたの Nominal API キーを、暗号化され、オーディエンスにバインドされ、1時間有効なアクセストークンに結び付けます。強制レイヤーは Nominal 自身の認可のみです。MCP サーバーがアクセスを拡大することは決してなく、並列の権限モデルを実装することもありません。


ドキュメント

  • SPEC.md — 実装仕様: プロトコル決定、ツール設計、認証モデル、制限、脅威モデル、そして意図的に省いたもの

  • docs/SPEC-original.md — 記録として保存されている当初の設計概要。SPEC.md §0 で、測定によってどこが変わったかを説明しています


開発

npm ci
npm run typecheck
npm test              # 115 unit + conformance tests
npm run budget        # fails if tools/list exceeds 3,000 tokens
npm run test:fuzz     # adversarial suite
npm run dev           # wrangler dev

テスト

レイヤー

カバー内容

test/unit/

暗号、時代検出、クランプ、間引き、ハンドル、カタログポリシー

test/conformance/protocol.test.ts

このサーバーが担う MCP の MUST ごとに1つのテスト

test/conformance/auth.test.ts

RFC 9728/8414/8707/9207/7636、PKCE、DCR、トークン偽造

test/fuzz/

6つのジェネレータ、7つの不変条件、シード付きで再現可能

検証の境界: プロトコル、認証、制限、カタログポリシーの各レイヤーは完全にカバーされています。tier-1 ツールの Nominal 側のリクエストエンコーディングは、生成された nominal-api Conjure クライアントから導出され、実稼働中の Nominal デプロイメントではなくスタブに対してテストされています。SPEC.md §9.3 を参照してください。キーをお持ちなら、1つのコマンドでそのギャップを埋められます。

ファザーは20分ごとに実稼働デプロイメントに対して実行されます(.github/workflows/fuzz.yml)。ジェネレータは、JSON-RPC 構造、プロトコル/時代マトリクス、ツール引数、カタログオペレーション ID、認証偽造、プロンプトインジェクション/SSRF ペイロードをカバーします。不変条件: 5xx が決して発生しない、常に有効な JSON-RPC である、秘密やスタックトレースを決して反映しない、resultType がモダンな場合にのみ存在する、レイテンシとサイズが制限内である、内部オペレーションが決して実行されない。失敗した場合は、正確なリプレイ用のシード付きで issue が作成されます。

自分でデプロイする

npx wrangler kv namespace create OAUTH_KV     # put the id in wrangler.toml
npx wrangler secret put TOKEN_SECRET          # AES-GCM key material
npx wrangler secret put HANDLE_SECRET         # HMAC key for result handles
npx wrangler deploy

CI デプロイの場合は、CLOUDFLARE_API_TOKEN と CLOUDFLARE_ACCOUNT_ID のシークレットと、DEPLOY_URL リポジトリ変数を設定してください。


キャパシティ

スケールにとって重要な設計特性: ツール呼び出しはストレージに書き込みません。

アクセストークンは、セッションストアへのポインタではなく、自己完結型の暗号化エンベロープです。そのため、検証は復号といくつかの比較だけです。ホットパスで KV 読み取りは発生しません。レート制限には Cloudflare のエッジバインディングを使用しており、これも何も書き込みません。KV への書き込みが発生するのは OAuth 認可時のみで、ユーザー1人につきログインごとに約3回、その後はゼロです。

つまり、リクエスト量はストレージクォータではなく Workers のリクエスト制限によって決まり、デプロイメントを利用できる人数は、どれだけ頻繁に使うかではなく、1日あたりの新規ログイン数によって決まります。

最初の実装ではそうではありませんでした。レートリミッターは KV 内でリクエストをカウントしており(リクエストごとに1回の読み取りと1回の書き込み)、Cloudflare の無料プランでは1日約1000リクエストでサーバーが停止していたでしょう。現在のプランの制限を確認してください。ただし、大まかな形は次のとおりです。既存ユーザーによる大量使用はほぼ無料で、ストレージに触れるのはオンボーディングだけです。

/health は、どのレートリミッターが稼働しているか(binding と isolate-fallback)を報告し、デプロイメントが静かにフォールバックした場合、デプロイスモークテストは失敗します。


エンドポイント

パス

POST /mcp

MCP エンドポイント(Streamable HTTP)

GET /.well-known/oauth-protected-resource

RFC 9728

GET /.well-known/oauth-authorization-server

RFC 8414

GET|POST /authorize, POST /token, /register, /revoke

OAuth 2.1

GET /health

死活監視


ライセンス

MIT

Related MCP Connectors

Related MCP Servers