Skip to main content
Glama
facusada

sap-btp-destination-mcp

by facusada

SAP BTP Destination MCP

App en Python para consumir un destination SAP BTP con OAuth2ClientCredentials, exponer un endpoint HTTP y publicar tools MCP sobre FastMCP.

Que hace

  • Pide un access token al Token Service URL.

  • Lee un destination usando GET /destination-configuration/v1/destinations/<name>.

  • Expone endpoints REST para healthcheck y prueba del destination.

  • Expone las mismas operaciones como tools MCP en /mcp.

Related MCP server: odata-mcp-proxy

Variables de entorno

Modo manual, tomando los datos del destination que pasaste:

SAP_DESTINATION_NAME=mcp-destination
SAP_DESTINATION_SERVICE_URL=https://destination-configuration.cfapps.us10.hana.ondemand.com
SAP_TOKEN_URL=https://mcp-test.authentication.us10.hana.ondemand.com/oauth/token
SAP_CLIENT_ID=sb-clone6ab3984cf18e4ae991b5b02eab972d9b!b646663|destination-xsappname!b62
SAP_CLIENT_SECRET=<tu-secret>

Podés copiarlas a un .env.

Credenciales correctas para Destination Service

Para consumir el Destination Service de forma estándar en SAP BTP:

  • clientid, clientsecret y uri salen del service key del Destination Service.

  • url sale del service key del XSUAA.

Las credenciales de XSUAA por sí solas pueden emitir token, pero no necesariamente tienen autorización para llamar al Destination Service. Si pasa eso, SAP responde 403 Forbidden.

La app ahora soporta estos formatos además del .env manual:

  • VCAP_SERVICES

  • SAP_DESTINATION_SERVICE_KEY con el JSON del service key del Destination Service

  • SAP_XSUAA_CREDENTIALS con el JSON del service key del XSUAA

Ejemplo:

export SAP_DESTINATION_SERVICE_KEY='{"clientid":"...","clientsecret":"...","uri":"https://destination-configuration.cfapps.us10.hana.ondemand.com"}'
export SAP_XSUAA_CREDENTIALS='{"url":"https://mcp-test.authentication.us10.hana.ondemand.com"}'

Ejecutar local

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
uvicorn app.main:app --reload

Endpoints

  • GET /health

  • GET /destination/{destination_name}

  • GET /destination/{destination_name}/call?path=destination-configuration/v1/subaccountDestinations

  • MCP endpoint: GET/POST /mcp

Deploy a Cloud Foundry

cf push
cf set-env sap-btp-mcp-python SAP_DESTINATION_SERVICE_URL https://destination-configuration.cfapps.us10.hana.ondemand.com
cf set-env sap-btp-mcp-python SAP_TOKEN_URL https://mcp-test.authentication.us10.hana.ondemand.com/oauth/token
cf set-env sap-btp-mcp-python SAP_CLIENT_ID 'sb-clone6ab3984cf18e4ae991b5b02eab972d9b!b646663|destination-xsappname!b62'
cf set-env sap-btp-mcp-python SAP_CLIENT_SECRET '<tu-secret>'
cf restart sap-btp-mcp-python

Si la app está bindeada a destination y xsuaa, también puede resolver credenciales automáticamente desde VCAP_SERVICES.

Deploy estilo tutorial (recomendado)

Este flujo replica la idea del video de deploy en BTP pero usando tu app actual en Python.

  1. Logueate y selecciona org/space:

cf login
cf target -o "<tu-org>" -s "<tu-space>"
  1. Crea servicios (si no existen):

cf create-service destination lite mcp-destination
cf create-service xsuaa application mcp-xsuaa -c xs-security.json
  1. Prepara variables de despliegue:

cp vars.btp.example.yml vars.btp.yml
  1. Deploy con binding automatico a servicios:

./scripts/deploy_btp.sh
  1. Verifica que la app quedo arriba:

cf app sap-btp-mcp-python

Notas:

  • manifest.btp.yml define bindings a destination y xsuaa.

  • La app toma credenciales desde VCAP_SERVICES, asi que no necesitas setear SAP_CLIENT_SECRET manualmente en CF.

Referencias

Related MCP Connectors

  • An MCP server that provides an API to LLMs to manage their JumpCloud resources.

  • The Stytch MCP server is a reference implementation that demonstrates remote MCP server authentication and authorization using Stytch Connected Apps. It provides OAuth 2.1-compliant authorization (including PKCE), Dynamic Client Registration, and validates Stytch-issued access tokens to enable AI agents to securely interact with external services through permissioned access, supporting scopes like openid, email, profile, and manage:project_data.

  • The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.

  • An MCP server that provides access to Testiny projects, test cases and test runs

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    A 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.
    4
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A config-driven MCP server that exposes OData and REST APIs as MCP tools, enabling AI assistants to query, manage, and monitor SAP backends through natural language.
    43 npm
    31
    MIT