sap-ai-dev-toolkit 0.9.9922 → 0.9.9923

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/.github/agents/sap-btp-infrastructure-admin.agent.md +23 -0
  2. package/.github/agents/sap-bw-datasphere-migration-specialist.agent.md +22 -0
  3. package/.github/agents/sap-datasphere-developer.agent.md +22 -0
  4. package/.github/agents/sap-devops-observability-specialist.agent.md +54 -0
  5. package/.github/agents/sap-process-automation-developer.agent.md +50 -0
  6. package/.github/skills/btp-platform-administration/SKILL.md +53 -0
  7. package/.github/skills/bw-datasphere-migration/SKILL.md +66 -0
  8. package/.github/skills/cloud-alm-operations/SKILL.md +135 -0
  9. package/.github/skills/datasphere-administration/SKILL.md +40 -0
  10. package/.github/skills/datasphere-development/SKILL.md +55 -0
  11. package/.github/skills/process-automation-development/SKILL.md +113 -0
  12. package/README.md +152 -8
  13. package/inventory.md +60 -0
  14. package/package.json +8 -2
  15. package/src/btp-cli.mjs +199 -0
  16. package/src/btp-server.mjs +125 -0
  17. package/src/btp-tools.mjs +776 -0
  18. package/src/cloud-alm-client.mjs +44 -0
  19. package/src/cloud-alm-config.mjs +92 -0
  20. package/src/cloud-alm-credentials.mjs +29 -0
  21. package/src/cloud-alm-data.mjs +129 -0
  22. package/src/cloud-alm-server.mjs +115 -0
  23. package/src/cloud-alm-tools.mjs +682 -0
  24. package/src/datasphere-auth.mjs +279 -0
  25. package/src/datasphere-cli.mjs +220 -0
  26. package/src/datasphere-command.mjs +236 -0
  27. package/src/datasphere-config.mjs +154 -0
  28. package/src/datasphere-credentials.mjs +37 -0
  29. package/src/datasphere-csn.mjs +73 -0
  30. package/src/datasphere-discovery.mjs +151 -0
  31. package/src/datasphere-server.mjs +249 -0
  32. package/src/datasphere-tools.mjs +809 -0
  33. package/src/hana-database.mjs +3 -3
  34. package/src/hana-inspector.mjs +2 -2
  35. package/src/harnesses.mjs +31 -1
  36. package/src/install-user-assets.mjs +1 -1
  37. package/src/integration-common.mjs +7 -7
  38. package/src/integration-config.mjs +5 -0
  39. package/src/integration-credentials.mjs +25 -16
  40. package/src/integration-http.mjs +24 -7
  41. package/src/launcher.mjs +56 -4
  42. package/src/mcp-config.mjs +37 -1
  43. package/src/process-automation-automation-tools.mjs +125 -0
  44. package/src/process-automation-client.mjs +36 -0
  45. package/src/process-automation-common.mjs +69 -0
  46. package/src/process-automation-config.mjs +142 -0
  47. package/src/process-automation-credentials.mjs +37 -0
  48. package/src/process-automation-inbox-tools.mjs +246 -0
  49. package/src/process-automation-server.mjs +139 -0
  50. package/src/process-automation-tools.mjs +727 -0
  51. package/src/process-automation-visibility-tools.mjs +182 -0
  52. package/src/setup.mjs +623 -11
  53. package/tools.md +138 -0
