Skip to main content
Glama
aytacmehmet

sap-cloud-erp-mcp

by aytacmehmet

SAP Cloud ERP MCP Server

License: GPL v3

An MCP (Model Context Protocol) server for SAP S/4HANA Cloud Public Edition, built on the SDK's released business OData APIs. It exposes list / get / create (/update) tools for 14 business objects, plus a small number of object-specific actions (e.g. releasing a production order), for a total of 57 tools.

Object

Tools

Material (Product)

s4_material_list, s4_material_get, s4_material_create, s4_material_update

Material BOM

s4_material_bom_list, s4_material_bom_get, s4_material_bom_create, s4_material_bom_update

Purchase Requisition

s4_purchase_requisition_list, s4_purchase_requisition_get, s4_purchase_requisition_create, s4_purchase_requisition_update

Purchase Order

s4_purchase_order_list, s4_purchase_order_get, s4_purchase_order_create, s4_purchase_order_update

Purchase Contract

s4_purchase_contract_list, s4_purchase_contract_get, s4_purchase_contract_create, s4_purchase_contract_update

Sales Quotation

s4_sales_quotation_list, s4_sales_quotation_get, s4_sales_quotation_create, s4_sales_quotation_update

Sales Order

s4_sales_order_list, s4_sales_order_get, s4_sales_order_create, s4_sales_order_update

Sales Contract

s4_sales_contract_list, s4_sales_contract_get, s4_sales_contract_create, s4_sales_contract_update

Production Order

s4_production_order_list, s4_production_order_get, s4_production_order_create, s4_production_order_update, s4_production_order_release

Planned Order

s4_planned_order_list, s4_planned_order_get, s4_planned_order_create, s4_planned_order_update

Production Order Confirmation

s4_production_order_confirmation_list, s4_production_order_confirmation_get, s4_production_order_confirmation_create

Production Operation Confirmation

s4_production_operation_confirmation_list, s4_production_operation_confirmation_get, s4_production_operation_confirmation_create

Material Document (goods movement)

s4_material_document_list, s4_material_document_get, s4_material_document_create

Outbound Delivery

s4_outbound_delivery_list, s4_outbound_delivery_get, s4_outbound_delivery_create, s4_outbound_delivery_update

Inbound Delivery

s4_inbound_delivery_list, s4_inbound_delivery_get, s4_inbound_delivery_create, s4_inbound_delivery_update

s4_production_order_release releases a production order via the OData V2 function import ReleaseOrder — order status fields are read-only via PATCH, so this is the only way to release an order through the API.

Setup

npm install
npm run build
cp .env.example .env   # fill in your SAP connection details

Required env vars (see .env.example):

  • S4_BASE_URL — your SAP S/4HANA Cloud API base URL

  • S4_AUTH_TYPEoauth2_client_credentials or basic

  • OAuth2: S4_OAUTH_TOKEN_URL, S4_CLIENT_ID, S4_CLIENT_SECRET

  • Basic: S4_USERNAME, S4_PASSWORD

  • MCP_TRANSPORTstdio (default) or http; PORT when using http

