Cloud ALM MCP
Cloud ALM MCP
Esqueleto de Node.js y TypeScript para un servidor de Model Context Protocol de SAP Cloud ALM.
Este repositorio es actualmente mock-first. Puede instalarse, compilarse, probarse e iniciarse sin credenciales de SAP Cloud ALM, configuración de BTP Destination Service ni configuración de OAuth.
Arquitectura objetivo
Runtime: Node.js en SAP BTP Cloud Foundry.
Transporte MCP de producción: MCP Streamable HTTP mediante el SDK oficial de MCP TypeScript.
STR-158 usa Streamable HTTP sin estado para el POC al no configurar un generador de ID de sesión MCP.
Transporte local de respaldo: stdio, destinado únicamente al desarrollo local.
Futura vía de acceso a Cloud ALM: SAP BTP Destination Service.
Futuro modelo de autenticación: OAuth2 Client Credentials a través de un destino configurado.
La conectividad real con SAP Cloud ALM se excluye intencionalmente de STR-158.
Los requisitos de sesión y estado deben revisarse antes del uso en agentes de producción si los flujos de herramientas posteriores requieren estado de sesión MCP persistente. STR-158 no introduce intencionalmente un almacén de sesiones.
Related MCP server: Cubi MCP Playground
Desarrollo local
npm install
npm run build
npm test
npm startPor defecto, npm start ejecuta el modo mock a través de HTTP y expone:
Endpoint MCP:
POST /mcpEndpoint de salud:
GET /health
El endpoint MCP remoto es sin estado y solo POST. GET, DELETE y otros métodos no admitidos en /mcp devuelven 405 Method Not Allowed con Allow: POST; el SSE de GET y la terminación de sesión MCP no se implementan intencionalmente. Los cuerpos de solicitud JSON están limitados a 64kb.
Ejemplo:
curl http://localhost:3000/healthUsa .env.example como lista de marcadores de posición admitidos. No agregues secretos reales de Cloud ALM a archivos locales que se confirmen en git.
Despliegue del POC en SAP BTP Cloud Foundry
manifest.yml define una única aplicación de Cloud Foundry cloud-alm-mcp que usa nodejs_buildpack, command: npm start y una comprobación de salud HTTP en /health. El primer despliegue está bloqueado intencionalmente al modo mock seguro:
RUNTIME_MODE=mock
MCP_TRANSPORT=http
EXTERNAL_CALLS_ENABLED=false
READ_CAPABILITY_ENABLED=true
WRITE_CAPABILITY_ENABLED=falseNo se requieren credenciales de Cloud ALM, ajustes de OAuth, enlace XSUAA/IAS, enlace de Destination Service ni valores de destino reales para STR-162.
El staging de Cloud Foundry ejecuta npm install; el ciclo de vida postinstall del paquete ejecuta npm run build para que dist/src/index.js exista antes de npm start. TypeScript y los paquetes de tipos necesarios para la compilación son dependencias regulares, de modo que la instalación de producción estándar del buildpack de Node.js pueda compilar la aplicación sin incluir herramientas solo locales como vitest y tsx.
La aplicación sigue usando el PORT proporcionado por la plataforma; no fijes un puerto de producción. package.json solicita Node.js 22.x para un comportamiento determinista de staging/runtime en el primer despliegue. SAP BTP Cloud Foundry admite actualmente Node.js 22 a través de nodejs_buildpack; los operadores deben verificar igualmente la fundación objetivo exacta con cf buildpacks antes del despliegue.
package-lock.json sigue siendo el bloqueo de dependencias npm autoritativo. No se establece el campo packageManager porque Cloud Foundry usa npm para un package.json/package-lock.json raíz, y forzar una versión de npm solo es necesario si el npm predeterminado de la fundación objetivo resulta incompatible.
Validación local:
npm install
npm run build
npm test
npm start
curl http://localhost:3000/healthValores de BTP necesarios del operador:
CF API endpoint
BTP org
BTP space
route/domain decision, if not using the default routeFlujo de validación manual de 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>/healthDespués del despliegue, valida que /health devuelva status: ok, que POST /mcp funcione en modo mock, que GET /mcp devuelva 405 Method Not Allowed con Allow: POST, y que los registros contengan IDs de solicitud, método, ruta, estado y duración sin cuerpos de solicitud, encabezados de autorización, tokens ni secretos.
Configuración
Variables de entorno principales:
RUNTIME_MODE=mock|destinationMCP_TRANSPORT=http|stdioPORT=3000READ_CAPABILITY_ENABLED=true|falseWRITE_CAPABILITY_ENABLED=true|falseALLOWED_DESTINATIONS=cloud-alm-devEXTERNAL_CALLS_ENABLED=false|true
Los valores predeterminados locales son intencionalmente seguros: runtime mock, transporte HTTP, lectura habilitada, escritura deshabilitada y llamadas externas deshabilitadas.
El modo destination existe solo como marcador de posición en este esqueleto. Falla de forma cerrada hasta que la búsqueda de BTP Destination Service y el flujo de tokens OAuth se implementen en tareas posteriores.
Cliente de tareas mock
El modo mock usa datos deterministas de tareas y comentarios en memoria para el desarrollo local y las pruebas. Solo admite los campos actuales del contrato mock: id, title, status, priority de la tarea, y id, taskId, author, text, createdAt del comentario.
El cliente mock devuelve tareas conocidas, rechaza IDs de tarea desconocidos, agrega un comentario a la vez con IDs deterministas y actualiza solo los campos de tareas mock explícitamente permitidos. No se afirma que estos campos sean campos oficiales de payload de SAP CALM_TKM. Los endpoints reales de Cloud ALM, esquemas de payload, ámbitos, nombres de paginación y semántica de actualización siguen sin verificarse y se difieren al trabajo de integración real.
Límite de seguridad
El Policy Guard se aplica mediante código antes de las llamadas al cliente de Cloud ALM. Valida:
solo nombres de operación permitidos,
separación de capacidades de lectura/escritura,
rechazo de operaciones de eliminación,
rechazo de operaciones masivas,
rechazo de operaciones desconocidas,
ninguna selección de destino o cliente proporcionada por el agente,
comportamiento de fallo cerrado para configuración ambigua.
Esto no es deliberadamente una aplicación solo mediante prompts. El aislamiento del cliente y el registro de auditoría duradero se dejan como trabajo de arquitectura futuro, con los límites de módulos ya presentes.
Los eventos de auditoría ya reservan campos opcionales para trazabilidad futura: actor, contexto de cliente, tipo/ID de recurso e ID de correlación. El esqueleto no inventa valores reales de actor o cliente y no registra payloads de solicitud, tokens, encabezados de autorización, IDs de cliente, secretos de cliente ni cuerpos de respuesta sensibles.
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