@@ -0,0 +1,113 @@
1
+ ---
2
+ description: Inspect, test and operate SAP Build Process Automation with the sap-ai-process-automation MCP server: process definitions, workflow instances, contexts, logs and errors, stuck instances, user tasks and the user inbox, decisions, API triggers, automations, process visibility, administration jobs, process triggers and business events.
3
+ name: process-automation-development
4
+ ---
5
+
6
+ # SAP Build Process Automation development
7
+
8
+ ## Tool shortlist
9
+
10
+ Use the live MCP `tools/list` result as authoritative. Call only the exact schemas exposed by the `sap-ai-process-automation` server (51 tools):
11
+
12
+ Connection
13
+ - `bpa_connection_info` — `api_host`, `uaa_host`, `auth`, `source`, `task_attribution`, `api_key_configured`, `environment_id`; `verify: true` checks Workflow API access.
14
+
15
+ Workflow definitions
16
+ - `bpa_list_process_definitions`, `bpa_get_process_definition` — deployed definitions with optional `model`, `sample_start_context`, `versions`.
17
+ - `bpa_list_task_definitions` — user-task definitions, optionally with attribute definitions.
18
+ - `bpa_delete_process_definition` — undeploy a classic workflow definition (async, `job_id`); requires confirmation `DELETE BPA DEFINITION <definition_id>`.
19
+ - `bpa_delete_form` — undeploy a classic form; requires confirmation `DELETE BPA FORM <form_id>`.
20
+
21
+ Instances
22
+ - `bpa_list_instances` — filtered by definition, status (repeated = OR), business key, text, subject, starter, time ranges, root/parent, project.
23
+ - `bpa_get_instance` — includes `context` (or `context_path`), `outputs`, `execution_logs`, `error_messages`, `attributes`, `roles`.
24
+ - `bpa_find_stuck_instances` — erroneous (with error messages), suspended, and long-running instances.
25
+ - `bpa_trace_process` — instances by id, business key, or text with error messages, tasks, and recent logs.
26
+ - `bpa_start_instance` — requires confirmation `START BPA PROCESS <definition_id>`.
27
+ - `bpa_change_instance_status` — actions `cancel`, `suspend`, `resume`, `retry` require confirmation `CANCEL BPA INSTANCE <instance_id>`, `SUSPEND BPA INSTANCE <instance_id>`, `RESUME BPA INSTANCE <instance_id>`, or `RETRY BPA INSTANCE <instance_id>`.
28
+ - `bpa_update_instance_context` — requires confirmation `MERGE BPA CONTEXT <instance_id>` or `REPLACE BPA CONTEXT <instance_id>`.
29
+ - `bpa_update_instance_roles` — requires confirmation `UPDATE BPA ROLES <instance_id>`.
30
+ - `bpa_delete_instances` — permanent, async for larger sets; requires confirmation `DELETE BPA INSTANCES <count>`.
31
+ - `bpa_send_message` — classic intermediate message events only; requires confirmation `SEND BPA MESSAGE <message_definition_id>`.
32
+
33
+ User tasks
34
+ - `bpa_list_tasks`, `bpa_get_task` — user-task queues (what My Inbox / Fiori Task Center shows) and task context/attributes.
35
+ - `bpa_complete_task` — requires confirmation `COMPLETE BPA TASK <task_id>`.
36
+ - `bpa_update_tasks` — bulk admin update (async, `job_id`); requires confirmation `UPDATE BPA TASKS <count>`.
37
+ - `bpa_update_task_context` — requires confirmation `UPDATE BPA TASK CONTEXT <task_id>`.
38
+
39
+ Administration / jobs
40
+ - `bpa_export_workflow_data` — ZIP export to a new local file.
41
+ - `bpa_purge_workflow_data` — erases all workflow data of the tenant (async); requires confirmation `PURGE ALL BPA WORKFLOW DATA`.
42
+ - `bpa_get_job` — status of an asynchronous workflow job.
43
+
44
+ Inbox (user-centric)
45
+ - `bpa_inbox_list_tasks`, `bpa_inbox_get_task`, `bpa_inbox_list_task_definitions`, `bpa_inbox_list_substitution_rules` — read the signed-in user's inbox.
46
+ - `bpa_inbox_task_action` — requires confirmation `CLAIM BPA INBOX TASK <instance_id>`, `RELEASE BPA INBOX TASK <instance_id>`, or `FORWARD BPA INBOX TASK <instance_id>`.
47
+ - `bpa_inbox_create_substitution_rule` — requires confirmation `CREATE BPA SUBSTITUTION FOR <user>`.
48
+ - `bpa_inbox_change_substitution_rule` — requires confirmation `ENABLE BPA SUBSTITUTION <rule_id>`, `DISABLE BPA SUBSTITUTION <rule_id>`, or `DELETE BPA SUBSTITUTION <rule_id>`.
49
+
50
+ Decisions
51
+ - `bpa_invoke_decision`, `bpa_test_decision` — evaluate a deployed rule service and compare results with expected outputs.
52
+
53
+ API triggers (Unified)
54
+ - `bpa_list_api_triggers`, `bpa_get_api_trigger` — process API triggers of an environment.
55
+ - `bpa_execute_api_trigger` — start a process, or resume a "Wait for an API Call" step with `execution_id`; requires confirmation `EXECUTE BPA TRIGGER <trigger_uid>`.
56
+
57
+ Automations (execution + monitoring; environment API key required)
58
+ - `bpa_list_automation_triggers`, `bpa_get_automation_trigger`, `bpa_list_automation_jobs` — automation triggers and their jobs.
59
+ - `bpa_start_automation` — requires confirmation `START BPA AUTOMATION <trigger_uid>`.
60
+ - `bpa_export_automation_data` — BAM data or archived jobs as CSV, inline or to a new local file.
61
+
62
+ Visibility scenarios
63
+ - `bpa_list_visibility_scenarios`, `bpa_get_visibility_scenario` — scenario definitions, model, recent executions.
64
+ - `bpa_list_visibility_events` — acquired events, or `kind: errors` for data-acquisition errors.
65
+ - `bpa_process_visibility_scenario` — requires confirmation `PROCESS BPA VISIBILITY <scenario_id>`.
66
+ - `bpa_clear_visibility_data` — requires confirmation `CLEAR BPA VISIBILITY DATA <scenario_id>`.
67
+ - `bpa_push_visibility_events` — requires confirmation `PUSH BPA VISIBILITY EVENTS <count>`.
68
+
69
+ Visibility workspace
70
+ - `bpa_list_visibility_workspace_scenarios`, `bpa_list_visibility_instances`, `bpa_get_visibility_instance` — scenario instances with phases, paths and steps.
71
+
72
+ Business events
73
+ - `bpa_send_business_event` — requires confirmation `SEND BPA EVENT <type>`.
74
+
75
+ ## Procedure
76
+
77
+ 1. Call `bpa_connection_info` first. Compare API host, `auth`, `task_attribution`, `api_key_configured`, and `environment_id` against the request. If the target is missing or mismatched, stop and report; never ask the user to paste credentials.
78
+ 2. Query live `tools/list`, use the returned tool names and schemas exactly, and invoke the chat-attached tools directly. Direct MCP invocation is mandatory. Do not launch `sap-ai-dev` or `sap-ai-process-automation` for MCP operations, handcraft JSON-RPC in a terminal, or use a CLI fallback when chat tools are unavailable; report a host/session binding issue. Always call the exact names returned by `tools/list`.
79
+ 3. Inspect: `bpa_list_process_definitions`, `bpa_get_process_definition` (`sample_start_context` before a start), `bpa_list_instances`, `bpa_get_instance`, `bpa_list_tasks`, `bpa_get_task`; for a user's view, `bpa_inbox_list_tasks` under interactive auth.
80
+ 4. Diagnose stuck or erroneous instances with `bpa_find_stuck_instances` and `bpa_get_instance` (`error_messages`, then `execution_logs`/`context`). Fix the cause first (if data is wrong: suspend, `bpa_update_instance_context`), then `bpa_change_instance_status` with action `retry`.
81
+ 5. Test decisions with `bpa_test_decision`, giving explicit `expected` outputs per case; use `bpa_invoke_decision` to inspect raw results. Rule-service ids come from the deployed project; there is no list API.
82
+ 6. Start a process with `bpa_start_instance`, `bpa_execute_api_trigger`, or event-trigger it with `bpa_send_business_event`, using a test payload. Resume a process waiting in a "Wait for an API Call" step with `bpa_execute_api_trigger` and `execution_id` (the process instance id); `bpa_send_message` only serves classic workflows.
83
+ 7. API-key-gated tools: `bpa_list_automation_triggers`, `bpa_get_automation_trigger`, `bpa_list_automation_jobs`, `bpa_start_automation`, and `bpa_export_automation_data` fail before any tenant call when `api_key_configured` is false; ask the user to set `PROCESS_AUTOMATION_API_KEY` or rerun `sap-ai-dev --setup-process-automation`. Unified API trigger tools and `bpa_start_instance` send the key only when configured and default `environment_id` to `PROCESS_AUTOMATION_ENVIRONMENT_ID`.
84
+ 8. Visibility troubleshooting: when a scenario dashboard misses data, check `bpa_get_visibility_scenario` with `include: ["executions"]`, then `bpa_list_visibility_events` with `kind: "errors"` (data-acquisition errors) and `kind: "events"` for the process instance; reprocess with `bpa_process_visibility_scenario` once fixed and verify with `bpa_list_visibility_instances` / `bpa_get_visibility_instance`.
85
+ 9. Track asynchronous operations (definition undeploy, purge, bulk instance delete, bulk task update) through the returned `job_id` with `bpa_get_job` until it finishes.
86
+ 10. Trace the result with `bpa_trace_process` (by instance id, business key, or text) and verify statuses, tasks, and logs.
87
+
88
+ ## Rules
89
+
90
+ - Technical auth attributes starts, status changes, and task completions to the service key's technical client. User auth needs the `ProcessAutomationAdmin` role collection for administration or `ProcessAutomationParticipant` (as task recipient) for task completion and the inbox.
91
+ - Workflow API status filters are sent as repeated parameters and are OR-combined; other filters are AND-combined. Task statuses are `READY`, `RESERVED`, `COMPLETED`, `CANCELED`.
92
+ - The Inbox (TCM OData) is user-centric: with technical auth it shows the technical client's inbox (normally empty); use interactive auth for a real user's inbox.
93
+ - Automation Execution/Monitoring need an environment API key (`irpa-api-key`) with scopes `TRIGGER_READ`, `TRIGGER_EXECUTE`, `BAM_DOWNLOAD`, or `JOB_DATA_DOWNLOAD` as required by the tool. Unified API triggers optionally use `api-key` plus `environmentId`.
94
+ - Visibility roles: `PVAdmin` (scenario definitions, executions, clear data, acquisition reads), `PVEventSender` (push events), `PVOperator`/`PVRestrictedOperator` (workspace instances).
95
+ - Exports (`bpa_export_workflow_data` ZIP, `bpa_export_automation_data` CSV) write to a new local file: absolute path, never overwritten, mode 0600.
96
+ - `bpa_complete_task` `decision` is the form button identifier.
97
+ - Context payloads over 48 KiB are truncated (`context_truncated: true` with keys); call `bpa_get_instance` with a single include or a `context_path` to narrow the response.
98
+ - Interactive (user) mode withholds SAP error bodies, so read the HTTP status:
99
+ - 400: task already in final status
100
+ - 403: missing ProcessAutomationAdmin/ProcessAutomationParticipant role or not the task recipient
101
+ - 404: unknown id
102
+ - 409: `decision` is not a button id of the form
103
+ - 422: invalid status transition
104
+
105
+ Technical mode shows SAP's error message.
106
+
107
+ ## Safety boundaries
108
+
109
+ - Writes are confirmation-gated only: never call a write tool without its exact confirmation string, and never guess one.
110
+ - `bpa_purge_workflow_data`, `bpa_delete_instances`, and `bpa_delete_process_definition` are destructive and irreversible: never run them without explicit user instruction naming the scope.
111
+ - Never store credentials in `mcp.json` or echo secrets (client secrets, refresh tokens, access tokens, API keys) into results, files, or chat.
112
+ - Never complete tasks, forward inbox tasks, or create substitution rules that represent real approvals without explicit user instruction.
113
+ - Do not invent tools or handcraft JSON-RPC; if a needed tool is absent from `tools/list`, report a host/session binding issue.
package/README.md CHANGED
@@ -67,7 +67,7 @@ After setup, connect a selected BAS destination or local SAP GUI system from you
67
67
  1. Open the Command Palette.
68
68
  2. Run **MCP: List Servers**.
69
69
  3. Start the server named after your selected destination (the lowercase slug, for example `demo-abap` for destination `DEMO_ABAP`).
70
- 4. In your AI assistant's chat, choose the best-fit bundled agent from the agent picker (GitHub Copilot, Claude Code, and opencode install the agents) or invoke the matching Pi prompt template (`/sap-solution-architect`, `/abap-developer`, `/abap-runtime-debugger`, `/rap-service-developer`, `/hana-cloud-hdi-specialist`, `/sap-integration-architect`, or `/sap-integration-developer`): **SAP Solution Architect**, **ABAP Developer**, **ABAP Runtime Debugger**, **RAP Service Developer**, **HANA Cloud/HDI Specialist**, **SAP Integration Architect**, or **SAP Integration Developer**.
70
+ 4. In your AI assistant's chat, choose the best-fit bundled agent from the agent picker (GitHub Copilot, Claude Code, and opencode install the agents), ask OMP to delegate to the matching task agent (for example "use the `abap-developer` agent"), or invoke the matching Pi prompt template (`/sap-solution-architect`, `/abap-developer`, `/abap-runtime-debugger`, `/rap-service-developer`, `/hana-cloud-hdi-specialist`, `/sap-integration-architect`, or `/sap-integration-developer`): **SAP Solution Architect**, **ABAP Developer**, **ABAP Runtime Debugger**, **RAP Service Developer**, **HANA Cloud/HDI Specialist**, **SAP Integration Architect**, or **SAP Integration Developer**.
71
71
  5. In the Chat tools picker, enable the server for that destination.
