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

快速开始

目前还没有公共实例在运行。 大约两分钟即可部署你自己的实例—— 它在 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 应用 → 设置 → API 密钥)。 该密钥会被加密成一个限定于此服务器的访问令牌,并且永远不会以明文存储。 对 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。”

“比较第 14 次和第 15 次运行之间的阀门指令延迟。”

“在此次运行的 T+4.2s 处标记一个事件,并将其标注为 anomaly。”


工具

Tool

功能

nominal_search

搜索资产、运行、数据集、工作簿、检查清单、事件、视频

nominal_get

将 nominal:// URI、RID 或数据集 UUID 解析为完整详情

nominal_list_runs

按时间窗口列出某个资产的运行,最新的在前

nominal_describe_channels

运行/数据集上的通道,包含单位、类型、标签

nominal_query_channels

最多 10 个通道的统计信息 + 抽稀后的轨迹

nominal_compute

对某个通道计算一个聚合值,在服务端完成

nominal_export

全分辨率数据的预签名 URL

nominal_write

创建事件、评论或运行元数据

nominal_api_search

按关键字查找 467 个 API 操作中的任意一个

nominal_api_call

执行其中一个操作,并对照其真实签名进行验证

此外还有 nominal:// 下的资源,以及四个工作流提示词(investigate_anomaly、compare_runs、summarize_run、preflight_check)。


三个值得了解的设计决策

467 个操作,10 个工具。 Nominal 的 API 在 57 个服务中拥有 467 个端点。如果将它们作为工具模式暴露出来,在你输入任何内容之前,tools/list 就会消耗大约 163,000 个 token。相反,nominal_api_search 返回操作描述符,nominal_api_call 执行它们,因此你每实际查找一个操作只需支付约 120 个 token。tools/list 保持固定在 2,992 个 token,并且可以公开缓存。

没有任何工具会返回数据集。 单次运行可能包含数 GB 的时间序列。nominal_query_channels 返回统计信息,以及一条抽稀为最多 200 个桶的最小/最大/均值轨迹,外加一个签名句柄。批量数据通过预签名 URL 传出,绝不会进入上下文窗口。

你的凭据,而不是我们的。 没有服务账户。OAuth 流程将你的 Nominal API 密钥绑定到一个加密的、绑定受众的、一小时内有效的访问令牌中。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

测试

Layer

覆盖内容

test/unit/

加密、时代检测、钳位、抽稀、句柄、目录策略

test/conformance/protocol.test.ts

该服务器拥有的每个 MCP MUST 对应一个测试

test/conformance/auth.test.ts

RFC 9728/8414/8707/9207/7636、PKCE、DCR、令牌伪造

test/fuzz/

六个生成器、七个不变量、可设定种子且可重放

验证边界: 协议、认证、限制和目录策略层已完全覆盖。tier-1 工具的 Nominal 侧请求编码是从生成的 nominal-api Conjure 客户端派生而来,并针对桩(stub)进行了测试,而不是针对真实的 Nominal 部署——参见 SPEC.md §9.3。如果你有密钥,一条命令即可弥补这一差距。

模糊测试器每 20 分钟针对真实部署运行一次(.github/workflows/fuzz.yml)。生成器覆盖 JSON-RPC 结构、协议/时代矩阵、工具参数、目录操作 ID、认证伪造以及提示注入/SSRF 载荷。不变量:绝不出现 5xx,始终是有效的 JSON-RPC,绝不反射秘密或堆栈跟踪,resultType 仅在现代协议中存在,延迟和大小有界,且任何内部操作都不会执行。失败时会使用种子提交一个问题,以便精确重放。

部署你自己的

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 授权期间:每个用户每次登录大约三次,此后不再有。

这意味着请求量受你的 Workers 请求限制约束,而不是存储配额;一个部署可供使用的人数受每日新增登录数约束,而不是受使用强度约束。

第一个实现并非如此。速率限制器在 KV 中计数请求——每个请求一次读取和一次写入——在 Cloudflare 的免费套餐上,这会导致服务器在每天大约一千个请求后停止。请查看你套餐的当前限制,但大致情况是:现有用户的高强度使用几乎免费,只有新用户接入才会触及存储。

/health 会报告当前生效的是哪个速率限制器(binding 还是 isolate-fallback),如果部署静默回退,部署冒烟测试将失败。


端点

Path

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