Cloud ALM MCP
Cloud ALM MCP
Каркас на Node.js и TypeScript для сервера Model Context Protocol для SAP Cloud ALM.
Этот репозиторий в настоящее время ориентирован на mock-режим. Он может устанавливаться, собираться, тестироваться и запускаться без учетных данных SAP Cloud ALM, конфигурации BTP Destination Service или настройки OAuth.
Целевая архитектура
Среда выполнения: Node.js на SAP BTP Cloud Foundry.
Продакшн-транспорт MCP: MCP Streamable HTTP через официальный MCP TypeScript SDK.
STR-158 использует stateless Streamable HTTP для POC, не задавая генератор ID сессии MCP.
Локальный запасной транспорт: stdio, предназначен только для локальной разработки.
Будущий путь доступа к Cloud ALM: SAP BTP Destination Service.
Будущая модель аутентификации: OAuth2 Client Credentials через настроенный destination.
Реальное подключение к SAP Cloud ALM намеренно не включено в STR-158.
Требования к сессии и состоянию должны быть пересмотрены перед использованием в продакшн-агентах, если последующие потоки инструментов потребуют постоянного состояния сессии MCP. STR-158 намеренно не вводит хранилище сессий.
Related MCP server: Cubi MCP Playground
Локальная разработка
npm install
npm run build
npm test
npm startПо умолчанию npm start запускает mock-режим через HTTP и предоставляет:
конечную точку MCP:
POST /mcpконечную точку health:
GET /health
Удаленная конечная точка MCP является stateless и поддерживает только POST. GET, DELETE и другие неподдерживаемые методы на /mcp возвращают 405 Method Not Allowed с Allow: POST; GET SSE и завершение сессии MCP намеренно не реализованы. Тела JSON-запросов ограничены 64kb.
Пример:
curl http://localhost:3000/healthИспользуйте .env.example как список поддерживаемых плейсхолдеров. Не добавляйте реальные секреты Cloud ALM в локальные файлы, фиксируемые в git.
Развертывание POC на SAP BTP Cloud Foundry
manifest.yml определяет одно приложение Cloud Foundry cloud-alm-mcp с использованием nodejs_buildpack, command: npm start и HTTP health check на /health. Первое развертывание намеренно ограничено безопасным mock-режимом:
RUNTIME_MODE=mock
MCP_TRANSPORT=http
EXTERNAL_CALLS_ENABLED=false
READ_CAPABILITY_ENABLED=true
WRITE_CAPABILITY_ENABLED=falseДля STR-162 не требуются учетные данные Cloud ALM, настройки OAuth, привязка XSUAA/IAS, привязка Destination Service или реальные значения destination.
Staging в Cloud Foundry выполняет npm install; жизненный цикл пакета postinstall запускает npm run build, чтобы dist/src/index.js существовал до npm start. TypeScript и пакеты типов, необходимые для компиляции, являются обычными зависимостями, чтобы стандартная продакшн-установка Node.js buildpack могла собрать приложение без локальных инструментов, таких как vitest и tsx.
Приложение продолжает использовать предоставляемый платформой PORT; не задавайте продакшн-порт жестко. package.json запрашивает Node.js 22.x для детерминированного поведения staging/runtime при первом развертывании. SAP BTP Cloud Foundry в настоящее время поддерживает Node.js 22 через nodejs_buildpack; операторы должны все же проверить точную целевую платформу с помощью cf buildpacks перед развертыванием.
package-lock.json остается авторитетной блокировкой зависимостей npm. Поле packageManager не задано, потому что Cloud Foundry использует npm для корневого package.json/package-lock.json, и принудительное указание версии npm требуется только в том случае, если стандартный npm целевой платформы окажется несовместимым.
Локальная проверка:
npm install
npm run build
npm test
npm start
curl http://localhost:3000/healthЗначения BTP, необходимые от оператора:
CF API endpoint
BTP org
BTP space
route/domain decision, if not using the default routeРучной процесс проверки BTP:
cf login -a <api-endpoint>
cf target -o <org> -s <space>
cf buildpacks
cf push
cf app cloud-alm-mcp
cf logs cloud-alm-mcp --recent
curl https://<route>/healthПосле развертывания проверьте, что /health возвращает status: ok, POST /mcp работает в mock-режиме, GET /mcp возвращает 405 Method Not Allowed с Allow: POST, а логи содержат ID запросов, метод, путь, статус и длительность без тел запросов, заголовков авторизации, токенов или секретов.
Конфигурация
Основные переменные окружения:
RUNTIME_MODE=mock|destinationMCP_TRANSPORT=http|stdioPORT=3000READ_CAPABILITY_ENABLED=true|falseWRITE_CAPABILITY_ENABLED=true|falseALLOWED_DESTINATIONS=cloud-alm-devEXTERNAL_CALLS_ENABLED=false|true
Локальные значения по умолчанию намеренно безопасны: mock-режим, HTTP-транспорт, чтение включено, запись отключена, внешние вызовы отключены.
Режим destination существует только как плейсхолдер в этом каркасе. Он завершается с ошибкой (fail closed), пока поиск BTP Destination Service и поток OAuth-токенов не будут реализованы в последующих задачах.
Mock Task Client
Mock-режим использует детерминированные данные задач и комментариев в памяти для локальной разработки и тестов. Он поддерживает только текущие поля mock-контракта: id, title, status, priority задачи и id, taskId, author, text, createdAt комментария.
Mock-клиент возвращает известные задачи, отклоняет неизвестные ID задач, добавляет по одному комментарию за раз с детерминированными ID и обновляет только явно разрешенные поля mock-задач. Эти поля не заявляются как официальные поля полезной нагрузки SAP CALM_TKM. Реальные конечные точки Cloud ALM, схемы полезных нагрузок, области, имена пагинации и семантика обновления остаются непроверенными и откладываются до реальной интеграционной работы.
Граница безопасности
Policy Guard применяется на уровне кода перед вызовами клиента Cloud ALM. Он проверяет:
только разрешенные имена операций,
разделение возможностей чтения/записи,
отклонение операций удаления,
отклонение массовых операций,
отклонение неизвестных операций,
отсутствие выбора destination или клиента, предоставленного агентом,
поведение fail-closed при неоднозначной конфигурации.
Это намеренно не только ограничение на уровне промптов. Изоляция клиентов и долговечное аудиторское логирование оставлены как будущая архитектурная работа, при этом модульные границы уже присутствуют.
События аудита уже резервируют необязательные поля для будущей трассируемости: субъект, контекст клиента, тип/ID ресурса и корреляционный ID. Каркас не выдумывает реальные значения субъекта или клиента и не логирует полезные нагрузки запросов, токены, заголовки авторизации, ID клиентов, секреты клиентов или чувствительные тела ответов.
This server cannot be deployed
Maintenance
Related MCP Connectors
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
AI-native mock API server with MCP. Create REST/SOAP mocks from Claude, Cursor, or Windsurf.
Guarded MCP server for agent-readable business truth, provenance, readiness, and discovery.
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
Related MCP Servers
- AlicenseAqualityAmaintenanceA read-only MCP server that bridges AI assistants to SAP Cloud ALM, exposing read APIs through four intent-based tools. It runs locally over stdio or remotely over Streamable HTTP, and can be deployed to SAP BTP Cloud Foundry.43MIT
- FlicenseNot gradedqualityDmaintenanceEnables local prototyping of Cubi integrations with a mock HTTP server, MCP tools for lifecycle management, and a browser UI for workflow testing without real sandbox credentials.1-
- AlicenseNot gradedqualityAmaintenanceContract-driven service virtualization and synthetic test-data management server that enables simulating APIs from OpenAPI contracts through MCP tools.15 PyPIMIT
- AlicenseNot gradedqualityCmaintenanceEnables testing and development against a mock S/4HANA Business Partner API, exposing customer and customer address entities through the MCP protocol.Apache 2.0