72
72
  6. Ask the agent to inspect, build, test, or verify something in your SAP landscape.
73
73
 
@@ -77,7 +77,7 @@ Use the attached destination-prefixed tools directly in chat. Do not launch `sap
77
77
 
78
78
  ## 🤖 Available agents and skills
79
79
 
80
- **Agents:** Seven user-invocable custom agents are included. Select the best fit from the agent picker in your harness's chat (GitHub Copilot, Claude Code, or opencode), or use the matching Pi prompt command, as shown in Quick start. Harnesses without custom agents (OpenAI Codex, Cursor, Gemini CLI, OMP, Cline, Roo Code, Windsurf / Devin Desktop) get the same workflows as skills, for example `sap-integration-architect` and `integration-suite-delivery`.
80
+ **Agents:** Twelve user-invocable custom agents are included. Select the best fit from the agent picker in your harness's chat (GitHub Copilot, Claude Code, or opencode), dispatch the matching OMP task agent by its kebab-case id, or use the matching Pi prompt command, as shown in Quick start. Harnesses without custom agents (OpenAI Codex, Cursor, Gemini CLI, Cline, Roo Code, Windsurf / Devin Desktop) get the same workflows as skills, for example `sap-integration-architect` and `integration-suite-delivery`.
81
81
 
82
82
  | | Agent | Best for |
83
83
  | --- | --- | --- |
@@ -88,8 +88,13 @@ Use the attached destination-prefixed tools directly in chat. Do not launch `sap
88
88
  | 🗃️ | **HANA Cloud/HDI Specialist** | Read-only HANA Cloud container inspection, CAP/HDI artifact generation, local validation, and user-run deployment handoffs |
89
89
  | 🏗️ | **SAP Integration Architect** | SAP Integration Suite design: API Management vs Cloud Integration vs both, connectivity, per-hop security, error handling, and an approved build plan |
90
90
  | 🔌 | **SAP Integration Developer** | Building that plan with the Integration Suite companion: iFlows, value mappings, security material, deployment and monitoring in CPI; API providers, proxies, policies, products and key value maps in APIM |
91
+ | 🗄️ | **SAP Datasphere Developer** | Modeling, deploying, loading, and administering Datasphere content end to end with the Datasphere companion: CSN objects, packages, task chains, replication flows, data products, consumption queries and Open SQL |
92
+ | 🚚 | **SAP BW Datasphere Migration Specialist** | Migrating BW models and data products to Datasphere: read-only BW inventory, Data Product Generator or rebuild path, object creation, loads, and BW-versus-Datasphere reconciliation |
93
+ | ⚙️ | **SAP Process Automation Developer** | Inspecting, testing and operating SAP Build Process Automation with the Process Automation companion: process definitions, workflow instances, stuck and failed instances, user-task queues, decisions, process triggers and business events |
94
+ | ☁️ | **SAP BTP Infrastructure Admin** | Auditing and operating SAP BTP core platform setup with the BTP companion: account hierarchy, entitlements and quotas, Service Manager instances and service keys, destinations, trust, Cloud Connectors and principal propagation checks |
95
+ | 📡 | **SAP DevOps & Observability Specialist** | Monitoring SAP landscapes with the Cloud ALM companion: Integration & Exception Monitoring, health and alert hotspots per DEV/TEST/PROD tier, incident triage correlated with CPI message logs and SLG1, and feature/transport status |
91
96
 
92
- **Included skills:** `abap-development` · `abap-testing-quality` · `cds-development` · `rap-development` · `abap-debugging` · `abap-runtime-analysis` · `rap-service-delivery` · `sap-standard-api-analysis` · `clean-core-extensibility` · `sap-sdlc-orchestration` · `sap-transport-release` · `hana-cloud-inspection` · `hana-cloud-native-development` · `hana-cloud-validation` · `sap-integration-architect` · `integration-suite-delivery`
97
+ **Included skills:** `abap-development` · `abap-testing-quality` · `cds-development` · `rap-development` · `abap-debugging` · `abap-runtime-analysis` · `rap-service-delivery` · `sap-standard-api-analysis` · `clean-core-extensibility` · `sap-sdlc-orchestration` · `sap-transport-release` · `hana-cloud-inspection` · `hana-cloud-native-development` · `hana-cloud-validation` · `sap-integration-architect` · `integration-suite-delivery` · `datasphere-development` · `datasphere-administration` · `bw-datasphere-migration` · `process-automation-development` · `btp-platform-administration` · `cloud-alm-operations`
93
98
 
94
99
  Agents and skills install for the harnesses you pick during global installation: a multi-select offers GitHub Copilot and Claude Code pre-checked, plus OpenAI Codex, Cursor, Gemini CLI, opencode, Pi Coding Agent, Oh My Pi (OMP), Cline, Roo Code, and Windsurf / Devin Desktop. In non-interactive installs they are installed for GitHub Copilot only; run `sap-ai-dev --setup` afterwards to configure destinations or local SAP GUI systems. Repository-scoped installation instructions appear below.
95
100
 
@@ -161,9 +166,9 @@ The catalog below covers source inspection, data, editing, quality, transports,
161
166
  - Read SLG1 application logs
162
167
  - Review and create transport requests
163
168
 
164
- ## 🧠 Seven agents, sixteen focused skills
169
+ ## 🧠 Twelve agents, twenty-two focused skills
165
170
 
166
- The package ships with seven custom agents plus sixteen task-focused Agent Skills:
171
+ The package ships with twelve custom agents plus twenty-two task-focused Agent Skills:
167
172
 
168
173
  | | Skill | Best for |
169
174
  | --- | --- | --- |
@@ -183,6 +188,12 @@ The package ships with seven custom agents plus sixteen task-focused Agent Skill
183
188
  | ✅ | `hana-cloud-validation` | Run local CAP/HANA builds and prepare a reviewed, user-run deployment handoff |
184
189
  | 🏗️ | `sap-integration-architect` | Integration Suite pattern choice, connectivity, per-hop security, naming/versioning rules, and an approvable build plan |
185
190
  | 🔌 | `integration-suite-delivery` | Building iFlows, API proxies, gateway policies, API products and key value maps step by step, deploying, and troubleshooting with message logs |
191
+ | 🗄️ | `datasphere-development` | Modeling, deploying, loading, and verifying Datasphere content: CSN objects, packages, task chains, replication flows, data products, consumption queries and Open SQL |
192
+ | 🛡️ | `datasphere-administration` | Administering Datasphere: spaces and space users, database users, workload priorities, roles, users, connections, TLS certificates, and task-scheduling consent |
193
+ | 🚚 | `bw-datasphere-migration` | Planning and running BW → Datasphere migrations: BW inventory, Data Product Generator or rebuild path, object mapping, BW baselines, and Datasphere reconciliation |
194
+ | ⚙️ | `process-automation-development` | Inspecting, testing and operating SAP Build Process Automation: definitions, instances, contexts, logs and errors, stuck instances, user tasks, decisions, process triggers and business events |
195
+ | ☁️ | `btp-platform-administration` | Auditing and operating SAP BTP core platform setup: account hierarchy, entitlements and quotas, Service Manager instances and service keys, destinations, identity and destination trust, Cloud Connectors and principal propagation checks |
196
+ | 📡 | `cloud-alm-operations` | Monitoring, triaging and tracking SAP landscapes with Cloud ALM: monitoring records and analytics, tier hotspots, CPI/SLG1 correlation, feature and transport status, confirmation-gated alert closing |
186
197
 
187
198
  ## 🗺️ How it fits together
188
199
 
@@ -196,7 +207,7 @@ ABAP/RAP backend access is provided by this add-on's BAS proxy. For end-to-end S
196
207
  sap-ai-dev --setup --tools
