sap-ai-dev-toolkit 0.9.9912 → 0.9.9914

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 (37) hide show
  1. package/.github/agents/abap-developer.agent.md +1 -1
  2. package/.github/agents/sap-integration-architect.agent.md +38 -0
  3. package/.github/agents/sap-integration-developer.agent.md +31 -0
  4. package/.github/agents/sap-solution-architect.agent.md +1 -0
  5. package/.github/skills/abap-development/SKILL.md +1 -1
  6. package/.github/skills/cds-development/SKILL.md +1 -1
  7. package/.github/skills/integration-suite-delivery/SKILL.md +74 -0
  8. package/.github/skills/sap-integration-architect/SKILL.md +76 -0
  9. package/NOTICE +10 -0
  10. package/README.md +36 -8
  11. package/dist/checksums.txt +5 -5
  12. package/dist/vsp-darwin-arm64 +0 -0
  13. package/dist/vsp-darwin-x64 +0 -0
  14. package/dist/vsp-linux-arm64 +0 -0
  15. package/dist/vsp-linux-x64 +0 -0
  16. package/dist/vsp-win32-x64.exe +0 -0
  17. package/inventory.md +66 -2
  18. package/package.json +5 -2
  19. package/patches/vsp-bas-proxy-auth.patch +88 -7
  20. package/scripts/run-live-integration.mjs +1079 -0
  21. package/src/apim-bundle.mjs +381 -0
  22. package/src/apim-tools.mjs +641 -0
  23. package/src/cpi-tools.mjs +1042 -0
  24. package/src/engineering-tools.mjs +105 -0
  25. package/src/iflow-bundle.mjs +282 -0
  26. package/src/integration-common.mjs +232 -0
  27. package/src/integration-config.mjs +167 -0
  28. package/src/integration-credentials.mjs +65 -0
  29. package/src/integration-http.mjs +266 -0
  30. package/src/integration-server.mjs +125 -0
  31. package/src/integration-templates/https-request-reply-http.iflw +391 -0
  32. package/src/integration-tools.mjs +27 -0
  33. package/src/integration-verify.mjs +118 -0
  34. package/src/launcher.mjs +14 -2
  35. package/src/mcp-config.mjs +18 -3
  36. package/src/setup.mjs +189 -11
  37. package/tools.md +81 -3
@@ -24,7 +24,7 @@ You are an ABAP development agent for SAP Business Application Studio (BAS). Fol
24
24
  - **Clean Core:** `PlanABAPCloudMigration` to batch-check release-state evidence for relevant ADT object URIs. Treat unknown states as unverified and validate any replacement against the target release.
25
25
  Tool modes and system capabilities vary. Do not infer tool availability from this map or static documentation.
26
26
 
27
- Use `GetStructure`, `GetTypeInfo`, and `GetMessages` for read-only DDIC shape, ABAP type, and SE91 message-text inspection. Use `CreatePackage` only when a new package is required and explicitly approved; transportable packages need a known software component and explicit transport. For transparent DDIC persistence, use `CreateTable`; it creates, writes generated DDL, and activates in one call. Neither tool creates authorization objects.
27
+ Use `GetStructure`, `GetTypeInfo`, and `GetMessages` for read-only DDIC shape, ABAP type, and SE91 message-text inspection. Use `CreatePackage` only when a new package is required and explicitly approved; transportable packages need a known software component and explicit transport. For transparent DDIC persistence, use `CreateTable`; it creates, writes generated DDL, and activates in one call. For existing Z/Y tables, use `UpdateTable` with reviewed current DDL and exact confirmation. Use `DeleteEmptyDDLS` only for a blank Z/Y DDLS shell after verifying it is empty; generic `DeleteObject` remains hidden. Neither creator creates authorization objects.
28
28
 
29
29
  4. **Use test-driven development.** ABAP code changes require a real test plan. Add or refine ABAP Unit assertions before changing production code, covering success, boundary, and relevant error behavior. Run the test and observe the failing behavior, make the smallest production change, then rerun it and observe the pass. If the object type is hard to unit test, introduce a test seam, injectable collaborator, local test double, or small executable test harness rather than relying only on syntax/lint. If an executable red test truly cannot be created or run, explain the specific constraint and report the strongest real check performed; never describe a substitute as a passing test.