The services must be exposed via a Communication Arrangement in your SAP tenant (Communication User + the matching Communication Scenario for each API — see the table below, and the comments at the top of each src/tools/*.ts file for the exact service path).

Related MCP server: ABAP-ADT-API MCP-Server

Running

npm run start                       # stdio transport, for MCP clients like Claude Desktop
MCP_TRANSPORT=http npm run start    # Streamable HTTP on $PORT
npm run inspector                   # MCP Inspector UI against the stdio server

Registering with an MCP client

{
  "mcpServers": {
    "sap-cloud-erp": {
      "command": "node",
      "args": ["/absolute/path/to/sap-cloud-erp/dist/index.js"],
      "env": {
        "S4_BASE_URL": "https://your-tenant-api.s4hana.cloud.sap",
        "S4_AUTH_TYPE": "basic",
        "S4_USERNAME": "...",
        "S4_PASSWORD": "...",
        "MCP_TRANSPORT": "stdio"
      }
    }
  }
}

Verified against a live tenant

list (and CSRF-token acquisition) for the following was confirmed working against a real S/4HANA Cloud Public Edition tenant: Purchase Order, Purchase Requisition, Sales Quotation, Sales Contract, Sales Order, Production Order, Planned Order, Material Document, Outbound Delivery, Inbound Delivery, Production Order Confirmation (both levels). create (including deep-insert with nested account assignment), update, and the release action were verified end-to-end for Purchase Order, Production Order, Sales Order, and Material Document (goods receipt against a PO) against a live tenant. create was also verified for Sales Order against a mock server — see evaluation/.

Not yet independently verified — these returned SAP-side authorization errors on the original test tenant, not code errors (the error was "no start authorization" / "no authorization to access service group", which happens even when the matching Communication Arrangement exists — it means either the arrangement's Inbound Communication tab doesn't have that specific API checked, or the Communication User's backend role/authorization profile is missing the corresponding authorization object):

  • s4_material_* (Product, CE_PRODUCT_0002, comm. scenario SAP_COM_0009)

If you hit this, open the relevant Communication Arrangement in your tenant, check the Inbound Communication → services list, and confirm the Communication User's authorization profile includes that scenario.

Communication Scenarios (confirmed on a live SAP_COM catalog)

Object

Comm. Scenario

Material

SAP_COM_0009

Material BOM

SAP_COM_0105

Purchase Requisition

SAP_COM_0102

Purchase Order

SAP_COM_0053

Purchase Contract

SAP_COM_0101

Sales Quotation

SAP_COM_0118

Sales Order

SAP_COM_0109

Sales Contract

SAP_COM_0119

Planned Order

SAP_COM_0104 (Production Planning Integration)

Production Order / Confirmation

SAP_COM_0522 (Manufacturing Execution — Order and Confirmation Integration)

Material Document

SAP_COM_0108

Outbound / Inbound Delivery

SAP_COM_0106 (shared)

Known limitations

  • All additionalFields (create) / fields (update) parameters accept arbitrary extra OData fields as a passthrough, since exact optional-field lists vary by tenant configuration (e.g. account assignment, batch management, variant configuration).

  • No delete/cancel tools are implemented by design — SAP has no hard-delete for these objects, and cancellation flows were explicitly out of scope.

  • s4_material_document_*, s4_production_order_confirmation_*, s4_production_operation_confirmation_* have no update tool — these SAP objects are immutable once posted (only cancellation exists, which is out of scope).

  • Production order component fields (e.g. batch number) are read-only on the classic OData entity set exposed by this server's s4_production_order_get; updating them requires the RAP-BO-based component entity, which is not yet wrapped in a dedicated tool (see CLAUDE.md §3 for the pattern if you need to add one).

Architecture

  • src/sapClient.ts — shared OAuth2/basic auth, token caching, CSRF token handling, V2/V4 response normalization, OData error-message extraction, and sapCallFunctionImport() for calling OData V2 function imports (actions like release).

  • src/tools/*.ts — one file per business object, each registering its own list/get/create(/update) tools with explicit Zod schemas. No shared "generic SAP object" abstraction by design — each object's fields and quirks are handled explicitly.

  • src/index.ts — server bootstrap; registers all tools and starts either the stdio or stateless Streamable HTTP transport based on MCP_TRANSPORT.

See CLAUDE.md for implementation gotchas discovered while building and hardening this server (OData V2 vs V4 decimal encoding, deep-insert requirements, ETag handling for function imports, composite-key pitfalls, and more) — read it before modifying sapClient.ts or adding a new create/update tool.

License

GNU General Public License v3.0.

Available Tools

27 tools
s4_material_bom_getGet Material BOM (header + optional components)A
Read-onlyIdempotent

Get a Material BOM header by its composite key (billOfMaterial, billOfMaterialCategory, billOfMaterialVariant, material, plant, billOfMaterialVersion, engineeringChangeDocument). Set includeItems=true to also fetch its components.

ParametersJSON Schema
NameRequiredDescriptionDefault
plantYesPlant, e.g. '1010'
materialYesMaterial the BOM belongs to
includeItemsNoIf true, also return the BOM's components
billOfMaterialYesBOM number
billOfMaterialVariantYesAlternative BOM, e.g. '1'
billOfMaterialVersionNoBOM version, usually blank
billOfMaterialCategoryYesBOM category, e.g. 'M' (Material BOM)
engineeringChangeDocumentNoEngineering change number, usually blank

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint. The description adds that setting includeItems=true returns components, which is a useful behavioral addition. However, it does not describe behavior on missing keys or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, clearly structured. Could be slightly more concise but effectively communicates purpose and key parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description should hint at return structure. It says 'header' and 'components' for includeItems, but lacks detail on fields or format. Adequate for a simple get tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% description coverage; the description echoes the composite key and includeItems but adds no deeper semantic meaning beyond the schema's descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (get) and resource (Material BOM header), lists the composite key fields, and notes the optional includeItems parameter. It distinguishes from sibling tools like s4_material_bom_list and s4_material_bom_create.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs siblings like s4_material_bom_list. The description implies it's for a specific BOM by full key, but does not state when not to use or provide alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_outbound_delivery_createCreate Outbound DeliveryA
Destructive

Create an outbound delivery with reference to a preceding sales order (or other document). Required: shippingPoint, at least one item with referenceSDDocument.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesDelivery items, referencing the preceding sales order
shipToPartyNoShip-to party (customer number)
deliveryTypeNoDelivery type, e.g. 'LF'
shippingPointYesShipping point, e.g. '1010'
additionalFieldsNoExtra header fields merged into the request body as-is

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description's statement 'Create an outbound delivery' aligns. The description adds no further behavioral context beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, each serving a distinct purpose: stating the tool's function and listing required fields. No superfluous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately explains creation with reference. It could mention that additionalFields allows extra header fields, but this is minor. Overall sufficient for a creation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the description adds marginal value by highlighting required parameters (shippingPoint, referenceSDDocument) but does not explain their semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Create' and the resource 'outbound delivery', and specifies it requires reference to a preceding document. This distinguishes it from sibling tools like get, update, and list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions required fields (shippingPoint, items with referenceSDDocument) and the context of preceding documents, providing clear usage context. However, it does not explicitly exclude scenarios or compare with alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_outbound_delivery_getGet Outbound DeliveryA
Read-onlyIdempotent

Get an outbound delivery header and its items by delivery number.

ParametersJSON Schema
NameRequiredDescriptionDefault
deliveryDocumentYesOutbound delivery number

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and idempotent behavior. The description adds that it retrieves both header and items, providing context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read operation with one parameter and no output schema, the description provides sufficient context about what is returned (header and items) and is adequate given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with parameter description. The tool description reinforces that the parameter is a delivery number, but adds little new semantic meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 resource 'outbound delivery header and its items', and distinguishes from sibling tools like list, create, and update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you have a delivery number and need header and items, but does not explicitly state when to use versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_planned_order_createCreate Planned OrderA
Destructive

Create a planned order. Practically required: material, mrpPlant, totalQuantity (exact mandatory-field rules are not fully documented by SAP for this API — verify on your tenant).

ParametersJSON Schema
NameRequiredDescriptionDefault
materialYesMaterial to be planned
mrpPlantYesMRP/production plant, e.g. '1710'
totalQuantityYesPlanned quantity, e.g. '10'
additionalFieldsNoExtra fields merged into the request body as-is
plannedOrderIsFirmNoWhether the order is firmed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant value beyond annotations by disclosing that the schema may be incomplete and that server-side validation may differ. Annotations already indicate destructiveHint=true and openWorldHint=true, but the description contextualizes the risk of missing mandatory fields, which is critical for an agent invoking the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: the first succinctly states the action, and the second delivers essential caveat. No unnecessary words; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core function and critical caveat. While it doesn't describe return values (no output schema exists), the agent can infer from the tool type. It could mention the expected result (e.g., created order ID), but overall it's sufficiently complete for an agent to understand and use the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all parameters. The description reinforces that material, mrpPlant, and totalQuantity are practically required, aligning with the schema. It also adds warnings about undocumented mandatory fields, enhancing understanding beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a planned order' with the title reinforcing the purpose. It names the specific resource (planned order) and action (create), distinguishing it from sibling tools like s4_planned_order_list or s4_planned_order_update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides practical guidance by noting that exact mandatory-field rules are not fully documented and advises verification on the tenant. This helps the agent use the tool correctly, though it doesn't explicitly say when to use this tool over alternatives like updating or listing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_planned_order_getGet Planned OrderA
Read-onlyIdempotent

Get a planned order by its order number.

ParametersJSON Schema
NameRequiredDescriptionDefault
plannedOrderYesPlanned order number

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral traits beyond what annotations already provide (readOnlyHint, openWorldHint, idempotentHint). It does not mention potential side effects, error behavior (e.g., what happens if the order number doesn't exist), or any required permissions. The single word 'Get' is consistent with read-only, but no additional context is given.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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 resource. It is extremely concise with no redundant words, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is minimal and does not mention what data the response will contain (e.g., full planned order details). Since there is no output schema to fill this gap, the agent may lack information about the return value. However, the tool is simple with one parameter and high schema coverage, making it adequate but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning by stating 'by its order number', clarifying that the 'plannedOrder' parameter is the identifier used to retrieve the record. The schema description only says 'Planned order number', so the tool description provides the context of how the parameter is used, adding value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get', the resource 'planned order', and the method 'by its order number'. It distinguishes from sibling tools like s4_planned_order_list, s4_planned_order_create, and s4_planned_order_update, indicating it's for retrieving a single record.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 like s4_planned_order_list (for listing multiple orders) or other retrieval tools. No explicit instructions on when to use or not use, leaving the agent to infer from the tool name and context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_planned_order_listList Planned OrdersA
Read-onlyIdempotent

List planned orders. Supports OData $filter/$top/$skip/$select.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
skipNo
filterNoOData $filter, e.g. "MRPPlant eq '1710'"
selectNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the agent knows it is a safe, read-only operation. The description adds value by specifying OData $filter/$top/$skip/$select support, which informs behavior about filtering and pagination. No contradictions. Score is high but not 5 because the description could mention that it returns a list (though implied by name).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no extraneous words. The first sentence states the purpose, and the second lists the key capability. Every sentence earns its place. No redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema. The description covers the ability to list and filter, but does not describe what the output contains (e.g., list of order IDs or full details) or any default limits. Annotations provide safety and open-world hints, but the description could be more complete regarding the result structure. Adequate but with gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (only 'filter' has a description). The description says 'Supports OData $filter/$top/$skip/$select,' which provides context that parameters are OData expressions, but does not explain each parameter's meaning or usage beyond the schema. With low coverage, the description should compensate more fully; it only minimally does so.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the purpose: 'List planned orders.' It also mentions support for OData query options, which distinguishes it from siblings like s4_planned_order_get (single order) and s4_planned_order_create (creation). This meets the 5 criteria of specific verb+resource and differentiation from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing with filtering/pagination but does not explicitly state when to use this tool versus alternatives like s4_planned_order_get. No 'when-not-to-use' guidance or alternative tool names are mentioned. The presence of sibling tools provides some implicit context, but the description itself lacks clear usage guidelines.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_production_order_getGet Production OrderB
Read-onlyIdempotent

Get a production order by its order number.

ParametersJSON Schema
NameRequiredDescriptionDefault
manufacturingOrderYesProduction/manufacturing order number

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, idempotentHint, openWorldHint. Description adds no additional behavioral context such as error handling or authorization needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no wasted words. Well-structured for a simple get tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get tool with one required parameter and annotations handling safety, description is mostly complete. Could mention return type but not essential.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear parameter description. Description repeats 'order number' but adds no extra meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb (Get), resource (production order), and method (by order number). Distinguishes from sibling list and create tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives like list or get from other domains. Implied usage for specific order number only.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_production_order_listList Production OrdersB
Read-onlyIdempotent

List manufacturing/production orders. Supports OData $filter/$top/$skip/$select.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
skipNo
filterNoOData $filter, e.g. "ProductionPlant eq '1710'"
selectNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate the tool is read-only, idempotent, and open-world. The description adds that it supports OData parameters but does not elaborate on pagination behavior, maximum results, or other operational details. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exceptionally concise with two short sentences, front-loading the purpose and immediately listing supported OData features. Every word adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and low parameter descriptions, the description is insufficiently complete. It does not explain return value structure, default behavior, or how this tool fits among many production order siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (25%) with only the 'filter' parameter described. The description merely repeats OData support without adding parameter-specific semantics, failing to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists manufacturing/production orders, providing a specific verb and resource. However, it does not differentiate from sibling tools like s4_production_order_get or s4_planned_order_list, slightly limiting clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 such as s4_production_order_get for a single order or s4_planned_order_list for planned orders. There is no mention of context, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_production_order_releaseRelease Production OrderA
Destructive

Release a production/manufacturing order (OData function import ReleaseOrder). Order status fields like OrderIsReleased are read-only via PATCH; this is the only way to release.

ParametersJSON Schema
NameRequiredDescriptionDefault
manufacturingOrderYesProduction/manufacturing order number

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructive and non-idempotent behavior. The description adds context about read-only fields via PATCH but does not elaborate on side effects or return values.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no wasted words. The first sentence states the purpose, the second provides critical context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose and key constraint. Lacks mention of prerequisites or return values, but for a simple action with good annotations, it is mostly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage for the single parameter, with a description. The tool description does not add meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Release' and the resource 'production/manufacturing order'. It distinguishes itself from sibling tools like update and list by specifying it's the only way to release, as status fields are read-only via PATCH.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states that this is the only way to release an order because OrderIsReleased is read-only via PATCH, providing clear guidance on when to use this tool over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_production_order_updateUpdate Production OrderA
Destructive

Update fields on an existing production order (e.g. dates, quantity). Components/operations are not updatable via this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesFields to update
manufacturingOrderYesProduction/manufacturing order number

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveness and mutability. The description adds value by specifying that components/operations are not updatable, which is not covered by annotations. However, it does not elaborate on other behavioral traits such as authorization needs, partial vs. full replacement of fields, or side effects, which would merit a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The first sentence succinctly states the purpose with examples, and the second adds a critical constraint. Perfectly front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (mutating a nested object) and no output schema, the description lacks information on return values, success/failure indicators, or side effects. While the context from sibling tools helps, the description itself is incomplete for an agent to fully understand the outcome.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers both parameters fully (100% coverage). The description adds examples (dates, quantity) and a limitation (components/operations not updatable), which enriches understanding beyond the schema. This adds value beyond the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates fields on an existing production order, giving examples like dates and quantity. It explicitly mentions what is not updatable (components/operations), distinguishing it from sibling tools like s4_production_order_create, s4_production_order_release, and other S4 update tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for updating production order fields but does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention prerequisites or restrictions beyond the components/operations limitation. The context is clear but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_purchase_contract_createCreate Purchase ContractB
Destructive

Create a purchase contract (outline agreement) with at least one item. Required header: purchaseContractType, supplier, purchasingOrganization, purchasingGroup, companyCode, validityStartDate, validityEndDate. Required per item: plant, targetQuantity, orderQuantityUnit, and either material or materialGroup.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesContract items
supplierYesSupplier/vendor number
companyCodeYesCompany code, e.g. '1010'
purchasingGroupYesPurchasing group, e.g. '001'
validityEndDateYesValidity end date, ISO format 'YYYY-MM-DD'
additionalFieldsNoExtra header fields merged into the request body as-is
validityStartDateYesValidity start date, ISO format 'YYYY-MM-DD'
purchaseContractTypeYesContract type, e.g. 'MK'
purchasingOrganizationYesPurchasing organization, e.g. '1010'

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a non-readonly, potentially destructive operation (destructiveHint true), but the description adds no behavioral context beyond the create action. It does not explain side effects, permissions needed, or whether the operation is reversible, which is a significant gap given the absence of that info in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences, front-loading the purpose and then listing required fields. It is efficient but could be slightly more structured with bullet points for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (9 parameters, nested objects) and absence of an output schema, the description lacks completeness. It does not mention what the return value is (e.g., contract number), error handling, or prerequisites like data existence, leaving the agent with incomplete context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds value by clarifying the 'either material or materialGroup' requirement per item, which is not enforced in the schema. It also lists all required header fields concisely, helping the agent understand the composite structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a purchase contract (outline agreement) with at least one item, using specific verbs and resource. However, it does not explicitly differentiate from sibling tools like purchase order or requisition creation, so it loses a point for lack of sibling distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide any guidance on when to use this tool versus alternatives such as purchase order create or purchase requisition create. It only lists required fields, which is helpful but lacks context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_purchase_contract_getGet Purchase ContractA
Read-onlyIdempotent

Get a purchase contract header (and optionally its items) by contract number.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeItemsNoIf true, also return the contract's items
purchaseContractYesPurchase contract number

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile and idempotency are covered. The description adds that the tool returns the header and optionally items, which is useful behavioral context beyond annotations. No contradictions or missing behavioral traits (e.g., error behavior) but acceptable given annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence of 10 words, front-loaded with the primary action ('Get a purchase contract header'). No redundant or filler information. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 two parameters and clear annotations, the description is largely sufficient. It explains the main behavior (header + optional items) and identifies the key parameter (contract number). Minor gap: no mention of what happens if the contract doesn't exist or the response format, but given no output schema and low complexity, this is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%. The description rephrases the parameters (contract number, optionally items) but does not add new semantic meaning such as expected formats, validation rules, or edge cases. Baseline 3 is appropriate as the schema already documents both parameters adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves a purchase contract header and optionally its items by contract number. It specifies the verb (Get), resource (purchase contract), and scope (header and optionally items). This distinguishes it from sibling tools like s4_purchase_contract_list (lists contracts) and s4_purchase_contract_create/update (write operations).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you have a contract number and need details, but it does not explicitly state when to use this tool over alternatives like s4_purchase_contract_list or s4_purchase_contract_get for items. No exclusions or explicit guidance on prerequisites (e.g., contract must exist).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_purchase_contract_listList Purchase ContractsA
Read-onlyIdempotent

List purchase contract (outline agreement) headers. Supports OData $filter/$top/$skip/$select.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
skipNo
filterNoOData $filter, e.g. "Supplier eq '17300001'"
selectNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint as true. The description adds value by specifying support for OData $filter/$top/$skip/$select, which informs the agent about pagination and filtering capabilities, and clarifies that only headers are listed (not line items).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences that front-load the purpose immediately. No redundant or extraneous information, every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While annotations cover safety, the description lacks details on return format (e.g., fields returned) and default behavior (e.g., maximum items, ordering). Given no output schema, the description could be more complete to help an agent understand what the response contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 25% schema description coverage (only filter has a description), the description mentions support for $filter/$top/$skip/$select but does not explain the semantics of top, skip, or select beyond schema constraints. It adds some context but insufficient to compensate for the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List purchase contract (outline agreement) headers', specifying the verb (list), resource (purchase contract headers), and scope (headers only), which distinguishes it from siblings like s4_purchase_order_list or s4_purchase_contract_get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing purchase contract headers but does not provide explicit guidance on when to use this tool versus alternatives (e.g., get for detailed view, purchase order list for orders). No exclusions or context are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_purchase_order_createCreate Purchase OrderA
Destructive

Create a purchase order with at least one item. Required header: companyCode, purchaseOrderType, supplier, purchasingOrganization, purchasingGroup. Required per item: plant, material, orderQuantity, netPriceAmount. For account-assigned items (e.g. category 'M' individual PO tied to a sales order), set item.accountAssignmentCategory and item.accountAssignment {salesOrder, salesOrderItem} — this creates a PurchaseOrderAccountAssignment record.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesPurchase order items
supplierYesSupplier/vendor number
companyCodeYesCompany code, e.g. '1010'
purchasingGroupYesPurchasing group, e.g. '001'
additionalFieldsNoExtra header fields merged into the request body as-is
purchaseOrderTypeYesPO type, e.g. 'NB'
purchasingOrganizationYesPurchasing organization, e.g. '1010'

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint: true and readOnlyHint: false, so the description's 'Create' aligns. It adds context about creating a PurchaseOrderAccountAssignment record for account-assigned items, but does not disclose side effects, authorization needs, or rate limits. The behavioral disclosure is adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loading the core purpose and required fields, then addressing a special case. Every sentence is necessary and no redundant information is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (nested objects, account assignment) and lack of output schema, the description fails to mention what the tool returns (e.g., purchase order number or confirmation). It also omits error handling or validation notes. The tool's response is critical for agent workflow, and its absence leaves a significant gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value by explicitly listing required header and item fields, and clarifying the relationship between accountAssignmentCategory and accountAssignment for sales order tie-ins. This goes beyond the schema's individual descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a purchase order with at least one item,' identifying the specific verb and resource. It distinguishes itself from sibling tools like s4_purchase_order_list, s4_purchase_order_get, and s4_purchase_order_update by focusing on creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly indicates when to use the tool (to create a purchase order) but provides no explicit guidance on when not to use it or how it compares to alternatives like s4_purchase_contract_create or s4_purchase_requisition_create. No context on prerequisites or exclusions is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_purchase_order_getGet Purchase OrderA
Read-onlyIdempotent

Get a purchase order header (and optionally its items) by PO number.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeItemsNoIf true, also return the order's items
purchaseOrderYesPurchase order number

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds that it returns header and optionally items, but does not disclose any additional behavioral traits beyond what annotations cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with purpose, and no wasted words. Efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read operation with strong annotations and no output schema needed, the description is complete enough. It specifies the input (PO number) and optional flag, and the output (header and items).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters described. The description reinforces the 'includeItems' parameter by mentioning optional items, but adds minimal meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves a purchase order header and optionally its items by PO number. This distinguishes it from siblings like s4_purchase_order_list (which lists) and s4_purchase_order_create (which creates).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when you have a PO number, but does not explicitly state when not to use it or compare with alternatives like list or search tools. No exclusions or context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_purchase_order_updateUpdate Purchase OrderA
Destructive

Update fields on an existing purchase order header.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesHeader fields to update
purchaseOrderYesPurchase order number

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive nature is known. Description adds no further behavioral context such as side effects, partial update behavior, or error scenarios. Adequate but no added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no redundancy, front-loaded. Every word is meaningful and earned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple update tool with 2 parameters and annotations present, the description is minimally complete. However, it lacks return value expectations and does not warn about any prerequisites besides having the purchase order number.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema provides 100% coverage with descriptions for both parameters. However, the 'fields' object is open-ended (additionalProperties allowed) and description does not clarify valid field names or constraints. This is a significant gap for an agent to know what header fields are updatable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb 'update' and resource 'purchase order header'. It distinguishes from sibling create/get/list tools by specifying 'existing'. No ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage when you need to modify an existing purchase order header, but does not provide explicit when-not-to-use or alternative tools. Sibling tools exist (create, get, list) but no guidance on choosing between them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_sales_contract_createCreate Sales ContractA
Destructive

Create a sales contract with at least one item (the header cannot be created without at least one item/association). Required header: salesContractType, salesOrganization, distributionChannel, salesDistrict, soldToParty. Required per item: material, requestedQuantity.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesContract items
soldToPartyYesSold-to party (customer number)
salesDistrictYesSales district
additionalFieldsNoExtra header fields merged into the request body as-is
salesContractTypeYesContract type, e.g. 'CQ'
salesOrganizationYesSales organization, e.g. '1010'
distributionChannelYesDistribution channel, e.g. '10'
organizationDivisionNoDivision, e.g. '00'

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, indicating mutation. The description adds that at least one item is required, which is useful but doesn't disclose additional behavioral traits (e.g., side effects, authorization needs, rate limits).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single concise sentence with no wasted words. Every element serves a purpose: action, constraints, required fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers core creation logic and constraints. No output schema is provided, so more detail on return value or potential errors would improve completeness, but the description is already strong for a create tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are fully documented. The description lists required fields but adds no semantic meaning beyond what the schema provides. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Create a sales contract' and specifies required header and item fields. It distinguishes from sibling tools like s4_sales_contract_update, s4_sales_contract_list, s4_sales_contract_get, and other S4 document tools by focusing on creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'the header cannot be created without at least one item/association' and lists required fields, providing clear context. However, it does not explicitly state when to use this tool vs. alternatives like s4_sales_order_create or s4_sales_contract_update.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_sales_contract_getGet Sales ContractA
Read-onlyIdempotent

Get a sales contract header and its items by contract number.

ParametersJSON Schema
NameRequiredDescriptionDefault
salesContractYesSales contract number

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide read-only, open-world, and idempotent hints. The description adds context about the returned data (header and items), which goes beyond the annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single, short sentence that is clear and to the point. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for this simple tool: it explains what it does, what it returns, and the input needed. No output schema is present, but the description mentions the output structure adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the parameter's description in the schema is sufficient. The tool description adds no additional meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' and clearly identifies the resource as 'sales contract header and its items', with the method 'by contract number'. This distinguishes it from sibling tools like list, create, and update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives such as the list tool. Usage is implied, but the description does not provide when-not-to-use or mention of alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_sales_contract_listList Sales ContractsA
Read-onlyIdempotent

List sales contract headers. Supports OData $filter/$top/$skip/$select.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
skipNo
filterNoOData $filter, e.g. "SoldToParty eq 'S10100251'"
selectNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description is not burdened with repeating those. It adds transparency by specifying that only headers (not full contracts) are returned, and that standard OData operations are supported. The behavior is clear and non-contradictory.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise with two sentences. The first sentence clearly states the primary purpose, and the second lists the supported OData parameters. Every word adds value; no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with no output schema, the description is fairly complete. It identifies the resource (headers), supported features (OData), and with annotations indicating read-only and idempotent behavior. Missing details like default pagination or result format are acceptable given the concise style.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (only 'filter' has a description). The description compensates by grouping parameters as standard OData operations, implying their typical semantics. However, it does not explain each parameter individually beyond the schema's limited coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists sales contract headers, which distinguishes it from sibling tools like s4_sales_contract_get (single) and s4_purchase_contract_list (purchase side). The verb 'List' and resource 'sales contract headers' 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions support for OData parameters ($filter, $top, $skip, $select), which guides on how to use the tool. However, it lacks explicit guidance on when to use this vs other list tools (e.g., s4_sales_order_list) and does not provide usage exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_sales_contract_updateUpdate Sales ContractB
Destructive

Update fields on an existing sales contract header.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesHeader fields to update
salesContractYesSales contract number

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveness, but the description 'update fields' adds no behavioral context beyond that. No mention of side effects, validation, or field replacement behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence, front-loaded purpose, no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool has 2 params, no output schema. Description is minimal; lacks details on valid fields for the 'fields' parameter and return value, which is insufficient given the open-ended nature.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3 is appropriate. Description adds no extra meaning beyond schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Update' and the resource 'fields on an existing sales contract header', which distinguishes it from create, list, and get sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use vs alternatives. Implied by naming and siblings, but lacks prerequisites, permissions, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_sales_order_createCreate Sales OrderB
Destructive

Create a sales order with at least one item. Required header: salesOrderType, salesOrganization, distributionChannel, organizationDivision, soldToParty. Required per item: material.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesOrder items
soldToPartyYesSold-to party (customer number)
salesOrderTypeYesOrder type, e.g. 'OR'
additionalFieldsNoExtra header fields merged into the request body as-is
salesOrganizationYesSales organization, e.g. '1010'
distributionChannelYesDistribution channel, e.g. '10'
organizationDivisionYesDivision, e.g. '00'

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description's 'Create' adds no new behavioral context. No mention of side effects, validation rules, or error conditions; thus the description adds minimal value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loading the main action. It is efficient, though could be slightly more concise by omitting redundant field lists already in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 params, nested items, no output schema), the description is too minimal. It omits expected return values, default behavior, and error handling, leaving the agent underinformed for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description enumerates required parameters but does not add semantic detail (e.g., format examples, constraints) beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a sales order with at least one item' and lists the required header and item fields, making the tool's purpose specific and distinguishable from sibling create tools like s4_sales_quotation_create.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides required fields but no explicit guidance on when to use this tool versus alternatives (e.g., s4_sales_order_update, s4_sales_quotation_create). Usage is implied from the name and purpose, but no exclusions or context are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_sales_order_getGet Sales OrderA
Read-onlyIdempotent

Get a sales order header and its items by order number.

ParametersJSON Schema
NameRequiredDescriptionDefault
salesOrderYesSales order number

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds value by specifying the return content (header and items), which is beyond what annotations provide. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no wasted words. Every part of the description adds value and conveys the essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple input schema (one parameter), comprehensive annotations, and the description clearly stating the return structure (header and items), the tool is fully specified. No gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the parameter 'salesOrder' is well described with 'Sales order number'. The description adds no additional meaning beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the verb (Get), resource (sales order), scope (header and items), and identifier (order number). It clearly distinguishes itself from sibling tools like s4_sales_order_list (list) and s4_sales_order_create (create).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly indicates usage for retrieving a specific order by number, and sibling tools provide context for alternatives. However, it lacks explicit 'when to use' or 'when not to use' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_sales_order_listList Sales OrdersB
Read-onlyIdempotent

List sales order headers. Supports OData $filter/$top/$skip/$select.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
skipNo
filterNoOData $filter, e.g. "SoldToParty eq '10100001'"
selectNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnly, openWorld, idempotent hints. Description adds that it retrieves headers and supports OData queries, which is adequate but not extensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no fluff, efficiently conveys the tool's function and supported features.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given simple list tool with good annotations and no output schema, description is minimally complete. It states the resource (headers) and query options, but could benefit from mentioning pagination or default behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 25% (only filter has description). Description mentions 'Supports OData $filter/$top/$skip/$select' but does not explain semantics of top, skip, select beyond what schema already provides for filter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states 'List sales order headers' with a specific verb and resource, distinguishing it from sibling tools like s4_sales_order_get, s4_sales_order_create, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like s4_sales_quotation_list or when not to use it. Only mentions supported OData options.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_sales_order_updateUpdate Sales OrderA
Destructive

Update fields on an existing sales order header.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesHeader fields to update
salesOrderYesSales order number

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, which align with the update operation. The description does not add further behavioral context (e.g., side effects, required authorizations).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no redundancy or extra words. It efficiently conveys the core functionality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple update tool with two required parameters and no output schema, the description is adequate. However, it does not specify return behavior or error conditions, which could be improved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters. The description adds no additional meaning beyond restating the purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update fields on an existing sales order header' clearly specifies the action (update) and resource (sales order header), distinguishing it from sibling tools like create or list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives (e.g., s4_sales_order_create or other update tools). Usage is implied but not articulated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_sales_quotation_getGet Sales QuotationA
Read-onlyIdempotent

Get a sales quotation header and its items by quotation number.

ParametersJSON Schema
NameRequiredDescriptionDefault
salesQuotationYesSales quotation number

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description carries less burden. The description adds 'header and its items' but does not disclose additional behaviors like error handling or response structure. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one sentence with no wasted words. It front-loads the action and resource, making it efficient for an agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool is a simple retrieval with one parameter, annotations that cover safety, and no output schema, the description adequately communicates what the tool does. It mentions 'header and its items', which is sufficient context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage for the single required parameter 'salesQuotation' with a clear description 'Sales quotation number'. The description adds no new meaning beyond the schema, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and resource 'sales quotation header and its items', and specifies the input 'by quotation number'. It distinguishes the tool from sibling tools like list, create, and update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you need a specific quotation by number but provides no explicit guidance on when to use this tool versus alternatives (e.g., list, create). No when-not-to or exclusion criteria are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_sales_quotation_listList Sales QuotationsA
Read-onlyIdempotent

List sales quotation headers. Supports OData $filter/$top/$skip/$select.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
skipNo
filterNoOData $filter, e.g. "SoldToParty eq '10100001'"
selectNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, which align with the read-only 'List' operation. The description adds no additional behavioral context (e.g., result limits, hidden side effects) beyond what annotations provide. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: first states the core purpose, second lists the supported features. Every word earns its place; no extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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, the description does not specify what fields are returned or pagination behavior. It mentions OData parameters but does not explain defaults or limits (e.g., top maximum of 1000 is in schema but not description). The tool has many siblings, but the description provides enough to distinguish list vs. get/create/update. Adequate but could be more helpful with output expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description mentions 'OData $filter/$top/$skip/$select', adding context that these are standard OData query parameters. The schema only describes the 'filter' parameter with an example. With schema coverage at 25%, the description provides some semantic context but does not elaborate on each parameter's purpose or constraints beyond naming them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List sales quotation headers' and mentions supported OData operations, distinguishing it from sibling tools like s4_sales_quotation_get (single record) and s4_sales_quotation_create/update (mutations).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool over alternatives. It lists OData parameters but provides no context on when to apply them or exclude other list tools. Implicitly, it suggests usage for listing quotations, but lacks guidance on selection criteria among many sibling list tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s4_sales_quotation_updateUpdate Sales QuotationB
Destructive

Update fields on an existing sales quotation header.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesHeader fields to update
salesQuotationYesSales quotation number

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true and readOnlyHint=false, but the description adds no context about the update semantics (e.g., partial vs full replacement, error behavior, or effects on related data).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no waste, but it could be more informative without losing brevity (e.g., mentioning scope or behavior).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description should explain return values or success/failure indicators. It also lacks detail on prerequisites, side effects, or typical usage patterns for this ERP update tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with parameter descriptions, and the tool description provides no additional meaning beyond the schema (e.g., 'fields' is described as 'Header fields to update' in both).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update') and resource ('fields on an existing sales quotation header'), distinguishing it from sibling tools like s4_sales_quotation_get or s4_sales_quotation_create.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the tool name and description (when you need to update an existing quotation), but there is no explicit guidance on when not to use it or alternatives for other types of updates (e.g., line items).

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.

  1. 27 tool updatesv0.1.0
    • First observeds4_material_bom_get
    • First observeds4_outbound_delivery_create
    • First observeds4_outbound_delivery_get
    • First observeds4_planned_order_create
    • First observeds4_planned_order_get
    • First observeds4_planned_order_list
    • First observeds4_production_order_get
    • First observeds4_production_order_list
    • First observeds4_production_order_release
    • First observeds4_production_order_update
    • First observeds4_purchase_contract_create
    • First observeds4_purchase_contract_get
    • First observeds4_purchase_contract_list
    • First observeds4_purchase_order_create
    • First observeds4_purchase_order_get
    • First observeds4_purchase_order_update
    • First observeds4_sales_contract_create
    • First observeds4_sales_contract_get
    • First observeds4_sales_contract_list
    • First observeds4_sales_contract_update
    • First observeds4_sales_order_create
    • First observeds4_sales_order_get
    • First observeds4_sales_order_list
    • First observeds4_sales_order_update
    • First observeds4_sales_quotation_get
    • First observeds4_sales_quotation_list
    • First observeds4_sales_quotation_update

TDQS

B3.4/5.0

Scored across 27 tools

Disambiguation5/5

Every tool targets a distinct SAP document/resource and action, such as sales orders, purchase orders, sales contracts, or production orders. The get/list/create/update/release verbs are applied consistently, so there is little risk of selecting the wrong tool.

Naming Consistency5/5

Tool names follow a strict s4_<resource>_<action> pattern with snake_case throughout. Actions are consistently list/get/create/update/release, making the API surface highly predictable.

Tool Count3/5

27 tools is on the heavy side, but the server covers multiple ERP domains: sales, purchasing, manufacturing, and logistics. Each tool is distinct and purposeful, though the count is above the ideal range for a tightly scoped server.

Completeness2/5

Several document lifecycles are incomplete: there is no purchase order list, no sales quotation create, no production order create, and no outbound delivery list. These are significant gaps that would block common ERP workflows, even though core sales order and purchase order operations are covered.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    B
    maintenance
    A Model Context Protocol server that facilitates communication between ABAP systems and MCP clients, providing tools for managing ABAP objects, handling transport requests, and performing code analysis to enhance ABAP development workflows.
    100
    88 npm
    197
    MIT
  • A
    license
    C
    quality
    Not graded
    maintenance
    A Model Context Protocol server that facilitates seamless communication between ABAP systems and MCP clients for managing ABAP objects, transport requests, and code analysis. It acts as a wrapper for the ABAP ADT API to enhance the efficiency of ABAP development workflows.
    100
    -
  • A
    license
    C
    quality
    D
    maintenance
    An MCP server that enables seamless communication between ABAP systems and MCP clients using the ABAP Development Tools (ADT) API. It provides tools for managing ABAP objects, handling transport requests, and performing code analysis directly through MCP-compatible interfaces.
    100
    MIT