- **sap-btp-cloud-platform**: Use for platform fundamentals, service understanding, and BTP integration
/plugin marketplace add secondsky/sap-skills/plugin install sap-btp-service-manager@sap-skillsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
README.mdreferences/api-reference.mdreferences/btp-cli-commands.mdreferences/kubernetes-operator.mdreferences/rate-limiting-filtering.mdreferences/roles-permissions.mdreferences/service-catalog-legacy.mdreferences/smctl-commands.mdtemplates/oauth-token-request.shtemplates/service-binding-cf.jsontemplates/service-binding-k8s.yamltemplates/service-instance-cf.jsontemplates/service-instance-k8s.yamlComprehensive skill for managing services across SAP BTP environments using SAP Service Manager.
Use this skill when working on tasks involving:
Service Instance Management:
Service Binding Management:
Platform & Broker Management:
Authentication & Authorization:
Kubernetes/Kyma Integration:
API & CLI Operations:
Troubleshooting:
⚠️ Important: The SMCLI repository was archived on September 30, 2025. While the tool remains functional, consider migration strategies for long-term SAP BTP workflows.
Recommended Method (Go):
# Install via Go (preferred approach)
go install github.com/Peripli/service-manager-cli@latest
# Add to PATH (if not already)
export PATH=$PATH:$(go env GOPATH)/bin
smctl --version
Alternative Method (Prebuilt Binary):
# Download from: [https://github.com/Peripli/service-manager-cli/releases/latest](https://github.com/Peripli/service-manager-cli/releases/latest)
tar -xzf smctl-*.tar.gz && chmod +x smctl
sudo mv smctl /usr/local/bin/ && smctl --version
Note: While the prebuilt binary method remains functional, the Go installation approach is officially recommended. Consider evaluating SAP's native BTP CLI as an alternative for new deployments.
# Interactive login
smctl login -a [https://service-manager.cfapps.<region>.hana.ondemand.com](https://service-manager.cfapps.<region>.hana.ondemand.com) \
--param subdomain=<subdomain>
# Client credentials
smctl login -a [https://service-manager.cfapps.<region>.hana.ondemand.com](https://service-manager.cfapps.<region>.hana.ondemand.com) \
--param subdomain=<subdomain> --auth-flow client-credentials \
--client-id <id> --client-secret <secret>
# Browse services
smctl marketplace
# Create instance (async)
smctl provision my-instance <service> <plan>
# Create binding
smctl bind my-instance my-binding
SAP Service Manager is the central registry for service brokers and platforms in SAP BTP.
Primary Resources:
| Plan | Purpose | Scopes |
|---|---|---|
| subaccount-admin | Full management | 10 scopes (manage + read) |
| subaccount-audit | Read-only monitoring | 6 scopes |
| container | Isolated management | 7 scopes |
Via Cockpit: Services > Instances > Create > Select service/plan > Cloud Foundry runtime
Via CF CLI:
# Create instance
cf create-service <service> <plan> <instance-name>
# Bind to app
cf bind-service <app-name> <instance-name>
# Create service key (external access)
cf create-service-key <instance-name> <key-name>
1. Install cert-manager:
kubectl apply -f [https://github.com/cert-manager/cert-manager/releases/download/v1.12.0/cert-manager.yaml](https://github.com/cert-manager/cert-manager/releases/download/v1.12.0/cert-manager.yaml)
2. Create Service Manager resources:
smctl provision sm-operator service-manager service-operator-access --mode sync
smctl bind sm-operator sm-operator-binding --mode sync
smctl get-binding sm-operator-binding -o json
3. Deploy operator:
helm repo add sap-btp-operator [https://sap.github.io/sap-btp-service-operator/](https://sap.github.io/sap-btp-service-operator/)
helm install sap-btp-operator sap-btp-operator/sap-btp-operator \
--namespace sap-btp-operator --create-namespace \
--set manager.secret.clientid=<id> \
--set manager.secret.clientsecret=<secret>
ServiceInstance:
apiVersion: services.cloud.sap.com/v1alpha1
kind: ServiceInstance
metadata:
name: my-service-instance
spec:
serviceOfferingName: <service-offering>
servicePlanName: <plan-name>
ServiceBinding:
apiVersion: services.cloud.sap.com/v1alpha1
kind: ServiceBinding
metadata:
name: my-binding
spec:
serviceInstanceName: my-service-instance
Reference: See references/kubernetes-operator.md for complete guide.
Alternative to SMCTL using the unified BTP CLI:
# Create instance
btp create services/instance \
--subaccount <subaccount-id> \
--service <service-name> \
--plan <plan-id> \
--parameters '{"key":"value"}' \
--labels '{"env":["dev"]}'
# Get instance details
btp get services/instance <instance-id> \
--subaccount <subaccount-id> \
--show-parameters
# Create binding
btp create services/binding \
--subaccount <subaccount-id> \
--binding <binding-name> \
--service-instance <instance-id>
# Platform management
btp list services/platform --subaccount <id>
btp register services/platform --subaccount <id> --name <name> --type <type>
btp unregister services/platform <platform-id> --subaccount <id>
curl '<uaa_url>/oauth/token' -X POST \
-H 'Accept: application/json' \
-d 'grant_type=client_credentials&client_id=<clientid>&client_secret=<clientsecret>'
Response:
{
"access_token": "<token>",
"token_type": "bearer",
"expires_in": 43199,
"scope": "<xsappname>.job.read <xsappname>.event.read"
}
[https://service-manager.cfapps.<region>.hana.ondemand.com/v1/](https://service-manager.cfapps.<region>.hana.ondemand.com/v1/`)
Three concurrent tiers enforced:
HTTP 429 returned with Retry-After header when limits exceeded.
Query parameters:
fieldQuery - Filter by resource attributeslabelQuery - Filter by resource labelseq, ne, in, contains, etc.Reference: See references/rate-limiting-filtering.md for complete rate limits and filtering details.
| Category | Commands | Description |
|---|---|---|
| Authentication | login, logout | Manage sessions |
| Instances | provision, deprovision, list-instances | Service instance lifecycle |
| Bindings | bind, unbind, list-bindings | Service binding management |
| Brokers | register-broker, update-broker | Service broker operations |
| Platforms | register-platform, list-platforms | Platform registration |
| Marketplace | marketplace | Browse service offerings |
--mode sync/async - Execution mode (default: async)-c, --parameters - JSON configuration-o, --output - Output format (json, yaml, text)-v, --verbose - Detailed outputReference: See references/smctl-commands.md for complete command reference with all flags and examples.
# Get operation URL from provision/bind response
smctl status /v1/service_instances/<id>/operations/<op-id>
API:
GET /v1/{resourceType}/{resourceID}/operations/{operationID}
Response states: in progress, succeeded, failed
Prerequisites:
# Force delete without confirmation
smctl deprovision my-instance -f
# Sync mode
smctl deprovision my-instance --mode sync
Note: Kyma/Kubernetes instances cannot be deleted from BTP cockpit.
Check:
Check:
Debug:
smctl get-instance <name> -o json
# Check "last_operation" for error details
Solution:
Retry-After headerCheck:
# SMCTL
smctl get-binding <name> -o json
# Kubernetes
kubectl get secrets <binding-name> -o yaml
Check:
smctl provision my-instance service plan --mode sync
smctl provision my-instance service plan \
-c '{}' \
--labels '{"environment":"production","team":"platform"}'
Instead of binding to apps, create service keys for external clients.
For async operations, poll status with exponential backoff.
subaccount-admin: Full managementsubaccount-audit: Read-only monitoringcontainer: Isolated per-instance accessReady-to-use templates in templates/ directory:
Detailed documentation in references/ directory:
[https://service-manager.cfapps.<region>.hana.ondemand.com/swaggerui/swagger-ui.html](https://service-manager.cfapps.<region>.hana.ondemand.com/swaggerui/swagger-ui.html`)When using this skill:
For Cloud Foundry: Use cf CLI or cockpit
For Kubernetes: Use ServiceInstance/ServiceBinding CRDs
For Other environments: Use SMCTL or BTP CLI
For API access: Retrieve OAuth2 token first
When troubleshooting:
License: GPL-3.0 Version: 1.1.1 Maintained by: SAP Skills Maintainers Repository: https://github.com/secondsky/sap-skills