Skip to main content
Glama

Nominal MCP Server

Сервер MCP для аппаратной тестовой платформы Nominal. Получайте данные испытаний, просматривайте телеметрические каналы, запускайте анализ и записывайте результаты обратно — из 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

Откроется окно браузера. Вставьте свой собственный API-ключ Nominal (приложение 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, а хосты private-cloud и on-prem под *.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

Presigned URL для данных полного разрешения

nominal_write

Создание событий, комментариев или метаданных прогона

nominal_api_search

Поиск любой из 467 операций API по ключевому слову

nominal_api_call

Выполнение одной операции с проверкой по её реальной сигнатуре

Плюс ресурсы в nominal:// и четыре промпта рабочих процессов (investigate_anomaly, compare_runs, summarize_run, preflight_check).


Три проектных решения, о которых стоит знать

467 операций, 10 инструментов. API Nominal насчитывает 467 эндпоинтов в 57 сервисах. Если бы они были представлены как схемы инструментов, это стоило бы примерно 163 000 токенов в tools/list ещё до того, как вы что-то ввели. Вместо этого nominal_api_search возвращает дескрипторы операций, а nominal_api_call выполняет их, так что вы платите ~120 токенов за каждую операцию, которую действительно ищете. tools/list остаётся фиксированным на 2 992 токенах и публично кэшируется.

Ни один инструмент никогда не возвращает набор данных. Один прогон может содержать гигабайты временных рядов. nominal_query_channels возвращает статистику плюс трейс min/max/mean, децимированный максимум в 200 корзин, и подписанный дескриптор. Массовые данные передаются через presigned URL, который никогда не попадает в контекстное окно.

Ваши учётные данные, не наши. Здесь нет сервисного аккаунта. Поток OAuth связывает ваш API-ключ Nominal с зашифрованным, ограниченным аудиторией токеном доступа сроком на один час. Собственная авторизация 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, за который отвечает этот сервер

test/conformance/auth.test.ts

RFC 9728/8414/8707/9207/7636, PKCE, DCR, подделка токенов

test/fuzz/

шесть генераторов, семь инвариантов, с сидом и воспроизводимые

Граница верификации: уровни протокола, аутентификации, лимитов и политики каталога полностью покрыты. Кодирование запросов на стороне Nominal для инструментов tier-1 было получено из сгенерированного Conjure-клиента nominal-api и протестировано против заглушки, а не против живого развёртывания Nominal — см. SPEC.md §9.3. Если у вас есть ключ, одна команда закрывает этот пробел.

Фаззер запускается каждые 20 минут против живого развёртывания (.github/workflows/fuzz.yml). Генераторы покрывают структуру JSON-RPC, матрицу протокол/эра, аргументы инструментов, идентификаторы операций каталога, подделку аутентификации и payload-ы prompt-injection/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 на горячем пути. Ограничение скорости использует edge-привязку Cloudflare, которая тоже ничего не пишет. Единственные записи в KV происходят во время авторизации OAuth: примерно три на пользователя при каждом входе и ни одной после.

Это означает, что объём запросов ограничен лимитом запросов Workers, а не квотой хранилища, а число людей, которые могут использовать развёртывание, ограничено новыми входами в день, а не интенсивностью их использования.

В первой реализации это было не так. Ограничитель скорости подсчитывал запросы в KV — одно чтение и одна запись на запрос — что на бесплатном тарифе Cloudflare остановило бы сервер примерно после тысячи запросов в день. Проверьте текущие лимиты вашего тарифа, но суть такова: интенсивное использование существующим пользователем почти бесплатно, и только онбординг касается хранилища.

/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