197
208
  ```
198
209
 
199
- The companion entries are optional and are launched through `npx` only when the MCP client starts them. They are marked as managed by `sap-ai-dev-toolkit`, so rerunning setup can update or remove them without touching unrelated MCP servers. The HANA and Integration Suite companions use `--ignore-scripts` so the toolkit postinstall wizard cannot run during MCP startup.
210
+ The companion entries are optional and are launched through `npx` only when the MCP client starts them. They are marked as managed by `sap-ai-dev-toolkit`, so rerunning setup can update or remove them without touching unrelated MCP servers. The HANA, Integration Suite and Datasphere companions use `--ignore-scripts` so the toolkit postinstall wizard cannot run during MCP startup.
200
211
 
201
212
  | MCP entry | Package | Launches | Use when the agent needs to |
202
213
  | --- | --- | --- | --- |
@@ -206,6 +217,9 @@ The companion entries are optional and are launched through `npx` only when the
206
217
  | `browser-validation` | `@playwright/mcp` | `playwright-mcp` | Open BAS previews, smoke-test Fiori/UI flows, collect screenshots, and verify browser runtime behavior |
207
218
  | `hana-cloud-inspector` | `sap-ai-dev-toolkit` | `sap-ai-hana` | Inspect a bound HANA Cloud HDI schema using read-only catalog tools and capped row reads |
208
219
  | `integration-suite` | `sap-ai-dev-toolkit` | `sap-ai-integration` | Build, deploy, undeploy, and monitor Cloud Integration content (iFlows, value mappings, script collections, security material, Partner Directory) and manage API Management providers, proxies, policies, products, and key value maps |
220
+ | `datasphere` | `sap-ai-dev-toolkit` | `sap-ai-datasphere` | Model and administer SAP Datasphere: spaces, users, roles, database users, connections, modeling objects and packages, task chains, replication flows, Data Marketplace, consumption queries and Open SQL |
221
+ | `process-automation` | `sap-ai-dev-toolkit` | `sap-ai-process-automation` | Inspect and operate SAP Build Process Automation across all eight BPA APIs: process definitions, workflow instances with contexts, logs and errors, stuck instances, user tasks and the user inbox, decisions, API triggers, automations, process visibility, administration jobs, process starts and business events |
222
+ | `cloud-alm` | `sap-ai-dev-toolkit` | `sap-ai-cloud-alm` | Observe and triage SAP landscapes with SAP Cloud ALM: health, exception and alert hotspots per tier, Integration & Exception Monitoring records, monitoring events with CPI and SLG1 handoffs, analytics, feature and transport status, and confirmation-gated alert closing |
209
223
 
210
224
  Recommended profiles:
211
225
 
@@ -304,6 +318,136 @@ This separate checker permits configured-management GETs and exact OAuth token P
304
318
  Lifecycle release changes: signed bounded collections and precise access evidence; continuable release validation/deployment and private configuration-bound recovery; server-side API analytics; native monitoring/promotion readiness; guarded policy/consumer changes; separately credentialed optional metadata adapters and complete native handoffs.
305
319
  Live AnalyticsService compatibility uses distinct derived aliases and an explicit source-record count. A zero-record aggregate with null sums is `no_data`, not a failed request or healthy traffic; null metrics with nonzero records remain partial.
306
320
 
321
+ ### SAP Datasphere
322
+
323
+ For direct CLI use with your Datasphere user, run **`sap-ai-dev --datasphere objects views list --space MY_SPACE`**. The first command asks for your tenant URL and opens SAP's browser sign-in. On the first run, provide two fresh temporary codes: one to download the command catalog, then one to run the requested command. Later commands reuse the tenant URL and catalog and ask only for one fresh code. SAP's CLI is bundled; no OAuth client or separate CLI installation is required for this flow.
324
+
325
+ From a source checkout, use `npm run datasphere -- objects views list --space MY_SPACE`. Supply `--host https://<tenant>.eu20.hcs.cloud.sap` to choose a tenant explicitly; a copied Datasphere page URL or a bare tenant host also works. The tenant URL is saved in `~/.config/sap-ai-dev-toolkit/datasphere-cli.json`, and discovery metadata is cached privately per tenant and CLI version. Codes stay in private temporary files removed when the command finishes. Native SAP command options, exit codes, and write confirmations apply. `--datasphere --help` and `--datasphere --version` work without signing in. In a remote terminal, use the printed browser URL; after the catalog is initialized, `--passcode-stdin` reads a code through standard input without opening a browser. For a fresh automation environment, first initialize with `--datasphere config cache init --host <tenant URL> --passcode-stdin`, then supply a new code to the requested command. Use Node.js 20–24, as supported by the bundled SAP CLI.
326
+
327
+ The separate `datasphere` stdio MCP server covers the whole Datasphere surface reachable from outside the UI: spaces, space users, database users, workload, global and scoped roles, users, objects of every type (including packages, task chains, replication flows and data access controls), connections, TLS certificates, the Data Marketplace, the Consumption catalog/relational/analytical APIs, the Tasks API, and read/execute access to the space Open SQL schema through a Datasphere database user (including the `"DWC_GLOBAL"` data-lake procedures). Typed tools cover the frequent flows; discovery-driven generic tools cover every other — and future — `datasphere` CLI command. All writes require exact confirmation strings; secrets are write-only.
328
+
329
+ Sign in once with **`sap-ai-dev --setup-datasphere`**: a **Technical user** OAuth client (client credentials) covers objects, tasks, Data Marketplace, connections, certificates and consumption data; **Your user** (Interactive Usage, redirect URI `http://localhost:8080`) additionally covers spaces, users, roles, database users and workload. Credentials are verified online and stored only for you in `~/.config/sap-ai-dev-toolkit/datasphere.json` (0600) — never in `mcp.json`; environment variables (`DATASPHERE_URL`, `DATASPHERE_TOKEN_URL`, `DATASPHERE_CLIENT_ID`, `DATASPHERE_CLIENT_SECRET`, optionally `DATASPHERE_AUTH`, `DATASPHERE_AUTHORIZATION_URL`, `DATASPHERE_REFRESH_TOKEN` and `DATASPHERE_SQL_*`) always win. `sap-ai-datasphere --check` verifies catalog, CLI and SQL access.
330
+
331
+ #### Tool catalog
332
+
333
+ The server registers 32 tools by default; the two Open SQL tools appear only when a Datasphere database user is configured. The live `tools/list` response is authoritative; full contracts live in [tools.md](tools.md#separate-optional-sap-datasphere-server). Every state-changing tool requires its exact confirmation string before any tenant call, and all results pass through secret redaction.
334
+
335
+ **Connection, consumption and reconciliation**
336
+
337
+ | Tool | Behavior |
338
+ | --- | --- |
339
+ | `datasphere_connection_info` | Report the connected tenant, auth mode, credential source, CLI package version and Open SQL configuration; optional online verification, never returns credentials. |
340
+ | `datasphere_list_spaces` | List the spaces visible to the OAuth client (Consumption catalog API). |
341
+ | `datasphere_list_assets` | List assets exposed for consumption — all visible assets or one space's. |
342
+ | `datasphere_get_asset_metadata` | Fetch the `$metadata` document of a relational or analytical asset (XML, capped at 64 KiB). |
343
+ | `datasphere_query_relational` | Read rows of a relational asset: projection, filter, ordering, paging and count. |
344
+ | `datasphere_query_analytical` | Read aggregated data from an analytic model; `$select` names the requested measures and dimensions. |
345
+ | `datasphere_reconcile` | Compare an asset against expected figures — row count for relational assets, measure totals for analytic models, each with a tolerance. |
346
+
347
+ **Object lifecycle**
348
+
349
+ | Tool | Behavior |
350
+ | --- | --- |
351
+ | `datasphere_list_objects` | List objects of one type in a space: technical/business name, type, semantic usage, status, deployment and change dates. |
352
+ | `datasphere_read_object` | Read one object: design-time definition, run-time state, or the complete object. |
353
+ | `datasphere_create_object` | Create an object from a CSN definition and read it back. Confirmation `CREATE DATASPHERE <OBJECT_TYPE> <SPACE>.<TECHNICAL_NAME>`. |
354
+ | `datasphere_update_object` | Update an object from a CSN definition, guarded by `expected_changed_on`. Confirmation `UPDATE DATASPHERE <OBJECT_TYPE> <SPACE>.<TECHNICAL_NAME>`. |
355
+ | `datasphere_delete_object` | Delete an object from a space. Confirmation `DELETE DATASPHERE <OBJECT_TYPE> <SPACE>.<TECHNICAL_NAME>`. |
356
+ | `datasphere_export_package` | Export a package from a space. Confirmation `EXPORT DATASPHERE PACKAGE <SPACE>.<TECHNICAL_NAME>`. |
357
+ | `datasphere_build_local_table_csn` | Convert a BW/Data-Dictionary-style field list (name, label, ddic type, length, decimals, key) into a local-table CSN definition. Pure conversion, no tenant call. |
358
+
359
+ **Connections, task chains and replication flows**
360
+
361
+ | Tool | Behavior |
362
+ | --- | --- |
363
+ | `datasphere_list_connections` | List the connections of a space. |
364
+ | `datasphere_validate_connection` | Validate one connection of a space. |
365
+ | `datasphere_list_task_logs` | List the task logs of one object (task chain, replication flow) through the Tasks REST API. |
366
+ | `datasphere_get_task_log` | Read one task log by id; detail level `status`, `details` or `extended`. |
367
+ | `datasphere_run_task_chain` | Start a task chain run and return its log id. Confirmation `RUN DATASPHERE TASK CHAIN <SPACE>.<TASK_CHAIN>`. |
368
+ | `datasphere_retry_task_chain` | Retry the last failed run of a task chain. Confirmation `RETRY DATASPHERE TASK CHAIN <SPACE>.<TASK_CHAIN>`. |
369
+ | `datasphere_cancel_task_chain` | Cancel one run by log id. Confirmation `CANCEL DATASPHERE TASK CHAIN RUN <SPACE>.<LOG_ID>`. |
370
+ | `datasphere_replication_flow` | Run, pause, resume, stop or inspect a replication flow — or pause/resume/restart a single object within it. State changes require `<ACTION> DATASPHERE REPLICATION FLOW <SPACE>.<TECHNICAL_NAME>`. |
371
+
372
+ **Data Marketplace**
373
+
374
+ | Tool | Behavior |
375
+ | --- | --- |
376
+ | `datasphere_list_data_providers` | List the Data Marketplace providers visible to the tenant. |
377
+ | `datasphere_list_data_products` | List Data Marketplace products. |
378
+ | `datasphere_read_data_product` | Read one product definition by uuid — the template for `datasphere_create_data_product`. |
379
+ | `datasphere_create_data_product` | Create a data product in status Draft from a definition. Confirmation `CREATE DATASPHERE DATA PRODUCT`. |
380
+ | `datasphere_set_data_product_status` | List, delist or deactivate a product. Confirmation `SET DATASPHERE DATA PRODUCT <UUID> <LIFECYCLE_STATUS>`. |
381
+ | `datasphere_install_data_product` | Install a product into a space. Confirmation `INSTALL DATASPHERE DATA PRODUCT <UUID> INTO <SPACE>`. |
382
+
383
+ **Generic Datasphere CLI commands**
384
+
385
+ | Tool | Behavior |
386
+ | --- | --- |
387
+ | `datasphere_list_commands` | List the CLI command catalog discovered from the tenant, optionally filtered by prefix, with the auth mode each command supports. Compact by default; use `include_parameters` with a prefix for parameter lists. |
388
+ | `datasphere_describe_command` | Show the authoritative `--help` text of one CLI command from the tenant catalog. |
389
+ | `datasphere_run_read_command` | Run any discovered read-only CLI command (spaces list, objects read, marketplace, tasks status, ...) with validated options. |
390
+ | `datasphere_run_command` | Run any discovered CLI command; changing commands require confirmation `RUN DATASPHERE <COMMAND>` (deletions `DELETE DATASPHERE <COMMAND>`). |
391
+
392
+ **Open SQL schema** — only with `DATASPHERE_SQL_*` configured
393
+
394
+ | Tool | Behavior |
395
+ | --- | --- |
396
+ | `datasphere_sql_query` | Run one read-only `SELECT` against the space Open SQL schema of the database user; rows capped by `max_rows`. |
397
+ | `datasphere_sql_execute` | Execute one SQL statement (DDL, DML, or a documented `"DWC_GLOBAL"` data-lake procedure call). Confirmation `EXECUTE DATASPHERE SQL AS <USER>`. |
398
+
399
+ The **SAP Datasphere Developer** agent plus the `datasphere-development` and `datasphere-administration` skills drive modeling and administration; the **SAP BW Datasphere Migration Specialist** agent plus `bw-datasphere-migration` plan and run BW → Datasphere migrations (Data Product Generator path or rebuild path), using the read-only ABAP destination server (`GetTable`, `GetTableContents`, `RunQuery`, `SearchObject`) for the BW inventory and `datasphere_reconcile` for BW-versus-Datasphere figures.
400
+
401
+ ### SAP Build Process Automation
402
+
403
+ The separate `process-automation` stdio MCP server covers all eight SAP Build Process Automation APIs of the Business Accelerator Hub package (Workflow, Inbox, Decisions, Unified API triggers, Automation Execution, Automation Monitoring, Visibility Scenarios, Visibility Workspace) plus business events with 51 tools. It connects through a service key of a `process-automation-service` instance (plan `standard`; client-secret key). It reads process definitions, workflow instances with their contexts, outputs, execution logs, error messages, attributes and roles, finds erroneous, suspended and long-running instances, lists the user-task queue behind My Inbox / SAP Fiori Task Center, evaluates and regression-tests deployed decisions, and traces a business key from an ABAP/RAP event or CPI message to the workflow instance and its open tasks. Every write requires an exact confirmation string; asynchronous operations return a `job_id` for `bpa_get_job`.
404
+
405
+ | API family | Tools |
406
+ |---|---|
407
+ | Connection | `bpa_connection_info` |
408
+ | Workflow definitions | `bpa_list_process_definitions`, `bpa_get_process_definition`, `bpa_delete_process_definition`, `bpa_list_task_definitions`, `bpa_delete_form` |
409
+ | Instances | `bpa_list_instances`, `bpa_get_instance`, `bpa_find_stuck_instances`, `bpa_trace_process`, `bpa_start_instance`, `bpa_change_instance_status`, `bpa_update_instance_context`, `bpa_update_instance_roles`, `bpa_delete_instances`, `bpa_send_message` |
410
+ | User tasks | `bpa_list_tasks`, `bpa_get_task`, `bpa_complete_task`, `bpa_update_tasks`, `bpa_update_task_context` |
411
+ | Administration / jobs | `bpa_export_workflow_data`, `bpa_purge_workflow_data`, `bpa_get_job` |
412
+ | Inbox (Task Consumption Model, user-centric) | `bpa_inbox_list_tasks`, `bpa_inbox_get_task`, `bpa_inbox_list_task_definitions`, `bpa_inbox_task_action`, `bpa_inbox_list_substitution_rules`, `bpa_inbox_create_substitution_rule`, `bpa_inbox_change_substitution_rule` |
413
+ | Decisions | `bpa_invoke_decision`, `bpa_test_decision` |
414
+ | API triggers (Unified) | `bpa_list_api_triggers`, `bpa_get_api_trigger`, `bpa_execute_api_trigger` |
415
+ | Automations (execution + monitoring; environment API key) | `bpa_list_automation_triggers`, `bpa_get_automation_trigger`, `bpa_list_automation_jobs`, `bpa_start_automation`, `bpa_export_automation_data` |
416
+ | Visibility scenarios | `bpa_list_visibility_scenarios`, `bpa_get_visibility_scenario`, `bpa_process_visibility_scenario`, `bpa_clear_visibility_data`, `bpa_list_visibility_events`, `bpa_push_visibility_events` |
417
+ | Visibility workspace | `bpa_list_visibility_workspace_scenarios`, `bpa_list_visibility_instances`, `bpa_get_visibility_instance` |
418
+ | Business events | `bpa_send_business_event` |
419
+
420
+ The Inbox shows the signed-in user's tasks (with technical auth the technical client's inbox, normally empty). Automation triggers, jobs and BAM/archived-job exports need an environment API key (`irpa-api-key`, scopes such as `TRIGGER_READ`, `TRIGGER_EXECUTE`, `BAM_DOWNLOAD`, `JOB_DATA_DOWNLOAD`); Unified API triggers and process starts send it as `api-key` when configured. Exports are written to a new local file (absolute path, never overwritten, mode 0600).
421
+
422
+ Set it up with **`sap-ai-dev --setup-process-automation`**: paste the service key (or the path to its `.json` file) and choose **Technical client** (client credentials; actions run as the key's technical user) or **Your user** (authorization code with the same client; actions are attributed to you and need `ProcessAutomationAdmin` or `ProcessAutomationParticipant`). After verification the wizard optionally asks for an environment API key (Control Tower > Environments > API Keys) and a default environment id for API triggers and process starts; press Enter to skip either. Credentials are verified online and stored only for you in `~/.config/sap-ai-dev-toolkit/process-automation.json` (0600) — never in `mcp.json`. Environment variables win: `PROCESS_AUTOMATION_URL`, `PROCESS_AUTOMATION_TOKEN_URL`, `PROCESS_AUTOMATION_CLIENT_ID`, `PROCESS_AUTOMATION_CLIENT_SECRET` (all four together), else `PROCESS_AUTOMATION_SERVICE_KEY`; optionally `PROCESS_AUTOMATION_AUTH` and `PROCESS_AUTOMATION_REFRESH_TOKEN`. `PROCESS_AUTOMATION_API_KEY` and `PROCESS_AUTOMATION_ENVIRONMENT_ID` are optional and override the stored values. `sap-ai-process-automation --check` verifies Workflow API access. Full tool contracts and confirmation strings live in [tools.md](tools.md#separate-optional-sap-build-process-automation-server).
423
+
424
+ The **SAP Process Automation Developer** agent plus the `process-automation-development` skill drive inspection, decision testing, confirmed operations, asynchronous job tracking and end-to-end tracing.
425
+
426
+ ### SAP BTP platform administration
427
+
428
+ The separate `sap-btp` stdio MCP server (`sap-ai-btp`) wraps your installed SAP BTP CLI and uses your own `btp login --sso` session (sessions last at most 12 hours); the toolkit stores no credentials. Every subaccount-scoped tool takes the subaccount GUID explicitly; the server never runs `btp target`.
429
+
430
+ | Area | Tools |
431
+ | --- | --- |
432
+ | Connection | `btp_connection_info` |
433
+ | Accounts, entitlements and quotas | `btp_get_account_hierarchy`, `btp_list_entitlements`, `btp_check_quota` |
434
+ | Service Manager instances and service keys | `btp_list_service_instances`, `btp_get_service_instance`, `btp_list_service_keys`, `btp_get_service_key`, `btp_create_service_instance`, `btp_create_service_key` |
435
+ | Destinations, trust and Cloud Connectors | `btp_list_destinations`, `btp_get_destination`, `btp_get_trust`, `btp_list_cloud_connectors`, `btp_check_destination` |
436
+
437
+ Service-key credentials, instance parameters and destination secrets are always redacted; fetch a full key in your own terminal with `btp get services/binding --name <key> --subaccount <id>`. Creating an instance (`CREATE BTP SERVICE INSTANCE <name>`, after a quota check) or a service key (`CREATE BTP SERVICE KEY <name>`) requires the exact confirmation string; creation parameters go through a private temporary file, never the command line. Cloud Connector data comes from the BTP-side Connectivity API and needs a Connectivity `api_access` instance with a client-secret service key. `btp_check_destination` reports pass/warn/fail/unknown checks; principal-propagation items only visible in the Cloud Connector or backend (system and CA certificates, synchronized trust, X.509 principal type, CERTRULE) are reported as `unknown`. There are no delete, entitlement-assignment, destination, trust or role-collection write tools.
438
+
439
+ Set it up with **`sap-ai-dev --setup-btp`**: the wizard locates `btp` on PATH (or `BTP_CLI`), checks the session, offers to run `btp login --sso` when it expired, and saves only the CLI location to `~/.config/sap-ai-dev-toolkit/btp.json` (0600). `BTP_CLI` and `BTP_CLIENTCONFIG` in the MCP host environment win. `sap-ai-btp --check` verifies the CLI and the session from the shell.
440
+
441
+ The **SAP BTP Infrastructure Admin** agent plus the `btp-platform-administration` skill drive account and entitlement audits, instance and key automation, and destination/trust/Cloud Connector verification.
442
+
443
+ ### SAP Cloud ALM
444
+
445
+ The separate `cloud-alm` stdio MCP server connects to SAP Cloud ALM for operations through a service key of a "SAP Cloud ALM API" instance (plan `standard`, client-secret binding; client credentials only). Its 11 tools read landscape objects and their role tiers, summarize exception, health and alert hotspots per DEV/TEST/PROD tier, read raw Integration & Exception Monitoring records, monitoring events and job runs, run analytics queries, and report feature lifecycle status with transport ids. `calm_triage_incident` returns ready-to-use arguments for the Integration Suite companion's `cpi_list_message_logs` and the ABAP destination's `get_application_log`, so the agent can correlate a Cloud ALM alert with live CPI message processing logs and SLG1. The only write, `calm_close_event_situation`, needs `CLOSE CALM EVENT SITUATION <event_situation_id>` (or `… BY EXTERNAL ID <external_id>`).
446
+
447
+ Set it up with **`sap-ai-dev --setup-cloud-alm`**: paste the service key (or the path to its `.json` file); it is verified against the Landscape and Analytics APIs and stored only for you in `~/.config/sap-ai-dev-toolkit/cloud-alm.json` (0600) — never in `mcp.json`. Environment variables win: `CLOUD_ALM_SERVICE_KEY`, or `CLOUD_ALM_URL` + `CLOUD_ALM_TOKEN_URL` + `CLOUD_ALM_CLIENT_ID` + `CLOUD_ALM_CLIENT_SECRET`. `sap-ai-cloud-alm --check` verifies access from the shell.
448
+
449
+ The **SAP DevOps & Observability Specialist** agent plus the `cloud-alm-operations` skill drive hotspot finding, triage across Cloud ALM, CPI and ABAP, and deployment tracking. Cloud ALM exposes no per-system transport import status, so the agent never infers TEST/PROD arrival from Features data.
450
+
307
451
  ## 💡 Example requests
308
452
 
309
453
  Once the destination server is enabled in your chat's tools picker, ask for outcomes instead of manually orchestrating individual SAP operations:
@@ -502,12 +646,12 @@ During npm postinstall, or after interactive `sap-ai-dev --setup` in BAS or on a
502
646
  | Gemini CLI | `$HOME/.gemini/skills/` | — | `$HOME/.gemini/settings.json` |
503
647
  | opencode | `$XDG_CONFIG_HOME/opencode/skills/` (default `$HOME/.config/opencode/skills/`) | `$XDG_CONFIG_HOME/opencode/agents/<id>.md` (as subagents) | Not changed automatically |
504
648
  | Pi Coding Agent | `$PI_CODING_AGENT_DIR/skills/` (default `$HOME/.pi/agent/skills/`) | `$PI_CODING_AGENT_DIR/prompts/<id>.md` (as `/` prompt commands) | `$PI_CODING_AGENT_DIR/mcp.json` (default `$HOME/.pi/agent/mcp.json`) |
505
- | Oh My Pi (OMP) | `$HOME/.omp/agent/skills/` (overridden by `PI_CONFIG_DIR` or `PI_CODING_AGENT_DIR`) | — | `$HOME/.omp/agent/mcp.json` (same overrides) |
649
+ | Oh My Pi (OMP) | `$HOME/.omp/agent/skills/` (overridden by `PI_CONFIG_DIR` or `PI_CODING_AGENT_DIR`) | `$HOME/.omp/agent/agents/<id>.md` (as task agents named `<id>`; same overrides) | `$HOME/.omp/agent/mcp.json` (same overrides) |
506
650
  | Cline | `$HOME/.cline/skills/` | — | Not changed automatically |
507
651
  | Roo Code | `$HOME/.roo/skills/` | — | Not changed automatically |
508
652
  | Windsurf / Devin Desktop | `$XDG_CONFIG_HOME/devin/skills/` (default `$HOME/.config/devin/skills/`); Windows: `$HOME/.codeium/windsurf/skills/` | — | `$XDG_CONFIG_HOME/devin/mcp_config.json` (default `$HOME/.config/devin/mcp_config.json`); Windows: `%APPDATA%\devin\mcp_config.json` |
509
653
 
510
- All 14 skills use the portable `SKILL.md` format and are installed verbatim. The 5 agents use Copilot's `.agent.md` format, so they are installed as native custom agents for harnesses with a custom-agent mechanism (GitHub Copilot, Claude Code, opencode), with frontmatter adapted where needed. Pi receives equivalent prompt templates (`/abap-developer`, `/sap-solution-architect`, and so on) because Pi exposes reusable personas through prompts rather than a separate custom-agent file type. Selecting several harnesses duplicates the small markdown payloads on disk.
654
+ All 22 skills use the portable `SKILL.md` format and are installed verbatim. The 12 agents use Copilot's `.agent.md` format, so they are installed as native custom agents for harnesses with a custom-agent mechanism (GitHub Copilot, Claude Code, opencode, OMP), with frontmatter adapted where needed. OMP receives them as task agents named after their file id (`abap-developer`, `sap-solution-architect`, and so on), with Copilot-specific tool-picker wording rewritten for OMP's MCP tool inventory. Pi receives equivalent prompt templates (`/abap-developer`, `/sap-solution-architect`, and so on) because Pi exposes reusable personas through prompts rather than a separate custom-agent file type. Selecting several harnesses duplicates the small markdown payloads on disk.
511
655
 
512
656
  MCP auto-wiring preserves unrelated servers in each harness config and replaces only entries previously managed by `sap-ai-dev-toolkit`. Generated entries carry `SAP_AI_DEV_TOOLKIT_MANAGED=true` in their server environment so future reinstalls can reconcile them without touching user-owned MCP servers.
513
657
 
package/inventory.md CHANGED
@@ -293,3 +293,63 @@ Confirmations are checked before network access but do not replace user approval
293
293
 
294
294
  Read-only connected verification: `node scripts/check-live-integration.mjs --window-minutes 60 --top 3 --json`. Its GET-only management guard is separate from the mutating `test:live:integration` runner. Missing optional credentials remain `live_unverified`; successful reads are not health, continuous delivery or native promotion proof.
295
295
 
296
+
297
+ ## Separate optional SAP Datasphere server
298
+
299
+ The standalone `sap-ai-datasphere` companion is not a BAS-proxy child and never destination-prefixed. It exposes 34 distinct possible tool names; actual `tools/list` is authoritative because the two SQL tools register only when a Datasphere database user is configured (`DATASPHERE_SQL_*`). Writes require exact confirmation strings; CLI/REST results are secret-redacted.
300
+
301
+ Authentication is one Datasphere OAuth client, either **technical** (client credentials) or **interactive** (authorization code + refresh token, stored user-only in `~/.config/sap-ai-dev-toolkit/datasphere.json`). Technical clients may run only `configuration certificates`, `marketplace`, `objects`, `spaces connections` and `tasks` CLI commands; every other command needs interactive auth and is flagged per command by `datasphere_list_commands` (`usable_with_current_auth`).
302
+
303
+ | Group | Tools | Behavior |
304
+ |---|---|---|
305
+ | Connection | `datasphere_connection_info` | Tenant/token host, auth mode, credential source, CLI package version, SQL summary, admin availability; optional read-only verification. |
306
+ | Consumption | `datasphere_list_spaces`, `datasphere_list_assets`, `datasphere_get_asset_metadata`, `datasphere_query_relational`, `datasphere_query_analytical`, `datasphere_reconcile` | Consumption catalog/relational/analytical reads; parameters become `(Name='value')/Set` segments; reconciliation compares row counts or measure totals with tolerances. |
307
+ | Objects | `datasphere_list_objects`, `datasphere_read_object`, `datasphere_create_object`, `datasphere_update_object`, `datasphere_delete_object`, `datasphere_export_package` | CSN lifecycle through the pinned `@sap/datasphere-cli` child runner; updates guarded by `expected_changed_on`; create/update return a read-back. |
308
+ | Connections & tasks | `datasphere_list_connections`, `datasphere_validate_connection`, `datasphere_list_task_logs`, `datasphere_get_task_log`, `datasphere_run_task_chain`, `datasphere_retry_task_chain`, `datasphere_cancel_task_chain`, `datasphere_replication_flow` | Connections via CLI; task chains and logs via the Tasks REST API; replication flow actions incl. per-object pause/resume/restart. |
309
+ | Data Marketplace | `datasphere_list_data_providers`, `datasphere_list_data_products`, `datasphere_read_data_product`, `datasphere_create_data_product`, `datasphere_set_data_product_status`, `datasphere_install_data_product` | Provider/product discovery, Draft creation from a definition, lifecycle status changes, installation into a space. |
310
+ | CSN | `datasphere_build_local_table_csn` | Pure field-list → local-table CSN conversion (BW `/BIC/` stripping, DDIC type mapping, duplicate detection). No tenant call. |
311
+ | Generic CLI | `datasphere_list_commands`, `datasphere_describe_command`, `datasphere_run_read_command`, `datasphere_run_command` | Tenant-discovery-driven catalog of every CLI command with exact `--help`; read-only or confirmed execution with managed-option rejection and automatic `--force` for `x-user-to-confirm` operations. |
312
+ | Open SQL | `datasphere_sql_query`, `datasphere_sql_execute` | Single-SELECT reads wrapped with `LIMIT` on the configured database user's schema; confirmation-gated single-statement executes (incl. `"DWC_GLOBAL"` data-lake procedures). Grants of the database user are the boundary. |
313
+
314
+ ## Separate optional SAP Build Process Automation server
315
+
316
+ The standalone `sap-ai-process-automation` companion is not a BAS-proxy child and never destination-prefixed. It exposes 51 tools covering all eight SAP Build Process Automation APIs of the Business Accelerator Hub package (81 operations) plus business events. Authentication is a `process-automation-service` service key, either **technical** (client credentials) or **interactive** (authorization code + refresh token with the same client, stored user-only in `~/.config/sap-ai-dev-toolkit/process-automation.json`). Optional `PROCESS_AUTOMATION_API_KEY` / `PROCESS_AUTOMATION_ENVIRONMENT_ID` (or the optional setup prompts) supply an environment API key and default environment. Writes require exact confirmation strings; results are secret-redacted; asynchronous operations return a `job_id`; exports write to a new local file (0600, never overwritten).
317
+
318
+ | Group | Tools | Behavior |
319
+ |---|---|---|
320
+ | Connection | `bpa_connection_info` | API/UAA host, auth mode, credential source, task attribution, API key configured, default environment; optional read-only verification. |
321
+ | Workflow definitions | `bpa_list_process_definitions`, `bpa_get_process_definition`, `bpa_delete_process_definition`, `bpa_list_task_definitions`, `bpa_delete_form` | Deployed definitions with model, sample start context and versions; task definitions. Classic definition undeploy (async) `DELETE BPA DEFINITION <definition_id>`; classic form undeploy `DELETE BPA FORM <form_id>`. |
322
+ | Instances | `bpa_list_instances`, `bpa_get_instance`, `bpa_find_stuck_instances`, `bpa_trace_process`, `bpa_start_instance`, `bpa_change_instance_status`, `bpa_update_instance_context`, `bpa_update_instance_roles`, `bpa_delete_instances`, `bpa_send_message` | Filtered lists (repeated status = OR); context (capped at 48 KiB or one fragment), outputs, logs, errors, attributes, roles; stuck instances; tracing by id, business key or text. Writes: `START BPA PROCESS <definition_id>`, `<ACTION> BPA INSTANCE <instance_id>` (CANCEL/SUSPEND/RESUME/RETRY, status checked first), `MERGE BPA CONTEXT <instance_id>` / `REPLACE BPA CONTEXT <instance_id>`, `UPDATE BPA ROLES <instance_id>`, `DELETE BPA INSTANCES <count>` (async), `SEND BPA MESSAGE <message_definition_id>` (classic workflows). |
323
+ | User tasks | `bpa_list_tasks`, `bpa_get_task`, `bpa_complete_task`, `bpa_update_tasks`, `bpa_update_task_context` | The task queue behind My Inbox / Fiori Task Center; one task with context and attributes. `COMPLETE BPA TASK <task_id>` (open tasks only), `UPDATE BPA TASKS <count>` (async), `UPDATE BPA TASK CONTEXT <task_id>`. |
324
+ | Administration / jobs | `bpa_export_workflow_data`, `bpa_purge_workflow_data`, `bpa_get_job` | ZIP export to a new local file; irreversible tenant purge (async) `PURGE ALL BPA WORKFLOW DATA`; async job status. |
325
+ | Inbox | `bpa_inbox_list_tasks`, `bpa_inbox_get_task`, `bpa_inbox_list_task_definitions`, `bpa_inbox_task_action`, `bpa_inbox_list_substitution_rules`, `bpa_inbox_create_substitution_rule`, `bpa_inbox_change_substitution_rule` | User-centric TCM OData (`ProcessAutomationParticipant`; technical auth shows the technical client's inbox). `<ACTION> BPA INBOX TASK <instance_id>` (CLAIM/RELEASE/FORWARD), `CREATE BPA SUBSTITUTION FOR <user>`, `<ACTION> BPA SUBSTITUTION <rule_id>` (ENABLE/DISABLE/DELETE). |
326
+ | Decisions | `bpa_invoke_decision`, `bpa_test_decision` | Rule-service evaluation and subset-match test cases; no side effects. |
327
+ | API triggers (Unified) | `bpa_list_api_triggers`, `bpa_get_api_trigger`, `bpa_execute_api_trigger` | Process API triggers per environment (optional `api-key`); start a process or resume a "Wait for an API Call" step via `execution_id`; `EXECUTE BPA TRIGGER <trigger_uid>`. |
328
+ | Automations | `bpa_list_automation_triggers`, `bpa_get_automation_trigger`, `bpa_list_automation_jobs`, `bpa_start_automation`, `bpa_export_automation_data` | Automation Execution/Monitoring with a required environment API key (`TRIGGER_READ`, `TRIGGER_EXECUTE`, `BAM_DOWNLOAD`, `JOB_DATA_DOWNLOAD`); `START BPA AUTOMATION <trigger_uid>`; BAM/archived-job CSV inline or to a new local file. |
329
+ | Visibility scenarios | `bpa_list_visibility_scenarios`, `bpa_get_visibility_scenario`, `bpa_process_visibility_scenario`, `bpa_clear_visibility_data`, `bpa_list_visibility_events`, `bpa_push_visibility_events` | Scenario definitions, executions, acquired events and acquisition errors (`PVAdmin`); `PROCESS BPA VISIBILITY <scenario_id>`, `CLEAR BPA VISIBILITY DATA <scenario_id>`; `PUSH BPA VISIBILITY EVENTS <count>` (`PVEventSender`). |
330
+ | Visibility workspace | `bpa_list_visibility_workspace_scenarios`, `bpa_list_visibility_instances`, `bpa_get_visibility_instance` | Workspace scenarios, scenario instances with OData options, one instance with phases, paths and steps (`PVOperator`/`PVRestrictedOperator`). |
331
+ | Business events | `bpa_send_business_event` | CloudEvents to `/internal/be/v1/events` for event-triggered processes; `SEND BPA EVENT <type>`. |
332
+
333
+ ## Separate optional SAP BTP platform administration server
334
+
335
+ The standalone `sap-ai-btp` companion is not a BAS-proxy child and never destination-prefixed. It exposes 15 tools over the user's installed SAP BTP CLI and their own `btp login --sso` session; the toolkit stores no credentials (only the CLI location in `~/.config/sap-ai-dev-toolkit/btp.json`, written by `sap-ai-dev --setup-btp`; `BTP_CLI` / `BTP_CLIENTCONFIG` win). Writes are limited to two confirmation-gated creates; results are secret-redacted and service-key credentials are always redacted.
336
+
337
+ | Group | Tools | Behavior |
338
+ |---|---|---|
339
+ | Connection | `btp_connection_info` | CLI path and source, config file, acting user; optional `btp --version` and global-account check. |
340
+ | Accounts and entitlements | `btp_get_account_hierarchy`, `btp_list_entitlements`, `btp_check_quota` | Directories and subaccounts; entitlements at global-account, directory or subaccount scope; quota verdict `available` / `not_entitled` / `insufficient_quota` / `assignment_not_ready`. |
341
+ | Instances and keys | `btp_list_service_instances`, `btp_get_service_instance`, `btp_list_service_keys`, `btp_get_service_key`, `btp_create_service_instance`, `btp_create_service_key` | Service Manager instances with offering/plan names, last operation and keys; redacted parameters and credentials. `CREATE BTP SERVICE INSTANCE <name>` (after a quota check), `CREATE BTP SERVICE KEY <name>`; parameters via a private temporary file. |
342
+ | Destinations, trust, Cloud Connectors | `btp_list_destinations`, `btp_get_destination`, `btp_get_trust`, `btp_list_cloud_connectors`, `btp_check_destination` | Destinations without secrets; IdP and destination trust with certificate expiry; Cloud Connectors and exposed systems via a Connectivity `api_access` key; pass/warn/fail/unknown destination and principal-propagation checks. |
343
+
344
+ ## Separate optional SAP Cloud ALM server
345
+
346
+ The standalone `sap-ai-cloud-alm` companion is not a BAS-proxy child and never destination-prefixed. It exposes 11 tools over the SAP Cloud ALM API (Landscape, Analytics, Raw Data Outbound Logs, Features, Event Situations). Authentication is a service key of a "SAP Cloud ALM API" instance (plan `standard`, client-secret binding) with client credentials only, from `CLOUD_ALM_SERVICE_KEY` / `CLOUD_ALM_URL` + `CLOUD_ALM_TOKEN_URL` + `CLOUD_ALM_CLIENT_ID` + `CLOUD_ALM_CLIENT_SECRET` or stored user-only in `~/.config/sap-ai-dev-toolkit/cloud-alm.json` by `sap-ai-dev --setup-cloud-alm`. All tools are read-only except the confirmation-gated alert close; results are secret-redacted.
347
+
348
+ | Group | Tools | Behavior |
349
+ |---|---|---|
350
+ | Connection | `calm_connection_info` | API/token host, auth, credential source; optional read-only Landscape and Analytics verification. |
351
+ | Landscape | `calm_list_landscape`, `calm_get_landscape_health` | Landscape objects with LMS id, tenant role, service type, system number and logical systems; exceptions (EXM), critical/warning Health Monitoring metrics and EVENTS alerts for at most 30 services grouped by role tier, each source failing independently. |
352
+ | Records and triage | `calm_list_monitoring_records`, `calm_triage_incident` | Raw OTLP records for `im`, `exm.im`, `exm.jam`, `iep`, `jam.run`, `bsm` (60-minute windows, `bsm` up to 31 days, `next_offset` paging); per-service triage with alert counts, events, errors, messages and `cpi_list_message_logs` / `get_application_log` handoff arguments. |
353
+ | Analytics | `calm_list_analytics_providers`, `calm_describe_analytics_provider`, `calm_query_analytics` | Authorized providers, provider fields and attribute values, one query summed/maxed per dimension combination or raw. |
354
+ | Features | `calm_list_features`, `calm_get_feature` | Feature lifecycle status with transport ids; one feature by UUID or display id, or the features linked to a transport id. No per-system import status. |
355
+ | Event situations | `calm_close_event_situation` | Close an alert by id or external id (mapped tickets closed unless `notify_ticketing: false`); `CLOSE CALM EVENT SITUATION <event_situation_id>` or `CLOSE CALM EVENT SITUATION BY EXTERNAL ID <external_id>`. |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sap-ai-dev-toolkit",
3
- "version": "0.9.9922",
3
+ "version": "0.9.9923",
4
4
  "description": "SAP AI development toolkit for BAS, ABAP, RAP, CAP, HANA Cloud, Fiori, UI5, and MCP",
5
5
  "author": "Gurkan Yilmaz",
6
6
  "type": "module",
@@ -10,6 +10,7 @@
10
10
  "dependencies": {
11
11
  "@abaplint/core": "2.119.0",
12
12
  "@modelcontextprotocol/sdk": "1.32.1",
13
+ "@sap/datasphere-cli": "2026.22.0",
13
14
  "@sap/hana-client": "2.30.27",
14
15
  "fflate": "0.8.3",
15
16
  "terminal-kit": "^3.1.4",
@@ -20,12 +21,17 @@
20
21
  "sap-ai-dev": "src/launcher.mjs",
21
22
  "sap-ai-dev-toolkit": "src/launcher.mjs",
22
23
  "sap-ai-hana": "src/hana-inspector.mjs",
23
- "sap-ai-integration": "src/integration-server.mjs"
24
+ "sap-ai-integration": "src/integration-server.mjs",
25
+ "sap-ai-datasphere": "src/datasphere-server.mjs",
26
+ "sap-ai-process-automation": "src/process-automation-server.mjs",
27
+ "sap-ai-btp": "src/btp-server.mjs",
28
+ "sap-ai-cloud-alm": "src/cloud-alm-server.mjs"
24
29
  },
25
30
  "scripts": {
26
31
  "postinstall": "node scripts/postinstall.mjs",
27
32
  "install:local": "node scripts/install-local.mjs",
28
33
  "test": "node --test --test-force-exit test/*.test.mjs",
34
+ "datasphere": "node src/launcher.mjs --datasphere",
29
35
  "test:live:s4h": "node scripts/run-live-s4h.mjs",
30
36
  "test:live:integration": "node scripts/run-live-integration.mjs",
31
37
  "test:visibility": "node --test test/setup.test.mjs test/terminal-ui.test.mjs",