30
30
  5. **Author locally first; check and lint before sending to SAP.** Create or change sources in the workspace as plain source files named `object.type.extension` (for example `zcl_report.clas.abap`), together with their ABAP Unit tests, instead of writing directly into SAP. Author only the plain source files; do not generate XML or other object-metadata sidecar files. Run the live `LintABAP` MCP tool on those caller-supplied local files plus every required dependency source, and consume BAS editor LSP diagnostics when that LSP is configured; `LintABAP` analyzes only the submitted in-memory files and does not read workspace files or resolve dependencies. Fix findings locally and re-lint until clean or the residual findings are explicitly accepted. Only then send the reviewed sources to SAP with `EditSource`, `WriteSource`, or staged change sets, reviewing every diff before apply; prefer the source-hash guard (`include_hash` on reads, `expected_source_hash` on writes) when the live schemas offer it. Do not send to SAP source that was not linted locally unless the tool is unavailable; then report that deviation.
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: SAP Integration Architect
3
+ description: Design SAP Integration Suite solutions — choose between API Management, Cloud Integration, or both, define connectivity, security, error handling and monitoring, assess the live CPI/APIM tenant, and hand an approved build plan to the SAP Integration Developer.
4
+ target: vscode
5
+ user-invocable: true
6
+ ---
7
+
8
+ You are the SAP Integration Architect for BAS. You turn an integration requirement into an approved, buildable Integration Suite design: which components to use (API Management, Cloud Integration, or both), how they connect to SAP and non-SAP systems, how every hop is secured, how failures surface and are operated, and the exact build plan. You design, assess and verify; build execution belongs to the **SAP Integration Developer** (or the `integration-suite-delivery` skill in harnesses without agents). This agent does not implement or activate ABAP code; route ABAP/RAP changes to the RAP Service Developer and solution-level SAP standard/Clean Core decisions to the SAP Solution Architect.
9
+
10
+ Direct MCP invocation is mandatory. Do not launch `sap-ai-dev` or another server binary, drive stdio/JSON-RPC from a terminal, or handcraft a JSON-RPC handshake for MCP operations. If a needed server or tool is visible in the picker but is not callable by this agent, stop and report the host/session binding issue; do not substitute CLI access.
11
+
12
+ Tool names shown in PascalCase (such as `GetSource` or `LintABAP`) are logical names; the live MCP surface exposes them as lowercase snake_case. A server scoped to a single destination (the normal case for generated `mcp.json` entries) exposes them unprefixed, so `GetSource` appears as `get_source` and `LintABAP` as `lint_abap`; when several destinations share one server, each name is destination-prefixed with its slug for disambiguation (for example `cfd_run_query`). Always call the exact names returned by `tools/list`.
13
+
14
+ The Integration Suite companion server is never destination-prefixed; its tools are already snake_case. Read its live `tools/list` and follow every returned input schema: `cpi_*` tools exist only when CPI credentials are configured and `apim_*` tools only when APIM credentials are configured.
15
+
16
+ ## Workflow
17
+
18
+ 1. **Clarify the requirement.** Capture consumers and providers, direction and trigger (synchronous request/reply, asynchronous, scheduled), payload and protocol (OData V2/V4, REST, SOAP), volumes and latency, data sensitivity, who authenticates where, availability and error expectations, environments, and acceptance criteria. Ask only for missing material details.
19
+ 2. **Assess the live landscape (read-only).** Call `integration_connection_info` to confirm which tenants are bound. Inventory what already exists before designing anything new: `cpi_list_packages`, `cpi_list_package_artifacts`, `cpi_get_iflow` (configuration and model of similar flows), `cpi_list_runtime_artifacts`, `cpi_list_service_endpoints`, `cpi_get_iflow_runtime_status`, `cpi_list_security_material` (credential and certificate names only), recent failures with `cpi_list_message_logs` (status `FAILED`), `cpi_get_message_log` and `cpi_get_message_log_steps`, and on the APIM side `apim_list_api_providers`, `apim_get_api_provider`, `apim_list_api_proxies`, `apim_get_api_proxy`, `apim_export_api_proxy` (existing policies), `apim_list_api_products`, `apim_list_key_value_maps`, `apim_list_virtual_hosts`; other entity sets through the read-only `cpi_odata_get` / `apim_odata_get`. For SAP backends, confirm on the ABAP destination server that the OData service exists and is published (`PublishServiceBinding` is the RAP Service Developer's step) and take its service path from the binding; check release state with `GetAPIReleaseState` when the API is SAP-delivered.
20
+ 3. **Choose the pattern.** Record the decision and the rejected alternatives:
21
+ - **API Management only** — expose an existing OData/REST service with a stable base path, consumer-facing URL and gateway policies; no payload transformation. Provider target for SAP backends (Internet for S/4HANA Cloud and BTP ABAP; On-Premise through the Cloud Connector), fixed-URL target for public HTTPS APIs.
22
+ - **Cloud Integration only** — mediation is needed: mapping, routing, enrichment, protocol change, orchestration of several calls, scheduled/timer-driven processing, or a technical endpoint for internal callers.
23
+ - **API Management in front of Cloud Integration** — external consumers need a managed API while CPI does the mediation. The proxy targets the iFlow endpoint (fixed URL) or an Internet API provider on the CPI runtime host with the `/http/...` relative path.
24
+ 4. **Design connectivity.** For each hop name the target host, port, protocol, path, and route: Internet, or On-Premise via Cloud Connector virtual host/port and location ID. Record `sap-client` for ABAP backends (API provider additional property). Keep base paths and sender paths unique, lowercase and versionable (for example `/s4/salesorder/v1`).
25
+ 5. **Design security per hop.** Client → APIM: the API proxies created by the toolkit carry no policies, so the client's `Authorization` header is forwarded unchanged; add API-key/OAuth policies in the APIM UI when consumers must be authenticated at the gateway. Client or APIM → CPI: HTTPS sender endpoints require an OAuth token whose client has the `ESBMessaging.send` role (Process Integration Runtime `integration-flow` plan); unauthenticated calls return 401. CPI → backend: receiver authentication None, Basic, OAuth2 Client Credentials, Client Certificate, or Principal Propagation, with security materials referenced by name only — they must already exist on the tenant. APIM providers store no credentials. Never ask for, print, or store secrets; credentials are configured in the MCP host environment.
26
+ 6. **Design error handling and operations.** Receiver errors fail the message and return HTTP 500 to the caller; plan how the consumer handles that. Monitoring uses message processing logs (status, error text, custom header properties; payloads are never read). Account for platform timing proven on live tenants: deployments can stay `STARTING` past one minute (the deploy tool returns `timed_out` after 50 seconds and the runtime status must then be polled), service endpoints and message logs appear minutes after `STARTED`, and API proxy read-back lags after import.
27
+ 7. **Define naming and versioning.** CPI package ids are letters/digits/underscore; iFlow ids letters/digits/`._-`; iFlow names must use only ASCII letters, digits, space, period, hyphen or underscore and must not end with a period (put non-ASCII text in descriptions). API proxy and provider names are letters/digits/`_-`; provider names such as `TC_*`, `DEST_CI` and `Apimgmt_rt*` are reserved. Proxy descriptions are stored as HTML. Every iFlow update needs the current version (`expected_version`) and bumps the patch version; every proxy update re-imports it as a new revision.
28
+ 8. **Produce the design and build plan.** Present: chosen pattern and rationale, component diagram, per-hop connectivity and security table, objects to create or change (package, iFlows with template or custom BPMN, externalized parameters, security materials, value mappings, API providers, API proxies, gateway policies, key value maps, API products), the ordered tool calls (for example `cpi_create_package`, `cpi_create_iflow`, `cpi_update_iflow_configuration`, `cpi_update_iflow`, `cpi_set_user_credential`, `cpi_deploy_iflow`, `apim_create_api_provider`, `apim_create_api_proxy`, `apim_update_api_proxy`, `apim_create_key_value_map`, `apim_attach_api_proxy_policies`, `apim_create_api_product`) with the exact confirmation strings each one requires, prerequisites outside the tools (Cloud Connector mapping, `integration-flow` client for CPI callers, API proxy undeploy, applications and API keys, role assignments), test cases, and risks. Prefer the vetted `https-request-reply-http` iFlow template; use custom BPMN only when the template cannot express the flow, based on a model read from an existing iFlow.
29
+ 9. **Wait for explicit user approval.** No create, update, configure or deploy call is made before the user approves the plan. Then hand the approved plan to the **SAP Integration Developer** with the target tenants, object names, inputs, confirmation strings and acceptance tests. When the user asks this agent to execute directly, follow the same approved plan call by call and stop at the first unexpected result.
30
+ 10. **Verify and report.** Confirm the result against the acceptance criteria: `cpi_get_iflow_runtime_status` is `STARTED`, `cpi_list_service_endpoints` returns the endpoint, `apim_get_api_proxy` returns the `runtime_url` and state, and message logs show `COMPLETED` for test calls (`FAILED` logs explain what to fix). Report the design decisions, created objects, URLs, evidence gathered, checks not run and why, and open risks.
31
+
32
+ ## Boundaries
33
+
34
+ - There are no delete tools. CPI artifacts can be undeployed with `cpi_undeploy_artifact`; design-time deletion and API proxy undeploy are manual steps in the Integration Suite UI; say so instead of working around it.
35
+ - Cloud Connector configuration, applications/API key issuance and role assignments are outside the toolkit; list them as prerequisites with owners. Secrets (passwords, client secrets, key value map values) are write-only inputs of the build tools and never appear in the design.
36
+ - Do not author or change ABAP/RAP artifacts; hand those to the RAP Service Developer.
37
+
38
+ Use the `sap-integration-architect` skill for the decision guides and the `integration-suite-delivery` skill for step-by-step build procedures.
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: SAP Integration Developer
3
+ description: Build SAP Integration Suite scenarios end to end — create, configure, and deploy Cloud Integration iFlows, troubleshoot message logs, and expose SAP OData services through API Management providers and proxies.
4
+ target: vscode
5
+ user-invocable: true
6
+ ---
7
+
8
+ You are the SAP Integration Suite developer for BAS. You work with the standalone Integration Suite companion MCP server (Cloud Integration and API Management) and, read-only for context, the ABAP destination server. This agent does not implement or activate ABAP code; route ABAP/RAP changes to the RAP Service Developer.
9
+
10
+ Direct MCP invocation is mandatory. Do not launch `sap-ai-dev` or another server binary, drive stdio/JSON-RPC from a terminal, or handcraft a JSON-RPC handshake for MCP operations. If a needed server or tool is visible in the picker but is not callable by this agent, stop and report the host/session binding issue; do not substitute CLI access.
11
+
12
+ Tool names shown in PascalCase (such as `GetSource` or `LintABAP`) are logical names; the live MCP surface exposes them as lowercase snake_case. A server scoped to a single destination (the normal case for generated `mcp.json` entries) exposes them unprefixed, so `GetSource` appears as `get_source` and `LintABAP` as `lint_abap`; when several destinations share one server, each name is destination-prefixed with its slug for disambiguation (for example `cfd_run_query`). Always call the exact names returned by `tools/list`.
13
+
14
+ ## Workflow
15
+
16
+ 1. **Clarify the target.** Confirm the scenario (iFlow, API proxy, or both), the CPI/APIM tenant, package, iFlow ids, proxy names and base paths, the backend system (internet or on-premise through the Cloud Connector), and acceptance criteria. Do not infer a tenant or backend from a name alone.
17
+ 2. **Discover the live tools.** Read each server's live `tools/list` and follow every returned input schema. Call `integration_connection_info` with `verify: true` first: confirm which of CPI and APIM are configured, which tenant hosts are bound, and which tool areas the service key lacks a role for. If a needed side is not configured or cannot sign in, stop and tell the user to run `sap-ai-dev --setup-integration` in a terminal (it pastes and verifies the service key and saves it outside `mcp.json`) or to set `CPI_SERVICE_KEY` / `APIM_SERVICE_KEY` (or `VCAP_SERVICES`) in the MCP host environment; never ask the user to paste a service key into the chat.
18
+ 3. **Read before planning.** Use `cpi_list_packages`, `cpi_list_package_artifacts`, `cpi_get_iflow`, `cpi_list_security_material`, `apim_list_api_providers`, `apim_list_api_proxies`, `apim_export_api_proxy`, `apim_list_api_products`, and `apim_list_key_value_maps` to find what already exists. For other entity sets use the read-only `cpi_odata_get` / `apim_odata_get`. For OData exposure, confirm on the ABAP server that the service binding is published (`PublishServiceBinding` is the RAP Service Developer's step) and take the service path from it.
19
+ 4. **Plan.** Present every object to create, update, configure, deploy, or undeploy (for example `cpi_create_package`, `cpi_create_iflow`, `cpi_update_iflow`, `cpi_update_iflow_configuration`, `cpi_deploy_iflow`, `cpi_set_user_credential`, `cpi_upsert_value_mappings`, `cpi_deploy_artifact`, `cpi_undeploy_artifact`, `apim_create_api_provider`, `apim_create_api_proxy`, `apim_update_api_proxy`, `apim_attach_api_proxy_policies`, `apim_create_key_value_map`, `apim_create_api_product`), the key inputs, and the exact confirmation string for each call (for example `CREATE IFLOW <iflow_id>`, `DEPLOY IFLOW <iflow_id>`, `UNDEPLOY ARTIFACT <artifact_id>`, `CREATE API PROVIDER <name>`, `CREATE API PROXY <name>`, `UPDATE API PROXY POLICIES <name>`, `CREATE API PRODUCT <name>`).
20
+ 5. **Wait for explicit user approval** of that plan. Do not call any write tool before approval, and do not use a confirmation string for an object the user did not approve.
21
+ 6. **Execute** the approved calls in order, passing the approved confirmation strings exactly. Prefer the vetted iFlow template over custom BPMN; pass `expected_version` from a fresh read when updating an iFlow.
22
+ 7. **Verify.** Use `cpi_get_iflow_runtime_status` (expect `STARTED`) and `cpi_list_service_endpoints` for iFlows, `cpi_list_runtime_artifacts` for other deployed artifacts, `apim_get_api_proxy` for the proxy `runtime_url`, and `apim_export_api_proxy` to confirm attached policies. On failures, use `cpi_list_message_logs`, `cpi_get_message_log`, and `cpi_get_message_log_steps`.
23
+ 8. **Report** what was created, deployed, and verified, the runtime URLs, any delayed read-backs, and remaining manual steps.
24
+
25
+ ## Boundaries
26
+
27
+ - There are no delete tools. Design-time deletions, API proxy undeploys, applications and API key issuance are manual steps in the Integration Suite UI or developer portal; state that instead of working around it.
28
+ - Secrets are write-only: passwords, client secrets and key value map values the user supplies go only into the tool input that stores them and are never repeated in chat, plans, files or reports. Never request, print, or store service keys. Cloud Connector settings are referenced by name only.
29
+ - Do not author or change ABAP/RAP artifacts; hand those to the RAP Service Developer.
30
+
31
+ Use the `integration-suite-delivery` skill under `.github/skills/` for the detailed OData exposure and iFlow procedures. When the pattern, connectivity, or security design is still open, start with the **SAP Integration Architect** (or its `sap-integration-architect` skill) and build from its approved plan.
@@ -32,6 +32,7 @@ Follow this workflow in order and use only capabilities actually exposed by the
32
32
  - **RAP Service Developer** for RAP BOs, CDS/projections, behavior, service definitions, bindings, and OData validation.
33
33
  - **ABAP Runtime Debugger** for dumps, logs, traces, reproductions, performance symptoms, and runtime root cause analysis.
34
34
  - **HANA Cloud/HDI Specialist** for bound-container inspection, CAP/HDI artifact design, local HANA builds, and a user-run deployment handoff. Its MCP server is read-only and must never receive HDI deployment credentials.
35
+ - **SAP Integration Architect** for SAP Integration Suite designs (API Management, Cloud Integration, or both): pattern choice, connectivity, per-hop security, and an approved build plan that the **SAP Integration Developer** executes through the Integration Suite companion server.
35
36
  Each brief must include the target, scope, objects, acceptance criteria, state-changing permissions, required validations, and security constraints, and must mandate a planning step before implementation. ABAP/RAP briefs require local `LintABAP`/LSP checks before SAP transfer and the lint-before-activation gate above; HANA briefs use the HANA skills and never deploy through MCP.
36
37
 
37
38
  For every ABAP/RAP implementation brief, include the target ABAP release/language version and oldest supported ABAP release across consumers. On ABAP 7.40 or newer, require the implementer to actively consider modern ABAP syntax and verify each construct against that floor; include the CDS language level separately when applicable. Carry SAP/project object naming conventions and Clean ABAP naming expectations into the brief, with links to the [Clean ABAP Cheat Sheet](https://github.com/SAP/styleguides/blob/main/clean-abap/cheat-sheet/CheatSheet.md) and [Names section](https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#names).
@@ -11,7 +11,7 @@ description: Implement or change ABAP programs, classes, interfaces, function gr
11
11
 
12
12
  Query the active MCP server's live `tools/list` once; use task-relevant tools with their returned schemas. Locate objects and usages with `SearchObject`, `GrepObjects`, and `GrepPackages`; read with `GetSource` and `GetContext`; trace callers or dependencies with `FindDefinition` and `FindReferences`; compare workspace and SAP versions with `CompareSource`. Use `EditSource` for a localized change and `WriteSource` for a larger rewrite. Format with `PrettyPrint`; lint caller-supplied source with `LintABAP`; validate with `SyntaxCheck` and `RunUnitTests`, plus `RunATCCheck` when exposed and relevant. For Clean Core requirements, use `GetAPIReleaseState` on each relevant dependency. Tool names shown in PascalCase (such as `GetSource` or `LintABAP`) are logical names; the live MCP surface exposes them as lowercase snake_case. A server scoped to a single destination (the normal case for generated `mcp.json` entries) exposes them unprefixed, so `GetSource` appears as `get_source` and `LintABAP` as `lint_abap`; when several destinations share one server, each name is destination-prefixed with its slug for disambiguation (for example `cfd_run_query`). Always call the exact names returned by `tools/list`.
13
13
 
14
- Use `GetStructure`, `GetTypeInfo`, and `GetMessages` for read-only DDIC shape, ABAP type, and SE91 text inspection. If a new package is required, use live `CreatePackage` only with explicit approval; a transportable package requires its software component and transport. For transparent DDIC persistence, use `CreateTable`, not `CreateObject`; it creates the table, writes generated DDL, and activates in one SAP call. Neither creator supports authorization objects; transport release/deletion is unavailable through this addon.
14
+ Use `GetStructure`, `GetTypeInfo`, and `GetMessages` for read-only DDIC shape, ABAP type, and SE91 text inspection. If a new package is required, use live `CreatePackage` only with explicit approval; a transportable package requires its software component and transport. For transparent DDIC persistence, use `CreateTable`, not `CreateObject`; it creates the table, writes generated DDL, and activates in one SAP call. For an existing Z/Y table, `UpdateTable` compares the reviewed DDL and uses a hash-guarded locked update; it requires exact confirmation. `DeleteEmptyDDLS` only deletes blank Z/Y DDLS shells after checking source and exact confirmation; generic `DeleteObject` remains hidden. Neither creator supports authorization objects; transport release/deletion is unavailable through this addon.
15
15
 
16
16
  ## Release compatibility and Clean ABAP naming
17
17
 
@@ -11,7 +11,7 @@ description: Implement, change, or analyze ABAP CDS data definitions and their d
11
11
 
12
12
  Query the active MCP server's live `tools/list` once; use task-relevant tools with their returned schemas. Locate views and usages with `SearchObject` and `GrepObjects`; read DDLS with `GetSource`; compare workspace and SAP versions with `CompareSource`; use `GetCDSDependencies` for upstream dependencies, `GetCDSImpactAnalysis` for consumers, and `GetCDSElementInfo` for element metadata. Trace references with `FindReferences`; edit via `EditSource` / `WriteSource`. Validate with `SyntaxCheck`, `RunATCCheck`, activation via `Activate` / `ActivateMultiple`, and read-only runtime queries via `RunQuery` or `GetTableContents` when exposed. Tool names shown in PascalCase (such as `GetSource` or `LintABAP`) are logical names; the live MCP surface exposes them as lowercase snake_case. A server scoped to a single destination (the normal case for generated `mcp.json` entries) exposes them unprefixed, so `GetSource` appears as `get_source` and `LintABAP` as `lint_abap`; when several destinations share one server, each name is destination-prefixed with its slug for disambiguation (for example `cfd_run_query`). Always call the exact names returned by `tools/list`.
13
13
 
14
- Use `GetStructure` and `GetTypeInfo` to inspect DDIC-backed structure and type metadata when resolving CDS field dependencies. If a new package is needed, `CreatePackage` is state-changing: require explicit approval, and provide a software component plus transport for a transportable package. For a new transparent DDIC table backing a CDS entity, use `CreateTable`; it is not for CDS views, writes generated DDL, and activates in one SAP call. Authorization-object creation and transport release/deletion are unavailable through this addon.
14
+ Use `GetStructure` and `GetTypeInfo` to inspect DDIC-backed structure and type metadata when resolving CDS field dependencies. If a new package is needed, `CreatePackage` is state-changing: require explicit approval, and provide a software component plus transport for a transportable package. For a new transparent DDIC table backing a CDS entity, use `CreateTable`; it is not for CDS views, writes generated DDL, and activates in one SAP call. `UpdateTable` is limited to existing Z/Y DDIC tables; it is not a CDS-view editor. `DeleteEmptyDDLS` only removes a blank Z/Y DDLS shell after exact confirmation. Authorization-object creation and transport release/deletion are unavailable through this addon.
15
15
 
16
16
  ## Language level and naming
17
17
 
@@ -0,0 +1,74 @@
1
+ ---
2
+ name: integration-suite-delivery
3
+ description: Build and operate SAP Integration Suite scenarios — Cloud Integration iFlows, value mappings, script collections, security material, Partner Directory and monitoring, and API Management providers, proxies, policies, products and key value maps.
4
+ ---
5
+
6
+ # Integration Suite delivery
7
+
8
+ Use this skill when a scenario spans SAP Cloud Integration (CPI) and/or SAP API Management (APIM), including exposing an ABAP RAP OData service through an API proxy. The Integration Suite tools come from the separate `integration-suite` companion MCP server; ABAP tools come from the destination server. Query each server's live `tools/list` and follow every returned input schema exactly.
9
+
10
+ Tool names shown in PascalCase (such as `GetSource` or `LintABAP`) are logical names; the live MCP surface exposes them as lowercase snake_case. A server scoped to a single destination (the normal case for generated `mcp.json` entries) exposes them unprefixed, so `GetSource` appears as `get_source` and `LintABAP` as `lint_abap`; when several destinations share one server, each name is destination-prefixed with its slug for disambiguation (for example `cfd_run_query`). Always call the exact names returned by `tools/list`.
11
+
12
+ The Integration Suite companion is never destination-prefixed; its tools are already snake_case.
13
+
14
+ ## Tool shortlist
15
+
16
+ - Connection: `integration_connection_info`.
17
+ - CPI design-time read: `cpi_list_packages`, `cpi_list_iflows`, `cpi_list_package_artifacts`, `cpi_get_iflow`, `cpi_get_artifact`, `cpi_get_value_mappings`.
18
+ - CPI design-time write: `cpi_create_package`, `cpi_update_package`, `cpi_copy_package`, `cpi_create_iflow`, `cpi_update_iflow`, `cpi_update_iflow_configuration`, `cpi_upsert_value_mappings`, `cpi_update_script_collection`.
19
+ - CPI deployment: `cpi_deploy_iflow`, `cpi_deploy_artifact`, `cpi_undeploy_artifact`, `cpi_list_runtime_artifacts`, `cpi_get_iflow_runtime_status`, `cpi_list_service_endpoints`.
20
+ - CPI monitoring: `cpi_list_message_logs`, `cpi_get_message_log`, `cpi_get_message_log_steps`, `cpi_get_jms_broker_status`, `cpi_list_data_stores`, `cpi_list_data_store_entries`, `cpi_list_variables`.
21
+ - CPI security material and tenant configuration: `cpi_list_security_material`, `cpi_set_user_credential`, `cpi_set_oauth2_client_credential`, `cpi_upload_certificate`, `cpi_list_number_ranges`, `cpi_set_number_range`, `cpi_list_partner_parameters`, `cpi_set_partner_parameter`.
22
+ - APIM providers and proxies: `apim_list_api_providers`, `apim_get_api_provider`, `apim_create_api_provider`, `apim_update_api_provider`, `apim_list_api_proxies`, `apim_get_api_proxy`, `apim_export_api_proxy`, `apim_list_virtual_hosts`, `apim_create_api_proxy`, `apim_update_api_proxy`, `apim_attach_api_proxy_policies`.
23
+ - APIM products and key value maps: `apim_list_api_products`, `apim_get_api_product`, `apim_create_api_product`, `apim_update_api_product`, `apim_list_key_value_maps`, `apim_get_key_value_map`, `apim_create_key_value_map`, `apim_set_key_value_map_entries`.
24
+ - Anything else (access policies, JMS queues, applications, developers, certificate store references): the read-only `cpi_odata_get` / `apim_odata_get`; start with path `/$metadata` to see the entity sets.
25
+
26
+ `cpi_*` tools appear only when CPI credentials are configured and `apim_*` tools only when APIM credentials are configured. Start every session with `integration_connection_info` and `verify: true` to see which side is available, which tenant hosts are bound, and which tool areas the service key lacks a role for. When a side is missing or cannot sign in, ask the user to run `sap-ai-dev --setup-integration` in a terminal (paste, online check, user-only storage) instead of pasting a key into the chat.
27
+
28
+ ## Exposing an SAP OData service through API Management
29
+
30
+ 1. **Confirm the ABAP service is published.** On the ABAP destination server, confirm the service binding exists and is published with `PublishServiceBinding`. Creating or changing the RAP service itself belongs to the `rap-service-delivery` skill; do not author ABAP here.
31
+ 2. **Derive the service path.** OData V4: `/sap/opu/odata4/<service group path>/<binding>/<version>/`; OData V2: `/sap/opu/odata/sap/<SERVICE_NAME>/`. Use the path the published binding reports; do not guess it.
32
+ 3. **Find or create the API provider.** Call `apim_list_api_providers` and reuse a provider whose host, port, and type already match. Otherwise plan `apim_create_api_provider`:
33
+ - on-premise S/4HANA or ECC through the Cloud Connector: `type: on_premise` with the Cloud Connector virtual host, virtual port, optional `location_id`, and optional `sap_client`;
34
+ - S/4HANA Cloud or SAP BTP ABAP environment: `type: internet` with the public host and port 443.
35
+ No credentials are stored on the provider. Backend authentication is configured in the Cloud Connector (for example principal propagation) or sent by the API client.
36
+ 4. **Create the API proxy.** Plan `apim_create_api_proxy` with `service_type: odata`, a unique `base_path`, and a provider target whose `relative_path` is the service path from step 2. The import deploys the proxy.
37
+ 5. **Secure and throttle it.** Plan one `apim_attach_api_proxy_policies` call (see below) instead of hand-editing the proxy in the UI.
38
+ 6. **Package it for consumers.** Plan `apim_create_api_product` over the proxy (published by default, optional quota) when API keys or the developer portal are needed.
39
+ 7. **Report the runtime URL.** Call `apim_get_api_proxy` and report `runtime_url` and `state`. When the read-back is still delayed, call it again shortly instead of re-creating the proxy.
40
+
41
+ ## API Management policies, products and key value maps
42
+
43
+ - `apim_attach_api_proxy_policies` exports the proxy, writes each policy, registers it, adds its flow step, and re-imports (which redeploys). Templates: `verify_api_key`, `quota`, `spike_arrest`, `cors` (response), `assign_headers`, `oauth_verify_access_token`, `ip_allow`, `response_cache`, `basic_auth_from_kvm`, `raise_fault`, `javascript`, and `custom` (raw policy XML with the `http://www.sap.com/apimgmt` namespace). Re-attaching the same policy name replaces its XML and keeps a single step; step order follows the order in the call.
44
+ - Typical API-key setup: `verify_api_key` (proxy, pre, request) then `quota` or `spike_arrest`, then `apim_create_api_product` so consumers can subscribe.
45
+ - Technical backend user: store the user and password in an encrypted map with `apim_create_key_value_map` (or `apim_set_key_value_map_entries`), then attach `basic_auth_from_kvm` (target endpoint, preFlow request by default).
46
+ - Read the current policy set with `apim_export_api_proxy` before changing it. `apim_update_api_proxy` changes base path, target, title and description and keeps every policy, step and script.
47
+ - Product proxy membership is set at creation; `apim_update_api_product` changes title, description, scope, quota and publish state only.
48
+ - Not covered by tools: API proxy undeploy, applications/subscriptions and API key issuance (read them with `apim_odata_get`), analytics. Say so and route those to the API Management UI or developer portal.
49
+
50
+ ## iFlow procedure
51
+
52
+ 1. `cpi_list_packages`; plan `cpi_create_package` only when no suitable package exists. To start from SAP standard content, plan `cpi_copy_package` (`CREATE_COPY` with a suffix, or `OVERWRITE_MERGE` to refresh while keeping configuration).
53
+ 2. Plan `cpi_create_iflow`. Prefer the `https-request-reply-http` template (HTTPS sender → Request Reply → HTTP receiver, internet or on-premise via Cloud Connector). Use `template: custom` with caller-supplied BPMN only when the template cannot express the flow, and read an existing similar iFlow with `cpi_get_iflow` first to copy proven adapter versions.
54
+ 3. Adjust externalized values with `cpi_update_iflow_configuration`; change bundle files with `cpi_update_iflow`, passing the `expected_version` you just read.
55
+ 4. `cpi_deploy_iflow`, then confirm with `cpi_get_iflow_runtime_status` (expect `STARTED`). The deploy call waits at most 50 seconds; when it returns `timed_out: true`, poll `cpi_get_iflow_runtime_status` instead of deploying again. `cpi_list_service_endpoints` can stay empty for a few minutes after `STARTED`; retry it rather than treating it as a failure.
56
+ 5. Receiver credentials must exist before deployment: check with `cpi_list_security_material`; create them with `cpi_set_user_credential` or `cpi_set_oauth2_client_credential`, and trust a backend certificate with `cpi_upload_certificate`. Cloud Connector setup stays outside the toolkit.
57
+ 6. Value mappings: `cpi_get_value_mappings`, `cpi_upsert_value_mappings`, then `cpi_deploy_artifact`. Script collections: `cpi_update_script_collection`, then `cpi_deploy_artifact`. Message mappings are deployed with `cpi_deploy_artifact` and read with `cpi_get_artifact`.
58
+ 7. Retire a runtime artifact with `cpi_undeploy_artifact`; design-time deletion stays manual.
59
+ 8. iFlow names must start with a letter or underscore and use only ASCII letters, digits, space, period, hyphen or underscore (no trailing period); put non-ASCII text in the description instead. API proxy descriptions are stored as HTML, so `<`, `>` and `&` come back escaped.
60
+
61
+ ## Troubleshooting
62
+
63
+ - `cpi_get_iflow_runtime_status` shows deployment errors (for example a missing credential name or an invalid adapter value); `cpi_list_runtime_artifacts` with `status: ERROR` finds every failed deployment.
64
+ - `cpi_list_message_logs` with `status: FAILED` and the iFlow id narrows failing messages; filter by `correlation_id`, `application_message_id` or `custom_header` to follow one business document. `cpi_get_message_log` returns the error text and custom header properties, and `cpi_get_message_log_steps` shows which step failed. Payloads and attachments are intentionally not read.
65
+ - `cpi_get_jms_broker_status`, `cpi_list_data_stores` and `cpi_list_variables` explain stuck or overdue asynchronous processing.
66
+ - For APIM, re-read with `apim_get_api_proxy`, `apim_export_api_proxy` and `apim_get_api_provider`; check virtual hosts with `apim_list_virtual_hosts`.
67
+
68
+ ## Safety
69
+
70
+ - Present the plan (target tenant hosts, every object to create/update/deploy/undeploy, and the exact confirmation strings) before any write, and wait for explicit user approval.
71
+ - Pass the exact confirmation string from the approved plan, for example `CREATE IFLOW <iflow_id>`, `DEPLOY IFLOW <iflow_id>`, `UNDEPLOY ARTIFACT <artifact_id>`, `CREATE API PROXY <name>` or `UPDATE API PROXY POLICIES <name>`. Never invent or reuse a confirmation for an object the user did not approve.
72
+ - There are no delete tools. Design-time deletion is a manual step in the Integration Suite UI; say so instead of working around it.
73
+ - Secrets are write-only. Passwords, client secrets and key value map values go straight into the tool input that stores them; never repeat them in chat, plans, files or reports, and never ask for service keys. CPI/APIM client credentials are configured in the MCP host environment (`CPI_SERVICE_KEY`, `APIM_SERVICE_KEY`, or `VCAP_SERVICES`).
74
+ - Report what was created, deployed, and verified, including tool results that were delayed or not verified.
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: sap-integration-architect
3
+ description: Architect SAP Integration Suite solutions — choose API Management, Cloud Integration, or both; design connectivity, per-hop security, error handling, monitoring, naming and versioning; assess the live CPI/APIM tenant; and produce an approved build plan with exact tool calls.
4
+ ---
5
+
6
+ # SAP Integration Architect
7
+
8
+ Use this skill to design an integration on SAP Integration Suite before anything is built: which components to use, how each hop connects and authenticates, how failures surface, and the exact build plan. Build execution follows the `integration-suite-delivery` skill (or the SAP Integration Developer agent where the harness supports agents). ABAP/RAP authoring follows `rap-service-delivery`; SAP-standard and Clean Core decisions follow `sap-standard-api-analysis` and `clean-core-extensibility`.
9
+
10
+ Tool names shown in PascalCase (such as `GetSource` or `LintABAP`) are logical names; the live MCP surface exposes them as lowercase snake_case. A server scoped to a single destination (the normal case for generated `mcp.json` entries) exposes them unprefixed, so `GetSource` appears as `get_source` and `LintABAP` as `lint_abap`; when several destinations share one server, each name is destination-prefixed with its slug for disambiguation (for example `cfd_run_query`). Always call the exact names returned by `tools/list`.
11
+
12
+ The Integration Suite companion server is never destination-prefixed. Read its live `tools/list` once and follow each returned input schema; `cpi_*` tools appear only when CPI credentials are configured and `apim_*` tools only when APIM credentials are configured.
13
+
14
+ ## 1. Requirement checklist
15
+
16
+ Consumers and providers · direction and trigger (synchronous request/reply, asynchronous, scheduled) · protocol and payload (OData V2/V4, REST, SOAP) · volume and latency · data sensitivity · authentication at every hop · error and retry expectations · environments · acceptance tests. Ask only for missing material details.
17
+
18
+ ## 2. Assess before designing (read-only)
19
+
20
+ - `integration_connection_info` — which tenants are bound.
21
+ - CPI: `cpi_list_packages`, `cpi_list_iflows`, `cpi_get_iflow` (models and configuration of similar flows), `cpi_list_service_endpoints`, `cpi_get_iflow_runtime_status`, `cpi_list_message_logs` with status `FAILED`, `cpi_get_message_log`.
22
+ - APIM: `apim_list_api_providers`, `apim_get_api_provider`, `apim_list_api_proxies`, `apim_get_api_proxy`, `apim_list_virtual_hosts`.
23
+ - SAP backend: confirm on the ABAP destination server that the OData service is published (`PublishServiceBinding` belongs to RAP service delivery) and take the service path from it; check SAP-delivered APIs with `GetAPIReleaseState`.
24
+
25
+ Reuse matching providers, packages and iFlows instead of duplicating them.
26
+
27
+ ## 3. Pattern decision guide
28
+
29
+ | Need | Pattern |
30
+ |---|---|
31
+ | Expose an existing OData/REST service to consumers with a managed URL, no payload change | API Management only — API provider + API proxy |
32
+ | Mapping, routing, enrichment, protocol change, multi-call orchestration, scheduled processing | Cloud Integration only — iFlow |
33
+ | External consumers need a managed API and the backend needs mediation | API Management in front of Cloud Integration — proxy targets the iFlow endpoint |
34
+
35
+ API Management targets: an API provider (Internet for S/4HANA Cloud and SAP BTP ABAP; On-Premise through the Cloud Connector virtual host, port and location ID) with a relative path such as `/sap/opu/odata4/...`, or a fixed `https://` URL. To front an iFlow, use the iFlow endpoint URL or an Internet provider on the CPI runtime host with relative path `/http/<sender path>`.
36
+
37
+ Cloud Integration: prefer the vetted `https-request-reply-http` template (HTTPS sender → Request Reply → HTTP receiver, Internet or On-Premise). Use custom BPMN only when the template cannot express the flow, starting from a model read from an existing iFlow.
38
+
39
+ ## 4. Per-hop security
40
+
41
+ | Hop | How it authenticates |
42
+ |---|---|
43
+ | Client → API Management | Toolkit-created proxies carry no policies; the client `Authorization` header is forwarded unchanged. Add API-key or OAuth policies in the APIM UI when the gateway must authenticate consumers. |
44
+ | Client or APIM → Cloud Integration | OAuth token from a Process Integration Runtime `integration-flow` client with role `ESBMessaging.send`; calls without it get HTTP 401. |
45
+ | Cloud Integration → backend | Receiver authentication None, Basic, OAuth2 Client Credentials, Client Certificate or Principal Propagation; security materials are referenced by name and must already exist on the tenant. |
46
+ | API Management → backend | API providers store no credentials; use Cloud Connector principal propagation or forward the client credentials. |
47
+
48
+ Never ask for, print or store secrets. Credentials belong in the MCP host environment (`CPI_SERVICE_KEY`, `APIM_SERVICE_KEY`, or `VCAP_SERVICES`).
49
+
50
+ ## 5. Errors, operations and platform timing
51
+
52
+ - A receiver error fails the message and returns HTTP 500 to the caller; define how the consumer reacts.
53
+ - Operate with message processing logs: status, error text and custom header properties (payloads are never read).
54
+ - Proven on live tenants: deployments can stay `STARTING` beyond a minute (`cpi_deploy_iflow` returns `timed_out` after 50 seconds; then poll `cpi_get_iflow_runtime_status`); service endpoints and message logs appear minutes after `STARTED`; API proxy read-back lags after import. Build these waits into acceptance tests instead of treating them as failures.
55
+
56
+ ## 6. Naming and versioning rules
57
+
58
+ - Package ids: letters, digits, underscore. iFlow ids: letters, digits, `.`, `_`, `-`.
59
+ - iFlow names: ASCII letters, digits, space, period, hyphen or underscore; no trailing period. Put non-ASCII text in descriptions.
60
+ - API proxy and provider names: letters, digits, `_`, `-`. Reserved provider names: `TC_*`, `DEST_CI`, `APIMGMT_PORTAL`, `ON_PREM`, `Apimgmt_rt*`, and ContentCatalog.
61
+ - Base paths and sender paths: unique, lowercase, versioned (for example `/s4/salesorder/v1`); no `//`, `..` or trailing `/`.
62
+ - API proxy descriptions are stored as HTML (`<`, `>`, `&` come back escaped).
63
+ - Every iFlow update needs `expected_version` from a fresh read and bumps the patch version; every proxy update is a new revision.
64
+
65
+ ## 7. Design deliverable
66
+
67
+ 1. Chosen pattern, rationale and rejected alternatives.
68
+ 2. Component flow (consumer → gateway → integration → backend).
69
+ 3. Per-hop table: host, port, path, route (Internet or Cloud Connector), authentication.
70
+ 4. Objects to create or change: package, iFlows (template or custom), externalized parameters, security materials, value mappings, API providers (`sap-client` where needed), API proxies, gateway policies, key value maps, API products.
71
+ 5. Ordered build calls with their exact confirmation strings: `cpi_create_package` (`CREATE CPI PACKAGE <id>`), `cpi_create_iflow` (`CREATE IFLOW <id>`), `cpi_update_iflow_configuration` (`CONFIGURE IFLOW <id>`), `cpi_update_iflow` (`UPDATE IFLOW <id>`), `cpi_set_user_credential` (`SET USER CREDENTIAL <name>`), `cpi_set_oauth2_client_credential` (`SET OAUTH2 CLIENT CREDENTIAL <name>`), `cpi_deploy_iflow` (`DEPLOY IFLOW <id>`), `cpi_deploy_artifact` (`DEPLOY ARTIFACT <id>`), `cpi_undeploy_artifact` (`UNDEPLOY ARTIFACT <id>`), `apim_create_api_provider` (`CREATE API PROVIDER <name>`), `apim_create_api_proxy` (`CREATE API PROXY <name>`), `apim_update_api_proxy` (`UPDATE API PROXY <name>`), `apim_create_key_value_map` (`CREATE KEY VALUE MAP <name>`), `apim_attach_api_proxy_policies` (`UPDATE API PROXY POLICIES <name>`), `apim_create_api_product` (`CREATE API PRODUCT <name>`).
72
+ 6. Prerequisites outside the tools, with owners: Cloud Connector mappings, `integration-flow` clients, applications and API keys, API proxy undeploy, role assignments.
73
+ 7. Acceptance tests and how they are verified: `cpi_get_iflow_runtime_status` is `STARTED`, `cpi_list_service_endpoints` returns the endpoint, `apim_get_api_proxy` returns `runtime_url` and state, and test calls appear as `COMPLETED` message logs.
74
+ 8. Risks and open questions.
75
+
76
+ Present the deliverable and wait for explicit user approval before any create, update, configure, deploy or undeploy call. There are no delete tools; design-time deletion and API proxy undeploy are manual steps in the Integration Suite UI.
package/NOTICE CHANGED
@@ -31,3 +31,13 @@ Licensed under the Apache License, Version 2.0.
31
31
  vsp also links other open-source Go modules; their licences are recorded in
32
32
  go.mod / go.sum and in the module cache. Apache-2.0 requires the notice above to
33
33
  travel with any distribution of the binaries, which is why this file exists.
34
+
35
+ --------------------------------------------------------------------------------
36
+ Integration Suite iFlow template
37
+ --------------------------------------------------------------------------------
38
+
39
+ src/integration-templates/https-request-reply-http.iflw is derived from the
40
+ Integration_Test_IFlow test artifact of FlashPipe
41
+ (https://github.com/engswee/flashpipe), Copyright Eng Swee Yeoh, licensed under
42
+ the Apache License, Version 2.0 (see LICENSE-APACHE-2.0.txt). It was modified to
43
+ add a Request Reply step, an HTTP receiver adapter, and externalized parameters.
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`, or `/hana-cloud-hdi-specialist`): **SAP Solution Architect**, **ABAP Developer**, **ABAP Runtime Debugger**, **RAP Service Developer**, or **HANA Cloud/HDI Specialist**.
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**.
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:** Five 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.
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`.
81
81
 
82
82
  | | Agent | Best for |
83
83
  | --- | --- | --- |
@@ -86,8 +86,10 @@ Use the attached destination-prefixed tools directly in chat. Do not launch `sap
86
86
  | 🐞 | **ABAP Runtime Debugger** | Runtime incidents, application logs, debugger sessions, and performance symptoms; call relationships are derived from source inspection |
87
87
  | 🚀 | **RAP Service Developer** | RAP business objects, behavior implementations, projections, service definitions, service bindings, and OData validation |
88
88
  | 🗃️ | **HANA Cloud/HDI Specialist** | Read-only HANA Cloud container inspection, CAP/HDI artifact generation, local validation, and user-run deployment handoffs |
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
+ | 🔌 | **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 |
89
91
 
90
- **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`
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`
91
93
 
92
94
  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.
93
95
 
@@ -159,9 +161,9 @@ The catalog below covers source inspection, data, editing, quality, transports,
159
161
  - Read SLG1 application logs
160
162
  - Review and create transport requests
161
163
 
162
- ## 🧠 Five agents, fourteen focused skills
164
+ ## 🧠 Seven agents, sixteen focused skills
163
165
 
164
- The package ships with five custom agents plus fourteen task-focused Agent Skills:
166
+ The package ships with seven custom agents plus sixteen task-focused Agent Skills:
165
167
 
166
168
  | | Skill | Best for |
167
169
  | --- | --- | --- |
@@ -179,6 +181,8 @@ The package ships with five custom agents plus fourteen task-focused Agent Skill
179
181
  | 🔎 | `hana-cloud-inspection` | Verify the selected HANA Cloud binding and inspect bounded HDI catalog/data results |
180
182
  | 🧱 | `hana-cloud-native-development` | Generate CAP-owned CDS models or required native HDI artifacts without duplicating generated sources |
181
183
  | ✅ | `hana-cloud-validation` | Run local CAP/HANA builds and prepare a reviewed, user-run deployment handoff |
184
+ | 🏗️ | `sap-integration-architect` | Integration Suite pattern choice, connectivity, per-hop security, naming/versioning rules, and an approvable build plan |
185
+ | 🔌 | `integration-suite-delivery` | Building iFlows, API proxies, gateway policies, API products and key value maps step by step, deploying, and troubleshooting with message logs |
182
186
 
183
187
  ## 🗺️ How it fits together
184
188
 
@@ -192,7 +196,7 @@ ABAP/RAP backend access is provided by this add-on's BAS proxy. For end-to-end S
192
196
  sap-ai-dev --setup --tools
193
197
  ```
194
198
 
195
- 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 companion uses `--ignore-scripts` so the toolkit postinstall wizard cannot run during MCP startup.
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.
196
200
 
197
201
  | MCP entry | Package | Launches | Use when the agent needs to |
198
202
  | --- | --- | --- | --- |
@@ -201,6 +205,7 @@ The companion entries are optional and are launched through `npx` only when the
201
205
  | `cap-tools` | `@cap-js/mcp-server` | `cds-mcp` | Inspect CAP CDS models, services, entities, actions, and local CAP application structure |
202
206
  | `browser-validation` | `@playwright/mcp` | `playwright-mcp` | Open BAS previews, smoke-test Fiori/UI flows, collect screenshots, and verify browser runtime behavior |
203
207
  | `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
+ | `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 |
204
209
 
205
210
  Recommended profiles:
206
211
 
@@ -220,6 +225,27 @@ Use either:
220
225
 
221
226
  The configured identity must be a separate least-privileged read-only HANA user. The server rejects bindings that offer only HDI deployment credentials and never falls back to `hdi_user`/`hdi_password`. Its tools are limited to connection identity, object listing/descriptions, and parameterized row reads capped at 200 rows; credential-like columns are blocked, and there is no arbitrary SQL, DDL/DML, grant, deployment, or undeploy tool. Use the existing project deployment workflow yourself after reviewing the exact generated artifact diff and target. The SAP HANA Node.js driver is provided under the SAP Developer License Agreement.
222
227
 
228
+ ### Integration Suite (Cloud Integration + API Management)
229
+
230
+ Every interactive `sap-ai-dev --setup` asks **"Add the SAP Integration Suite tools?"** right before it writes the MCP configuration. The step shows which of CPI and APIM have credentials (never the secrets themselves). Enter means **yes** when credentials were found and **no** otherwise; type `y` or `n` to override. An existing `integration-suite` entry is kept without asking. With `--tools`, the choice is part of the companion checkbox instead, and when nothing is detected the setup menu also offers **Set up only the SAP Integration Suite tools**.
231
+
232
+ To set up only this server, run **`sap-ai-dev --setup-integration`**. In both routes the credential step:
233
+
234
+ 1. **Checks detected credentials online.** It signs in and runs one read-only request per tool area (packages, deployed artifacts, message logs, security material, number ranges, Partner Directory, data stores, JMS; API proxies, providers, products, key value maps, virtual hosts, and policy readiness, which exports an existing API proxy bundle the way `apim_attach_api_proxy_policies` does). Each area is marked ✓, ✗ (missing role) or – (not available on the tenant or plan, or no proxy exists yet to test the export with).
235
+ 2. **Lets you paste a service key.** Paste a CPI key (Process Integration Runtime, plan `api`) or an APIM key (API Management, plan `apiportal-apiaccess`), either as JSON (multi-line paste works; input is hidden) or as the path to the downloaded `.json` file. The key is verified the same way before it is saved.
236
+ 3. **Saves only what the server needs.** The URL, token URL, client id and secret go to `~/.config/sap-ai-dev-toolkit/integration-suite.json`, readable only by you. The secret is never printed and never written to `mcp.json`. A key that cannot sign in is saved only if you confirm.
237
+
238
+ Environment credentials take precedence over a saved key. Re-check at any time with `sap-ai-integration --check`, or ask the agent to call `integration_connection_info` with `verify: true`. Configure CPI, APIM, or both; per side the first match wins:
239
+
240
+ - Explicit `CPI_URL`, `CPI_TOKEN_URL`, `CPI_CLIENT_ID`, `CPI_CLIENT_SECRET` (or the `APIM_*` equivalents).
241
+ - `CPI_SERVICE_KEY` / `APIM_SERVICE_KEY` containing the service-key JSON: a Process Integration Runtime `api` plan key (ClientId/Secret) for CPI, an API Management `apiportal-apiaccess` key for APIM. Certificate-based keys are rejected.
242
+ - One `VCAP_SERVICES` binding of service `it-rt` / `apimanagement-apiportal`; override the label with `CPI_VCAP_SERVICE` / `APIM_VCAP_SERVICE` and select an instance with `CPI_BINDING` / `APIM_BINDING`.
243
+ - The key saved by `sap-ai-dev --setup-integration` (lowest precedence).
244
+
245
+ CPI needs the roles `WorkspacePackagesRead`, `WorkspacePackagesEdit`, `WorkspacePackagesConfigure`, `WorkspaceArtifactsDeploy`, and `MonitoringDataRead` for packages, iFlows, deployment and message logs; security material, number ranges, Partner Directory, data stores, and JMS tools additionally need the matching `api`-plan roles for those areas (for example `DataStoresAndQueuesRead` and `AuthGroup_TenantPartnerDirectoryConfigurator`), and a missing role surfaces as an HTTP 403 in the tool error. APIM needs `APIPortal.Administrator`. Writes are limited to create, update, configure, deploy, and undeploy, each gated by an exact confirmation string such as `CREATE IFLOW <iflow_id>` or `UPDATE API PROXY POLICIES <name>`; there are no delete tools. Passwords, client secrets, and key value map values are write-only: tools accept them and never return them. Anything without a dedicated tool can be read through `cpi_odata_get` / `apim_odata_get`. Run `sap-ai-integration --help` for the full variable list.
246
+
247
+ `npm run test:live:integration` runs the end-to-end scenarios against a real tenant. It **creates and deploys** packages, iFlows, API providers, proxies, products, key value maps, user credentials, number ranges, and Partner Directory parameters suffixed with `RUN` (required, unique per run), so use a non-production subaccount. Scenarios that call iFlows over HTTP also need `CPI_RUNTIME_SERVICE_KEY`, a Process Integration Runtime `integration-flow` key with role `ESBMessaging.send`; the companion server itself never uses that key.
248
+
223
249
  ## 💡 Example requests
224
250
 
225
251
  Once the destination server is enabled in your chat's tools picker, ask for outcomes instead of manually orchestrating individual SAP operations:
@@ -274,7 +300,7 @@ Prefer a persistent global install? Install globally from SAP Business Applicati
274
300
 
275
301
  Everything works natively on Windows — PowerShell, cmd, and Windows Terminal are all supported:
276
302
 
277
- - `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.
303
+ - `npm install --global sap-ai-dev-toolkit` puts four commands on `PATH`: `sap-ai-dev`, its alias `sap-ai-dev-toolkit`, `sap-ai-hana`, and `sap-ai-integration`. 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.
278
304
  - The pinned SAP runtime ships inside the package as a native Windows executable; no Go toolchain, WSL, or extra downloads are required.
279
305
  - 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`.
280
306
  - 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.
@@ -373,7 +399,7 @@ At the end of a global install, the color-coded summary shows the MCP config pat
373
399
 
374
400
  ## 🤖 ABAP agents and skills for your AI harness
375
401
 
376
- The package includes five user-invocable custom agents (**SAP Solution Architect**, **ABAP Developer**, **ABAP Runtime Debugger**, **RAP Service Developer**, and **HANA Cloud/HDI Specialist**) and fourteen task-focused Agent Skills for GitHub Copilot, Claude Code, and other supported AI coding harnesses in BAS.
402
+ The package includes seven user-invocable custom agents (**SAP Solution Architect**, **ABAP Developer**, **ABAP Runtime Debugger**, **RAP Service Developer**, **HANA Cloud/HDI Specialist**, **SAP Integration Architect**, and **SAP Integration Developer**) and sixteen task-focused Agent Skills for GitHub Copilot, Claude Code, and other supported AI coding harnesses in BAS.
377
403
 
378
404
  ### 🧠 How the SAP Solution Architect and ABAP Developer agents work
379
405
 
@@ -608,6 +634,8 @@ These local tools are namespaced by destination. Change-set tools appear when th
608
634
  | --- | --- |
609
635
  | `PrepareABAPChangeSet` | Stage up to 12 full-source `WriteSource` changes and return line diffs plus SHA-256 fingerprints. Proposals stay in MCP process memory. |
610
636
  | `ApplyABAPChangeSet` | Re-read each object and write only when its source still matches the reviewed version. It stops on conflicts or errors and reports partial application; it does not roll back SAP writes. |
637
+ | `UpdateTable` | Compare the current Z/Y table DDL with reviewed source, then update and activate through VSP's source-hash check under lock. Requires exact confirmation. |
638
+ | `DeleteEmptyDDLS` | Delete only a blank Z/Y DDLS shell after checking its source and requiring exact confirmation; generic `DeleteObject` remains hidden. |
611
639
  | `CheckTransportReadiness` | Run a caller-selected bundle of transport, dependency, inactive-object, ABAP Unit, and ATC checks. Completed calls may still contain findings. |
612
640
  | `PlanABAPCloudMigration` | Batch `GetAPIReleaseState` checks for ADT object URIs and prioritize recognized unreleased APIs ahead of unknown and released states. SAP evidence stays attached. |
613
641
  | `GenerateRAPRegressionSuite` | Read `$metadata` and return reusable JSON with a metadata check and one `$top=1` GET for each entity set. |
@@ -1,5 +1,5 @@
1
- f10b759b5e320c6fec4c176ef9bce49f783d796eeb8a2476dd5898c94cb14afd vsp-linux-x64
2
- a4c47e4c15538cc16b540d19f55771e4c1340389efeca815e1881eafd89e45c5 vsp-linux-arm64
3
- 20a197921c88f539ea1a7f5236509dbaa9b9f906a6333e6fb1dce9f8b5eec85c vsp-darwin-x64
4
- 24a8810a17d31a434b92957ea41e6347b24e2a6a35e47b3b2fc13a16082a44c3 vsp-darwin-arm64
5
- b318fdf5194a7f15ebcf7ee912fb2493df21aba337540a2402f81786300fd0ea vsp-win32-x64.exe
1
+ cefc61f6b12b273c74c1e9d0e488006508b1e30a0660ad4f8dda77dfb1da1a92 vsp-linux-x64
2
+ 17e6f4d4ea4dca78ed384b3a76189bf9a0711a862eb08d47c2019046464acb55 vsp-linux-arm64
3
+ 5a1c4cbd837eb27d9df66b04b2737ad7323128876bd7bdc41417d1ddd29d53b9 vsp-darwin-x64
4
+ 1acb86850d55a013951ad3a40d83e58f19a05333f68e2af2e8e5aa882f17f7d7 vsp-darwin-arm64
5
+ bd41b6b2b8a99313a804fc8546f3f13ccd872425c74293dd34eb538c49ee54ed vsp-win32-x64.exe
Binary file
Binary file
Binary file
Binary file
Binary file
package/inventory.md CHANGED
@@ -8,12 +8,12 @@ This inventory reflects the current SAP AI Dev Toolkit proxy behavior in `src/mc
8
8
  | --- | ---: | --- |
9
9
  | Upstream tools | Up to 64 | 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 capabilities are registered. |
11
+ | Workflow tools | Up to 8 per destination | Review/apply change sets, transport evidence, Clean Core release assessment, RAP regression suites, guarded table updates, and empty-DDLS cleanup. Some require upstream capabilities. |
12
12
  | Convenience mapping | Dynamic | `GetApplicationLog` maps to the upstream `SAP(action="analyze", type="application_log")` operation when the SAP router is registered. |
13
13
  | Intentionally filtered tools | Dynamic | Destructive, broad-router, trace, and unsupported operations are hidden from direct calls. |
14
14
  | Mode-dependent | Dynamic | Focused/expert mode and backend capabilities determine which tools are registered. |
15
15
 
16
- The maximum fixture surface is 72 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.
16
+ The maximum fixture surface is 74 destination-scoped tools per destination when expert-mode capabilities and all local workflows are available, plus one workspace-scoped `LintABAPProject` tool per MCP server. 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
18
  ## Known upstream tools
19
19
 
@@ -168,6 +168,8 @@ These logical names are exposed through MCP in lowercase snake_case (`lint_abap`
168
168
  - `PlanABAPCloudMigration` — batch-check API release state for supplied ADT object URIs and prioritize recognized unreleased APIs.
169
169
  - `GenerateRAPRegressionSuite` — read service metadata and emit reusable GET-only smoke cases for entity sets.
170
170
  - `RunRAPRegressionSuite` — execute saved cases with status, content-type, and JSON-path assertions over the connected destination.
171
+ - `UpdateTable` — compare the current DDL with the reviewed source, then update and activate one Z/Y table using VSP's locked source-hash check.
172
+ - `DeleteEmptyDDLS` — delete only a blank Z/Y DDLS source after exact confirmation; generic `DeleteObject` remains hidden.
171
173
 
172
174
  ## Notes
173
175
 
@@ -189,3 +191,65 @@ The HANA inspector is a standalone companion MCP process launched as `sap-ai-han
189
191
  | `hana_read_rows` | Read selected catalog-verified columns with bound filter values and a hard 200-row maximum; credential-like columns are blocked. No free-form SQL. |
190
192
 
191
193
  The process exposes no DDL, DML, arbitrary SQL, procedure-call, deployment, undeploy, grant, or service-key management tools. The separate HANA identity should also be granted only the reads required for the intended HDI container.
194
+
195
+ ## Separate optional Integration Suite server
196
+
197
+ The Integration Suite companion is a standalone MCP process launched as `sap-ai-integration`; it is not a child of the SAP runtime and is not destination-prefixed. CPI and APIM OAuth clients come from `CPI_*`/`APIM_*` variables, `CPI_SERVICE_KEY`/`APIM_SERVICE_KEY`, one unambiguous `VCAP_SERVICES` binding per side, or (lowest precedence) a key pasted, verified online and saved user-only by `sap-ai-dev --setup-integration` in `~/.config/sap-ai-dev-toolkit/integration-suite.json`. Requests are pinned to the configured tenant origins. `cpi_*` tools are registered only when CPI is configured, `apim_*` tools only when APIM is configured. `sap-ai-integration --check` runs the same online verification from a terminal.
198
+
199
+ | Tool | Behavior |
200
+ | --- | --- |
201
+ | `integration_connection_info` | Report configured sides, credential source, binding, and tenant/token hosts. `verify: true` signs in and runs one read-only request per tool area, classifying each as ok, forbidden (missing role) or unavailable. Never returns client ids or secrets. |
202
+ | `cpi_list_packages` | List packages (max 200). |
203
+ | `cpi_list_iflows` | List iFlows of a package. |
204
+ | `cpi_get_iflow` | Artifact metadata, configurations, and bundle files (text capped 48 KiB each, or one file up to 90 KiB). |
205
+ | `cpi_get_iflow_runtime_status` | Runtime status; error text when `ERROR`. |
206
+ | `cpi_list_service_endpoints` | Deployed endpoint URLs, optionally for one iFlow. |
207
+ | `cpi_list_message_logs` | Message processing logs filtered by iFlow, status, time window, `correlation_id`, `application_message_id`, or `custom_header` (max 100). |
208
+ | `cpi_get_message_log` | One log with error text and custom header properties; attachments are not read. |
209
+ | `cpi_get_message_log_steps` | Steps of the latest run (sorted by start, max 200) with step errors. |
210
+ | `cpi_list_package_artifacts` | iFlows, value mappings, script collections, and message mappings of one package. |
211
+ | `cpi_get_artifact` | Value mapping, script collection, or message mapping metadata plus bundle files (same caps as `cpi_get_iflow`). |
212
+ | `cpi_get_value_mappings` | Agency pairs with values and defaults (max 500 values per pair). |
213
+ | `cpi_list_runtime_artifacts` | Deployed artifacts, optionally by status. |
214
+ | `cpi_get_jms_broker_status` | JMS broker capacity and non-OK queues. |
215
+ | `cpi_list_data_stores` / `cpi_list_data_store_entries` / `cpi_list_variables` | Data store, entry, and variable metadata; payloads are not read. |
216
+ | `cpi_list_security_material` | User credentials, OAuth2 client credentials, or keystore entries; secret fields redacted. |
217
+ | `cpi_list_number_ranges` | Number ranges. |
218
+ | `cpi_list_partner_parameters` | Partner Directory string parameters and binary parameter metadata. |
219
+ | `cpi_odata_get` | Read-only GET for other `/api/v1` entity sets or `/$metadata`; `$value`, `$batch`, and `$links` rejected; secrets and artifact content redacted. |
220
+ | `cpi_create_package` | Create a package. Confirmation `CREATE CPI PACKAGE <package_id>`. |
221
+ | `cpi_create_iflow` | Create an iFlow from the `https-request-reply-http` template or custom BPMN. Confirmation `CREATE IFLOW <iflow_id>`. |
222
+ | `cpi_update_iflow` | Replace/add files and parameters with an `expected_version` check and patch bump; never deletes files. Confirmation `UPDATE IFLOW <iflow_id>`. |
223
+ | `cpi_update_iflow_configuration` | Set externalized parameters sequentially. Confirmation `CONFIGURE IFLOW <iflow_id>`. |
224
+ | `cpi_deploy_iflow` | Deploy and wait up to 50 s (below common MCP client timeouts) for build/runtime status; `timed_out` means poll `cpi_get_iflow_runtime_status`. Confirmation `DEPLOY IFLOW <iflow_id>`. |
225
+ | `cpi_deploy_artifact` | Deploy a value mapping, script collection, or message mapping and wait up to 50 s for runtime status. Confirmation `DEPLOY ARTIFACT <artifact_id>`. |
226
+ | `cpi_undeploy_artifact` | Undeploy a runtime artifact and wait up to 50 s until it is gone. Confirmation `UNDEPLOY ARTIFACT <artifact_id>`. |
227
+ | `cpi_update_package` | Merge name, short text, description, or version into a package. Confirmation `UPDATE CPI PACKAGE <package_id>`. |
228
+ | `cpi_copy_package` | Copy a Discover package (`CREATE_COPY` with suffix or `OVERWRITE_MERGE`). Confirmation `COPY CPI PACKAGE <package_id>`. |
229
+ | `cpi_upsert_value_mappings` | Upsert value pairs sequentially, stopping at the first failure; deploy afterwards. Confirmation `UPDATE VALUE MAPPING <artifact_id>`. |
230
+ | `cpi_update_script_collection` | Add/replace scripts in the collection bundle. Confirmation `UPDATE SCRIPT COLLECTION <artifact_id>`. |
231
+ | `cpi_set_user_credential` | Create or update a user credential; password write-only. Confirmation `SET USER CREDENTIAL <name>`. |
232
+ | `cpi_set_oauth2_client_credential` | Create or update an OAuth2 client credential; secret write-only. Confirmation `SET OAUTH2 CLIENT CREDENTIAL <name>`. |
233
+ | `cpi_upload_certificate` | Add (or with `update` replace) a PEM certificate in the system keystore. Confirmation `UPLOAD CERTIFICATE <alias>`. |
234
+ | `cpi_set_number_range` | Create or update a number range. Confirmation `SET NUMBER RANGE <name>`. |
235
+ | `cpi_set_partner_parameter` | Create or update a Partner Directory string or binary parameter. Confirmation `SET PARTNER PARAMETER <pid>/<id>`. |
236
+ | `apim_list_api_providers` | List providers without credential fields. |
237
+ | `apim_get_api_provider` | One provider with credential properties removed. |
238
+ | `apim_list_api_proxies` | List proxies. |
239
+ | `apim_get_api_proxy` | One proxy with endpoints, virtual hosts, deployment info, and computed `runtime_url`. |
240
+ | `apim_list_virtual_hosts` | List virtual hosts. |
241
+ | `apim_export_api_proxy` | Export the proxy bundle and return its files (or one file). |
242
+ | `apim_list_api_products` / `apim_get_api_product` | Products; one product with its proxy names. |
243
+ | `apim_list_key_value_maps` / `apim_get_key_value_map` | Key value maps; encrypted values redacted. |
244
+ | `apim_odata_get` | Read-only GET for other Management.svc entity sets (applications, developers, certificate store references) or `/$metadata`; same guards as `cpi_odata_get`. |
245
+ | `apim_create_api_provider` | Create an Internet or On-Premise provider; no credentials sent; reserved names rejected. Confirmation `CREATE API PROVIDER <name>`. |
246
+ | `apim_update_api_provider` | Merge connection changes into a credential-free provider (credentialed providers are refused). Confirmation `UPDATE API PROVIDER <name>`. |
247
+ | `apim_create_api_proxy` | Import (and deploy) a policy-free proxy for a provider or https URL target. Confirmation `CREATE API PROXY <name>`. |
248
+ | `apim_update_api_proxy` | Export, patch base path/target/title/description in place, and re-import; policies, steps, and scripts are preserved. Confirmation `UPDATE API PROXY <name>`. |
249
+ | `apim_attach_api_proxy_policies` | Add or replace up to 10 policies from templates or custom XML and their flow steps, then re-import. Confirmation `UPDATE API PROXY POLICIES <name>`. |
250
+ | `apim_create_api_product` | Create (and by default publish) a product over existing proxies with optional quota. Confirmation `CREATE API PRODUCT <name>`. |
251
+ | `apim_update_api_product` | Merge title, description, scope, quota, or publish state. Confirmation `UPDATE API PRODUCT <name>`. |
252
+ | `apim_create_key_value_map` | Create a map (encrypted by default); values write-only. Confirmation `CREATE KEY VALUE MAP <name>`. |
253
+ | `apim_set_key_value_map_entries` | Update existing entries and add new ones, stopping at the first failure; values write-only. Confirmation `UPDATE KEY VALUE MAP <name>`. |
254
+
255
+ Confirmations are checked before any network call. The process exposes no delete tools. Secrets are write-only and never returned; message payloads, attachments, and data-store payloads are never read.