sap-ai-dev-toolkit 0.9.97 → 0.9.9904
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.
- package/.github/agents/abap-developer.agent.md +4 -2
- package/.github/agents/abap-runtime-debugger.agent.md +3 -1
- package/.github/agents/hana-cloud-hdi-specialist.agent.md +3 -2
- package/.github/agents/rap-service-developer.agent.md +6 -4
- package/.github/agents/sap-solution-architect.agent.md +5 -3
- package/.github/skills/abap-debugging/SKILL.md +1 -1
- package/.github/skills/abap-development/SKILL.md +7 -1
- package/.github/skills/abap-runtime-analysis/SKILL.md +1 -1
- package/.github/skills/abap-testing-quality/SKILL.md +4 -2
- package/.github/skills/cds-development/SKILL.md +5 -1
- package/.github/skills/clean-core-extensibility/SKILL.md +3 -1
- package/.github/skills/hana-cloud-native-development/SKILL.md +1 -1
- package/.github/skills/hana-cloud-validation/SKILL.md +1 -1
- package/.github/skills/rap-development/SKILL.md +6 -2
- package/.github/skills/rap-service-delivery/SKILL.md +3 -3
- package/.github/skills/sap-sdlc-orchestration/SKILL.md +2 -2
- package/.github/skills/sap-standard-api-analysis/SKILL.md +2 -0
- package/.github/skills/sap-transport-release/SKILL.md +1 -1
- package/README.md +62 -73
- package/dist/checksums.txt +5 -5
- package/dist/vsp-darwin-arm64 +0 -0
- package/dist/vsp-darwin-x64 +0 -0
- package/dist/vsp-linux-arm64 +0 -0
- package/dist/vsp-linux-x64 +0 -0
- package/dist/vsp-win32-x64.exe +0 -0
- package/inventory.md +25 -15
- package/package.json +1 -1
- package/patches/vsp-bas-proxy-auth.patch +342 -0
- package/scripts/build-vsp.mjs +2 -2
- package/scripts/postinstall.mjs +22 -11
- package/scripts/publish-npm.mjs +4 -4
- package/src/binary.mjs +14 -14
- package/src/launcher.mjs +19 -19
- package/src/local-sap-gui.mjs +46 -21
- package/src/mcp-config.mjs +35 -14
- package/src/mcp-proxy.mjs +26 -16
- package/src/setup.mjs +4 -1
- package/src/sso-browsers.mjs +1 -1
- package/src/terminal-ui.mjs +5 -3
- package/tools.md +15 -9
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
SAP AI Dev Toolkit connects your AI coding assistant to the SAP development tools available for each selected destination. Agents can inspect ABAP and CDS, propose changes, run checks, and return the evidence—without losing sight of which SAP system each operation targets.
|
|
34
34
|
|
|
35
35
|
<p align="center">
|
|
36
|
-
<strong>Agent chat</strong> → <strong>destination-scoped MCP</strong> → <strong>
|
|
36
|
+
<strong>Agent chat</strong> → <strong>destination-scoped MCP</strong> → <strong>SAP runtime + configured route (BAS, CF, or local SAP GUI)</strong> → <strong>SAP ADT</strong> → <strong>your SAP system</strong><br>
|
|
37
37
|
<em>results and diagnostics flow back along the same path</em>
|
|
38
38
|
</p>
|
|
39
39
|
|
|
@@ -71,7 +71,7 @@ After setup, connect a selected BAS destination or local SAP GUI system from you
|
|
|
71
71
|
|
|
72
72
|
Use the attached destination-prefixed tools directly in chat. Do not launch `sap-ai-dev` or handcraft MCP JSON-RPC in a terminal to discover or call them.
|
|
73
73
|
|
|
74
|
-
**Prerequisite:** Node.js 20 or newer. The pinned
|
|
74
|
+
**Prerequisite:** Node.js 20 or newer. The pinned runtime ships with the package; no Go toolchain is installed or required.
|
|
75
75
|
|
|
76
76
|
## 🤖 Available agents and skills
|
|
77
77
|
|
|
@@ -95,7 +95,7 @@ Agents and skills install for the harnesses you pick during global installation:
|
|
|
95
95
|
|
|
96
96
|
<p align="center"><strong>💬 Request → 🔎 Inspect → 🧠 Reason → 🧑💻 Implement → 🧪 Verify → 📋 Report</strong></p>
|
|
97
97
|
|
|
98
|
-
The workflow covers ABAP, CDS, RAP, repository analysis, table and query access, testing, ATC, application logs, transports, and controlled source changes. The live MCP tool list remains the source of truth for what your connected SAP system and active
|
|
98
|
+
The workflow covers ABAP, CDS, RAP, repository analysis, table and query access, testing, ATC, application logs, transports, and controlled source changes. The live MCP tool list remains the source of truth for what your connected SAP system and active runtime mode expose.
|
|
99
99
|
|
|
100
100
|
## 🌟 Feature highlights
|
|
101
101
|
|
|
@@ -115,13 +115,13 @@ The workflow covers ABAP, CDS, RAP, repository analysis, table and query access,
|
|
|
115
115
|
| 📋 | **Transport readiness evidence** | Bring request, dependency, inactive-object, test, and ATC results together in one report. |
|
|
116
116
|
| 🧭 | **ABAP Cloud migration assessment** | Check SAP API release evidence in batches and focus review on recognized unreleased APIs. |
|
|
117
117
|
| 🚀 | **Reusable RAP smoke suites** | Turn OData metadata into repeatable GET checks with saved assertions. |
|
|
118
|
-
| 🩺 | **Connection Doctor** | Find setup issues across destination reachability,
|
|
118
|
+
| 🩺 | **Connection Doctor** | Find setup issues across destination reachability, runtime startup, SAP system info, and tool discovery. |
|
|
119
119
|
| 🧪 | **Offline playground** | Try the agents and workflows locally with sample SAP data; demo changes disappear on exit. |
|
|
120
120
|
| 🔐 | **Controlled SAP state changes** | State-changing actions require a known target and an explicit request; SAP authorizations still apply. |
|
|
121
121
|
| 🧱 | **Destination isolation** | Each generated MCP server is tied to its own `SAP_AI_DEV_TOOLKIT_DESTINATION`, helping prevent accidental cross-system execution. |
|
|
122
122
|
| 🛡️ | **Credential-safe configuration** | Credentials, cookies, usernames, passwords, and raw destination payloads are not written into MCP configuration. |
|
|
123
123
|
|
|
124
|
-
The catalog below covers source inspection, data, editing, quality, transports, logs, and multi-step development workflows. Availability can vary by SAP system and
|
|
124
|
+
The catalog below covers source inspection, data, editing, quality, transports, logs, and multi-step development workflows. Availability can vary by SAP system and runtime mode, so the live `tools/list` response is authoritative.
|
|
125
125
|
|
|
126
126
|
## 🚀 What can the agent do?
|
|
127
127
|
|
|
@@ -180,11 +180,11 @@ The package ships with five custom agents plus fourteen task-focused Agent Skill
|
|
|
180
180
|
|
|
181
181
|
## 🗺️ How it fits together
|
|
182
182
|
|
|
183
|
-
Each selected BAS destination becomes its own isolated MCP server identity. The MCP client discovers the live tools and schemas, the add-on routes calls to the correct
|
|
183
|
+
Each selected BAS destination becomes its own isolated MCP server identity. The MCP client discovers the live tools and schemas, the add-on routes calls to the correct runtime process, and the process reaches SAP ADT through the selected BAS destination.
|
|
184
184
|
|
|
185
185
|
## 🧰 Optional full-stack companion MCP servers
|
|
186
186
|
|
|
187
|
-
ABAP/RAP backend access is provided by this add-on's BAS
|
|
187
|
+
ABAP/RAP backend access is provided by this add-on's BAS proxy. For end-to-end SAP development, setup can also add managed companion MCP entries for frontend, CAP, browser validation, and read-only HANA inspection:
|
|
188
188
|
|
|
189
189
|
```sh
|
|
190
190
|
sap-ai-dev --setup --tools
|
|
@@ -242,7 +242,7 @@ Once the destination server is enabled in your chat's tools picker, ask for outc
|
|
|
242
242
|
| 🚦 **Explicit state change** | Activation, service publication, and transport creation happen only when requested and authorized. |
|
|
243
243
|
| 🧪 **Verification first** | The agent uses available lint, syntax, unit-test, ATC, and diagnostics workflows and reports what actually ran. |
|
|
244
244
|
| 🔒 **SAP authorization remains authoritative** | The add-on does not bypass backend SAP permissions. |
|
|
245
|
-
| 🚚 **Curated
|
|
245
|
+
| 🚚 **Curated SAP tool surface** | The proxy exposes the same curated developer-lifecycle set for every destination, plus local workflow tools; SAP authorizations and runtime safety checks still apply. |
|
|
246
246
|
| 🧱 **Per-destination isolation** | Generated MCP entries are scoped to a single `SAP_AI_DEV_TOOLKIT_DESTINATION`. |
|
|
247
247
|
| 🔑 **Credential-aware setup** | BAS authentication material stays in Destination configuration. Local SAP GUI setup writes VS Code input prompts for SAP user/password instead of raw credentials. |
|
|
248
248
|
|
|
@@ -273,12 +273,12 @@ Prefer a persistent global install? Install globally from SAP Business Applicati
|
|
|
273
273
|
Everything works natively on Windows — PowerShell, cmd, and Windows Terminal are all supported:
|
|
274
274
|
|
|
275
275
|
- `npm install --global sap-ai-dev-toolkit` puts three commands on `PATH`: `sap-ai-dev`, its alias `sap-ai-dev-toolkit`, and `sap-ai-hana`. If `sap-ai-dev` is reported as unknown, npm's global bin directory is missing from `PATH` (run `npm prefix -g` to find it) or the install did not complete — `npx --yes --ignore-scripts sap-ai-dev-toolkit --setup` works without any global install.
|
|
276
|
-
- The pinned
|
|
276
|
+
- The pinned SAP runtime ships inside the package as a native Windows executable; no Go toolchain, WSL, or extra downloads are required.
|
|
277
277
|
- MCP entries that launch through npm are written as `cmd /c npx ...` on Windows — the form VS Code, Claude Code, and Cursor can spawn there. Entries written on Linux/macOS use plain `npx`.
|
|
278
278
|
- Setup reads `mcp.json` even when Windows tools saved it with a UTF-8/UTF-16 BOM (PowerShell `>`/`Set-Content`, Notepad "UTF-8 with BOM") and rewrites it as plain UTF-8. If the existing file cannot be used as-is, setup self-heals before falling back to a reset: VS Code-style comments and trailing commas (JSONC) are recovered in place, torn reads from a concurrent editor save are re-read once, and broken `servers`/`inputs` fields are repaired individually. Every lossy change first backs up the original next to the real file as `mcp.json.healed|repaired|invalid-<timestamp>.bak` (exclusive create, so reruns never overwrite an earlier backup; symlinked configs keep their link). `sap-ai-dev --doctor` stays strict and reports such files instead of rewriting them — run `sap-ai-dev --setup` to heal.
|
|
279
279
|
- Local SAP GUI discovery reads the Windows landscape files and registry, and setup can write a Windows / smart card SSO entry that signs in through Microsoft Edge; see the “Local machine SAP GUI support” section below.
|
|
280
280
|
|
|
281
|
-
If you previously installed
|
|
281
|
+
If you previously installed an earlier package, remove it before installing this one:
|
|
282
282
|
|
|
283
283
|
```sh
|
|
284
284
|
npm uninstall --global bas-mcp-addon
|
|
@@ -295,14 +295,14 @@ The guided setup can also offer companion MCP entries with `sap-ai-dev --setup -
|
|
|
295
295
|
| CAP tools | `@cap-js/mcp-server` | CAP CDS/service model inspection and CAP app development |
|
|
296
296
|
| Browser validation | `@playwright/mcp` | Fiori/UI smoke tests, screenshots, and browser runtime validation |
|
|
297
297
|
|
|
298
|
-
The installer handles
|
|
298
|
+
The installer handles runtime provisioning automatically:
|
|
299
299
|
|
|
300
|
-
- Uses the package's bundled
|
|
301
|
-
- No Go toolchain is downloaded or required at install time; Go is only used by the repository's own
|
|
300
|
+
- Uses the package's bundled runtime executable for the current platform, verified against the npm-published `dist/checksums.txt`. When the bundled asset is missing (an interrupted install, an antivirus quarantine, or a git checkout without `dist/`), a checksum-anchored download from the matching GitHub release is the fallback; MCP server startup runs it too, because npx entries skip install scripts.
|
|
301
|
+
- No Go toolchain is downloaded or required at install time; Go is only used by the repository's own build script.
|
|
302
302
|
|
|
303
303
|
Setup detects where it is running. With `H2O_URL` set, it treats the environment as SAP Business Application Studio and opens a checkbox picker for BAS destinations, with no destinations selected by default: every row starts with an empty box `[ ]`. Use **Space** to tick a destination (`[✓]`) and **Enter** to confirm; the line under the list always names the next key to press. Press **a** to toggle all destinations (select all if any are unchecked; otherwise clear the selection). Pressing **Enter** with nothing selected asks for a second **Enter**, because confirming with none selected removes this add-on's managed MCP entries. When the `cf` CLI 8.18 or newer is authenticated to a targeted space, setup first offers an optional import from that space's Destination service; type **y** then **Enter** to include it, or press **Enter** to skip. Accepted CF and BAS destinations appear together in the picker.
|
|
304
304
|
|
|
305
|
-
Without `H2O_URL`, interactive setup looks for local SAP GUI system configuration on macOS and Windows (for example SAP GUI landscape XML and `saplogon.ini`). SAP GUI landscape files describe SAP GUI/DIAG connectivity, not the ADT HTTP(S) endpoint or a complete ABAP client catalog, so setup asks for the SAP client or comma-separated clients to configure for each selected system (for example `100,200`), proposes an ADT URL from the SAP GUI host and instance when it can, and asks you to confirm or edit that value. Multiple entered clients create separate isolated MCP entries, one per system/client pair. Local SAP GUI MCP server keys use the SAP system ID and client (for example `t4d-100`) instead of the longer SAP GUI description, while `SAP_AI_DEV_TOOLKIT_DESTINATION` still preserves the display name. When the ADT URL uses an IP address, setup automatically inspects the SAP HTTPS certificate, extracts DNS subjectAltName entries, and offers to enable secure TLS self-healing with a simple yes/no confirmation; you do not need to type certificate names. The generated MCP entry uses VS Code input prompts for the SAP user and password at server start; raw SAP credentials are not stored in `mcp.json`. On Windows, setup offers Windows / smart card SSO (the default) instead, which writes `SAP_AUTH_MODE=sso` without username/password prompts. At server start,
|
|
305
|
+
Without `H2O_URL`, interactive setup looks for local SAP GUI system configuration on macOS and Windows (for example SAP GUI landscape XML and `saplogon.ini`). SAP GUI landscape files describe SAP GUI/DIAG connectivity, not the ADT HTTP(S) endpoint or a complete ABAP client catalog, so setup asks for the SAP client or comma-separated clients to configure for each selected system (for example `100,200`), proposes an ADT URL from the SAP GUI host and instance when it can, and asks you to confirm or edit that value. Multiple entered clients create separate isolated MCP entries, one per system/client pair. Local SAP GUI MCP server keys use the SAP system ID and client (for example `t4d-100`) instead of the longer SAP GUI description, while `SAP_AI_DEV_TOOLKIT_DESTINATION` still preserves the display name. When the ADT URL uses an IP address, setup automatically inspects the SAP HTTPS certificate, extracts DNS subjectAltName entries, and offers to enable secure TLS self-healing with a simple yes/no confirmation; you do not need to type certificate names. The generated MCP entry uses VS Code input prompts for the SAP user and password at server start; raw SAP credentials are not stored in `mcp.json`. On Windows, setup offers Windows / smart card SSO (the default) instead, which writes `SAP_AUTH_MODE=sso` without username/password prompts. At server start, the runtime opens Microsoft Edge on the ADT URL; Edge completes the login the same way it does in your browser (smart card certificate and PIN, Kerberos, or company SAML/Entra login), and the session is cached and refreshed automatically. SSO entries need an ADT URL with a host name, not an IP address. npm may run its install hook without an interactive terminal, even when the shell is interactive; in that case, destination selection is skipped without changing MCP config, and you should run `sap-ai-dev --setup` afterwards.
|
|
306
306
|
|
|
307
307
|
### 🖥️ Local machine SAP GUI support
|
|
308
308
|
|
|
@@ -314,10 +314,10 @@ Supported discovery and runtime behavior:
|
|
|
314
314
|
- **Client selection:** SAP GUI entries may contain one default client but cannot reliably list every ABAP client available through ADT. Setup asks for one or more 3-digit clients per selected system; enter comma-separated values such as `100,200` to create separate MCP servers for each client.
|
|
315
315
|
- **ADT endpoint derivation:** SAP GUI entries usually contain DIAG/router information, not the HTTP(S) ADT endpoint. Setup derives the common ADT port from the SAP instance when possible, for example instance `00` → `https://host:44300`, and asks for confirmation only when configuring the selected entry.
|
|
316
316
|
- **Credential handling:** username/password local entries use VS Code MCP input prompts (`${input:...}`) at server start. Plain SAP credentials are not written to `mcp.json`.
|
|
317
|
-
- **Login methods:** local entries use either username/password or Windows / smart card SSO. SSO sets `SAP_SSO=true` for the
|
|
317
|
+
- **Login methods:** local entries use either username/password or Windows / smart card SSO. SSO sets `SAP_SSO=true` for the runtime, which drives Microsoft Edge for the login and re-opens an Edge window only when the cached session can no longer be refreshed silently.
|
|
318
318
|
- **IP-address HTTPS self-healing:** if the confirmed ADT URL is `https://<ip>:<port>` and the certificate is issued to DNS names, setup reads the certificate DNS SANs automatically and stores them as `SAP_TLS_SERVER_NAMES`. At runtime a loopback proxy dials the IP address but verifies TLS against those discovered DNS names, trying them one by one. Certificate verification stays enabled; there is no `--insecure` mode.
|
|
319
319
|
- **Private CAs:** if the SAP HTTPS certificate chains to an internal CA that is not trusted by the local Node runtime, set `SAP_TLS_CA_FILE` or `SAP_AI_DEV_TOOLKIT_TLS_CA_FILE` to a PEM CA bundle. This adds trust roots for the self-healing proxy without disabling certificate validation.
|
|
320
|
-
- **Redirect and request safety:** local loopback proxies reject cross-origin forward-form requests and rewrite same-origin SAP redirects back through the loopback listener, so
|
|
320
|
+
- **Redirect and request safety:** local loopback proxies reject cross-origin forward-form requests and rewrite same-origin SAP redirects back through the loopback listener, so the runtime stays on the safe route.
|
|
321
321
|
|
|
322
322
|
Typical local setup flow:
|
|
323
323
|
|
|
@@ -336,9 +336,9 @@ The same postinstall offers the bundled agents and skills for several AI coding
|
|
|
336
336
|
|
|
337
337
|
Some current npm versions also require install hooks to be approved. If npm reports that `sap-ai-dev-toolkit`'s `postinstall` was blocked, allow it during a fresh install with `npm install --global --allow-scripts=sap-ai-dev-toolkit sap-ai-dev-toolkit`, or run `sap-ai-dev --setup` from an interactive terminal after installation.
|
|
338
338
|
|
|
339
|
-
The setup report uses icons and terminal colors; set `NO_COLOR=1` to disable ANSI colors. Long-running steps (BAS destination discovery, ADT probes,
|
|
339
|
+
The setup report uses icons and terminal colors; set `NO_COLOR=1` to disable ANSI colors. Long-running steps (BAS destination discovery, ADT probes, runtime provisioning, `--doctor` checks) show an animated progress line so the terminal never looks stuck; it appears only on interactive terminals and is disabled automatically on CI — set `SAP_AI_DEV_TOOLKIT_DISABLE_SCAN_ANIMATION=true` to turn it off. The table is a weather report, not a bouncer: green **PASS** means the ADT probe responded, red **FAIL** means it failed, and yellow **SKIPPED** means it was skipped. Probe failures do not block MCP registration or startup for destinations you select.
|
|
340
340
|
|
|
341
|
-
Run `sap-ai-dev --setup` later to change the destination selection or remove generated destination entries. Run `sap-ai-dev --setup --tools` to also choose optional companion tools. Generated destination entries use the global `sap-ai-dev` command when it is on `PATH
|
|
341
|
+
Run `sap-ai-dev --setup` later to change the destination selection or remove generated destination entries. Run `sap-ai-dev --setup --tools` to also choose optional companion tools. Generated destination entries use the global `sap-ai-dev` command when it is on `PATH`; otherwise (for example after a pure npx setup) they automatically launch the pinned package version through `npx`, routed through `cmd /c npx` on Windows so every MCP host can spawn them. Pass `--npx` to force the npx launcher even when a global command exists; companion tools already use `npx` with their own npm packages.
|
|
342
342
|
|
|
343
343
|
If a setup step is skipped or fails, rerun it from an interactive terminal:
|
|
344
344
|
|
|
@@ -354,10 +354,10 @@ npx --yes --ignore-scripts sap-ai-dev-toolkit --setup
|
|
|
354
354
|
|
|
355
355
|
This lists discovered systems in the same checkbox picker, with nothing selected by default. Use **Space** to choose destinations, **Enter** to confirm, **a** to toggle all (select all if any are unchecked; otherwise clear the selection), and **m** to configure an undiscovered system manually in the manual entry wizard; configured systems join the picker pre-selected. Because no global `sap-ai-dev` command is on `PATH`, it writes MCP entries that launch the pinned package version through npx — through `cmd /c npx` on Windows, which is the form VS Code, Claude Code, and Cursor can spawn there. `--ignore-scripts` avoids running the install-time wizard a second time; add `--npx` to force this launcher shape even when the toolkit is installed globally. After setup, in BAS or VS Code run **MCP: List Servers**, select each chosen destination, and choose **Start Server**.
|
|
356
356
|
|
|
357
|
-
For a non-interactive installation or a platform without a published
|
|
357
|
+
For a non-interactive installation or a platform without a published runtime asset, provide a trusted binary override:
|
|
358
358
|
|
|
359
359
|
```sh
|
|
360
|
-
SAP_AI_DEV_TOOLKIT_BINARY=/path/to/
|
|
360
|
+
SAP_AI_DEV_TOOLKIT_BINARY=/path/to/runtime-executable npm install --global sap-ai-dev-toolkit
|
|
361
361
|
```
|
|
362
362
|
|
|
363
363
|
At the end of a global install, the color-coded summary shows the MCP config path, each generated entry name, destination/client/authentication, launch command, and environment key names (not values). The installer does not open an editor automatically; in BAS/VS Code:
|
|
@@ -436,7 +436,7 @@ cp -n "$ADDON_ROOT/.github/agents/"*.agent.md .github/agents/
|
|
|
436
436
|
cp -Rn "$ADDON_ROOT/.github/skills/." .github/skills/
|
|
437
437
|
```
|
|
438
438
|
|
|
439
|
-
Review skipped or conflicting files and merge changes manually. `LintABAP` analyzes caller-supplied source in memory; it does not read workspace files.
|
|
439
|
+
Review skipped or conflicting files and merge changes manually. `LintABAP` analyzes caller-supplied source in memory; it does not read workspace files. Editor diagnostics are separate from MCP tools and do not appear in `tools/list`.
|
|
440
440
|
|
|
441
441
|
<a id="bas"></a>
|
|
442
442
|
|
|
@@ -451,7 +451,7 @@ Interactive npm install and `sap-ai-dev --setup` both use a checkbox picker with
|
|
|
451
451
|
|
|
452
452
|
When nothing is detected — no BAS destinations, no Cloud Foundry imports, or no local SAP GUI entries — setup offers the **manual entry wizard** instead of stopping. The same wizard is available at any point in the destination picker via the **m** shortcut. It asks for a system name, the ADT HTTP(S) base URL (for example `https://myhost.example:44300`), one or more 3-digit SAP clients, and (on Windows) the login mode. You can add several systems in one run; each becomes the same isolated per-system/client MCP server the discovery flows generate, including credential input prompts and TLS self-healing for IP-based HTTPS URLs. Declining the wizard when nothing was detected exits setup without changes; aborting it inside the picker (Ctrl+C) returns to the selection unchanged.
|
|
453
453
|
|
|
454
|
-
Setup tidies its own footprint: it reconciles MCP entries managed by this package and removes legacy
|
|
454
|
+
Setup tidies its own footprint: it reconciles MCP entries managed by this package and removes legacy entries from earlier releases. Existing unrelated MCP servers and top-level configuration such as `inputs` stay untouched.
|
|
455
455
|
|
|
456
456
|
### 🌐 BAS destination example
|
|
457
457
|
|
|
@@ -520,7 +520,7 @@ One selected system, one isolated stdio MCP entry. Here's the shape:
|
|
|
520
520
|
}
|
|
521
521
|
```
|
|
522
522
|
|
|
523
|
-
The MCP protocol `serverInfo.name` is the lowercased destination slug
|
|
523
|
+
The MCP protocol `serverInfo.name` is the lowercased destination slug, so each wizard-generated destination has its own identity instead of the shared `sap-ai-dev-toolkit` name.
|
|
524
524
|
|
|
525
525
|
Credentials, cookies, SAP usernames, passwords, and raw BAS destination payloads are not written to the MCP configuration.
|
|
526
526
|
|
|
@@ -530,9 +530,8 @@ The configuration path is selected in this order:
|
|
|
530
530
|
|
|
531
531
|
1. `SAP_AI_DEV_MCP_CONFIG`, when set.
|
|
532
532
|
2. `SAP_AI_DEV_TOOLKIT_MCP_CONFIG`, when set.
|
|
533
|
-
3.
|
|
534
|
-
4.
|
|
535
|
-
5. The default MCP user configuration location.
|
|
533
|
+
3. An existing MCP user configuration detected automatically.
|
|
534
|
+
4. The default MCP user configuration location.
|
|
536
535
|
|
|
537
536
|
Set `SAP_AI_DEV_MCP_CONFIG` to use a specific configuration file:
|
|
538
537
|
|
|
@@ -554,9 +553,9 @@ The file must be strict JSON with an object-valued `servers` property. Existing
|
|
|
554
553
|
|
|
555
554
|
With `H2O_URL` set, the normal command starts the MCP proxy. Each generated entry supplies one `SAP_AI_DEV_TOOLKIT_DESTINATION`, so each server stays in its own lane and exposes only its selected SAP system.
|
|
556
555
|
|
|
557
|
-
The proxy exposes a curated subset of
|
|
556
|
+
The proxy exposes a curated subset of upstream tools, plus local `LintABAP`, destination-scoped workflow tools, and the convenience `GetApplicationLog` mapping when the SAP router is available. Hidden upstream tools remain available only behind local workflow chaining where required; they are not advertised or directly callable through the proxy. The runtime can also be invoked directly outside BAS with an explicit command argument.
|
|
558
557
|
|
|
559
|
-
Without `H2O_URL`, generated local SAP GUI entries start a destination-scoped local MCP server. In an interactive local terminal with no arguments, `sap-ai-dev` starts local setup. Other non-setup arguments are passed directly to the installed
|
|
558
|
+
Without `H2O_URL`, generated local SAP GUI entries start a destination-scoped local MCP server. In an interactive local terminal with no arguments, `sap-ai-dev` starts local setup. Other non-setup arguments are passed directly to the installed runtime executable—no BAS proxy detour.
|
|
560
559
|
|
|
561
560
|
### 🔄 How an MCP tool call reaches SAP
|
|
562
561
|
|
|
@@ -566,7 +565,7 @@ Each generated MCP server entry is named with the lowercased destination slug: `
|
|
|
566
565
|
|
|
567
566
|
Upgrading from an earlier release that wrote mixed-case entry names (for example `ActionS4D` or `cf:<guid>:<guid>:<name>`)? Re-run `sap-ai-dev --setup` to replace legacy entries — this is the only migration path for Cloud Foundry entries — or run `sap-ai-dev --doctor` to rename BAS entries in place. Then reload the BAS window and start a new chat; an existing chat keeps its stale tool binding. If setup reports that the lowercase name already exists and is not managed by this package, rename or remove that user-owned server entry first.
|
|
568
567
|
|
|
569
|
-
The proxy keeps
|
|
568
|
+
The proxy keeps upstream tool descriptions and input schemas, then adds the destination label. `LintABAP` and the workflow tools are implemented locally; they use the schemas shown by `tools/list` and call only the destination attached to their name. Linting operates on submitted source in memory. The live `tools/list` result remains the source of truth for the installed runtime's exact schemas.
|
|
570
569
|
|
|
571
570
|
<a id="tools"></a>
|
|
572
571
|
|
|
@@ -574,7 +573,7 @@ The proxy keeps VSP tool descriptions and input schemas, then adds the destinati
|
|
|
574
573
|
|
|
575
574
|
From read-only inspection to controlled SAP changes. The catalog is organized by developer intent so you can quickly see what the agent can inspect, query, validate, edit, activate, or prepare for transport.
|
|
576
575
|
|
|
577
|
-
The menu includes the tools registered by the active
|
|
576
|
+
The menu includes the tools registered by the active runtime mode, the `GetApplicationLog` mapping, local linting, and destination workflows where their required capabilities are available. Focused mode may omit `ActivateMultiple`, `GetUserTransports`, and `GetTransportInfo`; the live `tools/list` result remains authoritative.
|
|
578
577
|
|
|
579
578
|
### 🧹 Lint submitted ABAP source locally
|
|
580
579
|
|
|
@@ -597,7 +596,7 @@ The single text item in the MCP result contains JSON: `{ "status": "clean" | "is
|
|
|
597
596
|
|
|
598
597
|
### 🧩 Review and delivery workflows
|
|
599
598
|
|
|
600
|
-
These local tools are namespaced by destination. Change-set tools appear when
|
|
599
|
+
These local tools are namespaced by destination. Change-set tools appear when the runtime exposes `GetSource` and `WriteSource`; transport and Clean Core tools appear when their underlying checks exist. RAP suite tools use the selected destination's proxy route.
|
|
601
600
|
|
|
602
601
|
| Tool | Behavior |
|
|
603
602
|
| --- | --- |
|
|
@@ -608,13 +607,13 @@ These local tools are namespaced by destination. Change-set tools appear when VS
|
|
|
608
607
|
| `GenerateRAPRegressionSuite` | Read `$metadata` and return reusable JSON with a metadata check and one `$top=1` GET for each entity set. |
|
|
609
608
|
| `RunRAPRegressionSuite` | Run the saved suite with GET requests, expected status/content-type checks, and optional JSON-path assertions. Requests stay under the same `/sap/opu/odata` service root; response bodies are capped at 2 MiB. |
|
|
610
609
|
|
|
611
|
-
For a change set, pass the exact `GetSource` arguments and observed full source for each object, plus exact `WriteSource` arguments containing the replacement source. Each source is limited to 128 KiB and 1,000 lines so the full diff can be reviewed. Review every diff before calling `ApplyABAPChangeSet`. Each object is checked immediately before its write; a change after that read can still race the write because
|
|
610
|
+
For a change set, pass the exact `GetSource` arguments and observed full source for each object, plus exact `WriteSource` arguments containing the replacement source. Each source is limited to 128 KiB and 1,000 lines so the full diff can be reviewed. Review every diff before calling `ApplyABAPChangeSet`. Each object is checked immediately before its write; a change after that read can still race the write because the runtime does not expose compare-and-write here.
|
|
612
611
|
|
|
613
612
|
For a transport report, include exactly one `GetTransport` check whose `transport` matches `transport_id`, then add applicable dependency, inactive-object, ABAP Unit, or ATC checks. Each uses the exact arguments in the live upstream schema.
|
|
614
613
|
|
|
615
614
|
For an ABAP Cloud assessment, get object URIs from `SearchObject` and pass them to `PlanABAPCloudMigration`. It reports release evidence; it does not guess replacement APIs. Save the JSON from `GenerateRAPRegressionSuite` and pass it to `RunRAPRegressionSuite` after relevant service changes.
|
|
616
615
|
|
|
617
|
-
`sap-ai-dev --doctor` probes each discovered destination, checks that each managed MCP entry still matches its selected BAS destination, starts
|
|
616
|
+
`sap-ai-dev --doctor` probes each discovered destination, checks that each managed MCP entry still matches its selected BAS destination, starts the runtime, lists MCP tools, and calls `GetSystemInfo` directly when that tool is exposed. It repairs only tagged toolkit-owned BAS entries that can be verified against complete destination discovery; it does not add destinations, remove stale or third-party entries, or overwrite malformed configuration. `--doctor --json` reports redacted diagnostics and exits unsuccessfully when a required check fails.
|
|
618
617
|
|
|
619
618
|
`tools/list` confirms what this MCP server exposes; it does not prove that VS Code attached the server to the active chat. Start the selected destination in **MCP: List Servers**, enable it in the Chat tools picker, and reload/reselect the agent if the host binding is stale. This add-on cannot inspect or repair another MCP server's registration or a host-wide tool budget.
|
|
620
619
|
|
|
@@ -639,6 +638,7 @@ For an ABAP Cloud assessment, get object URIs from `SearchObject` and pass them
|
|
|
639
638
|
| `GetFunction`, `GetClass`, `GetClassComponents`, `GetClassInclude`, `GetProgram`, `GetInclude`, `GetInterface` | Read supported object-specific source or metadata views. |
|
|
640
639
|
| `ListDependencies` | List dependencies for impact and transport-readiness planning. |
|
|
641
640
|
| `GetInactiveObjects` | List objects changed by the current user but not yet activated. |
|
|
641
|
+
| `UI5ListApps`, `UI5GetApp`, `UI5GetFileContent` | List UI5/Fiori apps in the ABAP repository and read their files. Read-only: the ADT filestore cannot deploy apps, so deploy them with SAP Fiori tools. |
|
|
642
642
|
|
|
643
643
|
### 🗃️ Read SAP tables and metadata
|
|
644
644
|
|
|
@@ -666,8 +666,11 @@ SAP authorizations and the destination's available APIs still apply.
|
|
|
666
666
|
| `SyntaxCheck` | Ask SAP to syntax-check source before saving or activation. |
|
|
667
667
|
| `Activate` | Activate one named ABAP object. |
|
|
668
668
|
| `ActivateMultiple` | Activate related objects together while resolving mutual dependencies, such as an include and its main program. |
|
|
669
|
+
| `CreateObject` | Create a new object, including RAP service bindings (`SRVB/SVB`; pass `binding_version` `V4` for Fiori Elements V4 apps, because the default is V2). |
|
|
670
|
+
| `PublishServiceBinding` | Publish an activated service binding as an OData service; V2 and V4 bindings are both supported. |
|
|
671
|
+
| `UnpublishServiceBinding` | Withdraw a published service binding. |
|
|
669
672
|
|
|
670
|
-
The write and
|
|
673
|
+
The write, activation, and publication tools change SAP state. Confirm the target, package, and transport before using them. `EditSource` performs a focused replacement; its default syntax check prevents saving when syntax errors are reported.
|
|
671
674
|
|
|
672
675
|
### ✅ Test and inspect the system
|
|
673
676
|
|
|
@@ -693,11 +696,11 @@ The write and activation tools change SAP state. Confirm the target, package, an
|
|
|
693
696
|
| `UnlockObject` | Unlock an ABAP repository object in SAP. |
|
|
694
697
|
| `CreateTransport` | Create a transport request. |
|
|
695
698
|
| `CheckTransportReadiness` | Collect a whitelisted bundle of transport, dependency, inactive-object, ABAP Unit, and ATC evidence. |
|
|
696
|
-
`LockObject` and `UnlockObject` are state-changing
|
|
699
|
+
`LockObject` and `UnlockObject` are state-changing tools; the proxy does not retry them after a child crash to avoid duplicate side effects.
|
|
697
700
|
|
|
698
701
|
Transport release and deletion are not exposed by the curated proxy surface; release or delete transports outside this add-on after review.
|
|
699
702
|
|
|
700
|
-
The proxy
|
|
703
|
+
The proxy enables transport support and permits source edits in transportable packages through generated MCP entries. Runtime safety checks and SAP authorizations still apply.
|
|
701
704
|
|
|
702
705
|
### 📜 Read SAP application logs (SLG1)
|
|
703
706
|
|
|
@@ -710,7 +713,7 @@ The proxy starts VSP with `--enable-transports` and omits `--transport-read-only
|
|
|
710
713
|
- `messages: true` adds BALDAT details and T100 message text; otherwise, the tool returns log headers only.
|
|
711
714
|
- The proxy maps this convenience tool to the single upstream `SAP(action="analyze", type="application_log")` operation. The general-purpose `SAP` router itself is hidden from direct calls.
|
|
712
715
|
|
|
713
|
-
The proxy intentionally
|
|
716
|
+
The proxy intentionally limits the child process tool surface. Object deletion, broad trace surfaces, arbitrary SAP router/RFC calls, debugger helper/delete-breakpoint routes, UI5 repository writes, and transport release/delete tools are hidden from direct MCP calls. The curated debugger tools (`SetBreakpoint`, `GetBreakpoints`, `DebuggerAttach`, `DebuggerGetStack`, `DebuggerGetVariables`, `DebuggerStep`, and `DebuggerDetach`) remain available when supported by the runtime and target system. Direct runtime invocation without `H2O_URL` retains its full tool surface; in an interactive local terminal, use an explicit command argument because plain `sap-ai-dev` starts local setup.
|
|
714
717
|
|
|
715
718
|
### 🚀 Ready to put the tools to work from chat?
|
|
716
719
|
|
|
@@ -806,41 +809,35 @@ The response contains a `tools` array. A `RunQuery` entry resembles this excerpt
|
|
|
806
809
|
| --- | --- |
|
|
807
810
|
| `H2O_URL` | BAS endpoint used to discover destinations. Required for BAS discovery. |
|
|
808
811
|
| `SAP_AI_DEV_TOOLKIT_DESTINATION` | Comma-separated destination allowlist for normal runtime discovery. Setup clears this temporarily so it can display all eligible systems. |
|
|
809
|
-
| `SAP_AI_DEV_TOOLKIT_MODE` |
|
|
810
|
-
| `SAP_ALLOW_TRANSPORTABLE_EDITS` | Generated MCP entries set this to `true` to permit source edits in transportable packages;
|
|
811
|
-
| `SAP_AUTH_MODE=sso` | Local SAP GUI entry mode for Windows / smart card SSO. Runtime starts
|
|
812
|
-
| `SAP_SSO_FIRST_LOGIN` | Local SSO entries default to `window`: with no cached session, VSP opens the Edge sign-in window at once. Set `silent` to try a hidden browser first. |
|
|
813
|
-
| `SAP_SSO_SILENT_TIMEOUT` | How long a hidden SSO refresh may run before the Edge window opens, as a Go duration. Local SSO entries default to `15s`; VSP's own default is `45s`. |
|
|
814
|
-
| `SAP_BROWSER_EXEC` | Full path of the Chromium-based browser for SSO sign-in. It is tried first; the other browsers found on the machine remain fallbacks. |
|
|
812
|
+
| `SAP_AI_DEV_TOOLKIT_MODE` | Runtime mode (`expert` by default; `focused` omits `ActivateMultiple`, `GetUserTransports`, and `GetTransportInfo`). The proxy exposes its curated tool subset and local workflow tools, including `LintABAP`. |
|
|
813
|
+
| `SAP_ALLOW_TRANSPORTABLE_EDITS` | Generated MCP entries set this to `true` to permit source edits in transportable packages; runtime safety checks and SAP authorizations still apply. |
|
|
814
|
+
| `SAP_AUTH_MODE=sso` | Local SAP GUI entry mode for Windows / smart card SSO. Runtime starts the SAP process with `SAP_SSO=true`, which signs in through Microsoft Edge and caches the session per system and client. Older `windows-sso`, `browser-saml`, and `saml-password` entries are treated as `sso`. |
|
|
815
815
|
| `SAP_TLS_SERVER_NAMES` / `SAP_AI_DEV_TOOLKIT_TLS_SERVER_NAMES` | Comma-separated local SAP GUI TLS self-healing names, normally auto-discovered during setup from the SAP HTTPS certificate when `SAP_URL` uses an IP address. Runtime tries them one by one while keeping certificate validation enabled. |
|
|
816
816
|
| `SAP_TLS_SERVER_NAME` / `SAP_AI_DEV_TOOLKIT_TLS_SERVER_NAME` | Single-name compatibility form of the local SAP GUI TLS self-healing override. Prefer the auto-discovered plural variable written by setup. |
|
|
817
817
|
| `SAP_TLS_CA_FILE` / `SAP_AI_DEV_TOOLKIT_TLS_CA_FILE` | Optional PEM CA bundle for the local TLS self-healing proxy when the SAP HTTPS certificate chains to a private CA that is not in the OS/Node trust store. Certificate verification remains enabled. |
|
|
818
818
|
| `SAP_AI_DEV_TOOLKIT_HTTP_PROXY` | Egress proxy for BAS discovery and probe traffic. Takes precedence over `HTTP_PROXY`/`http_proxy`; unset means the default BAS proxy for `.dest` hosts, empty means direct. |
|
|
819
|
-
| `SAP_AI_DEV_TOOLKIT_REQUEST_TIMEOUT_MS` | Per-request timeout for calls forwarded to a
|
|
819
|
+
| `SAP_AI_DEV_TOOLKIT_REQUEST_TIMEOUT_MS` | Per-request timeout for calls forwarded to a runtime process (default 600000 = 10 minutes; `0` disables). A stalled request fails with a timeout error; the process is left running. |
|
|
820
820
|
| `SAP_AI_DEV_MCP_CONFIG` | Explicit MCP configuration path; highest precedence. |
|
|
821
821
|
| `SAP_AI_DEV_TOOLKIT_MCP_CONFIG` | Branded compatibility alias for the MCP configuration path. |
|
|
822
|
-
| `
|
|
823
|
-
| `
|
|
824
|
-
| `
|
|
825
|
-
| `
|
|
826
|
-
| `SAP_AI_DEV_TOOLKIT_CACHE_DIR` | Binary cache directory. Legacy `BAS_VSP_CACHE_DIR` still works. |
|
|
827
|
-
| `SAP_AI_DEV_TOOLKIT_VERSION` | Written by setup into each destination entry: the toolkit version that configured it. An older `sap-ai-dev` started from that entry hands off to this version through `npx` (see Self-healing modes). |
|
|
822
|
+
| `SAP_AI_DEV_TOOLKIT_BINARY` | Trusted prebuilt runtime executable; skips binary provisioning. |
|
|
823
|
+
| `SAP_AI_DEV_TOOLKIT_BINARY_URL` | Alternate runtime binary download URL (checksum-verified). |
|
|
824
|
+
| `SAP_AI_DEV_TOOLKIT_RELEASE_BASE_URL` | Override the base URL that runtime binaries are downloaded from. |
|
|
825
|
+
| `SAP_AI_DEV_TOOLKIT_CACHE_DIR` | Runtime binary cache directory. |
|
|
828
826
|
| `BAS_CF_SPACE_GUID`, `BAS_CF_DESTINATION_INSTANCE_GUID`, `BAS_CF_DESTINATION_INSTANCE`, `BAS_CF_DESTINATION_KEY`, `BAS_CF_DESTINATION_NAME`, `BAS_CF_CONNECTIVITY_INSTANCE_GUID`, `BAS_CF_CONNECTIVITY_INSTANCE`, `BAS_CF_CONNECTIVITY_KEY` | Written into generated Cloud Foundry destination entries; they reference service instances and key **names** (never credentials). |
|
|
829
|
-
| `GO_BINARY` | Explicit Go executable for the repository-only
|
|
827
|
+
| `GO_BINARY` | Explicit Go executable for the repository-only runtime build script; not used during installation. |
|
|
830
828
|
| `SAP_AI_DEV_TOOLKIT_SKIP_PROBE=true` | Skip destination probes; useful for controlled diagnostics or fixtures. |
|
|
831
829
|
| `HTTP_PROXY` / `HTTPS_PROXY` | BAS proxy settings used for destination-list requests, destination probing, and child processes. |
|
|
832
830
|
| `NO_PROXY` | Proxy bypass list for BAS destination-list requests; `.dest` hosts remain routed through the BAS proxy. |
|
|
833
831
|
|
|
834
832
|
#### Self-healing modes
|
|
835
833
|
|
|
836
|
-
|
|
837
|
-
Child crash recovery restarts a failed
|
|
838
|
-
|
|
839
|
-
Existing installs that still set the previous `BAS_VSP_*` environment variables remain supported. The setup wizard writes new MCP entries with the `SAP_AI_DEV_TOOLKIT_*` names.
|
|
834
|
+
Runtime processes connect to each configured destination URL directly. BAS destination authentication remains selected through the configured proxy-auth path; Cloud Foundry on-premise destinations continue through the separate Connectivity proxy.
|
|
835
|
+
Child crash recovery restarts a failed runtime process, re-initializes it, re-registers tools, and retries the interrupted `tools/call` once before surfacing an error. State-changing tools are not retried.
|
|
836
|
+
Existing installs retain support for legacy environment aliases. The setup wizard writes new MCP entries with the `SAP_AI_DEV_TOOLKIT_*` names.
|
|
840
837
|
|
|
841
838
|
#### Server logging
|
|
842
839
|
|
|
843
|
-
Every observable event — startup banner (version, PID,
|
|
840
|
+
Every observable event — startup banner (version, PID, runtime executable), destination discovery, runtime session initialization, each JSON-RPC request with its id, every tool call with duration and outcome, self-healing restarts, and errors — is logged twice: to **stderr** with ISO timestamps (visible when the server runs in a terminal or in hosts that surface stderr), and to the host's **MCP server output channel** as standard `notifications/message` log notifications (VS Code/BAS and Claude Code render these under the server's output). Log notifications start at `info`; send `logging/setLevel` with `debug` (or higher) from the client to adjust what reaches the channel — stderr always receives everything. Credentials, cookies, and tokens are redacted.
|
|
844
841
|
|
|
845
842
|
<a id="troubleshooting"></a>
|
|
846
843
|
|
|
@@ -855,13 +852,13 @@ sap-ai-dev --list-destinations --json
|
|
|
855
852
|
|
|
856
853
|
Next, check that the backend answers at `/sap/bc/adt`.
|
|
857
854
|
|
|
858
|
-
Runtime diagnostics take the stderr lane. In the MCP server's Output view, check per-destination ADT probe status,
|
|
855
|
+
Runtime diagnostics take the stderr lane. In the MCP server's Output view, check per-destination ADT probe status, child process stderr, and failed tool-call details; stdout is reserved for MCP protocol messages.
|
|
859
856
|
|
|
860
|
-
If `GetSystemInfo` or `RunQuery` reports a CSRF-token fetch failure,
|
|
857
|
+
If `GetSystemInfo` or `RunQuery` reports a CSRF-token fetch failure, the runtime tries `/sap/bc/adt/core/discovery` first and falls back to `/sap/bc/adt/discovery` when the core endpoint returns HTTP 404 or 5xx without a token. If both endpoints fail, the error includes their HTTP statuses; check BAS destination routing and the SAP ADT service. `GetInstalledComponents` is a separate GET request and a failure there is not evidence of a CSRF problem.
|
|
861
858
|
|
|
862
859
|
**`MCP config ... contains invalid JSON`** usually means one of three things, all healed automatically by setup: the file starts with a byte-order mark (Windows PowerShell `>` redirection, `Set-Content`, or Notepad's "UTF-8 with BOM" mode — invisible in editors and terminals), it contains comments or trailing commas (VS Code reads `mcp.json` as JSONC), or setup raced an editor save and read a torn file (retried once before healing). Unrecoverable content is backed up as `mcp.json.<kind>-<timestamp>.bak` and replaced; the backup path is printed in the setup warning. On older versions, re-save the file as UTF-8 without BOM (VS Code: "Change File Encoding → Save with Encoding → UTF-8") and rerun `sap-ai-dev --setup`.
|
|
863
860
|
|
|
864
|
-
If automatic
|
|
861
|
+
If automatic runtime provisioning fails, check network access and the package's supported platform. You can install Go manually or set `GO_BINARY` as an explicit fallback. A trusted prebuilt executable can be supplied with `SAP_AI_DEV_TOOLKIT_BINARY`.
|
|
865
862
|
|
|
866
863
|
## 🧑💻 Development
|
|
867
864
|
|
|
@@ -883,29 +880,21 @@ NPM_PUBLISH_TOKEN=npm_...
|
|
|
883
880
|
|
|
884
881
|
- `npm run publish:npm` publishes the version already set in `package.json`.
|
|
885
882
|
- To publish a patch bump, run `npm run publish:npm -- --patch`; it updates `package.json` and `package-lock.json` before publishing. If publishing fails after the bump, retry without `--patch`.
|
|
886
|
-
- npm's `prepublishOnly` hook builds the pinned
|
|
883
|
+
- npm's `prepublishOnly` hook builds the pinned runtime binaries for all platforms (including the Go toolchain if missing) and refuses to ship a tarball whose `dist/checksums.txt` does not list all five assets; it guards `npm run publish:npm` and a plain `npm publish` alike. Pass `--skip-build` to republish an already-built `dist/` without rebuilding.
|
|
887
884
|
- Preview the package without publishing, changing its version, or building with `npm run publish:npm -- --dry-run`.
|
|
888
|
-
- GitHub Actions runs the test suite on pushes to `main` and pull requests. A push to `main` that changes the `package.json` version runs the same checks, builds the
|
|
885
|
+
- GitHub Actions runs the test suite on pushes to `main` and pull requests. A push to `main` that changes the `package.json` version runs the same checks, builds the runtime binaries, publishes that version to npm, and creates a `v<version>` GitHub release with generated notes and the binaries plus `checksums.txt` attached for the download fallback.
|
|
889
886
|
- The publish workflow uses the `NPM_PUBLISH_TOKEN` GitHub repository secret. Verify it with `gh secret list`; the token value is never stored in the repository.
|
|
890
887
|
|
|
891
888
|
The token is not printed or stored in the repository.
|
|
892
889
|
|
|
893
890
|
## 📄 Acknowledgements and licenses
|
|
894
891
|
|
|
895
|
-
The original SAP AI Development Toolkit code and project changes are copyright (c) 2026 Gurkan Yilmaz and released under the MIT License. Everyone may use, copy, modify, distribute, sublicense, and sell copies, provided the copyright and license notices are retained; the software is provided without warranty. See `LICENSE`. Bundled
|
|
892
|
+
The original SAP AI Development Toolkit code and project changes are copyright (c) 2026 Gurkan Yilmaz and released under the MIT License. Everyone may use, copy, modify, distribute, sublicense, and sell copies, provided the copyright and license notices are retained; the software is provided without warranty. See `LICENSE`. Bundled third-party components retain their own licenses and notices in `NOTICE` and `LICENSE-APACHE-2.0.txt`.
|
|
896
893
|
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
Thanks to the VSP maintainers for the ADT/MCP implementation.
|
|
900
|
-
|
|
901
|
-
VSP is MIT-licensed. It permits use, modification, redistribution, and sale, provided the copyright and license notice are retained. It is permissive, not copyleft, and disclaims warranty.
|
|
902
|
-
|
|
903
|
-
The upstream VSP NOTICE identifies `open-rfc-go` and `open-rfc` under Apache-2.0. Redistributors must include the license and preserve applicable notices. Apache-2.0's patent license terminates if a recipient initiates patent litigation alleging that the work infringes; it grants no general trademark rights.
|
|
904
|
-
|
|
905
|
-
This package includes the upstream VSP license and notices, plus the Apache-2.0 license text, in `LICENSE`, `NOTICE`, and `LICENSE-APACHE-2.0.txt`. The upstream notice records other Go-module licenses in VSP's `go.mod` and `go.sum`; this is not a full audit of every transitive dependency.
|
|
894
|
+
The bundled runtime and its dependencies retain their original licenses and required attribution. The package includes the applicable notices and license texts in `LICENSE`, `NOTICE`, and `LICENSE-APACHE-2.0.txt`.
|
|
906
895
|
|
|
907
896
|
License sources:
|
|
908
897
|
|
|
909
|
-
-
|
|
910
|
-
-
|
|
898
|
+
- `LICENSE`
|
|
899
|
+
- `NOTICE`
|
|
911
900
|
- Apache License 2.0
|
package/dist/checksums.txt
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
87b75dce6f9517696d1326526ae06bf1c216695283db7b2ee34f47335a861892 vsp-linux-x64
|
|
2
|
+
c118ccd7043fc2eef9ad34d62ad78fb64c3ef3b4114d65b337b8d855b7b40f0d vsp-linux-arm64
|
|
3
|
+
c66c6b75b83d3d581f859fa0a21c5a6a6ca0c168019353e3cd34ac8ed4632e7e vsp-darwin-x64
|
|
4
|
+
6b7833dfd6de0b2d1f6dab921e6ba7dd795217c733552413b4382925590f4388 vsp-darwin-arm64
|
|
5
|
+
8d1f0bf29a83d3b301c5bb9a34811c8c2a84d63285b93a7a393d0c942bf1d2f6 vsp-win32-x64.exe
|
package/dist/vsp-darwin-arm64
CHANGED
|
Binary file
|
package/dist/vsp-darwin-x64
CHANGED
|
Binary file
|
package/dist/vsp-linux-arm64
CHANGED
|
Binary file
|
package/dist/vsp-linux-x64
CHANGED
|
Binary file
|
package/dist/vsp-win32-x64.exe
CHANGED
|
Binary file
|
package/inventory.md
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
# SAP AI Dev Toolkit Tool Inventory
|
|
2
2
|
|
|
3
|
-
This inventory reflects the current SAP AI Dev Toolkit proxy behavior in `src/mcp-proxy.mjs`. The proxy exposes a curated
|
|
3
|
+
This inventory reflects the current SAP AI Dev Toolkit proxy behavior in `src/mcp-proxy.mjs`. The proxy exposes a curated upstream tool allowlist plus destination-scoped local workflows; it does not expose every tool registered by the SAP runtime. The live MCP `tools/list` response remains authoritative because capabilities vary by runtime mode and SAP system.
|
|
4
4
|
|
|
5
5
|
## Summary
|
|
6
6
|
|
|
7
7
|
| Status | Count | Notes |
|
|
8
8
|
| --- | ---: | --- |
|
|
9
|
-
|
|
|
9
|
+
| Upstream tools | Up to 59 | Curated from the child tool list and exposed in lowercase snake_case, unprefixed (`get_source`) on single-destination servers; a destination slug prefix (`demo-abap_get_source`) appears only when one server fronts multiple destinations. |
|
|
10
10
|
| Local lint tool | 1 per destination | `LintABAP` analyzes caller-supplied ABAP source in memory; it is exposed publicly as `lint_abap`. |
|
|
11
|
-
| Workflow tools | Up to 6 per destination | Review/apply change sets, transport evidence, Clean Core release assessment, and read-only RAP regression suites. Some are exposed only when their upstream
|
|
12
|
-
| Convenience mapping | Dynamic | `GetApplicationLog` maps to
|
|
13
|
-
| Intentionally filtered
|
|
14
|
-
| Mode-dependent | Dynamic | Focused/expert mode and backend capabilities determine
|
|
11
|
+
| Workflow tools | Up to 6 per destination | Review/apply change sets, transport evidence, Clean Core release assessment, and read-only RAP regression suites. Some are exposed only when their upstream capabilities are registered. |
|
|
12
|
+
| Convenience mapping | Dynamic | `GetApplicationLog` maps to the upstream `SAP(action="analyze", type="application_log")` operation when the SAP router is registered. |
|
|
13
|
+
| Intentionally filtered tools | Dynamic | Destructive, broad-router, trace, and unsupported operations are hidden from direct calls. |
|
|
14
|
+
| Mode-dependent | Dynamic | Focused/expert mode and backend capabilities determine which tools are registered. |
|
|
15
15
|
|
|
16
|
-
The maximum fixture surface is
|
|
16
|
+
The maximum fixture surface is 67 tools per destination when expert-mode capabilities and all local workflows are available. Multiple selected destinations create separate MCP servers; this add-on cannot inspect VS Code's aggregate tool budget or per-chat tool binding.
|
|
17
17
|
|
|
18
|
-
## Known upstream
|
|
18
|
+
## Known upstream tools
|
|
19
19
|
|
|
20
|
-
These names are known from fixtures, README, and historical upstream
|
|
20
|
+
These names are known from fixtures, README, and historical upstream inventories. They are not a statement that the proxy exposes them; only the curated list in [tools.md](tools.md) is public through the proxy. Names absent from that allowlist are filtered even when the runtime registers them.
|
|
21
21
|
|
|
22
22
|
### Baseline/source inspection
|
|
23
23
|
|
|
@@ -139,14 +139,24 @@ These names are known from fixtures, README, and historical upstream VSP invento
|
|
|
139
139
|
- `PublishServiceBinding`
|
|
140
140
|
- `UnpublishServiceBinding`
|
|
141
141
|
|
|
142
|
-
###
|
|
142
|
+
### UI5 ABAP repository
|
|
143
|
+
|
|
144
|
+
- `UI5ListApps`
|
|
145
|
+
- `UI5GetApp`
|
|
146
|
+
- `UI5GetFileContent`
|
|
147
|
+
- `UI5UploadFile`
|
|
148
|
+
- `UI5DeleteFile`
|
|
149
|
+
- `UI5CreateApp`
|
|
150
|
+
- `UI5DeleteApp`
|
|
151
|
+
|
|
152
|
+
### General SAP router
|
|
143
153
|
|
|
144
154
|
- `SAP`
|
|
145
155
|
|
|
146
156
|
## Enabled add-on/local tools
|
|
147
157
|
|
|
148
158
|
- `LintABAP` — local add-on tool; lints caller-supplied ABAP source without contacting SAP.
|
|
149
|
-
- `GetApplicationLog` — add-on convenience tool mapped to
|
|
159
|
+
- `GetApplicationLog` — add-on convenience tool mapped to the upstream `SAP` operation with `action="analyze"` and `type="application_log"`.
|
|
150
160
|
|
|
151
161
|
These logical names are exposed through MCP in lowercase snake_case (`lint_abap`, `get_application_log`) because BAS/VS Code chat tool references bind only lowercase identifiers.
|
|
152
162
|
|
|
@@ -162,14 +172,14 @@ These logical names are exposed through MCP in lowercase snake_case (`lint_abap`
|
|
|
162
172
|
## Notes
|
|
163
173
|
|
|
164
174
|
- Runtime tool names are unprefixed lowercase snake_case (`run_query`) on the normal single-destination server; a `<destination-slug>_` prefix appears only on multi-destination servers. `tools/call` accepts the exact name returned by `tools/list`.
|
|
165
|
-
- The proxy starts
|
|
166
|
-
- The curated
|
|
175
|
+
- The proxy starts the SAP runtime with `--enable-transports`; generated MCP entries set `SAP_ALLOW_TRANSPORTABLE_EDITS=true`.
|
|
176
|
+
- The curated upstream tool surface and enabled transport mode are the same for every destination; SAP authorization remains authoritative.
|
|
167
177
|
- `SAP_AI_DEV_TOOLKIT_REQUEST_TIMEOUT_MS` (default 600000) bounds each forwarded call; stalled requests fail without killing the child.
|
|
168
|
-
- Transport release/deletion and the general-purpose `SAP` router are intentionally hidden from direct proxy calls. `GetApplicationLog` is the bounded convenience mapping for the SAP application-log route.
|
|
178
|
+
- Transport release/deletion, UI5 repository writes (the ADT filestore is read-only), and the general-purpose `SAP` router are intentionally hidden from direct proxy calls. `GetApplicationLog` is the bounded convenience mapping for the SAP application-log route.
|
|
169
179
|
|
|
170
180
|
## Separate optional HANA Cloud inspector
|
|
171
181
|
|
|
172
|
-
The HANA inspector is a standalone companion MCP process launched as `sap-ai-hana`; it is not a
|
|
182
|
+
The HANA inspector is a standalone companion MCP process launched as `sap-ai-hana`; it is not a child of the SAP runtime and is not destination-prefixed. It uses a read-only identity selected from `HANA_RO_*` variables or one unambiguous `VCAP_SERVICES` binding. Its host/schema target is fixed by process configuration; tool arguments cannot change it.
|
|
173
183
|
|
|
174
184
|
| Tool | Behavior |
|
|
175
185
|
| --- | --- |
|