SAP CPI MCP Server
Tenant Discovery: List configured CPI tenants, supporting single or multi-tenant setups.
Monitoring (Message Processing Logs): Search/filter MPLs by status, flow, and time; retrieve details, error information, custom headers, run steps, and persisted payloads; cancel stuck messages; get failure summaries per flow.
Design-time Content Management: Manage packages (list, get, create, delete, copy); manage integration flows (list, get, create, save versions, download as zip, view/update externalized configurations); list flow resources; search across all flow content (e.g., BPMN, scripts, mappings) with
where_used.Runtime & Deployment: List deployed artifacts and statuses; deploy/undeploy artifacts (iFlows, mappings, scripts, value mappings, adapters); check build/deploy task status; list runtime service endpoints.
Administration & Security: Manage user credentials, OAuth2 client credentials, keystore entries; list/create number ranges; access data stores, variables, JMS queues; list partners and system log files.
Generic API Coverage: Discover full API catalog (~130 entity sets, ~35 function imports); query any entity set with OData options (
$filter,$orderby,$expand, etc.); get single entities by key; invoke function imports; perform low-level create/update/delete operations.Write Safety: Destructive operations require
ALLOW_WRITE=trueserver setting and an explicitconfirm=trueargument per call.Deployment & Multi-tenancy: Runs locally over stdio or as an HTTP service on SAP BTP Cloud Foundry with flexible authentication (OAuth 2.0, static token, open). A single instance can manage multiple tenants with isolated caches and per-tenant write permissions.
Provides tools for monitoring and managing SAP Cloud Integration (CPI) through its OData v1 APIs, including message processing logs, integration flow design-time content, runtime deployment, and admin operations such as security material and data stores.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SAP CPI MCP ServerCheck for failed message processing logs in the last hour"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SAP CPI MCP Server
Version 1.4.0
A Model Context Protocol server that lets an MCP client (Claude Desktop, Claude Code, Claude Enterprise chat, etc.) monitor and manage SAP Cloud Integration (CPI / Integration Suite) through its OData v1 APIs — the same surface documented as the "Cloud Integration" package on the SAP Business Accelerator Hub.
You ── ask in plain English ──► Claude ── calls tools ──► MCP server ── OData ──► SAP CPI tenantIt runs two ways:
Local (stdio) — runs on your PC, used by Claude Desktop or Claude Code. Easiest.
Remote (HTTP + OAuth) — deployed to SAP BTP Cloud Foundry, used by Claude Enterprise chat (or any client) via a custom connector.
One server instance can talk to a single CPI tenant or many — see Multi-tenant support.
48 tools: curated tools for the common workflows, plus generic escape-hatch tools
(cpi_query, cpi_get_entity, cpi_invoke_function, cpi_write) that reach any of the
~130 entity sets and 35 operations the API exposes.
Contents
What it can do (tools)
Tenant discovery
Tool | Purpose |
| List the CPI tenants this server is configured to reach — call this first when it isn't already clear which one to use |
Monitoring — Message Processing Logs (MPL)
Tool | Purpose |
| Search/filter MPLs by status, flow, time window |
| Full MPL entry for a MessageGuid |
| Detailed error/exception text for a failed message |
| Custom header properties (business keys) |
| Per-step run trace within a message |
| Persisted payloads for a message |
| Failures grouped by integration flow (health dashboard) |
| Cancel a processing/retrying message |
Design-time content
Tool | Purpose |
| Packages |
| Package CRUD |
| Copy a standard/Discover package into the workspace |
| Integration flows |
| Create a new (empty) iFlow in a package |
| Save the flow draft as a new version (+ optional comment) |
| Download flow as base64 zip |
| Externalized parameters |
| Scripts/XSDs/WSDLs inside a flow |
| Search a word/string (e.g. a credential name, endpoint, or value) across flow content — process XML, adapter properties, scripts, mappings, parameter files — one package, one flow, or the whole tenant |
Flow authoring — build real content from a spec
Tool | Purpose |
| Author real iFlow content (not just an empty shell) from a structured step spec, push it, and validate it — deploy is opt-in |
create_integration_flow above only makes an empty shell — there's no SAP API to add a
step at a time. build_integration_flow is the encoded version of that whole manual
process: give it an ordered steps array and it generates the confirmed-schema
BPMN2/ifl: XML, splices it into a real tenant-generated shell, pushes it, and runs
CPI's own ValidateIntegrationDesigntimeArtifact check. All of the hard-won gotchas
below are applied automatically — you don't need a separate skill/instructions file
loaded to get them right.
Standard practice (as of 2026-08-17): deploy defaults to false. This tool
pushes + validates and stops there by default, whether or not validation found errors
— it does NOT deploy unless you explicitly ask for it. The expected flow: build
(deploy omitted or false), read the validation field on the result, share that
analysis (clean pass, or which errors were found and what they likely mean), and let
the outcome of that conversation decide the next step — fix the spec and rebuild, or
deploy (deploy: true, or deploy_artifact on the pushed artifact directly). Set
deploy: true only once that's actually been asked for.
Supported step kinds (first step must be timer, httpsStart, or sftpStart):
contentModifier, router, groovyScript, requestReply / send, pollEnrich,
filter, xmlModifier, writeVariables, splitter, gather, dataStoreGet /
dataStorePut / dataStoreSelect / dataStoreDelete, processCall (+ top-level
localProcesses for Local Integration Processes), endEvent. A step type outside this
list is rejected with a clear error rather than a guessed XML shape.
requestReply / send adapters: http (auth None and OAuth2ClientCredentials
confirmed working, plus retry parameters — retryOnException, retryIteration,
retryInterval, retryOnConnectionFailure, httpErrorResponseCodes,
throwExceptionOnFailure), mail, odata (OData V2 / HCIOData), odatav4 (OData V4 /
HCIOData — a distinct property set from plain odata), sftpWrite, jms, soap
(send-only), processDirect (requestReply-only). pollEnrich adapter: sftpPoll.
Auto-fixes applied for you:
Camel Simple
==is rewritten to=(CPI's condition parser only accepts=).An unquoted router-condition comparison value gets quoted (CPI's Problems tab flags a bare number/placeholder even though it's still numerically compared at runtime).
Element/participant names have whitespace replaced with
_(CPI rejects whitespace in a participant name outright).A
{{Placeholder}}used in a step but not declared inparametersis auto-added as an optional externalized parameter, with a warning.
On any challenge — a build failure, a deploy that times out, or a runtime start error —
the tool doesn't just report failure: the challenge field explains what happened and
points you at download_integration_flow(artifactId) to fetch the already-pushed
content back for inspection (SAP's OData API famously returns no detail for a build
failure; the zip, imported into the web editor's Problems tab, is the reliable way to
see the real error). This tool never writes to this server's local disk, in any mode,
on either transport (local stdio or the Cloud Foundry HTTP deployment) — once content
is pushed, the tenant itself is the copy of record. Pass offline: true to skip the
tenant entirely and get a preview zip back inline as base64 (zipBase64 in the
result) instead of a real push — decode it yourself locally if you want a file.
Runtime & deployment
Tool | Purpose |
| Deployed artifacts + status |
| Deploy iFlow / mapping / script / value-mapping / adapter |
| Undeploy a running artifact |
| Async deploy task status |
| Runtime endpoint URLs of deployed flows |
Admin (security material, config, queues, B2B, logs)
Tool | Purpose |
| User Credential security material |
| OAuth2 client credentials |
| Keystore certificates / key pairs |
| Number ranges |
| Data stores + entries |
| Global/local variables |
| JMS queues (Enterprise plan; 501 on trial) |
| Partner Directory partners |
| System log files |
Generic — full API coverage
Tool | Purpose |
| Discover every entity set & function import |
| Read any entity set with |
| Read one record by (single or composite) key |
| Invoke any function import |
| Create/update/delete any entity (DELETE needs |
⚠️ = write/destructive tool — requires ALLOW_WRITE=true (see below).
Tool count by category: Tenant discovery (1) · Monitoring (8) · Content (10) · Flow
authoring (1) · where_used (1) · Runtime (5) · Admin (9) · Generic (5) · Total: 48.
Related MCP server: SAP CPI MCP Server
Write safety
Read tools always work. Write / deploy / delete tools only run when ALLOW_WRITE=true is set
in your .env. In addition, every write action requires an explicit confirm=true: calling a
write tool without it returns an "Are you sure you want to …?" prompt and makes no changes.
Re-run the same tool with confirm=true to proceed. This gives a two-step confirmation for all
create/update/delete/deploy operations.
ALLOW_WRITE=false # default — read-only
ALLOW_WRITE=true # enable the ⚠️ toolsGet your SAP CPI API credentials (one-time)
The OData API is served by the Process Integration Runtime service.
BTP Cockpit → your subaccount → Instances and Subscriptions → Create → Process Integration Runtime, plan
api.Under Roles, grant what you need:
Read:
MessageProcessingLogRead,IntegrationContentRead,MonitoringDataReadFor the ⚠️ write tools (deploy/undeploy/create/delete): also add e.g.
WorkspacePackagesEdit,WorkspaceArtifactsDeploy,MessageProcessingLogCustomHeaderRead, and the relevant security-material roles.
Create a Service Key. From the key you get:
Service key field
Use as
urlCPI_BASE_URL=<url>+/api/v1tokenurlCPI_TOKEN_URL(already ends in/oauth/token)clientidCPI_CLIENT_IDclientsecretCPI_CLIENT_SECRET
⚠️ Common gotcha — the API host. The
urlfrom the key sometimes points at the runtime host (contains-rt). The OData API lives on the tenant-management host (the one you use to open CPI in the browser, usually without-rt). If calls return404 route does not exist, drop the-rtfrom the host. Always append/api/v1.
Quick start — run locally with Claude Desktop / Claude Code
1. Get the code and install dependencies
git clone https://github.com/<your-org-or-user>/sap-cpi-mcp-server.git
cd sap-cpi-mcp-server
npm install(Or download a ZIP from GitHub → Code ▸ Download ZIP → extract, then npm install.)
2. Configure .env
cp .env.example .env # Windows: copy .env.example .envEdit .env with the values from above:
CPI_BASE_URL=https://<tenant>.it-cpiXXX.cfapps.<region>.hana.ondemand.com/api/v1
CPI_TOKEN_URL=https://<subdomain>.authentication.<region>.hana.ondemand.com/oauth/token
CPI_CLIENT_ID=<clientid>
CPI_CLIENT_SECRET=<clientsecret>
MCP_TRANSPORT=stdio
ALLOW_WRITE=false # set true to enable deploy/create/update/delete toolsFor more than one tenant, use the numbered vars (CPI_BASE_URL1, CPI_BASE_URL2, ...) instead
— see Multi-tenant support. .env.example documents both forms.
3. Connect to Claude
Claude Desktop — edit the MCP config and add the server:
Standard install:
%APPDATA%\Claude\claude_desktop_config.json(Windows) /~/Library/Application Support/Claude/claude_desktop_config.json(macOS).Microsoft Store install (Windows):
%LOCALAPPDATA%\Packages\Claude_*\LocalCache\Roaming\Claude\claude_desktop_config.json(In the app, Settings ▸ Developer ▸ Local MCP servers ▸ Edit Config opens the right file.)
{
"mcpServers": {
"sap-cpi": {
"command": "node",
"args": ["C:\\full\\path\\to\\sap-cpi-mcp-server\\src\\index.js"]
}
}
}Credentials load automatically from the project's .env.
Then FULLY restart Claude Desktop — quit it from the system tray (or end all Claude
processes in Task Manager) and reopen. Closing the window is not enough. Confirm under
Settings ▸ Developer ▸ Local MCP servers that sap-cpi shows running.
Claude Code (CLI):
claude mcp add sap-cpi -- node /full/path/to/sap-cpi-mcp-server/src/index.jsClaude Enterprise / cloud chat can only reach remote servers, not a local process — you need the Cloud Foundry deployment added as a custom connector instead. On Enterprise this is admin-controlled; hand your admin the connector URL + OAuth details once deployed.
Once connected, jump to Example prompts to try it.
Multi-tenant support
One running server can reach one CPI tenant (the default) or several, decided purely by
what's in .env — no code change either way.
Single tenant (default)
The plain vars — CPI_BASE_URL / CPI_TOKEN_URL / CPI_CLIENT_ID / CPI_CLIENT_SECRET — work
exactly as before. No tool gains an extra argument; nothing else in this section applies.
Multiple tenants
Add a numbered group of the same four vars per tenant — CPI_BASE_URL1, CPI_BASE_URL2,
CPI_BASE_URL3, ... — and the server discovers however many it finds at startup:
CPI_BASE_URL1=https://dev-tenant.it-cpiXXX.cfapps.eu10.hana.ondemand.com/api/v1
CPI_TOKEN_URL1=https://dev-subdomain.authentication.eu10.hana.ondemand.com/oauth/token
CPI_CLIENT_ID1=dev-client-id
CPI_CLIENT_SECRET1=dev-client-secret
TENANT_NAME1=Dev
CPI_BASE_URL2=https://qa-tenant.it-cpiXXX.cfapps.eu10.hana.ondemand.com/api/v1
CPI_TOKEN_URL2=https://qa-subdomain.authentication.eu10.hana.ondemand.com/oauth/token
CPI_CLIENT_ID2=qa-client-id
CPI_CLIENT_SECRET2=qa-client-secret
TENANT_NAME2=QAOnce 2 or more tenants are configured:
Every tool gains a required
tenantargument — a fixed enum of the exactTENANT_NAME<N>values found (case-insensitive match, but the MCP client sees these exact names). The client (Claude) has to ask which tenant to use rather than guessing.Call
list_cpi_tenantsany time to see the current list — it's the one tool that never needs atenantitself.TENANT_NAME<N>defaults totenant<N>if omitted, but naming it is strongly recommended — that name is what shows up in every tool's schema and in Claude's prompts.
Adding a 3rd, 4th, ... Nth tenant later is just adding another numbered block — no code
change, no redeploy of anything but the env file itself. Restart the MCP server connection
after editing .env (or cf set-env + cf restage for the HTTP deployment) so it re-reads it.
Per-tenant overrides
Two flags can be scoped to one tenant instead of the whole server:
# Allow writes on Dev only, even if the global ALLOW_WRITE below is false:
ALLOW_WRITE1=true
# Take a tenant out of rotation without deleting its credentials — it disappears from
# list_cpi_tenants, the `tenant` enum, and multi-tenant mode entirely (falls back to
# single-tenant behavior if only one enabled tenant remains):
STATUS2=disable # "disable"/"disabled" to turn off; unset or "enable" = on (default)Isolation guarantees
Each tenant gets its own OAuth access-token cache and CSRF/session-cookie cache — a busy Dev tenant's token can never be reused for a Prod call, even under load.
Error messages and results are host-masked per tenant, so one tenant's real hostname never leaks through a call made against another.
ALLOW_WRITE<N>andSTATUS<N>are independent per tenant; nothing else (RBAC scopes, auth mode) is tenant-aware — those still apply server-wide.
Credential Store (keeping CPI_CLIENT_SECRET out of manifest.yml / cf env)
By default a tenant's OAuth client secret is a plain env var — fine for local dev, but it means
the real CPI secret sits in manifest.yml, cf set-env history, and cf env's output. As an
alternative, src/credStore.js can resolve a tenant's secret from a bound
SAP Credential Store service instance at runtime instead, so the actual secret never has to
appear in this app's own configuration at all.
This is opt-in and per tenant — set CPI_CREDSTORE_KEY<N> instead of CPI_CLIENT_SECRET<N>
for whichever tenant should use it; tenants without it keep working exactly as before, so you can
migrate one at a time (or not at all):
CPI_CREDSTORE_KEY2=cpi-oauth-secret-qa # name of the credential in Credential Store
CPI_CREDSTORE_NAMESPACE2=cpi-mcp # optional — defaults to "cpi-mcp"Setup:
Create a Credential Store service instance in BTP Cockpit (Entitlements → add Credential Store, then Instances and Subscriptions → Create), and bind it to this app as
cpi-credstore— see the commented-outservices:block in manifest.yml.In the instance's Cockpit UI, create a namespace (e.g.
cpi-mcp) and, inside it, a Password credential — paste your real CPIclient_secretas the value (don't use "Generate Value", it has to match the secret already registered with CPI's XSUAA).Set
CPI_CREDSTORE_KEY<N>to that credential's name for the tenant migrating to it, and removeCPI_CLIENT_SECRET<N>for that same tenant (the code prefers the plain var if both are set, which would silently defeat the point).
How it actually authenticates — confirmed against a real binding, not just documentation:
Credential Store instances can bind with either Basic auth (username/password in the
binding — the common case, e.g. on trial-plan instances) or mTLS (certificate/key)
depending on how the instance was created; credStore.js detects which one you have from the
binding's own fields and handles it. If the instance has parameters.encryption.payload: "enabled", every response is a JWE (RSA key-wrap + AES-GCM content) decrypted client-side with
the binding's encryption.client_private_key — handled transparently, no extra config needed.
Local testing without a real CF binding: set CREDSTORE_URL/CREDSTORE_USERNAME/
CREDSTORE_PASSWORD (or CREDSTORE_CERT/CREDSTORE_KEY for an mTLS instance), pulled verbatim
from cf create-service-key <credstore-instance> local-dev — see .env.example for the full
list including the encryption key variant.
Role-based access control (RBAC)
Three roles, layered on top of ALLOW_WRITE/confirm=true rather than replacing them:
Role | Scope(s) granted | Can use | Typical user |
Support |
| Every read/list/search/download tool | Support/operations staff who only need read and monitoring access |
Developer |
| The above, plus create/update/deploy tools | Developers who create, update and deploy integration content |
Architect |
| Everything, including delete/undeploy and the generic | Integration architects who may need to delete/undeploy content |
The generic escape-hatch tools (cpi_write, cpi_invoke_function) are pinned to mcp.delete
regardless of the HTTP method or function called — they can reach operations (arbitrary
DELETE, or destructive function imports like DeleteValMaps) that the curated tools don't
expose, so they're Architect-only rather than Developer-only.
This only applies to the HTTP transport with an XSUAA binding. The static-token and open modes grant full access to everyone (no per-user identity to hang a role off), and the stdio transport is unaffected — it's a local subprocess with no role boundary, same as before.
Setting it up — CLI
xs-security.jsondefines exactly three scopes and role templates —Support,Developer,Architect. There is no legacy/default role: a caller not assigned one of these three gets an empty scope set and no tools at all (seeresolveOauthScopesinsrc/auth.js), not silent read-only access. Push the updated descriptor:cf update-service sap-cpi-mcp-xsuaa -c xs-security.json cf restage sap-cpi-mcp-serverIn BTP Cockpit → your subaccount → Security → Role Collections, create three collections —
Architect,Developer,Support— each pulling in the matching role template from thesap-cpi-mcpapp.Assign your team: either manually per user (Role Collection → Edit → add by email), or — if you already trust an IdP like Entra ID — map IdP groups to these Role Collections under Security → Trust Configuration → your IdP → Role Collection Mappings, so membership in an Entra group like
MCP-Architectgrants the collection automatically at login.A user's token then carries whichever scopes their Role Collection grants;
src/auth.jsreads them off the verified JWT andsrc/domains/helpers.jsenforces them per tool call.
Setting it up — Cockpit UI (step by step, with screenshots)
Under Security → Role Collections, create one collection per access level defined in
xs-security.json's role templates.

Figure 18 — Create Role Collection: SapCpiMcp.Architect, mapped to the Architect role template.

Figure 19 — Three role collections created: SapCpiMcp.Architect, .Developer and .Support.
Role Collection | Role Template | Grants |
| Architect | Full access, including delete/undeploy and the generic escape-hatch tools. |
| Developer | Read + create/update/deploy — no deletes. |
| Support | Read-only: monitoring, MPL search, package/flow inspection. |
Open the relevant Role Collection and add each user under its Users tab — this determines what that person (or the account they sign in with when connecting Claude) is allowed to do through the MCP server.
🔒 Redacted in this copy — the original screenshot here showed a real user's email address and full name assigned to a role collection. See the screenshot security note at the very end of this document.
Figure 20 — SapCpiMcp.Support role collection, with the Support role template and an assigned user.
Testing a role change — watch for token caching
After moving a user between Role Collections, the change will not show up until they get a
genuinely new access token — MCP clients (including Claude.ai) cache the tool list and will
silently reuse a still-valid token via refresh rather than re-authenticating. token-validity
in xs-security.json is 3600s (1 hour), so a client can hold a stale scope set for up to an
hour after a role change.
To force a real re-check: fully remove/delete the connector in the client (not just "Disconnect" — that alone may not clear the cached token) and re-add it from scratch, so it goes through a brand-new OAuth login. Look for a "tools list refreshed"-style confirmation after reconnecting, and check the tool count actually changed, before concluding a role assignment didn't take effect.
Securing the HTTP endpoint with OAuth 2.0 (XSUAA)
For the hosted (Cloud Foundry) endpoint, authentication is handled by src/auth.js:
OAuth 2.0 (recommended) — bind an XSUAA instance and the server requires a valid JWT:
cf create-service xsuaa application sap-cpi-mcp-xsuaa -c xs-security.json cf bind-service sap-cpi-mcp-server sap-cpi-mcp-xsuaa cf restage sap-cpi-mcp-server cf create-service-key sap-cpi-mcp-xsuaa claude-connector # -> clientid/secret/url for the clientThe server verifies the JWT signature against XSUAA's JWKS (
<uaa>/token_keys) and checks the audience. A client obtains a token viaclient_credentials(orauthorization_code) from<uaa>/oauth/tokenand calls/mcpwithAuthorization: Bearer <jwt>.Static token (dev/fallback) — if no XSUAA is bound but
MCP_AUTH_TOKENis set, that static bearer token is required instead.Open — if neither is configured, the endpoint is unauthenticated (local/PoC only).
Auth mode is auto-detected: XSUAA binding → OAuth; else MCP_AUTH_TOKEN → static; else open.
The local stdio transport is unaffected by all of this.
OAuth discovery / authorize / token proxy (remote MCP clients)
Remote MCP OAuth clients (e.g. a Claude custom connector) resolve the authorization server
either via RFC 8414 discovery at this origin, or —
if that's absent — by assuming /authorize and /token live on the MCP server's own host.
XSUAA's real endpoints live on a different host (the UAA tenant), so without help the client
gets a 404 hitting <this-origin>/authorize directly.
When an XSUAA binding is present, the server exposes:
Route | Purpose |
| RFC 8414 metadata pointing at the real XSUAA |
| Redirects to the real XSUAA |
| Proxies the code/token exchange to the real XSUAA |
If no XSUAA binding is found, these routes are not mounted and a warning is logged at startup.
This is purely a discovery/proxy convenience for OAuth clients — it does not replace the JWT
verification in authMiddleware(), which still gates every request to /mcp.
Deploying to SAP BTP Cloud Foundry
For team use or Claude Enterprise chat — the cloud chat can only reach a remote server, not a
local process. Everything below can be done entirely through the BTP Cockpit web UI (no local
cf CLI needed); an Appendix at the end gives the equivalent CLI
commands for scripting the same deployment.
What you'll end up with
A running Cloud Foundry application (
sap-cpi-mcp-server) that exposes the MCP server over HTTPS at a/mcpendpoint.The application securely calling your SAP CPI tenant's OData APIs using OAuth client credentials.
An XSUAA-protected front door, so only users assigned to an approved role collection can reach the MCP endpoint.
Claude connected to that endpoint as a custom connector, able to call all 48 CPI tools directly from a chat.
Architecture at a glance
Component | Role |
GitHub repository ( | Node.js MCP server source code — 48 tools for CPI monitoring and management. |
Cloud Foundry application ( | Runs the MCP server as an HTTP service; exposes |
Process Integration Runtime service key | OAuth client the app uses to call your CPI tenant's OData / monitoring APIs. |
XSUAA service instance ( | Issues OAuth tokens that protect the |
Role Collections | Map SAP BTP users to Architect / Developer / Support levels of access on the MCP server. |
Claude custom connector | Calls the deployed |
Prerequisites
An SAP BTP account (trial or licensed) with entitlement for Cloud Foundry Runtime and Authorization and Trust Management Service.
Space Developer authorization on the target Cloud Foundry space.
Rights to create a Process Integration Runtime service key on the CPI subaccount (for OAuth credentials — see Get your SAP CPI API credentials).
A Claude plan that supports custom connectors (Settings → Connectors).
Part A — Package the MCP server for deployment
Step 1 — Download the source code. Go to the GitHub repository → Code → Download ZIP.

Figure 1 — The sap-cpi-mcp-server GitHub repository, Code → Download ZIP.
Step 2 — Prepare the deployment ZIP. Cloud Foundry's buildpack looks for package.json at
the root of the uploaded archive. GitHub's downloaded ZIP wraps everything inside a folder (e.g.,
sap-cpi-mcp-server-main/), so it needs to be re-zipped:
Extract the downloaded ZIP and open the extracted folder.
Select
package.json,package-lock.jsonand thesrcfolder (do not select the enclosing folder itself).Right-click → Send to → Compressed (zipped) folder, and name it
sap-cpi-mcp-server.zip.

Figure 2 — Selecting package.json, package-lock.json and src, then Send to → Compressed (zipped) folder.
⚠️ Watch out: If you instead zip the whole extracted folder,
package.jsonends up one level too deep and staging will fail with a "module not found" style error. Verify the new zip opens straight intopackage.json,src/, etc. — not into another folder.
Part B — Set up Cloud Foundry on SAP BTP
Step 3 — Enable the Cloud Foundry environment. In the BTP Cockpit, open your subaccount's Overview page. If Cloud Foundry hasn't been enabled yet, do so from here.

Figure 3 — Subaccount Overview, with the Cloud Foundry Environment panel and Enable Cloud Foundry.

Figure 4 — Cloud Foundry Environment details: API endpoint, org name/ID, and the Spaces list.
Step 4 — Create a space. Click Create Space (top-right of the Spaces panel shown above)
and name it — for example, dev. This is the space you will deploy the application into.
Part C — Deploy the application
Step 5 — Deploy via BTP Cockpit. Open the dev space → Applications and click
Deploy Application.

Figure 5 — The Deploy Application dialog: File location, Deploy with (Manifest/Custom Settings), Manifest location.
Upload the re-zipped file (
sap-cpi-mcp-server.zip) at File location.Keep Deploy with set to Manifest.
Browse to
manifest.ymlfrom the extracted folder for Manifest location.Keep Start application after deploy checked, then click Deploy.

Figure 6 — Dialog filled in with sap-cpi-mcp-server.zip and manifest.yml, ready to deploy.
Step 6 — Confirm the application is running. Once deployment finishes, the application appears in the Applications list with a Started state.

Figure 7 — Applications (1): sap-cpi-mcp-server, Requested State: Started.
Open it to see the Application Overview — buildpack, stack, and the Mapped Routes section with the public HTTPS URL Cloud Foundry assigned to the app.

Figure 8 — Application Overview showing the nodejs_buildpack, cflinuxfs4 stack, and the Mapped Route.
Step 7 — Verify with a health check. Open the Mapped Route link from Step 6 and append
/health to it. A healthy deployment returns a small JSON payload confirming the server name,
version, and an "ok" status.

Figure 9 — GET /health returning { "status": "ok", "server": { "name": "sap-cpi-mcp-server", "version": "1.0.0" } }.
Part D — Connect the app to your SAP CPI tenant
Step 8 — Create a Process Integration Runtime service key. The app needs its own OAuth client to call your CPI tenant's OData APIs — same steps as Get your SAP CPI API credentials above, done on the CPI subaccount.
Step 9 — Configure environment variables. In the application, go to User-Provided Variables and click Create Variable for each of the following.

Figure 10 — User-Provided Variables: ALLOW_WRITE, CPI_BASE_URL, CPI_CLIENT_ID, CPI_CLIENT_SECRET, CPI_TOKEN_URL, MCP_TRANSPORT.
Variable | Source / value | Notes |
| Service key | Tenant-management host, no |
| Service key | OAuth token endpoint. |
| Service key | OAuth client identifier. |
| Service key | OAuth client credential — keep private. Or use Credential Store instead. |
|
| Required for the remote/Claude scenario (stdio is for local use only). |
|
| Keep false unless the connector should be allowed to deploy/create/update/delete content. |
Step 10 — Restage the application. Environment variable changes only take effect after a restage.

Figure 11 — Restage Application: "Restaging will cause application downtime."

Figure 12 — Application Overview after restage, confirming the app is Started and the route is live.
Part E — Secure the endpoint with XSUAA
Step 11 — Create the XSUAA service instance. In Service Marketplace, search for Authorization and Trust Management Service and click Create.
Plan: application, Runtime Environment: Cloud Foundry, Space: dev.
Instance Name:
sap-cpi-mcp-server-xsuaa.

Figure 13 — New Instance or Subscription: Authorization and Trust Management Service, plan application.
On the Parameters step, paste the contents of
xs-security.jsonfrom the extracted folder — this defines the app'sxsappnameand its OAuth scopes (mcp.read,mcp.write,mcp.delete, etc.).Click Create.

Figure 14 — Parameters step with the xs-security.json scopes and descriptions pasted in.
Step 12 — Generate a service key for the Claude connector. Open the new
sap-cpi-mcp-server-xsuaa instance → Service Keys → Create. These credentials are what
Claude will use to authenticate to the MCP endpoint.

Figure 15 — New Service Key dialog for the XSUAA instance.
Open the key's Credentials (JSON view) to retrieve clientid, clientsecret and url — keep
this panel handy for Part F.
🔒 Redacted in this copy — see the screenshot security note at the very end of this document.
Figure 16 — Service key credentials: clientid, clientsecret, url, identityzone, tenantid, etc.
Step 13 — Bind XSUAA to the application. In the application, go to
Service Bindings → Bind Service Instance, choose sap-cpi-mcp-server-xsuaa, and confirm
the binding.

Figure 17 — Bind Service Instance: selecting sap-cpi-mcp-server-xsuaa (service: xsuaa, plan: application).
Note: Restart or restage the app again after binding so it picks up the new
VCAP_SERVICEScredentials.
Step 14 — Create Role Collections, Step 15 — Assign Users: see Role-based access control above.
Part F — Connect to Claude
Step 16 — Add a custom connector in Claude. Go to Settings → Connectors → Add → Add custom connector.

Figure 21 — Add custom connector: Name, Remote MCP Server URL, and Advanced settings for OAuth Client ID/Secret.
Step 17 — Get the remote MCP server URL. Back in the Cockpit, open the application's
Application Overview and copy the Mapped Routes URL, then append /mcp to it.

Figure 22 — Application Overview with the Mapped Route to copy (append /mcp when pasting into Claude).
Note: Example:
https://sap-cpi-mcp-server.cfapps.us10-001.hana.ondemand.com/mcp
Step 18 — Get the OAuth Client ID & Secret. Open the service key you created in Step 12 and
copy its clientid and clientsecret into the connector's OAuth Client ID / OAuth Client
Secret fields.
🔒 Redacted in this copy — same service-key credentials panel as Figure 16.
Figure 23 — Service key credentials view used to fill in the connector's OAuth Client ID / Secret.
Step 19 — Connect and authenticate. Click Add, then Connect.

Figure 24 — Connector added, showing the /mcp URL and a Connect button before authentication.
Claude redirects to your SAP identity provider's login page.
Sign in with an account that has been assigned one of the
SapCpiMcprole collections from Step 15.Once authenticated, the connector shows as connected and all 48 MCP tools become available to Claude.
Verification
Confirm the end-to-end connection with two quick prompts in a new Claude chat:
"List out the tools available in the SAP CPI MCP server."

Figure 25 — Claude listing the full MCP tool catalog: discovery/catalog, packages & flows, deployment & runtime status, and more.
"List out the deployed interfaces."

Figure 26 — Claude calling list_deployed_artifacts and returning the tenant's actual deployed integration flow(s).
Both responses coming back with live tenant data confirm that the full chain is working: Claude → XSUAA-authenticated /mcp endpoint → Cloud Foundry app → SAP CPI OData API.
CF CLI quick reference
For readers who prefer the command line (or want to script this), the Cockpit steps above map to:
cf login -a https://api.cf.<region>.hana.ondemand.com
cf target -o <org> -s <space>
cf push --no-start
cf set-env sap-cpi-mcp-server CPI_BASE_URL "https://<tenant>/api/v1"
cf set-env sap-cpi-mcp-server CPI_TOKEN_URL "https://<subdomain>.authentication.<region>.hana.ondemand.com/oauth/token"
cf set-env sap-cpi-mcp-server CPI_CLIENT_ID "<clientid>"
cf set-env sap-cpi-mcp-server CPI_CLIENT_SECRET "<clientsecret>"
cf set-env sap-cpi-mcp-server MCP_TRANSPORT "http"
cf set-env sap-cpi-mcp-server ALLOW_WRITE "false"
cf create-service xsuaa application sap-cpi-mcp-xsuaa -c xs-security.json
cf bind-service sap-cpi-mcp-server sap-cpi-mcp-xsuaa
cf start sap-cpi-mcp-server
cf create-service-key sap-cpi-mcp-xsuaa sap-cpi-mcp-xsuaa-keyNote: The service key created by the last command supplies the
clientid,clientsecretandtokenurlto paste into Claude's custom connector — the same values Steps 12 and 18 retrieve through the Cockpit UI.
Keeping
CPI_CLIENT_SECRETout of this altogether: see Credential Store above — bind a Credential Store instance and setCPI_CREDSTORE_KEYinstead ofCPI_CLIENT_SECRETabove.
Security note:
MCP_AUTH_TOKEN(used instead of XSUAA in the static-token fallback mode) is a simple shared-secret gate for getting started only. For production, front the app with XSUAA as shown above rather than relying on a static token.
Example prompts
"List my SAP CPI integration packages."
"Show me all failed messages in the last 4 hours."
"Give me a failure summary for the last 24 hours grouped by integration flow."
"Get the error details for MessageGuid
AGh....""List integration flows in package
MyIntegrationPackageand tell me which are deployed.""Is the
OrderReplicationflow deployed and started? If not, why?""What externalized configuration does
MyFlowhave?""Deploy
MyFlow." → Claude asks you to confirm → say yes → it deploys."Run cpi_api_catalog" → discover every entity/operation the server can reach.
"Which CPI tenants are configured?" (multi-tenant setups — calls
list_cpi_tenants)"Show failed messages in the last 24 hours on the QA tenant." (multi-tenant — Claude fills in
tenant=QA)
Claude decides which tool to call, runs it, and explains the result. For write actions it will ask you to confirm before anything changes.
Troubleshooting
General usage
Symptom | Fix |
| Wrong API host — drop |
Tools don't appear in Claude Desktop | You didn't fully restart (quit from tray / Task Manager) |
Cloud chat "times out / server unresponsive" | Cloud chat can't reach a local server — use the remote (CF) deployment |
| Wrong client id/secret, or missing roles on the service key |
| Service key lacks deploy/edit roles |
"Write operations are disabled" | Set |
Write tool won't run | Re-run it with |
| That feature isn't provisioned on your tenant/plan |
Postman shows "Connected / Connection closed" | The server streams SSE; this build returns JSON in HTTP mode — resend |
Cloud Foundry deployment
Symptom | Likely cause | Fix |
Staging fails / buildpack can't find | The re-zipped archive still has a wrapping folder (e.g., | Re-zip so |
App deploys but |
| Check the app's Logs tab; confirm |
Claude connector returns 401/403 after login | The signed-in user isn't in any | Confirm Service Bindings shows |
App is Running but CPI calls fail with 401 |
| Recreate the Process Integration Runtime service key with the roles listed above, update the variables, and restage. |
Notes on the CPI OData API
Collection base:
.../api/v1MPLs:
/MessageProcessingLogs— filter with$filter, sort with$orderby=LogEnd desc.Error text:
/MessageProcessingLogs('<guid>')/ErrorInformation/$value(plain text).Packages:
/IntegrationPackages, flows:/IntegrationDesigntimeArtifacts.Deployed:
/IntegrationRuntimeArtifacts.Time filters use OData datetime literals:
LogEnd gt datetime'2024-01-01T00:00:00'.
Requires Node.js 18+ (uses the built-in fetch).
Appendix — Environment Variables Reference
Variable | Source | Purpose |
| Process Integration Runtime service key, | Base URL the app calls for CPI OData/monitoring APIs. |
| Service key, | OAuth token endpoint for the CPI client credentials grant. |
| Service key, | OAuth client identifier for calling CPI. |
| Service key, | OAuth client secret for calling CPI. Alternative: |
| Credential Store instance | Resolve the client secret from Credential Store instead of |
| Set manually | Display name for tenant |
| Set manually | Boolean gate for deploy/create/update/delete tools; keep false unless intentionally enabling write access. |
| Set manually |
|
| Set manually |
|
| Set manually | Static bearer-token fallback auth for the HTTP transport when no XSUAA is bound. |
| Set manually / CF-injected | Local HTTP port (CF injects its own). |
Changelog
1.4.0
Standard practice:
build_integration_flow'sdeployargument now defaults tofalse(wastrue). This tool pushes content and validates it, then stops — it no longer deploys automatically. The expected workflow: build, read thevalidationfield, share that analysis with the user, and let them decide whether to deploy (deploy: true) or fix something first, rather than assuming deploy should happen.Updated the tool's title/description and the
notefield on every non-deploying result to spell out this workflow explicitly, so any MCP client calling the tool follows it by default rather than relying on being told each time.
1.3.0
HTTP adapter:
authenticationMethod:"OAuth2ClientCredentials"confirmed working (2026-08-17, against a real hand-built reference channel,reference_iflow_for_HTTP_Oauth_and_OData_V4_adapter) — previously thought broken from a 2026-08-14 test that used the raw, unspaced enum value; CPI actually wants the spaced display value ("OAuth2 Client Credentials"), which the adapter already mapped to viaauthMethodValuebut hadn't been re-tested since.HTTP adapter: new retry parameters —
retryOnException,retryIteration,retryInterval,retryOnConnectionFailure,httpErrorResponseCodes,throwExceptionOnFailure— confirmed real property shape from the same reference channel.New
odatav4adapter (OData V4 / HCIOData) — a distinct property set from the existingodata(V2) adapter (csrfEnablednotisCSRFEnabled,connectionReuse/allowChunking,resourcePathForOdatav4). Confirmed real from the same reference channel usingoperation:"get"+OAuth2ClientCredentials.Root-cause fix: the existing
odata(V2) adapter'sauthenticationMethodwas being sent through the HTTP-only spaced-display-value mapping, which is exactly backwards for OData — OData wants the RAW unspaced enum value. This is very likely whyOAuth2ClientCredentialswas previously "confirmed BROKEN" forodata; it's now sent raw, matching the confirmed-realodatav4reference. Not yet independently re-confirmed against a live V2-specific deploy.
1.2.0
build_integration_flowno longer writes anything to this server's local disk in ANY mode, on either transport (local stdio or the Cloud Foundry HTTP deployment).offline: truenow returns its preview zip inline aszipBase64instead of saving it to agenerated-iflows/folder — that folder and the save-to-disk logic behind it are gone entirely. DecodezipBase64yourself locally if you want an actual file.push_integration_flow_content'szipFilePathargument still exists (for a zip you place on the server's filesystem some other way), but no longer assumesbuild_integration_flowis what put it there.
1.1.0
build_integration_flowno longer writes a copy of pushed (online) content togenerated-iflows/on this server's local disk. Once content is pushed to a tenant, the tenant is the copy of record —download_integration_flow(artifactId)fetches it back any time it's needed (e.g. to inspect a build failure in the web editor's Problems tab).Corrected the tool count (48, not 46/45/42 as previously stated in various docs).
Merged
GETTING-STARTED.mdandCLOUD-FOUNDRY-DEPLOYMENT.mdinto this file — one doc instead of three, with duplicated credential-setup/deployment/troubleshooting content consolidated rather than repeated.
1.0.0
Initial release: monitoring, design-time content, runtime/deployment, admin, generic escape-hatch tools,
where_used, multi-tenant support, RBAC, andbuild_integration_flow.
🔒 Before publishing any of the Cockpit screenshots above
Figures 16 and 23 (the XSUAA service-key credentials panels) and Figure 20 (a role-collection user assignment) have been withheld from this document — the source screenshots showed a partially-visible real
clientid/clientsecret/tenant identity zone and a real user's email/name. If image files namedimage16.png,image20.png,image23.png(or similar) exist indocs/cloud-foundry-deployment/, replace them with redacted/cropped versions (or a placeholder graphic) before this document goes anywhere public. (As of this merge, thatdocs/cloud-foundry-deployment/folder is not present in this checkout — the other 23 figures referenced above are placeholders pending whoever adds the real screenshots.)
Available Tools
46 toolscancel_message_processing_logCancel Message Processing LogA
Cancel a currently processing/retrying message (e.g. a stuck JMS or scheduled message). Requires ALLOW_WRITE and confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to actually cancel. | |
| messageGuid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose the write permission requirement and the need for confirm=true, both important for a cancellation operation. However, it stops short of explaining consequences such as irreversibility or side effects on stored message data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that is efficiently front-loaded with action, example, and requirement. Every phrase adds value, with no memory waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations or output schema, the description provides the core use case and safety requirements, but omits details about return values, failure conditions, and irreversibility. The messageGuid parameter also lacks context, leaving some gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%; description adds no new meaning for messageGuid, which is the required parameter and remains undocumented. The confirm parameter is described in the schema and the description merely repeats 'confirm=true' without adding insights.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Cancel' and identifies the resource as 'a currently processing/retrying message' with an explicit example of a stuck JMS or scheduled message. It clearly distinguishes this mutating tool from the many get/list siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description states the intended scenario (processing/retrying/stuck messages) and prerequisites (ALLOW_WRITE, confirm=true). It does not explicitly mention alternatives or when not to use, but the context makes the use case clear and differentiates it from sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_integration_packageCopy Integration Package (from Hub / Discover)A
Copy a standard/partner package (e.g. from the Discover catalog) into the design workspace. Requires ALLOW_WRITE.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to proceed. | |
| packageId | Yes | Id of the package to copy. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses a key requirement ('Requires ALLOW_WRITE') and the verb 'copy' implies the source remains unchanged. However, it does not describe what happens if a package with the same ID already exists, whether the operation is idempotent, or the response format after copying.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loaded with the action. Every word earns its place: the first sentence states purpose, the second states a permission prerequisite. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no output schema, no annotations), the description provides sufficient context: what the tool does, where from, where to, and a permission requirement. It does not describe the return value, but none is required for invoking this copy operation; the confirm parameter is documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds only a small amount of domain context (e.g., 'standard/partner package') that helps interpret packageId, but it does not explain the confirm parameter's role beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Copy'), the resource ('a standard/partner package'), and the destination ('into the design workspace'). It also gives an example source ('from the Discover catalog'), which distinguishes it from sibling tools like create, delete, or list integration packages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: bringing a package from the Hub/Discover catalog into the design workspace. It does not explicitly mention alternatives or exclusion criteria, but the context is clear enough for an agent to know when to select this tool over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cpi_api_catalogCPI API Catalog (discover entity sets & operations)A
List every OData entity set and function import this CPI tenant exposes. Use this to discover what cpi_query / cpi_get_entity / cpi_invoke_function / cpi_write can target.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Optional case-insensitive substring filter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It clearly states what the tool returns (a list of OData entity sets and function imports) and implicitly indicates it is a read-only discovery operation. It adds useful context about how the catalog relates to other tools, though it doesn't explicitly mention pagination, required auth, or exact response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences, front-loaded with the primary action and scope, followed by actionable usage guidance. Every word earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one optional parameter, no output schema) and the description fully explains its role in the broader workflow by naming the dependent tools. It is complete enough for an agent to understand what to expect and when to use it, given the context of sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the optional 'filter' parameter clearly described as a case-insensitive substring filter. Since the schema already fully documents the parameter, the description need not add more. The baseline of 3 applies here; no additional semantic information is provided or necessary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists every OData entity set and function import for the CPI tenant. It explicitly distinguishes itself from siblings by mentioning it enables discovery of targets for cpi_query, cpi_get_entity, cpi_invoke_function, and cpi_write, making its purpose specific and non-overlapping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use this to discover what cpi_query / cpi_get_entity / cpi_invoke_function / cpi_write can target.' This tells the agent exactly when to invoke this tool, setting it as a discovery prerequisite for those other tools, which effectively defines both when and how to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cpi_get_entityCPI Get Entity (read one record by key)A
Get a single entity by key. Use 'key' for a single-key entity (e.g. package Id), or 'keys' (object) for composite keys (e.g. {Id:'x',Version:'active'}). Optionally fetch a navigation property.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Single key value. | |
| raw | No | Return raw text (use for /$value endpoints). | |
| keys | No | Composite key object. | |
| entitySet | Yes | ||
| navigation | No | Navigation property to follow, e.g. 'Configurations'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It adds useful behavioral context: the distinction between single and composite keys, the raw flag for /$value endpoints, and the optional navigation follow. It implies a read-only operation ('Get'), which is accurate. It doesn't describe error handling or auth, but for a simple getter, the transparency is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose. Every word earns its place, providing examples and key distinctions without verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters, one required, no output schema. The description covers the key/keys distinction, raw behavior, and navigation, making the tool usable. It could mention error cases or return format, but these are not critical for a straightforward getter and the schema covers most parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so baseline is 3. The description adds value beyond the schema by explaining when to use 'key' vs 'keys' with concrete examples, and clarifying the navigation parameter's purpose. It doesn't describe entitySet, but that is arguably self-evident from the tool name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets a single entity by key, which is a specific verb and resource. It distinguishes itself from siblings by focusing on key-based retrieval and optional navigation, though it doesn't explicitly name alternative tools for comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: use 'key' for single-key entities and 'keys' for composite keys, and optionally follow navigation. It doesn't explicitly state when not to use this tool or name alternatives, but the guidance is unambiguous and practical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cpi_invoke_functionCPI Invoke Function Import (run any operation)A
Invoke any OData function import (see cpi_api_catalog). String parameters are auto-quoted. Requires ALLOW_WRITE (most function imports change tenant state).
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | POST | |
| params | No | ||
| confirm | No | Must be true to proceed. | |
| functionName | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It reveals that string parameters are auto-quoted, that ALLOW_WRITE is required, and that most function imports change tenant state. This goes beyond the schema and gives important side-effect and prerequisite info, though it does not mention return format or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, front-loaded with the purpose, then a key parameter behavior, then a critical permission/safety warning. Every sentence adds value and there is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic function-import invocation tool with no output schema, the description is reasonably complete but lacks guidance on what the response will look like or how to handle errors. The reference to cpi_api_catalog helps, but given the complexity of 'any operation', more context about expected return values or limitations would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (only confirm has a description). The description adds meaning for the params object ('String parameters are auto-quoted') and hints at a permission requirement, but it does not explain method, functionName, or confirm in detail. The auto-quoting note is useful, but the description only partially compensates for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Invoke any OData function import'. It clearly distinguishes this tool from siblings like cpi_query or cpi_write by focusing on function imports, and the reference to cpi_api_catalog provides a complementary lookup resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it is used to invoke any OData function import, with a pointer to cpi_api_catalog for available functions. It also warns about the ALLOW_WRITE requirement and tenant state changes, which helps the agent decide when to use it, but it does not explicitly state exclusions or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cpi_queryCPI Query (read any entity set)A
Run a read query against ANY CPI OData entity set with standard OData options. Example: entitySet='MessageProcessingLogs', filter="Status eq 'FAILED'", orderby='LogEnd desc'.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| skip | No | ||
| expand | No | $expand comma list. | |
| filter | No | OData $filter expression (pre-quote string literals). | |
| select | No | $select comma list. | |
| orderby | No | ||
| entitySet | Yes | e.g. IntegrationPackages, KeystoreEntries, DataStores |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It clearly labels the operation as a 'read query,' indicating non-destructive behavior, but it does not elaborate on pagination behavior (despite top/skip params), response format, or access requirements. The phrase 'standard OData options' is generic and does not disclose edge-case behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences: the first states the core purpose, the second gives a compact example. Every word earns its place, and the most important information (generic read query) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's generic nature (any entity set) and lack of output schema, the description does not explain what the response looks like or how to discover valid entity sets. It also omits guidance on using pagination or select/expand options. However, the example and schema partially mitigate this by clarifying input usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful parameter context beyond the schema by providing a concrete example showing how to format entitySet, filter, and orderby. This clarifies usage for the less-documented parameters (e.g., orderby has no schema description). The example compensates for the 57% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Run a read query'), a clear resource ('ANY CPI OData entity set'), and scope ('standard OData options'). It distinguishes this generic query tool from siblings like get_mpl_details or search_message_processing_logs by emphasizing its applicability to any entity set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for any OData entity set but does not explicitly state when to prefer this over dedicated siblings or when not to use it. No exclusionary guidance is given, but the example provides a concrete use case that hints at typical query scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cpi_writeCPI Write (create/update/delete any entity)A
Low-level create/update/delete against any CPI OData path. Requires ALLOW_WRITE. Every call (POST/PUT/DELETE/MERGE) requires confirm=true. Provide 'path' relative to /api/v1 (e.g. "/IntegrationPackages('X')").
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Request body object (for POST/PUT/MERGE). | |
| path | Yes | Path relative to /api/v1, e.g. /NumberRanges or /Variables(...). | |
| method | Yes | ||
| confirm | No | Required true for every call, not just DELETE. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses the ALLOW_WRITE permission requirement and the mandatory confirm=true for every call, which adds valuable safety context. However, it does not describe side effects, irreversibility, response format, or error behavior, leaving gaps for a destructive low-level tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise: three sentences that state the purpose, a key prerequisite, and the path convention. No filler or redundancy, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic write tool with no output schema, the description covers the essentials: what it does, the required permission, the confirmation requirement, and path format. It lacks guidance on when to use it vs. specific tools and does not explain response behavior, but it is minimally adequate for a low-level tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, with method lacking a description. The description adds a path example and clarifies that confirm=true applies to all methods, which supplements the schema. It does not deeply explain method semantics, but the schema's enum and the description's verb mapping provide reasonable guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('create/update/delete') and a resource ('any CPI OData path'), making the generic write intent unambiguous. It also distinguishes itself from sibling tools by explicitly labeling itself 'low-level' and 'any entity'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys a clear context: it is a low-level tool that can operate on any OData path, implying it is the tool of last resort or for custom paths. However, it does not explicitly state when to prefer specific sibling tools (e.g., create_integration_package) instead, so no exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_integration_flowCreate Integration FlowA
Create a new (empty) integration flow in a package — a default flow at version 1.0.0 that you then edit in the Integration Suite web editor. Requires ALLOW_WRITE.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Technical Id (no spaces). | |
| name | Yes | ||
| confirm | No | Must be true to proceed. | |
| packageId | Yes | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the 'empty' nature, version 1.0.0, and the ALLOW_WRITE requirement. However, it does not mention side effects, return values, or failure modes like duplicate IDs, which are important for a create operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the verb and object. It includes key facts (empty, version, editor, permission) without unnecessary fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives sufficient context for the tool's main purpose and distinguishes it from siblings, but it lacks important operational details such as parameter semantics, expected outcomes, and error scenarios. Given the absence of an output schema and annotations, a more complete description would be needed for a 4.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 40%, and the description adds little beyond schema: it implies packageId via 'in a package' but does not explain name, description, or confirm. The confirm parameter is critical but not mentioned in the description, so the description fails to compensate for the schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action ('Create'), the resource ('integration flow'), and the context ('in a package', 'empty flow', 'version 1.0.0'). It distinguishes this tool from siblings like create_integration_package and save_integration_flow_as_version by focusing on the initial empty flow creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: creating a new empty flow that will be edited later in the web editor. However, it does not explicitly mention alternatives or when not to use it, so it does not fully meet the 'explicit when/when-not' bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_integration_packageCreate Integration PackageB
Create a new integration package. Requires ALLOW_WRITE.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Technical Id (no spaces). | |
| name | Yes | ||
| confirm | No | Must be true to proceed. | |
| shortText | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the ALLOW_WRITE permission requirement, which is a valuable behavioral constraint. However, it doesn't mention idempotency, response behavior, or what happens if the id already exists. The permission note adds some context but the disclosure is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two short sentences with the purpose front-loaded. It avoids unnecessary words and is easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain the confirm requirement, field semantics, or what to expect on success (e.g., a return value). The minimal text leaves significant gaps for a creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 40%, and the description adds no parameter details beyond what the schema provides. It doesn't explain the meaning of 'name', 'shortText', 'description', or the 'confirm' flag. Since coverage is low, the description should compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new integration package' with a specific verb and resource, distinguishing it from sibling tools like list, get, delete, and copy. This unambiguously communicates the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The verb 'create' implies use for new packages, but there are no exclusions, prerequisites (beyond ALLOW_WRITE), or references to alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_number_rangeCreate Number RangeC
Create a number range object. Requires ALLOW_WRITE.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| rotate | No | ||
| confirm | No | Must be true to proceed. | |
| maxValue | No | ||
| minValue | No | ||
| description | No | ||
| fieldLength | No | ||
| currentValue | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. It only mentions the ALLOW_WRITE permission, but does not describe side effects, return values, or other behavioral traits beyond the obvious creation operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a concise single sentence that efficiently states the tool's purpose and a key requirement. It avoids redundancy and is well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 8 parameters, no output schema, and no annotations, the description is severely incomplete. It omits parameter meanings, usage context, and expected return, making it inadequate for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 13% (only 'confirm' has a description). The description does not explain any of the eight parameters, such as name, rotate, minValue, or maxValue, and thus fails to compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a number range object' with a specific verb and resource. It is unambiguous but does not differentiate from sibling tools like create_integration_package or list_number_ranges.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It only mentions the ALLOW_WRITE permission requirement, which is a prerequisite, not usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_integration_packageDelete Integration PackageA
Delete an integration package and all its artifacts. Requires ALLOW_WRITE and confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| packageId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses destructive behavior (deletes package and artifacts), permission requirement (ALLOW_WRITE), and a mandatory confirmation flag (confirm=true). While it does not mention reversibility or dependent artifacts, it covers the key safety-critical traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence that front-loads the action, scope, and prerequisites. Every word contributes value; there is no redundancy or padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with 2 parameters and no output schema, the description covers the essential aspects: what it deletes, the scope (all artifacts), the permission needed, and the confirm flag. It lacks details on errors or irreversibility but is adequately complete for the given complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage, so the description must compensate. It clarifies that confirm must be set to true, but does not elaborate on packageId beyond its name. The parameter semantics are only partially addressed, leaving some ambiguity about packageId format or the need to confirm for the operation to succeed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Delete) and resource (integration package) and clearly distinguishes from siblings by adding 'all its artifacts', making it the only destructive operation among get/list/create/copy tools. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for use: delete requires ALLOW_WRITE permission and confirm=true. It does not explicitly name alternatives or when-not conditions, but the deletion scope and prerequisites are clearly stated, which is more than minimal guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_artifactDeploy ArtifactA
Deploy a design-time artifact to the runtime. Choose the artifact type. Requires ALLOW_WRITE. Deployment is asynchronous — check status with get_deployed_artifact_status or get_build_and_deploy_status.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | integrationFlow | |
| confirm | No | Must be true to proceed. | |
| version | No | active | |
| artifactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden of disclosing behavior. It reveals that the operation requires ALLOW_WRITE, is asynchronous, and provides two specific status-check tools for follow-up. This goes beyond the schema. However, it does not mention whether deployment overwrites existing artifacts or what happens on failure, missing some depth for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, each earning its place: purpose, type selection, and permission/async guidance. No fluff or repetition. It is front-loaded with the core action and provides actionable follow-up without verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a deployment tool with no output schema and low parameter documentation, the description covers the essential asynchronous nature and permission requirement, and points to status tools. However, it omits the confirm parameter's role, version semantics, and any notion of operation IDs or failure behavior. It is adequate but leaves clear gaps for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (only 'confirm' has a schema description). The description adds meaning only for the 'type' parameter via 'Choose the artifact type.' It does not explain artifactId (required), version (defaults to 'active'), or that confirm must be true. Additionally, the description mentions 'Requires ALLOW_WRITE' but does not mention the confirm flag, which is a critical parameter for execution. This is insufficient for a low-coverage schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Deploy a design-time artifact to the runtime.' This clearly distinguishes the tool from siblings like 'undeploy_artifact', 'get_deployed_artifact_status', and 'get_build_and_deploy_status'. The action is unambiguous and matches the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: whenever you need to deploy an artifact to the runtime. It also provides follow-up guidance by mentioning status-check alternatives after asynchronous deployment. However, it does not explicitly state when not to use it or contrast with alternatives like 'save_integration_flow_as_version' or 'create_integration_flow', so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_user_credentialDeploy User CredentialA
Create/deploy a User Credential security artifact. Requires ALLOW_WRITE. The secret is write-only and cannot be read back.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | default | |
| name | Yes | ||
| user | Yes | ||
| confirm | No | Must be true to proceed. | |
| password | Yes | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses two key behavioral traits: the need for ALLOW_WRITE permission and that the secret is write-only and cannot be read back. This goes beyond the schema and is valuable for safe agent usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded: it opens with the purpose, then immediately states the permission requirement and the critical write-only caveat. Every sentence adds value with no redundant or irrelevant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential permission and write-only behavior, but it omits details about overwriting existing credentials, async deployment, or return values. Since there is no output schema, this leaves some ambiguity, though the schema documents the 'confirm' requirement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17% (only 'confirm' is described in the schema). The description adds minimal parameter insight—it only hints that the password is secret. Parameters like 'kind', 'description', and the meaning of 'name'/'user' are not explained, leaving the agent to infer from names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Create/deploy') and resource ('User Credential security artifact'), distinguishing it from generic deploy_artifact and the list_user_credentials sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a write operation via 'Requires ALLOW_WRITE' and notes the write-only nature, but it does not explicitly mention when to use this tool versus alternatives like deploy_artifact or list_user_credentials. No when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_integration_flowDownload Integration Flow (base64 zip)B
Download the integration flow content as a base64-encoded zip ($value). Useful for backup/transport.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | active | |
| artifactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden of behavioral disclosure. It does reveal that the output is a base64-encoded zip, which is valuable. But it does not mention authentication needs, error handling, or how the 'version' parameter affects the download, leaving gaps in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action and output format. Every word adds value, and there is no redundancy with the schema or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple download operation, the description adequately conveys the output format. However, it lacks parameter semantics and differentiation from sibling tools, and with no output schema or annotations, the overall completeness is only minimally viable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not compensate by explaining the parameters. It only refers to 'integration flow content' without clarifying that artifactId is required or what version means. The parameters remain effectively undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: downloading integration flow content as a base64-encoded zip. It uses a specific verb and resource, and the title reinforces the purpose. This distinguishes it from sibling tools like get_integration_flow, which likely retrieve metadata rather than content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'Useful for backup/transport,' providing a clear general context for when to use the tool. However, it does not explicitly say when not to use it or name alternative tools for related tasks, leaving some ambiguity among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_build_and_deploy_statusGet Build & Deploy StatusA
Check the asynchronous build/deploy task status for a deployment (returned as a task id).
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The deploy task id returned by deploy_artifact. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It adds the key behavior 'asynchronous' and implies a read-only status check via 'check', but does not disclose return format, error handling, or side effects. Some context is provided, but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of ~14 words, front-loaded with the action, no redundant phrasing. All information is useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter, no output schema, and no annotations, the description is mostly sufficient, but it lacks detail on what the status response looks like. However, the core purpose and input are clear, making it fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for taskId ('returned by deploy_artifact'). The description's phrase 'returned as a task id' reinforces this but adds no new information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Check the asynchronous build/deploy task status for a deployment' with a clear verb ('Check'), resource ('build/deploy task status'), and context ('async', 'returned as a task id'). It is distinct from sibling get_deployed_artifact_status by focusing on task status rather than artifact status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when/when-not or alternative tools are mentioned. The description implies usage after initiating a deployment via 'returned as a task id' and 'asynchronous', but does not reference deploy_artifact or contrast with get_deployed_artifact_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_store_entriesGet Data Store EntriesA
List the entries in a specific data store. IntegrationFlow is the flow Id (empty for a global store).
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| type | No | default | |
| dataStoreName | Yes | ||
| integrationFlow | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It indicates a read-only operation via 'List', but does not mention side effects, output format, or parameter behaviors like the 'top' limit or 'type' selection. The integrationFlow clarification adds some value, but significant behavioral gaps remain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences. The main action is front-loaded, and the second sentence adds critical parameter context without redundancy. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, no annotations, and 0% schema description coverage, the description is incomplete. It fails to describe the required parameter 'dataStoreName' and the optional parameters 'top' and 'type'. The tool is simple, yet the description leaves important usage details undisclosed, making full autonomous invocation difficult.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining parameters. Only 'integrationFlow' is clarified ('empty for a global store'). The required 'dataStoreName' is not mentioned, and 'top' and 'type' are left unexplained. This is insufficient for the 4 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'List the entries in a specific data store.' It uses a specific verb ('List'), identifies the resource ('data store entries'), and adds a scoping detail about integrationFlow for global vs. flow-specific stores. This distinguishes it from the sibling tool 'get_message_store_entries' by focusing on data stores, not message stores.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: to list data store entries, and gives a usage hint about the integrationFlow parameter ('empty for a global store'). It does not explicitly state exclusions or alternatives, but the clarification about global vs. flow-specific stores provides enough context for when to set the parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deployed_artifact_statusGet Deployed Artifact StatusB
Get the deployment status of one runtime artifact, plus error details if failed.
| Name | Required | Description | Default |
|---|---|---|---|
| artifactId | Yes | ||
| includeErrorDetails | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It adds that error details are returned if failed, which is useful. However, it doesn't explicitly state read-only behavior, permissions, or failure modes for non-existent artifacts, though the 'Get' verb implies safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler. It conveys the verb, resource, and an additional detail concisely. Every word is functional.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter read tool, the description gives the core purpose and an extra behavior, but with no output schema it doesn't describe the response structure or possible status values. It is sufficient for a minimal understanding but lacks return details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain either parameter. It mentions 'error details if failed' but doesn't map to includeErrorDetails. artifactId is completely unexplained beyond its name, so the description fails to compensate for the absence of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Get') and resource ('deployment status of one runtime artifact'), and adds scope ('one') and an additional detail ('plus error details if failed'). This distinguishes it from sibling tools like list_deployed_artifacts (list all) and get_build_and_deploy_status (process status).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for a single artifact's deployment status, but offers no explicit when-to-use vs alternatives or when-not-to-use. The singular 'one runtime artifact' provides context, but no sibling differentiation or exclusion is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_failure_summaryGet Failure SummaryB
Aggregate failed/escalated messages over a recent window, grouped by integration flow.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| hoursBack | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden but only states the aggregation function. It does not disclose whether the operation is read-only, what the output contains (counts, lists), or any side effects, leaving a significant transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that conveys the core idea efficiently with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and annotations, the description should explain the return format and how this tool relates to error-focused siblings, but it only provides a high-level summary without those details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description does not mention the 'top' or 'hoursBack' parameters. While 'hoursBack' is vaguely implied by 'recent window', 'top' is entirely unexplained, so the description adds little semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Aggregate' and identifies the resource ('failed/escalated messages') plus the grouping key ('integration flow'), making it distinct from sibling tools that retrieve individual error details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a summary use case but does not explicitly state when to prefer this tool over siblings like get_mpl_error_information or search_message_processing_logs, nor does it mention any exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flow_configurationsGet Flow Externalized ConfigurationsC
Get the externalized configuration parameters of an integration flow (endpoints, credentials names, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | active | |
| artifactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits itself. It reveals the content returned but does not state that the operation is read-only, describe the return shape, mention the active-version default, or address error conditions. This is a significant gap for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It states the verb, resource, and examples in 17 words, earning every word.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and many sibling getters, this description is too thin. It does not explain the version semantics, output format, or relationship to related flow tools, leaving the agent without enough context to invoke it with confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only loosely ties artifactId to 'an integration flow' and says nothing about the version parameter or its 'active' default. Some meaning is added by explaining what externalized parameters are, but not enough to fully document the two parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and names a clear resource: externalized configuration parameters of an integration flow, with useful examples ('endpoints, credentials names, etc.'). It is clear enough to distinguish the tool from most siblings, though it does not explicitly call out a sibling alternative, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only states what the tool does and gives no when-to-use guidance, prerequisites, or alternatives. It does not mention when to choose this over get_flow_resources or update_flow_configuration, leaving the agent to infer usage from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flow_resourcesGet Flow ResourcesB
List the resources (scripts, XSDs, WSDLs, mappings) inside an integration flow.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | active | |
| artifactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It only states a read-only list operation and gives examples of returned resource types, but does not explain the return structure, potential errors, pagination, authentication needs, or how version affects the result. This is a significant gap for a tool with no structured safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that fronts the main verb and object, with a parenthetical list of examples. It is compact and readable, but the structure is flat with no separators or additional context, so it earns a high but not top score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and only two sparse parameters, the description should compensate by explaining the returned data shape, the meaning of artifactId and version, and how this tool relates to similar ones. It only provides the basic 'list resources' idea, leaving too much unsaid for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has two parameters (artifactId, version) with zero description coverage. The tool description adds no meaning to either parameter, leaving artifactId and version undefined. The agent must guess what 'active' means as a default and what an artifactId refers to, making parameter usage highly ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' and identifies the resource type (resources inside an integration flow) plus enumerates concrete examples (scripts, XSDs, WSDLs, mappings). This clearly distinguishes it from siblings like get_integration_flow or get_flow_configurations, which target different aspects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need to inspect the resources within a flow, but it does not explicitly state when to prefer this over alternatives, nor does it mention any exclusions or complementary tools. The context is clear enough for a basic guess but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_integration_flowGet Integration Flow DetailsB
Get a design-time integration flow artifact by Id and Version.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | active | |
| artifactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses only that it retrieves an artifact, but lacks details about return format, error handling, authentication requirements, or the meaning of 'design-time'. This is insufficient for an agent to understand side effects or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, which is appropriately front-loaded. However, it is under-specified, omitting essential context that would make it more useful. It is not overly verbose but lacks completeness for the reader.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, and 0% schema coverage, the description alone is inadequate for reliable invocation. It does not clarify how 'design-time' differs from 'deployed' or indicate what data is returned, leaving critical gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only mentions 'by Id and Version', which paraphrases the property names without explaining parameter semantics, defaults (e.g., version default 'active'), or acceptable values. This adds minimal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the specific resource 'design-time integration flow artifact' with identifying attributes 'by Id and Version'. This distinguishes it from siblings like list_integration_flows or get_deployed_artifact_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving a specific integration flow artifact, but it does not explicitly state when to use this tool versus alternatives like get_flow_configurations or download_integration_flow. No exclusions or conditions are given, so guidance is minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_integration_packageGet Integration PackageA
Get details of a single integration package by Id.
| Name | Required | Description | Default |
|---|---|---|---|
| packageId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states 'Get details' with no additional context on return format, error handling, permissions, or rate limits. It essentially restates the tool's name, offering no deeper behavioral insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loaded with the action and resource, containing no extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool (one required parameter, no output schema), the description adequately conveys the operation. It avoids over-explaining, and the context of siblings clarifies its role. Minor gap: no mention of what 'details' includes, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds meaning by saying 'by Id,' clarifying that packageId is the identifier of the integration package. However, it does not provide additional details like format or constraints beyond what the schema already shows.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action: 'Get details of a single integration package by Id.' It identifies the resource (integration package), the operation (get details), and the unique identifier (Id), distinguishing it from sibling tools like list_integration_packages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: use when you have a packageId and need details of one package. However, it does not explicitly mention alternatives or when not to use it, such as 'use list_integration_packages to list all packages.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_message_store_entriesGet Message Store EntriesB
Get persisted message store entries (payloads persisted via the 'Persist' step) for a message.
| Name | Required | Description | Default |
|---|---|---|---|
| messageGuid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It only states that it returns persisted payloads; it does not disclose pagination, ordering, error handling, permissions, or side effects. The behavior is not misleading, but it is largely missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, direct, front-loaded with the action and resource. Every word earns its place, and it is appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and annotations, the description should explain what the return value looks like (array, object) and any special behavior. It only states 'entries' (payloads), leaving the response format and possible error conditions unclear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter, messageGuid, with no description. The tool description says 'for a message' which maps messageGuid to a message, but this is largely redundant with the parameter name. No format, example, or additional semantics are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action (get), the resource (persisted message store entries), and the scope (for a message). It also adds context about the 'Persist' step, helping distinguish it from sibling tools like get_data_store_entries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use instructions or alternatives are provided. The description implies it is used when you need persisted message payloads for a specific message, but there is no guidance on when not to use it compared to related tools such as get_data_store_entries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mpl_custom_header_propertiesGet MPL Custom Header PropertiesB
Get custom header properties (business keys, custom status) for a message.
| Name | Required | Description | Default |
|---|---|---|---|
| messageGuid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure, but it only says 'Get', which weakly implies read-only. It does not explicitly state whether the operation has side effects, requires specific permissions, or what happens when no custom properties exist. No additional behavioral context is provided beyond the basic operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the action and resource. There is no redundant information or filler; every word contributes to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description gives the essential purpose, but it lacks guidance on parameter usage and return value shape. It mentions 'for a message' but without clarifying that this refers to a message processing log (MPL), potentially causing ambiguity. Overall, it is minimally adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter, messageGuid, with no description (0% coverage). The tool description does not mention the parameter or add any meaning to it. Despite the parameter name being somewhat self-explanatory, the description fails to compensate for the schema's lack of detail, leaving the agent without additional semantic guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get custom header properties (business keys, custom status) for a message' clearly states a specific verb and resource, and differentiates from sibling tools like get_mpl_error_information or get_mpl_run_steps. The parenthetical clarifies what the properties include, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, no mention of prerequisites, and no exclusion criteria. It simply states what the tool does without contextualizing it among the many related MPL and integration tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mpl_detailsGet MPL DetailsA
Get the full Message Processing Log entry for a specific MessageGuid.
| Name | Required | Description | Default |
|---|---|---|---|
| messageGuid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It correctly indicates a read operation and scope, but does not disclose behavior for missing/invalid GUIDs, error responses, or the exact structure of the 'full' entry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Every word contributes to identifying the tool's purpose and primary parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with one parameter and no output schema, the description is adequate. It could be more complete by mentioning what 'full entry' includes or behavior when the GUID is not found, but the low complexity mitigates this gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has one parameter with 0% description coverage. The description explicitly links the parameter to a 'specific MessageGuid', which clarifies its purpose as the identifier of the log entry, even though it adds no format or constraint details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('Get') and resource ('full Message Processing Log entry'), making the operation clear. The scope 'for a specific MessageGuid' distinguishes it from sibling tools that retrieve sub-details like errors or run steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context is provided: this tool is for retrieving the complete log entry when a MessageGuid is already known. It does not explicitly name alternatives, but the use of 'full' implies it is the comprehensive option compared to siblings that return specific aspects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mpl_error_informationGet MPL Error InformationB
Retrieve the detailed error/exception text for a failed message.
| Name | Required | Description | Default |
|---|---|---|---|
| messageGuid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only says what the tool does, not how it behaves (e.g., error handling, return format, permissions, or what happens if the message GUID doesn't exist). This lack of behavioral context is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no redundant information. However, while it is efficient, it may be under-specified, but that is more a completeness issue than conciseness. The structure is clean and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one parameter and no output schema, the description should clarify what the error text looks like and how to use the parameter. It does not explain the parameter, potential return values, or edge cases. The description is incomplete for an AI agent to invoke the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter (messageGuid) with zero description coverage, and the description does not mention or explain the parameter at all. Since schema_description_coverage is 0%, the description should compensate but fails to provide any meaning for messageGuid beyond its type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves detailed error/exception text for a failed message. It uses a specific verb ('retrieve') and resource ('error/exception text'), making the purpose unambiguous. While it doesn't explicitly differentiate from siblings, the phrase 'detailed error/exception text' distinguishes it from related tools like get_mpl_details or get_failure_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for failed messages but provides no explicit guidance on when to use this tool versus alternatives like get_failure_summary or get_mpl_details. There are no when-not-to-use conditions or alternative recommendations, making the guidance implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mpl_run_stepsGet MPL Run StepsA
Get the individual run steps for a message (requires trace/step logging enabled on the flow).
| Name | Required | Description | Default |
|---|---|---|---|
| messageGuid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure. It mentions the prerequisite (trace/step logging) but fails to describe the return format, behavior when logging is disabled, error conditions, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the tool's purpose and a key condition. Every word earns its place, with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and annotations, the description is too sparse. It does not describe what the run steps look like, how they are ordered, what happens if trace logging is not enabled, or any details about messageGuid. The tool is simple but still lacks essential context for an agent to use it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameter descriptions (0% coverage), so the description must compensate. It only hints that messageGuid relates to a message, but it does not explain the format, source, or constraints. This is insufficient for understanding how to populate the parameter correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Get the individual run steps for a message') with a specific resource and outcome. It distinguishes itself from sibling tools like get_mpl_details and get_mpl_error_information by focusing on 'run steps' rather than general details or error information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear prerequisite ('requires trace/step logging enabled on the flow') that indicates when the tool is applicable. However, it does not explicitly name alternative tools or state when not to use it, leaving some room for ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cpi_tenantsList Configured CPI TenantsA
List the SAP CPI tenants this MCP server is configured to reach. Call this first if it isn't already clear which tenant to use — every other tool takes a tenant argument once 2 or more tenants are configured, and this is how to find the valid names.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It clearly indicates a non-mutating, read-only listing operation, and the phrase 'configured to reach' clarifies the scope is server-based configuration. It doesn't hide side effects or overpromise, though it doesn't explicitly state the output format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, with the primary function front-loaded in the first sentence and usage guidance in the second. Every clause earns its place; no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list operation with no output schema, the description fully covers purpose, scope, and workflow context. It even implies the return value is a list of valid tenant names ('this is how to find the valid names'), making the tool complete for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameters, so the baseline for parameter semantics is 4. The description adds useful context about how the returned tenant names are used by other tools, which is the relevant semantic information in lieu of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List the SAP CPI tenants this MCP server is configured to reach,' using a specific verb and resource, and distinguishes this tool from siblings as the dedicated tenant-listing tool. It clearly names the exact scope (configured tenants on the MCP server).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to 'Call this first if it isn't already clear which tenant to use' and explains that every other tool takes a `tenant` argument once 2+ tenants are configured, naming its role in the workflow. This provides clear when-to-use guidance relative to all sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_data_storesList Data StoresA
List data stores (transient/persistent message persistence used by flows).
| Name | Required | Description | Default |
|---|---|---|---|
| top | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and 'List' clearly signals a read-only operation with no destructive effects. The parenthetical adds useful behavioral context about the store types (transient vs persistent). It does not discuss permissions or response format, but these are not critical for a simple listing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately states the action and object, then adds a brief clarifying parenthesis. Every word earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional parameter and no output schema, the description adequately defines the resource and scope. It could mention what is returned (e.g., store names/IDs) but 'List data stores' sufficiently implies a collection of data store references in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, yet the description does not mention the 'top' parameter or its effect on result size/limits. The schema provides default/max/min, but the description adds no meaning to the parameter, so the agent must infer from the name alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' with a clear resource 'data stores' and clarifies the domain via parenthetical 'transient/persistent message persistence used by flows'. This distinguishes it from sibling tools like get_data_store_entries, which list entries rather than the stores themselves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (when needing to enumerate data stores) and gives context about what data stores are, but it does not explicitly name alternatives or state when not to use it. Sibling tools like get_data_store_entries suggest related operations, yet no comparison is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deployed_artifactsList Deployed Runtime ArtifactsB
List all deployed runtime artifacts and their status (STARTED, ERROR, STARTING, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| top | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It fails to disclose that the 'top' parameter limits the number of results, contradicting the word 'all'. It also does not mention any ordering, filtering, or return field details beyond status.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently communicates the core function without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, but the description misses the limiting behavior of 'top' and provides no output schema or return field details. It mentions status but not other artifact attributes, leaving some gaps for an agent invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has a single optional 'top' parameter with 0% description coverage, and the description does not explain it at all. Since the description does not compensate for the low coverage, it scores a 2.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'list' and identifies the resource as 'deployed runtime artifacts' with their status. This clearly distinguishes it from sibling tools like get_deployed_artifact_status, which targets a single artifact's status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is for retrieving a broad list of all deployed artifacts with statuses, but it does not explicitly state when to choose this over alternatives or any exclusions. Since it provides clear context without explicit guidance, it earns a 3.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_integration_flowsList Integration Flows in a PackageA
List the integration flow design-time artifacts in a package.
| Name | Required | Description | Default |
|---|---|---|---|
| packageId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It adds the useful 'design-time artifacts' scoping and 'List' implies a read-only operation. However, it doesn't mention return format, authentication needs, pagination, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no redundancy or filler. It is appropriately sized for a simple one-parameter list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one parameter and no output schema, the description provides a reasonable high-level context. However, without annotations or output schema details, the agent is left without information about the expected response structure or edge cases, so it isn't fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only says 'in a package,' which merely echoes the packageId parameter name. It doesn't explain any format, constraints, or relationship beyond what the schema already shows, so the description adds little value for parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and names a concrete resource ('integration flow design-time artifacts') with a scope ('in a package'). This clearly differentiates it from siblings like list_integration_packages and get_integration_flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: an agent would use this when needing to enumerate design-time integration flows within a particular package. However, there are no explicit alternatives, exclusions, or when-not-to-use conditions, so it doesn't fully guide decision-making among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_integration_packagesList Integration PackagesB
List all integration packages in the tenant's design workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure burden. The claim 'List all integration packages' is potentially misleading because the 'top' parameter (default 100) limits results, so it won't return 'all' if more than 100 exist. There is no mention of pagination, ordering, or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the core purpose. Every word adds value and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has one optional parameter, no output schema, and no annotations. The description fails to explain the 'top' parameter semantics and the discrepancy between 'all' and the default limit. It also omits any detail about return format or behavior when the workspace has many packages.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the undocumented 'top' parameter. The description does not mention 'top' at all, leaving the agent without any insight into what the parameter does beyond its schema type and constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List'), the resource ('integration packages'), and the scope ('tenant's design workspace'). This distinguishes it from sibling tools like list_integration_flows and get_integration_package, which focus on flows or single package details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the intended use case (listing all packages in the design workspace) but provides no explicit guidance on when to use this tool versus alternatives like get_integration_package or list_deployed_artifacts. No exclusions or preference statements are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_jms_queuesList JMS QueuesA
List JMS queues and their state (capacity, message counts).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. 'List' implies a read-only operation, and the description mentions the return of state (capacity, message counts). However, it does not disclose potential permissions required, whether all queues are included, or any side effects. For a simple list tool, this is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the core action and resource, and every word adds value. It is concise and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description is largely complete. It specifies the resource and the state information returned. However, it does not detail the exact return format or any limitations such as default queue scope, leaving a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline is 4. The description does not need to explain any parameters since there are none, and it adds clarity about what the tool returns without needing to describe parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'List', the resource 'JMS queues', and the additional detail about state (capacity, message counts). This distinguishes it from other list tools such as list_data_stores or list_variables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool is used to inspect JMS queues and their state, but it does not explicitly state when to use it versus alternatives or any exclusions. Usage is implied by the tool name and description, but no explicit guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_keystore_entriesList Keystore Entries (Certificates)B
List entries (certificates / key pairs) in the tenant keystore.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only restates the action (listing) without revealing details such as pagination, limits, or whether sensitive key material is included. The absence of any behavioral traits beyond the name leaves the agent underinformed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It is concise and readable, but it misses an opportunity to include a brief mention of the parameter or return behavior without sacrificing conciseness. Overall, it is appropriately sized but slightly under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description should at least explain the meaning of 'top' and what the returned entries contain. The current description omits this, leaving the agent with incomplete guidance. The tool is simple, but the description does not fully cover its usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes a single 'top' parameter with no description (0% coverage), and the description does not mention this parameter at all. Since the description must compensate for missing schema comments but fails to do so, the agent has no understanding of how to use 'top' or what it controls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's function with a specific verb and resource: 'List entries (certificates / key pairs) in the tenant keystore.' It differentiates from sibling tools by specifying the keystore resource, making its purpose distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about what the tool does, implying it should be used when listing keystore entries. While it doesn't explicitly mention alternatives, the resource is unique enough that no exclusions are needed. The context is straightforward and unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_log_filesList System Log FilesA
List available system log files (http, trace, etc.) for the tenant worker nodes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the transparency burden. It implies a non-destructive list operation but does not explicitly state that it has no side effects, authorization requirements, or that it only returns file names. The word 'list' helps, but more could be disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that directly states the action, includes relevant examples, and specifies the scope. There is no redundant information, and it is appropriately front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless list operation, the description is largely complete. However, since there is no output schema, it could explicitly mention that the return is a list of file names or whether the files are grouped by node. It is adequate but leaves a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description needed to add no parameter-specific meaning. The context about tenant worker nodes is not a parameter but useful domain info. Per the rubric, a zero-parameter tool receives a baseline score of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists available system log files, specifying types (http, trace, etc.) and scope (tenant worker nodes). This makes its purpose distinct from sibling tools that deal with message processing logs or integration artifacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context that this tool is for viewing system log files on tenant worker nodes, but does not explicitly mention alternatives or exclusions. The context is sufficient for most use cases, though it lacks explicit 'when not to use' guidance compared to related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_number_rangesList Number RangesA
List configured number range objects.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral transparency. 'List' strongly implies a read-only operation, but the description does not disclose any additional behavior such as pagination, ordering, or the exact structure of the returned objects. It is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasteful words. It conveys the essential purpose efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (zero parameters, no output schema), the description is mostly complete. It might benefit from specifying the return format, but the core action is unambiguous for a list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description does not need to explain parameter semantics. Per the rubric, a baseline of 4 applies when there are no parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and clearly identifies the resource ('configured number range objects'). It clearly differentiates from sibling tools like create_number_range by indicating a read-only listing of existing objects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: use this tool to retrieve existing number range objects. However, there is no explicit guidance on when to prefer this over alternatives or any exclusions. The description does not mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_oauth2_client_credentialsList OAuth2 Client CredentialsA
List deployed OAuth2 Client Credential security artifacts (metadata only).
| Name | Required | Description | Default |
|---|---|---|---|
| top | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the burden. It adds the useful behavioral trait 'metadata only', indicating that actual credential secrets are not returned. However, it does not disclose other behaviors such as pagination behavior, permission requirements, or how empty results are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It efficiently conveys the action, resource, and scope ('metadata only').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional parameter and no output schema, the description covers the core purpose and the metadata-only restriction. However, it omits parameter semantics and does not differentiate from sibling list tools, leaving some gaps in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter 'top' with 0% coverage in the description. The description does not mention the parameter or explain that it limits the number of results, failing to compensate for the lack of schema descriptions. The parameter name and constraints give some hints, but the agent is left without explicit semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists 'deployed OAuth2 Client Credential security artifacts' and specifies 'metadata only', distinguishing it from sibling tools that list other credential types or keystore entries. The verb 'List' and the resource are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and description, but there is no explicit guidance on when to use this tool versus alternatives like list_user_credentials or list_keystore_entries. No exclusions or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_partnersList Partner Directory PartnersC
List partners registered in the Partner Directory.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must reveal behavioral traits, but it only says 'List partners.' It does not mention the optional 'top' parameter, default behavior, pagination, or any side effects. The agent receives no information about safety, rate limits, or output structure beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no filler. It directly states the purpose and is easily scannable. While it could add more context without becoming verbose, the current structure is appropriately minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, but the description is insufficient given the lack of an output schema and annotations. It does not explain what partner information is returned, how the 'top' limit affects results, or any usage context. A complete description would at least mention the optional limit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema defines one parameter 'top' with default/min/max, but the description provides zero explanation of this parameter. With schema description coverage at 0%, the description fails to compensate by giving any meaning or usage context for the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (List) and the specific resource (partners in the Partner Directory). It is unambiguous and distinct from all sibling tools, none of which mention partners.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives such as list_integration_packages or list_service_endpoints. There are no scenarios, prerequisites, or exclusions provided, leaving the agent without selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_service_endpointsList Service EndpointsA
List the runtime service endpoints (URLs) exposed by deployed integration flows (HTTP, SOAP, OData, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| top | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden. It accurately indicates a read-only listing operation and adds context about the types of endpoints, but it does not disclose behavior like pagination (via the 'top' parameter), filtering, or whether only currently running flows are included. It adds some value but lacks deeper behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly written sentence (18 words) that is front-loaded with the action and resource. Every word earns its place with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no output schema and no annotations, the description states the core purpose and endpoint types, but it omits explanation of the 'top' parameter and any note about the response format or potential empty results. It is minimally viable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description never mentions the only parameter 'top'. The schema provides default/min/max constraints, but the description should add meaning about its purpose (e.g., maximum number of endpoints returned). This is a gap for a single-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' with a clear resource 'runtime service endpoints (URLs)' and scopes it to 'deployed integration flows' with protocol examples (HTTP, SOAP, OData). This clearly distinguishes it from sibling tools like list_integration_flows or list_deployed_artifacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use this tool (to get URLs of deployed integration flows), but it does not explicitly state when not to use it or mention alternative tools. The scoping is clear enough for most cases, so this earns a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_user_credentialsList User Credentials (Security Material)A
List deployed User Credential security artifacts (names/metadata only, no secrets).
| Name | Required | Description | Default |
|---|---|---|---|
| top | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosure. It explicitly states that only names/metadata are returned and no secrets are included, which is a key behavioral trait. However, it does not mention whether the operation is read-only, any required permissions, or other potential behaviors, leaving gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that is front-loaded with the verb and directly states the key scoping detail (no secrets). Every word contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional parameter, the description is reasonably complete. It defines the output scope (names/metadata only) and the resource scope (deployed artifacts). The missing parameter explanation and usage context prevent a higher score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention the 'top' parameter at all. The schema provides type, default, min, and max, but with 0% schema description coverage, the description should compensate. It fails to explain that 'top' is a limit for the number of returned items.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list), the resource (deployed User Credential security artifacts), and the scope (names/metadata only, no secrets). This distinguishes it from sibling tools like list_oauth2_client_credentials and list_keystore_entries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool instead of alternatives such as list_oauth2_client_credentials or list_deployed_artifacts. It does not mention any exclusions or preferred contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_variablesList VariablesB
List global and local variables persisted by integration flows.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the operation is listing variables, which implies read-only, but does not mention what data is returned, limits, pagination, or any side effects. The 'top' parameter is not explained, leaving important behavioral characteristics undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of eight words, front-loaded with the verb and resource. It is appropriately concise with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity and lack of output schema, the description is too minimal to be complete. It does not explain what the response looks like, how to interpret the 'top' parameter, or any usage context. A complete description would at least mention that it returns a list and that 'top' limits the count.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter ('top') with no description (0% coverage). The description does not mention this parameter at all, so it adds no semantics beyond the schema's type and constraints. The parameter name is self-explanatory to some degree, but the tool description should still clarify its purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' and clearly identifies the resource as 'global and local variables persisted by integration flows.' This makes the tool's purpose unambiguous and distinct from all sibling tools, none of which mention variables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when you need to see persisted variables) but provides no explicit usage context, exclusions, or alternatives. Since no sibling tool covers variables, there is no need for explicit alternatives, but the description could still be clearer about intended scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_integration_flow_as_versionSave Integration Flow as VersionA
Save the current draft ('active') of an integration flow as a new version, with an optional version comment. Requires ALLOW_WRITE. (The comment is applied to the artifact before the version is saved, since the SaveAsVersion API doesn't take one directly.)
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Version comment / note. | |
| confirm | No | Must be true to proceed. | |
| version | Yes | New version to save, e.g. '1.0.1'. | |
| artifactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the responsibility of disclosing behavioral traits. It notes the permission requirement ('Requires ALLOW_WRITE') and reveals a non-obvious implementation detail: the comment is applied before the version is saved since the API doesn't take it directly. This exceeds baseline, though it doesn't detail all possible side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action, followed by a parenthetical explanatory note. Every word earns its place—no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema and annotations, the description adequately covers the tool's purpose, prerequisite, and a unique behavioral nuance. It doesn't mention return values or error conditions, but it provides enough for an agent to correctly invoke the tool with the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 75% of parameters with descriptions, so the baseline is 3. The description adds a useful note about the comment parameter's behavior but doesn't add meaning to artifactId or version beyond what the schema already provides. Overall, it adds modest value without fully compensating for the one undocumented parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Save the current draft ('active') of an integration flow as a new version' with an optional comment. It uses a specific verb ('save') and resource ('integration flow draft'), and distinguishes this from siblings like 'deploy_artifact' or 'create_integration_flow'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by mentioning 'current draft' and requires 'ALLOW_WRITE', but it does not explicitly contrast with alternative tools (e.g., when to version vs. deploy). The context is clear enough for basic use, but an agent might need more guidance on when to choose this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_message_processing_logsSearch Message Processing Logs (MPL)A
Search SAP CPI Message Processing Logs. Filter by status (COMPLETED, FAILED, PROCESSING, RETRY, ESCALATED, DISCARDED), integration flow name, and time window. Most recent first.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| status | No | ||
| toTime | No | ISO 8601; LogEnd less than this. | |
| fromTime | No | ISO 8601; LogEnd greater than this. | |
| integrationFlowName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It discloses the 'Most recent first' sorting behavior and filtering options, which adds value. However, it does not mention authentication requirements, rate limits, pagination behavior, or error handling. The description is reasonable but not rich enough for a higher score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded. The first sentence states the action and resource, the second lists filters and ordering. Every sentence earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with 5 optional parameters and no output schema, the description covers the essential query dimensions but misses important details: the 'top' parameter controls result count, and the enum includes 'ABANDONED' which is not listed in the description. This is a notable gap that could lead to under-specification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 40% (toTime and fromTime have descriptions). The description adds meaning by grouping toTime/fromTime as 'time window' and explicitly listing status values, but it omits the 'top' parameter and its result-limit semantics. It partially compensates for the schema coverage gap but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search SAP CPI Message Processing Logs.' It specifies the verb 'Search' and the resource 'Message Processing Logs,' and lists the key filtering dimensions (status, integration flow name, time window). This distinguishes it from sibling tools like get_mpl_details, which focus on retrieving specific log details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use the tool (searching logs with filters) but does not explicitly compare it to alternatives or state when not to use it. It implies usage through the search context, but lacks direct exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undeploy_artifactUndeploy ArtifactA
Undeploy (remove from runtime) a deployed artifact. Stops it processing messages. Requires ALLOW_WRITE and confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| artifactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It discloses that ALLOW_WRITE permission and confirm=true are required, which are critical behavioral prerequisites not apparent from the schema. However, it doesn't discuss reversibility or effects on in-flight messages.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the purpose and immediately note the permission/flag requirement. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no output schema or annotations, the description covers purpose, effect, and critical parameters. It could add postcondition info or error conditions, but the essentials are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%. Description adds meaning only for confirm (must be true) but leaves artifactId unexplained beyond its name. With two params and no schema descriptions, the description should elaborate more on both parameters, especially artifactId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Undeploy' with resource 'deployed artifact' and effect 'stops it processing messages', clearly distinguishing from siblings like deploy_artifact and list_deployed_artifacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context indicated by 'Stops it processing messages' and undeploy operation, but no explicit alternatives or when-not-to-use. The description implies usage for removing an artifact from runtime, but doesn't name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_flow_configurationUpdate Flow Configuration ParameterA
Update a single externalized configuration parameter of an integration flow. Requires ALLOW_WRITE.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to proceed. | |
| version | No | active | |
| dataType | No | xsd:string | |
| artifactId | Yes | ||
| parameterKey | Yes | ||
| parameterValue | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the ALLOW_WRITE permission, which is useful, but does not mention the 'confirm' requirement (must be true to proceed) or any side effects such as whether the update triggers a redeployment or affects running instances. The permission note adds some transparency, but significant behavioral gaps remain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the core purpose, and contains no filler. Every word adds value; the permission note is concise and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, no output schema, no annotations), the description is somewhat minimal. It omits the confirm requirement (though that is present in the schema) and gives no indication of the response or post-condition. However, the schema does provide some parameter descriptions, and the description clearly states the tool's scope and permission, making it minimally viable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17%, affecting artifactId, parameterKey, and parameterValue which have neither schema descriptions nor elaboration in the tool description. The description's mention of 'single' and 'configuration parameter' provides some context for parameterKey and parameterValue, but it does not compensate for the lack of schema descriptions for these required parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Update') and a clear resource ('a single externalized configuration parameter of an integration flow'). This precisely distinguishes the tool from siblings like get_flow_configurations and create_integration_flow. The word 'single' also clarifies scope, indicating it updates one parameter at a time.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need to update a configuration parameter, but it does not explicitly state when to use this tool versus alternatives or mention any exclusions. No sibling tools are referenced, and there is no guidance on prerequisites beyond the ALLOW_WRITE permission.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
where_usedWhere Used — Search a Word Across Integration Flow ContentA
Search for a word/text across integration flow content in the design workspace (BPMN process XML, adapter channel properties — including credential/user references, groovy scripts, mappings, and parameter files). Wizard-style: if packageId is omitted, returns the list of packages to pick from (plus the option to set searchAllPackages=true to search the whole tenant in one call). If a packageId is chosen but artifactId is omitted, returns the list of integration flows in that package (plus the option to set searchAllArtifacts=true to search every flow in that package). Call the tool again with the missing field filled in from the returned options.
| Name | Required | Description | Default |
|---|---|---|---|
| word | Yes | Word or text to search for (case-insensitive substring match). | |
| version | No | active | |
| packageId | No | Package to search in. Omit to get the list of packages. | |
| artifactId | No | Specific integration flow Id to search. Omit (with searchAllArtifacts left false) to get the list of flows in the package. | |
| searchAllPackages | No | Search every package (and every flow in each) — a full tenant-wide search in one call. | |
| searchAllArtifacts | No | Search every integration flow in the given package instead of picking just one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It clearly discloses the wizard-style progressive execution, the scope of search (including credential/user references), and the optional full-tenant search. It does not mention potential limitations like result size or non-destructive nature, but the described behavior is transparent and detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than typical but is front-loaded with the main purpose and every sentence earns its place by explaining the wizard steps. It is structured logically, though slightly verbose; a bit of trimming could make it more scannable without losing needed detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, six parameters, and no output schema, the description covers the invocation workflow and search scope well. It does not describe the exact structure of returned lists, but it clearly states what the user will receive (list of packages/flows) and how to proceed, which is sufficient for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83%, and the description goes far beyond the schema by explaining the conditional interplay between packageId, artifactId, searchAllPackages, and searchAllArtifacts. It adds meaning about the wizard flow and what each omission triggers, which is critical for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Search for a word/text' and names the resource 'integration flow content in the design workspace' with explicit content types (BPMN XML, adapter channel properties, scripts, mappings, parameter files). This clearly distinguishes the tool from sibling tools like list_integration_flows or get_flow_configurations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit step-by-step guidance: if packageId is omitted, returns packages; if artifactId is omitted, returns flows; and tells the agent to call again with the missing field filled. It also explains the alternative flags searchAllPackages and searchAllArtifacts for bypassing the wizard, giving clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have clearly distinct purposes (e.g., get_mpl_details vs. get_mpl_error_information). However, generic OData tools like cpi_query and cpi_write overlap with many specific tools, creating potential confusion about which to use.
Tool names consistently use snake_case with a verb_noun pattern (list_, get_, create_, deploy_, etc.). The cpi_ prefixed tools and where_used are minor deviations but remain readable.
46 tools is very high, exceeding the typical well-scoped range. Even for a broad domain, this count makes the set difficult to navigate and would benefit from consolidation.
The server covers the main lifecycle areas: monitoring, design-time configuration, deployment, security artifacts, and runtime data. Minor gaps exist (e.g., no dedicated update for integration packages), but the generic OData tools fill these.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP Server for agents to onboard, pay, and provision services autonomously with InFlow
MCP server for Appcircle mobile CI/CD platform.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Unified MCP server for 70+ eCommerce platforms: products, orders, customers, and more.
Related MCP Servers
- AlicenseCqualityNot gradedmaintenanceAn MCP server that facilitates seamless interaction with SAP ABAP systems to manage development objects, transport requests, and source code. It provides a comprehensive suite of tools for performing syntax checks, object searches, and code modifications via the ADT API.100
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to interact with SAP Cloud Integration (CPI) by exposing CPI APIs as MCP tools for inspecting metadata, runtime artifacts, message logs, and failed messages.3
- FlicenseNot gradedqualityBmaintenanceAn MCP server for SAP Integration Suite that enables managing integration packages, IFlows, message mappings, and TPM artifacts through natural language, with tools for creation, deployment, and monitoring.
- AlicenseBqualityFmaintenanceEnables monitoring and management of SAP Cloud Integration (CPI) through its OData APIs, covering message processing logs, integration packages, deployment, security material, and more.44MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/premsaidaggolu/sap-cpi-multi-tenant-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server