sap-integration-suite-mcp
Provides tools for monitoring SAP Integration Suite / SAP Cloud Integration tenants via read-only APIs. Supports retrieving failed messages, searching message metadata, fetching message and error details, checking integration flow status, listing recent failures, and summarizing integration health with deterministic error classification and investigation suggestions.
Click on "Deploy 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-integration-suite-mcpshow me recent failed messages from 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-integration-suite-mcp
Open-source MCP server for SAP Integration Suite monitoring, failed-message analysis, integration health and AI-assisted troubleshooting.
This is an independent open-source project and is not an official SAP product.
See validation status and release checklist for local verification results and remaining deployment checks. Local validation does not establish compatibility with every SAP tenant configuration.
Self-host the server in your environment and connect your MCP-compatible AI client. The server retrieves read-only monitoring metadata from your own SAP Integration Suite / SAP Cloud Integration tenant. Your chosen client performs inference; this server never calls an LLM.
Architecture
flowchart TD
AI[AI client: Codex, VS Code, Claude Code, Cursor or another MCP host]
AI --> MCP[MCP server: stdio or Streamable HTTP]
MCP --> Security[Authentication, strict validation and sanitization]
Security --> SAPClient[SAP API client: OAuth, timeouts, bounded pagination]
SAPClient --> Tenant[Customer SAP Integration Suite tenant]Related MCP server: SAP CPI MCP Server
Features
Vendor-independent MCP SDK v2 server with stdio and stateless Streamable HTTP.
OAuth 2.0 client credentials, in-memory token reuse and refresh.
Normalized OData message metadata and sanitized diagnostic evidence.
Deterministic error categories and health statistics without AI calls.
Strict inputs, safe URL construction, bounded results and read-only SAP access.
Mocked test suite, CI workflow and non-root Docker deployment.
Supported tools
Tool | Inputs | Result |
| Optional startTime, endTime, integrationFlow, package, limit | Failed metadata; package filter returns an unsupported error |
| Optional status, integrationFlow, startTime, endTime, correlationId, messageId, limit | Normalized messages and truncation flag |
| messageId | Message processing log metadata |
| messageId | Sanitized error text and deterministic classification, or unavailable result |
| integrationFlow | Runtime artifact status, or unavailable result |
| minutes (default 60), optional integrationFlow, limit | Failed messages within a calculated UTC window |
| Optional startTime, endTime | Counts, percentages, failure ranking and sample scope |
| messageId | Message, timestamps, runtime status, diagnostics, classification and investigation areas |
Limits default to 100, maximum 500. Recent windows are 1–10080 minutes. Times must be ISO 8601 with timezone; time windows filter message start time. Health defaults to the past 24 hours and caps retrieval at 500 messages. Inspect truncated and scope: a bounded sample is not a tenant-wide total. Unknown statuses are counted as other; empty windows return zero percentages. Error categories are unavailable in bulk health because this adapter does not fetch per-message diagnostic text in that operation.
The classifier supports AUTHENTICATION, AUTHORIZATION, HTTP_4XX, HTTP_5XX, TIMEOUT, CONNECTIVITY, SFTP, CERTIFICATE, MAPPING, TRANSFORMATION, PAYLOAD_VALIDATION, RATE_LIMIT, OAUTH and UNKNOWN. Confidence is conservative and evidence contains deterministic indicators. Investigation suggestions are not proven root causes.
Version 1 does not deploy flows, change configuration, delete messages, restart processing or retry messages. Business payloads, attachments and custom message headers are not retrieved. Endpoint/adapter metadata is explicitly unavailable in analysis. Runtime status and error navigation depend on the tenant API and permissions.
Security and privacy
Credentials stay in your runtime environment. There is no external database, author-operated backend, telemetry upload or LLM call. The server does not send SAP monitoring data to the project author. The MCP client receives results and may transmit them according to its own data-handling rules.
SAP URLs come only from trusted server configuration, use HTTPS and reject redirects. MCP callers cannot choose hosts or request arbitrary URLs. Pagination is confined to the same message collection. Logs contain only operation metadata on stderr. Secrets, access tokens, authorization headers and SAP bodies are excluded from logs. Diagnostic text is redacted and capped; free-form business information can still remain, so treat outputs as sensitive.
HTTP checks exact Host and Origin allowlists and supports a separate bearer credential. Non-loopback binds require a token. Put production access behind an authenticated TLS gateway with rate limits and concurrency controls. See security design and reporting policy.
Prerequisites and SAP configuration
Use Node.js 24 LTS, npm, your SAP tenant's HTTPS management API URL, and a least-privilege OAuth technical client. Confirm API permissions and token endpoint with your SAP administrator. Exact role collections and scopes vary; see SAP setup, SAP monitoring API and official SAP documentation.
Variable | Meaning / default |
SAP_BASE_URL | Tenant origin or |
SAP_TOKEN_URL | OAuth token endpoint; required HTTPS |
SAP_CLIENT_ID / SAP_CLIENT_SECRET | Required technical-client credentials |
SAP_AUTH_MODE |
|
SAP_REQUEST_TIMEOUT_MS | Per-request timeout, default 30000, range 100–120000 |
MCP_PORT / MCP_HOST | 3000 / 127.0.0.1 |
MCP_HTTP_TOKEN | Independent MCP bearer token; at least 32 characters for remote binds |
MCP_ALLOWED_HOSTS | Comma-separated exact Host authorities; default localhost:3000,127.0.0.1:3000 |
MCP_ALLOWED_ORIGINS | Comma-separated exact Origin URLs; default rejects browser Origins |
LOG_LEVEL | debug, info, warn, error or silent; default info |
The built-in logger emits operation information at info/debug and suppresses it at warn/error/silent. Startup failures use a generic stderr error. Health reports process liveness, not credential validity or SAP connectivity.
Installation
From a checkout of this repository:
npm ci
npm run buildSupply environment variables through your secret manager or protected process environment. .env.example contains names only. To use a local .env file, copy the example, set your own values and restrict its permissions. Node's explicit --env-file flag can load it; the application does not load it automatically.
node --env-file=.env dist/index.js --stdioNo SAP credentials are required to run tests; SAP responses are mocked. The repository includes a committed dependency lockfile. Contributors and CI should use npm ci for reproducible installation.
Local stdio
Point any stdio-capable MCP host at:
{
"command": "node",
"args": ["/absolute/path/sap-integration-suite-mcp/dist/index.js", "--stdio"]
}Forward SAP variables securely from the host's process environment. For a protected local file, use args: ["--env-file=/absolute/path/.env", "/absolute/path/dist/index.js", "--stdio"]. Do not embed secrets in shared configuration. Claude Code, Cursor and other stdio clients have different enclosing config formats. ChatGPT connectivity depends on the product's supported MCP/connector mechanism.
Streamable HTTP
node --env-file=.env dist/index.js --httpThe endpoint is http://127.0.0.1:3000/mcp. POST/GET are delegated to the current SDK transport; stateless legacy clients receive 405 for GET/DELETE session operations. This is Streamable HTTP, not a separate deprecated HTTP+SSE endpoint. GET /health returns small JSON and uses the same access guards.
For remote access configure MCP_HOST, a high-entropy MCP_HTTP_TOKEN, exact allowed Host authorities and any browser Origin URLs. Serve https://your-host.example.com/mcp through your TLS gateway. Never send the SAP OAuth secret to the MCP client. The MCP access token is separate. No inbound OAuth authorization server is provided.
Codex
codex mcp add sapIntegrationSuite -- node /absolute/path/sap-integration-suite-mcp/dist/index.js --stdio
codex mcp add sapIntegrationSuite --url https://your-host.example.com/mcpUse one transport for a given server name. Configure forwarded environment variables for stdio or bearer_token_env_var for remote access. See Codex setup and official OpenAI MCP documentation.
VS Code
Remote .vscode/mcp.json configuration uses a servers entry with type: "http", the /mcp URL and a securely prompted Authorization header. See the complete VS Code example.
Docker
docker compose up --build -dSupply a protected .env containing your own SAP variables and a separate MCP_HTTP_TOKEN of at least 32 characters. Compose passes it at runtime; .dockerignore excludes all .env files from the image. For managed production deployments use your platform's secret injection rather than a checked-in file. Docker runs the HTTP server as the node user with a read-only filesystem. Compose publishes only loopback by default. Extend networking through your authenticated TLS gateway.
Example questions
“Show failed SAP Integration Suite messages from the last hour.”
“Show failures for SALESFORCE_TO_S4 today.”
“Get details for message ID ABC123.”
“Summarize Integration Suite health for the past 24 hours.”
“Analyze the available diagnostic evidence for message ABC123.”
Use your intended timezone when asking about “today”; tools require explicit ISO times. ABC123 is a synthetic example.
Troubleshooting
Symptom | Action |
Startup failed | Check required environment fields and HTTPS URLs; |
OAuth failure | Verify token URL, client credentials and |
SAP 403 | Verify read permissions against current SAP documentation |
Runtime/error result unavailable | Confirm API resource, message/artifact ID and tenant availability |
HTTP 401/403 | Check the separate MCP token, exact Host authority and allowed Origin |
Timeout | Check network/proxy reachability; set server and client timeouts appropriately |
Empty failure list | Verify time window, retention and the tenant status vocabulary ( |
Sample health statistics | Narrow the window; inspect |
API assumptions and required tenant checks are documented in SAP_SETUP.md. Do not post production logs or credentials when reporting issues.
Development and contributing
npm run dev:stdio
npm run dev:http
npm run format
npm run lint
npm run typecheck
npm test
npm run test:coverage
npm run buildSee CONTRIBUTING.md, architecture and code of conduct. Release verification is documented in the validation checklist.
Roadmap
Verify adapters against multiple real tenant configurations and supported SAP API revisions.
Add tenant-validated error and runtime fixtures, broader health aggregation and optional policy enforcement.
Add additional supported authentication providers and customer-controlled audit integrations.
Keep Version 1 read-only; any future write capabilities require separate security design and explicit scope.
Recommended repository topics: sap, sap-integration-suite, sap-cloud-integration, sap-cpi, mcp, model-context-protocol, enterprise-integration, integration, ai, typescript, open-source, observability, monitoring.
License and author
Apache License 2.0 — see LICENSE. Cite the project using CITATION.cff.
Rameshkumar Varanganti
Available Tools
8 toolsanalyze_failureARead-onlyIdempotent
Gather sanitized diagnostic evidence and deterministic investigation areas; no AI root-cause claim.
| Name | Required | Description | Default |
|---|---|---|---|
| messageId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so safety is covered. The description adds real behavioral context beyond that: output is 'sanitized' (privacy handling) and 'deterministic' (no model inference), which shapes what the agent should expect. It omits latency, response shape, and the openWorldHint implication.
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 compact sentence with zero waste; the output nature is front-loaded and the constraint ('no AI root-cause claim') is appended where it belongs. Nothing redundant with the name or annotations.
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?
One simple required parameter, no output schema, and rich annotations mean the description's burden is light, and it does explain the deliverable (evidence + investigation areas, not a diagnosis). It would be stronger if it hinted at the structure of 'investigation areas' or where the messageId comes from.
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 never mentions messageId, its format, or where to obtain it. The schema constrains the value (pattern, maxLength 256) but does not explain what a messageId refers to, so the description fails to compensate for the coverage gap.
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?
States a specific verb+resource: it gathers 'sanitized diagnostic evidence and deterministic investigation areas' rather than making a root-cause claim. This is clearly different from the sibling reads like get_error_details or get_recent_failures, though no sibling is named. The phrase 'deterministic investigation areas' is slightly abstract but still conveys a distinct output goal.
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 only implied: an agent infers this is the tool you call on a failure message when you want evidence rather than a diagnosis. No alternatives (get_error_details, get_recent_failures) are named and no conditions or prerequisites are given. The 'no AI root-cause claim' note functions as a when-not, which is why this is not a 2.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_error_detailsCRead-onlyIdempotent
Retrieve sanitized error information and deterministic indicators.
| Name | Required | Description | Default |
|---|---|---|---|
| messageId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, covering the safety profile. The description adds 'sanitized' (suggesting redacted/safe output) and 'deterministic indicators' (suggesting consistent results), which are useful but vague and do not disclose auth needs, rate limits, or return shape.
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 or repetition. However, its vague terms ('sanitized', 'deterministic indicators') do not fully earn their place by conveying actionable meaning, keeping it from a 5.
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 retrieval tool with one required parameter and no output schema, the description is too thin. It should at least clarify the messageId parameter's role and what the returned error information or indicators look like, given that no output schema exists to explain the return value.
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 single required messageId parameter has no schema-level explanation. The description does not mention messageId at all, nor does it say what kind of message identifier to supply or where to obtain it. The parameter name is somewhat self-explanatory, but the description adds essentially no semantic meaning 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?
States a specific verb ('Retrieve') and resource ('error information'), but 'sanitized' and 'deterministic indicators' are vague jargon, and the description never mentions that it operates on a specific message. It does not differentiate this tool from siblings like get_message_details or analyze_failure, so an agent cannot tell its scope apart from related tools.
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 no when-to-use guidance, no prerequisites, and no alternatives. Siblings such as get_message_details, get_failed_messages, and analyze_failure are never mentioned, leaving the agent to infer when this specific retrieval tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_failed_messagesCRead-onlyIdempotent
Retrieve failed message metadata; package filtering is unsupported.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| endTime | No | ||
| package | No | ||
| startTime | No | ||
| integrationFlow | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, covering the safety profile. The description adds only that package filtering is unsupported, but does not explain return shape, pagination, time-range behavior, or how failures are scoped; it also contradicts the schema's package parameter.
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 compact sentence with no filler. However, its two clauses are not well structured around the tool's actual invocation needs, since the unsupported-package claim is not connected to the schema.
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 five optional parameters and no output schema, the description is insufficient: it does not explain time filtering, result limiting, integration flow scoping, or what metadata is returned. Annotations cover safety, but the description leaves important invocation details missing.
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% for five parameters, so the description must carry parameter meaning. It mentions only 'package' and says its filtering is unsupported, while the schema still exposes a package parameter, leaving limit, startTime, endTime, and integrationFlow completely undocumented and the package behavior confusing.
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?
States a clear verb and resource, 'Retrieve failed message metadata,' so the operation is identifiable. It does not distinguish this from adjacent siblings such as get_recent_failures or analyze_failure, so it is clear but not sibling-differentiating.
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 only usage-like statement is that package filtering is unsupported, which is a limitation rather than guidance on when to choose this over search_messages, get_recent_failures, or get_message_details. No explicit when-to-use or alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_iflow_statusCRead-onlyIdempotent
Retrieve runtime artifact status, or an explicit unavailable result.
| Name | Required | Description | Default |
|---|---|---|---|
| integrationFlow | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and open-world behavior, so the safety profile is covered. The description adds a modest behavioral detail that an unavailable result can be returned explicitly, but omits auth, rate limits, and what 'status' actually contains.
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?
It is a single short sentence with no filler, and the retrieval verb is front-loaded. However, the cryptic 'runtime artifact' phrasing means brevity comes at the cost of precision.
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 one-parameter getter with no output schema, the description should explain what status values mean and what an unavailable result looks like. It does neither, and it also leaves the required parameter undocumented, so it is incomplete for correct 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?
Schema description coverage is 0% and the sole required parameter 'integrationFlow' is not mentioned in the description at all. No meaning, format, or pattern guidance is added to compensate.
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 gives a verb ('Retrieve') and a resource ('runtime artifact status'), but 'runtime artifact' is vague jargon that is not clearly tied to the integration flow concept in the tool name or parameter. It also fails to distinguish this tool from sibling health/failure/message tools.
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?
There is no guidance on when to use this tool versus alternatives like summarize_integration_health or get_recent_failures. The only extra qualification concerns unavailable results, which describes output behavior rather than usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_message_detailsBRead-onlyIdempotent
Retrieve message processing log metadata without business payloads.
| Name | Required | Description | Default |
|---|---|---|---|
| messageId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety is covered. The description adds useful behavioral context by stating the response excludes business payloads, but says nothing about missing-message behavior, permissions, or what metadata fields are actually returned.
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 front-loaded sentence with zero filler; the scope qualifier is attached directly to the resource it modifies.
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 read-only lookup with rich annotations and no output schema, the description adequately signals that payloads are excluded. It falls short on what metadata is returned and on distinguishing this lookup from sibling retrieval 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?
The single messageId parameter has 0% schema description coverage and the description doesn't mention it at all. Only the schema's pattern and length constraints hint at format; the description adds no meaning beyond that.
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?
States a specific verb (Retrieve) and resource (message processing log metadata) and clarifies scope with 'without business payloads'. However, it does not distinguish itself from siblings like get_error_details or search_messages, so an agent must infer the difference.
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?
There is no guidance on when to use this tool versus the many siblings (search_messages, get_error_details, get_recent_failures). Usage is only implied by the required messageId, with no exclusions or routing conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_failuresCRead-onlyIdempotent
Retrieve failures within the last N minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| minutes | No | ||
| integrationFlow | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so safety and repeatability are covered. The description adds nothing beyond the time-window scope: no ordering, pagination, cap behavior, or what happens when the limit is hit.
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 short sentence with no redundancy and the scope constraint front-loaded. Brevity here edges toward under-specification rather than bloat, but there is no wasted verbiage.
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 three parameters, no output schema, and no annotation-level detail on returns, the definition needs to explain the limit/integrationFlow behavior and roughly what a 'failure' record contains. The single sentence is inadequate for a filtered-list tool with an undocumented filter parameter.
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 carries the burden for three parameters. It only alludes to 'minutes' and says nothing about the 'limit' cap (default 100, max 500) or what the 'integrationFlow' filter does, leaving two of three parameters semantically opaque.
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 gives a specific verb and resource ('Retrieve failures') plus a scoping constraint ('within the last N minutes'), so the agent knows the operation. However, it does nothing to distinguish this from siblings like get_failed_messages or analyze_failure, which plausibly return overlapping data.
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?
There is no guidance on when to choose this over get_failed_messages, get_error_details, or analyze_failure, nor any stated preconditions. Usage must be entirely inferred from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_messagesCRead-onlyIdempotent
Search normalized message metadata (maximum 500 results).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No | ||
| endTime | No | ||
| messageId | No | ||
| startTime | No | ||
| correlationId | No | ||
| integrationFlow | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The only added claim, 'maximum 500 results', duplicates the schema's limit maximum of 500 rather than adding new behavioral context such as pagination, result ordering, or cross-flow scope.
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 short, front-loaded sentence with no wasted words or filler. It is efficient, though its brevity reflects omission rather than thoughtful prioritization.
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 7-parameter search tool with no parameter descriptions and no output schema, one sentence is far too little. There is no indication of what fields are returned, how the filters combine, or how results are ordered/paginated, leaving an agent under-equipped to call it 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 0% across 7 parameters (status enum, startTime/endTime, messageId, correlationId, integrationFlow, limit), and the description supplies no meaning for any of them. With zero schema documentation, the description was the only place to explain these filters and it explains none.
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?
States a specific verb ('Search') and resource ('normalized message metadata'), which is clear enough to distinguish it from get_message_details (single-message retrieval). However, it offers no differentiation from near-siblings like get_failed_messages, get_recent_failures, or get_error_details, which are also filtered message lookups.
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?
There is no when-to-use guidance, no when-not-to-use, and no named alternative. An agent cannot tell from the text whether to use this broad search or the more targeted get_failed_messages / get_recent_failures siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_integration_healthCRead-onlyIdempotent
Calculate statistics from up to 500 messages; defaults to the past 24 hours. Check truncation.
| Name | Required | Description | Default |
|---|---|---|---|
| endTime | No | ||
| startTime | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only, idempotent, open-world, and non-destructive. The description adds the 500-message cap, the 24-hour default, and a 'Check truncation' caveat, which are useful behavioral details beyond the annotations, but they are not elaborated.
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 short sentences with no padding and the core scope is front-loaded. 'Check truncation' is cryptic but the overall structure is efficient.
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 and no parameter descriptions, the description should do more to explain what statistics are returned and how the time parameters behave. It covers the basic scope and one caution, but leaves key details missing.
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% for two optional date-time parameters. The description only implies a default time range ('past 24 hours') and never explains startTime/endTime naming, format, or what happens when only one is supplied. Partial compensation at best.
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 general verb+resource ('Calculate statistics from up to 500 messages'), but 'statistics' is vague and the description never mentions 'integration health' from the tool name. It does not distinguish this tool from sibling analysis or message-retrieval tools.
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 when-to-use guidance or alternatives are provided. The mention of a 24-hour default and 500-message cap gives context but does not say when an agent should choose this tool over get_recent_failures, analyze_failure, or search_messages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.0- First observed
analyze_failure - First observed
get_error_details - First observed
get_failed_messages - First observed
get_iflow_status - First observed
get_message_details - First observed
get_recent_failures - First observed
search_messages - First observed
summarize_integration_health
TDQS
Scored across 8 tools
There is noticeable overlap between get_failed_messages and get_recent_failures, as both retrieve failure data, and get_message_details versus get_error_details could cause some confusion. Descriptions help distinguish them, but the boundaries are not entirely crisp.
All tool names follow a consistent snake_case verb_noun pattern (get_failed_messages, search_messages, summarize_integration_health). No mixed conventions or vague verbs are present.
Eight tools is well-scoped for a diagnostic monitoring server, and each tool appears to earn its place by covering a distinct aspect of message/error/health inspection. The count avoids both thinness and bloat.
The surface covers core read-only diagnostic needs: searching messages, inspecting failures, retrieving details and errors, checking iflow status, summarizing health, and analyzing failures. Minor gaps exist, such as unsupported package filtering in get_failed_messages and no direct payload retrieval, but these are largely intentional or workaroundable.
Maintenance
Related MCP Connectors
Read-only access to InfluSense influencer discovery, ratings, watchlists, and reports via MCP.
Tenant-scoped evidence intake and controlled AI context over MCP.
Read-only MCP access to sessions, funnels, campaigns, errors, live visitors, and anomalies.
A paid remote MCP for AI SDK data query MCP, built to return verdicts, receipts, usage logs, and aud
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to manage SAP Cloud Integration (CPI) landscapes through natural language by exposing CPI OData APIs as MCP tools.13MIT
- FlicenseNot gradedqualityDmaintenanceEnables 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-
- FlicenseBqualityCmaintenanceEnables managing SAP Cloud Integration iFlows, packages, configurations, deployments, and runtime artifacts via natural language through the OData API.25-
- 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