Sapo MCP by usefulapi
Server Details
Read Sapo store products, orders, customers and stock levels; edit order notes and stock.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
TDQS
Scored across 20 tools
Each tool has a distinct resource-action pairing: count/list/get for customers, orders, and products are clearly separated, and inventory items, inventory levels, locations, variants, transactions, and store tools target different objects. The descriptions also clarify related tools such as list_inventory_items versus list_inventory_levels.
All tools use the same sapo_ prefix followed by a consistent verb_noun pattern: count_*, get_*, list_*, set_*, and update_*. Singular/plural distinctions are used predictably for single-resource versus collection operations.
The 20 tools cover a broad e-commerce admin domain across several resources, and most tools earn their place. The set is slightly heavy but not excessive for the scope, with only a few count/list overlaps that are justified by API behavior.
Read coverage is strong across customers, orders, products, variants, inventory, locations, transactions, price rules, collections, and store settings. However, write coverage is very limited: only inventory level setting and order note/tag updates are supported, with no create/update/delete for products, customers, collections, price rules, or most order lifecycle operations.
Available Tools
20 toolssapo_count_customersCount customersBRead-onlyInspect
Total number of customers. GET /admin/customers/count.json.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds only the underlying REST path (GET /admin/customers/count.json), which is mild context; it says nothing about response shape, rate limits, or store scoping that annotations don't cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no wasted prose. The endpoint path adds little value to an agent that already has the tool name, but it costs almost nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description should at least hint at the return shape (e.g., a bare integer versus a JSON object with a count field). 'Total number of customers' implies a count but leaves the actual response format ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to document. Baseline 4 applies; no parameter-related gaps exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Total number of customers.' An agent can distinguish this aggregate-count tool from the sibling list_customers / get_customer tools by name and text, though the description never explicitly contrasts them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance. The agent must infer that this tool should be chosen over sapo_list_customers when only a count is needed, and the description offers no exclusions, prerequisites, or alternative references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_count_ordersCount ordersBRead-onlyInspect
Number of orders matching the filters. GET /admin/orders/count.json.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Order status: open (Sapo default when omitted, so archived orders are left out), closed, or any (all orders). Pass any for date-range totals. | |
| created_on_max | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. | |
| created_on_min | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. | |
| modified_on_max | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. | |
| modified_on_min | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. | |
| financial_status | No | Payment status: authorized, pending, paid, refunded, voided, or any. Sapo default when omitted: authorized, pending and paid only (refunded and voided are left out). | |
| fulfillment_status | No | Fulfillment status (for example unfulfilled, fulfilled, partial). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile needs no restating. Beyond that the description adds only the raw endpoint path (GET /admin/orders/count.json) and discloses nothing about default filter behavior, auth, rate limits, or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the purpose; nothing is padded. The endpoint path is the only arguably redundant element, though it aids API-literate callers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, read-only count tool with no output schema, the agent still has to infer the return value (an integer vs. an object with a count field) and how filters combine. The rich schema covers filter semantics, but the description does not close the output-shape gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including valuable default semantics (status defaults to open, financial_status defaults to authorized/pending/paid) and ISO 8601 formats. The description adds no parameter meaning of its own, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation (count) on a specific resource (orders) subject to filters, which lets an agent separate it from sapo_list_orders. It does not explicitly name the sibling it is not, so it stops short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: a 'number of orders' tool is self-evidently for totals where fetching records would be wasteful. There is no explicit when-to-use, no when-not, and no reference to sapo_list_orders as the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_count_productsCount productsARead-onlyInspect
Number of products matching the filters. GET /admin/products/count.json.
| Name | Required | Description | Default |
|---|---|---|---|
| vendor | No | Exact vendor (brand) name. | |
| product_type | No | Exact product type. | |
| collection_id | No | Only products in this collection (see sapo_list_custom_collections). | |
| created_on_max | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. | |
| created_on_min | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds only the endpoint path; it doesn't mention that all filters are optional, that omitting them counts every product, or that the call reflects live store data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with nothing wasted. It is arguably over-trimmed rather than padded, but no sentence fails to earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should convey the return value; it says 'Number of products,' which is adequate, and the fully documented schema covers parameters. What's missing is the zero-filter default and any hint about cost or pagination relevance for a count endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of the five filters is documented there, so the baseline is 3. The phrase 'matching the filters' adds no syntax or semantics beyond the schema — no defaults or combination behavior are explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Number of products matching the filters') plus the underlying endpoint, which clearly separates it from list-style siblings like sapo_list_products. It never names those siblings explicitly, so differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer 'call this when you want a count instead of the records themselves,' but no when-to-use or when-not-to-use guidance is given, and no alternative (e.g. sapo_list_products) is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_get_customerGet customerBRead-onlyInspect
One customer by id. GET /admin/customers/{id}.json.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | Sapo customer id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false, so the safety profile is fully covered. The description's only added content is the REST path, which restates that this is a single-resource fetch; it says nothing about error behavior for missing ids, auth requirements, or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse fragments with no padding, and the core purpose is front-loaded. However, the second sentence (the endpoint path) adds little for an agent and the overall brevity edges toward under-specification given the absent return-value information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with a fully documented single parameter and annotations covering safety, the definition is minimal but workable. With no output schema, though, an agent gets no hint about what fields a customer record contains, which is the main remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single customer_id parameter is documented as a positive integer in the schema. The description adds no format, aliasing, or lookup guidance beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (one customer by id), and the sibling set makes the resource-based distinction obvious (get_order, get_product, list_customers). It is not tautological, but it stops short of explaining anything about the customer entity itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"One customer by id" implies usage — call this when you have a customer_id — but there is no explicit guidance on when to prefer this over sapo_list_customers (e.g., when searching) or what to do if the id is unknown. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_get_orderGet orderARead-onlyInspect
One order by id with line items, addresses, discounts, payment and shipping. GET /admin/orders/{id}.json.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | Sapo order id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so safety is covered. The description adds genuine value by disclosing the payload contents (line items, addresses, discounts, payment, shipping) and the underlying endpoint, which no structured field conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the resource and the payload contents, followed by the endpoint. Nothing redundant, nothing missing that belongs there.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read with no output schema, the description sufficiently covers what the call returns and how it maps to the API. Only the error behavior for a nonexistent id is absent, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter is fully documented in the schema (100% coverage: 'Sapo order id.', integer, >0). The description only restates 'by id', adding no format, boundary or error semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('One order by id') and enumerates the returned sub-resources, so the agent knows exactly what it fetches. It implicitly distinguishes itself from sapo_list_orders by fetching a single order, but never names the sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Retrieval-by-id usage is implied by 'by id', and the contrast with listing tools is inferable from siblings, but there is no explicit statement of when to prefer this over sapo_list_orders or sapo_update_order.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_get_productGet productBRead-onlyInspect
One product by id, with variants and images. GET /admin/products/{id}.json.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | Sapo product id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so safety is covered. The description usefully adds that the response embeds variants and images (important since there is no output schema) and maps to a concrete endpoint, but says nothing about not-found behavior or whether nested collections are truncated or paginated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler; the resource and payload come first. The raw endpoint string is mild redundancy but still earns its place as an API-mapping hint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool this is close to adequate, and it does gesture at return contents. With no output schema, though, an agent still lacks detail on response shape and on whether the nested variants/images are complete or paginated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
A single parameter with 100% schema description coverage ('Sapo product id.', type integer, >0), so the schema already does the work. 'By id' in the description adds no format or lookup guidance beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: retrieves exactly one product by id, and it names the payload contents (variants and images). That makes it distinguishable from the plural sapo_list_products, even though no sibling is called out by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance and no mention of alternatives such as sapo_list_products for browsing or sapo_get_product_variant for a single variant. The only implied condition is 'you have a product id'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_get_product_variantGet product variantBRead-onlyInspect
One product variant by id. GET /admin/variants/{id}.json.
| Name | Required | Description | Default |
|---|---|---|---|
| variant_id | Yes | Sapo variant id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, so the safety profile is handled. The description adds only the underlying REST path (GET /admin/variants/{id}.json), which is mild context; it says nothing about error behavior for missing ids or rate limiting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments, zero filler, with the scope statement front-loaded. It is at the edge of under-specification rather than verbosity, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with full annotation coverage and a fully described schema, the definition is minimally sufficient to call correctly. It omits what a caller would want next – not-found behavior and response shape – though the absence of an output schema means return values arguably need not be described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single variant_id parameter is already documented in the schema with type and bounds. The phrase 'by id' adds no syntax or format detail beyond that, so the baseline 3 for schema-covered parameters applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('product variant') and narrows scope to a single record fetched by id, which implicitly separates it from the sibling sapo_list_product_variants. It does not name the sibling explicitly, but an agent can tell single-fetch from list without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: retrieve one variant when you already have its id, versus listing variants. There is no explicit 'use this instead of...' statement or precondition about what to do when the id is unknown or the variant does not exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_get_storeGet storeARead-onlyInspect
The Sapo store this login belongs to: name, domain, currency, timezone, plan and other settings. GET /admin/store.json.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true. The description adds useful context about the endpoint and returned fields, but does not mention authentication requirements, error behavior, or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the resource and key returned data, and ends with the endpoint. No sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter read-only getter with annotations and no output schema, the description sufficiently indicates what data is returned by listing fields. Minor omissions like explicit auth context or 'other settings' detail are acceptable at this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, matching the baseline of 4 for zero-parameter tools. The description correctly does not introduce parameter semantics that would be needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource (the Sapo store for this login) and lists key returned fields, plus the HTTP endpoint. It is clearly distinguishable from sibling tools, which all target customers, orders, products, inventory, etc., but does not explicitly contrast with an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the resource description: retrieve store settings for the authenticated login. There is no explicit 'use when' guidance or named alternative, though none is needed given this is the only store-level getter among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_list_custom_collectionsList collectionsBRead-onlyInspect
List manual product collections (danh mục thủ công). Paged. GET /admin/custom_collections.json.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter by collection name. | |
| page | No | Page number, from 1 (default 1). Pass the previous reply's next_page. | |
| limit | No | Results per page, 1-250 (default 50). | |
| product_id | No | Only collections that contain this product. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds that results are paged, which is genuine behavioral context, but says nothing about ordering, default scope, or whether smart collections are excluded beyond the word 'manual'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short fragments, front-loaded with the resource and scope, with no filler. The raw endpoint path ('GET /admin/custom_collections.json') is the least valuable element for an agent but costs almost nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with full schema coverage, annotations covering safety, and no output schema, the definition is nearly sufficient. The only gap is silence on the return shape and whether the 'manual' qualifier excludes other collection types.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (name, page, limit, product_id) are already documented in the schema, including the next_page hint. The description adds no filtering or pagination detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'List manual product collections' — and disambiguates the resource type ('manual' vs. presumably smart collections) with the Vietnamese gloss. No sibling tool covers collections, so no explicit sibling routing is needed, but the term 'manual/custom' is never defined precisely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives, no prerequisites, and no note that the four available filters (name, product_id) exist. Usage is only inferable from the verb 'List'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_list_customersList customersARead-onlyInspect
List customers with contact details, addresses, order count and total spent. Paged. GET /admin/customers.json.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, from 1 (default 1). Pass the previous reply's next_page. | |
| limit | No | Results per page, 1-250 (default 50). | |
| since_id | No | Only customers with an id greater than this. | |
| created_on_max | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. | |
| created_on_min | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. | |
| modified_on_max | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. | |
| modified_on_min | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the description only needs to add context — and it does: it discloses that results are paginated and what fields come back (contact details, addresses, order count, total spent). It also pins the underlying endpoint (GET /admin/customers.json), which helps the agent understand data provenance. It does not state default page size or total-count behavior, though the schema covers the first.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no filler; the returned-field list comes first, which is what an agent most needs. The trailing endpoint path is marginally useful metadata but slightly less valuable than the rest.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, seven-optional-filter list tool with no output schema, the description covers purpose, return fields and pagination, and the schema fully documents filters. It stops short of explaining how the filters can be combined or that an empty filter set returns the full customer base, but nothing essential to a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven filters (page, limit, since_id, created_on_*, modified_on_*) are already documented with formats, ranges and defaults. The description adds nothing parameter-specific beyond the word 'Paged', which merely signals that page/limit exist. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List customers') and enumerates the returned fields (contact details, addresses, order count, total spent), which distinguishes it from sapo_get_customer (single record) and sapo_count_customers. It never names those siblings explicitly, so the differentiation is inferred from naming convention rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Paged' implies the intended use for multi-record retrieval, but there is no explicit statement of when to reach for this versus sapo_count_customers for totals or sapo_get_customer for a single record. Usage is left to inference from the verb and the sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_list_inventory_itemsList inventory itemsARead-onlyInspect
List inventory items (one per variant) by SKU/barcode search, variant or product ids. The id is what stock levels use as inventory_item_id. Paged. GET /admin/inventory_items.json.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Only these inventory item ids. | |
| page | No | Page number, from 1 (default 1). Pass the previous reply's next_page. | |
| limit | No | Results per page, 1-250 (default 50). | |
| query | No | Search by barcode or SKU. | |
| product_ids | No | Only these product ids. | |
| variant_ids | No | Only these variant ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds beyond that: results are paged, granularity is one item per variant, and the returned id is the key consumed by stock-level operations — meaningful cross-tool behavioral context not present 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short, front-loaded sentences with no filler; the key scoping facts lead. It is written in telegraphic fragments rather than a cohesive sentence, which is efficient but slightly clipped.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description covers pagination and result granularity, which is the essential return-shape information. It does not explain whether query combines with ids/product_ids/variant_ids (AND vs OR) or default ordering, leaving a real ambiguity for a read tool with four independent filter parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are self-documenting (ids, query, product_ids, variant_ids, page, limit with ranges and defaults). The description restates the filter modes at a high level but adds no syntax or combination semantics, so it sits at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list inventory items), plus a genuinely distinguishing detail: one record per variant, and the id is the inventory_item_id used by stock levels. That ties it conceptually to the inventory-level siblings, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The note that 'the id is what stock levels use as inventory_item_id' implies the natural next step (list/set inventory levels), so usage is inferable. However there is no explicit when-to-use, when-not, or named alternative such as sapo_list_inventory_levels vs this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_list_inventory_levelsList inventory levelsARead-onlyInspect
Stock per item and location: on_hand, available, committed, incoming, reserved. Filter by inventory item or location ids, or by a minimum/maximum available quantity. Sapo documents no paging for this list, so narrow it with ids. GET /admin/inventory_levels.json.
| Name | Required | Description | Default |
|---|---|---|---|
| location_ids | No | Only these location ids (see sapo_list_locations). | |
| available_max | No | Only levels with at most this much available. | |
| available_min | No | Only levels with at least this much available. | |
| inventory_item_ids | No | Only these inventory item ids (see sapo_list_inventory_items). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/openWorld/non-destructive, so the bar is lower, and the description still adds real value: the concrete returned metrics and the warning that there is no paging, which tells the agent the result set can be unbounded. It does not cover ordering or defaults, but the safety profile is fully handled by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no filler: returned fields first, then filtering, then the paging caveat plus endpoint. Every sentence carries distinct information and the most important constraint is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list with no output schema, the description covers what a row contains and the key risk of unpaged results. It stops short of saying what happens when no filters are supplied (full dump?) or how results are ordered, which are the remaining uncertainties for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four filters are already documented in the schema, including cross-references to sapo_list_locations and sapo_list_inventory_items. The description restates the filter options without adding syntax or format detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the specific resource (stock per item and location) and enumerates the returned fields (on_hand, available, committed, incoming, reserved). That distinguishes it cleanly from siblings like sapo_list_inventory_items, sapo_list_locations, and sapo_set_inventory_level.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the three filtering strategies (item ids, location ids, available min/max) and adds the operational rule to narrow with ids because the upstream API documents no paging. It gives clear usage context but never explicitly states when to prefer a sibling tool or what it is not for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_list_locationsList locationsARead-onlyInspect
List branches, stores and warehouses (id, name, address, whether they track stock). Use the ids for stock levels. Paged. GET /admin/locations.json.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, from 1 (default 1). Pass the previous reply's next_page. | |
| limit | No | Results per page, 1-250 (default 50). | |
| query | No | Search by name, code or phone. | |
| status | No | Branch status; Sapo spells the inactive value "expried". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/non-destructive, so the bar is lower; the description still adds the pagination behavior ('Paged'), the endpoint path, and the shape of each returned record (id, name, address, tracks stock) where no output schema exists. It omits default page size and whether inactive locations are included by default, which would have completed the picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, with the resource identity front-loaded before the downstream usage note and the pagination/endpoint details. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the returned fields and flags pagination, which an agent needs to chain calls. Minor gaps remain: no default page size and no statement about status filtering defaults, but nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter, including the enum with its quirky 'expried' spelling, is documented in the schema. The description adds only the bare note that results are paged, which the schema already covers, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('branches, stores and warehouses') plus the fields returned, which distinguishes it from inventory-focused siblings. It does not explicitly name sapo_list_inventory_levels, but the parenthetical output fields make the scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use the ids for stock levels' gives a concrete downstream usage that routes the agent toward the inventory-level tools after calling this one. There is no explicit when-not clause or naming of alternatives, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_list_ordersList ordersARead-onlyInspect
List orders with line items, customer, totals, payment and fulfillment status. Filter by status, tag, customer or dates. Paged: pass next_page as page. GET /admin/orders.json.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Only orders with this tag. | |
| page | No | Page number, from 1 (default 1). Pass the previous reply's next_page. | |
| limit | No | Results per page, 1-250 (default 50). | |
| query | No | Search text (order number, customer name, phone, email). | |
| status | No | Order status: open (Sapo default when omitted, so archived orders are left out), closed, or any (all orders). Pass any for date-range totals. | |
| customer_id | No | Only orders of this customer. | |
| created_on_max | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. | |
| created_on_min | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. | |
| modified_on_max | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. | |
| modified_on_min | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. | |
| financial_status | No | Payment status: authorized, pending, paid, refunded, voided, or any. Sapo default when omitted: authorized, pending and paid only (refunded and voided are left out). | |
| fulfillment_status | No | Fulfillment status (for example unfulfilled, fulfilled, partial). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=true), and the description adds genuinely non-obvious behavior: the default status filter silently excludes archived orders and the default financial_status silently drops refunded/voided orders, with the "pass any" workaround for date-range totals. Pagination handling is also mentioned. Missing only auth/rate-limit context and a note on result ordering or page-size limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler. The payload summary comes first, filters second, pagination and endpoint last — a clean front-loaded structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, no-output-schema list tool this is largely complete: it summarizes return fields (compensating for the missing output schema) and flags the two hidden default filters. It stops short of explaining result ordering, total/pagination metadata, or that filters combine as AND.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all twelve parameters are already documented with formats, defaults and bounds; baseline is 3. The description only restates filter categories and the page/next_page hint, adding little beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List orders") and previews the returned payload (line items, customer, totals, payment and fulfillment status), which distinguishes it from sapo_get_order (single order) and sapo_count_orders (counts). It never names the siblings explicitly, so an agent must infer the boundary from the verbs alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Filter by status, tag, customer or dates" implies the retrieval use case, but there is no explicit when-to-use / when-not statement and no pointer to sapo_get_order for single-record lookups or sapo_count_orders for totals. Usage is inferable rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_list_order_transactionsList order transactionsBRead-onlyInspect
The payment transactions recorded on one order. GET /admin/orders/{order_id}/transactions.json.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | Sapo order id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the underlying REST endpoint, which hints at the read-only, per-resource shape of the call, but it says nothing about pagination, ordering, or whether all transactions are returned in one response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, resource statement front-loaded before the endpoint reference. Nothing is wasted, though the bare endpoint citation contributes little beyond what a well-formed schema and annotations already imply.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with full annotation coverage this is close to sufficient, but for a list endpoint the absence of any hint about pagination or result volume leaves a real gap, especially with no output schema to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single, well-described order_id, so the schema already does the work. The endpoint template '{order_id}' in the description confirms the id scopes the transaction list to one order, but adds no format or constraint detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (payment transactions recorded on one order) and pins it to an endpoint, so the agent knows exactly what data is returned. It does not explicitly differentiate itself from siblings like sapo_get_order, though the resource noun is distinct enough that confusion is unlikely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer it should call this when it needs the transaction/payment history of a known order. There is no explicit when-to-use guidance, no statement about prerequisites (e.g., needing a valid order_id from sapo_list_orders), and no named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_list_price_rulesList price rulesBRead-onlyInspect
List discount price rules (percentage, fixed amount, fixed price) with validity dates and usage counts. Paged. GET /admin/price_rules.json.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, from 1 (default 1). Pass the previous reply's next_page. | |
| limit | No | Results per page, 1-250 (default 50). | |
| times_used | No | Only rules used exactly this many times. | |
| ends_on_max | No | Only rules that end on or before this date. | |
| ends_on_min | No | Only rules that end on or after this date. | |
| starts_on_max | No | Only rules that start on or before this date. | |
| starts_on_min | No | Only rules that start on or after this date. | |
| created_on_max | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. | |
| created_on_min | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered by structured data. The description adds that results are paged and discloses the endpoint (GET /admin/price_rules.json), but says nothing about response shape, ordering, or whether filters like times_used are exact vs. range.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences: what it lists, what each record carries, then pagination and the underlying endpoint. Nothing is redundant with the title and every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering safety, a fully described parameter schema, and no output schema, the description covers purpose and paging adequately. The only gap is that an agent gets no sense of the returned fields' shape or ordering, which matters slightly more because there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters (including the date-bounded filters and times_used) are already documented in the schema. The description only alludes to validity dates and usage counts, adding no filter syntax or semantics beyond the schema, which is the expected baseline here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb+resource ("List discount price rules") and enumerates the rule types and returned fields (percentage, fixed amount, fixed price, validity dates, usage counts), so an agent knows exactly what this returns. No sibling in the list covers price rules, so no explicit differentiation is required, but the description also does not position itself against the other list_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus alternatives, no prerequisites, and no mention of what the admin endpoint implies. "Paged" is the only usage-adjacent hint, and the actual paging workflow lives in the parameter schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_list_productsList productsARead-onlyInspect
List products with their variants, prices, SKUs and images. Filter by name, vendor, type, collection or created/modified dates. Paged: pass next_page as page. GET /admin/products.json.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Only these product ids. | |
| page | No | Page number, from 1 (default 1). Pass the previous reply's next_page. | |
| limit | No | Results per page, 1-250 (default 50). | |
| query | No | Search by product name. | |
| vendor | No | Exact vendor (brand) name. | |
| since_id | No | Only products with an id greater than this. | |
| product_type | No | Exact product type. | |
| collection_id | No | Only products in this collection (see sapo_list_custom_collections). | |
| created_on_max | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. | |
| created_on_min | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. | |
| modified_on_max | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. | |
| modified_on_min | No | ISO 8601 date or date-time (UTC unless it carries an offset), e.g. 2026-10-01 or 2026-10-01T00:00:00Z. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/non-destructive, so the description correctly focuses elsewhere: it discloses what each record includes and explains the paging loop (pass next_page as page). It does not clarify the response envelope (where next_page lives) despite there being no output schema, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: what is returned first, then how to narrow, then how to page. No filler and nothing important buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-param, all-optional read tool with full schema coverage and safety annotations, this covers purpose, filtering and pagination. It falls slightly short on sibling routing and on explaining the paginated response shape, which matters because no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter carries its own description, so baseline applies. The description names five filter families but adds no semantics beyond the schema, and it omits ids, since_id, page and limit entirely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource and enumerates the payload (variants, prices, SKUs, images) plus the available filters, which separates it from sapo_get_product (single id) and sapo_list_product_variants (variants only). An agent can tell what this returns without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage via the filter list and the paging instruction, and warns implicitly that page comes from a previous reply. But it never says when to prefer sapo_list_products over sapo_get_product, sapo_list_product_variants or sapo_count_products, and gives no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_list_product_variantsList product variantsBRead-onlyInspect
The variants (size, color, SKU, barcode, price) of one product. Paged. GET /admin/products/{product_id}/variants.json.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, from 1 (default 1). Pass the previous reply's next_page. | |
| limit | No | Results per page, 1-250 (default 50). | |
| product_id | Yes | Sapo product id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds that results are paged and cites the underlying endpoint, which is useful beyond the annotations, but it says nothing about behavior on an invalid product_id, empty results, or auth/rate-limit expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short fragments, front-loaded with the resource and its fields, then pagination, then endpoint. Nothing is padded, though the telegraphic style leaves it slightly under-written rather than over-written.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter read tool with full schema coverage and explicit annotations, this is nearly sufficient. With no output schema, the field list in the description usefully stands in for return-shape documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents page, limit (1-250, default 50) and product_id in detail. The description adds no additional parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource (the variants of one product) and enumerates the fields returned (size, color, SKU, barcode, price), which is more specific than the title alone. It does not explicitly contrast with sapo_get_product_variant (single variant) or sapo_list_products, so a reader must infer the list-vs-get distinction from the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this over sapo_get_product_variant or how it relates to sapo_get_product. The only usage signal is the embedded REST path and the required product_id, which implies 'fetch all variants for a known product' but never says so or names any alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_set_inventory_levelSet stock quantityADestructiveIdempotentInspect
WRITE: set the physical stock (on_hand) of one inventory item at one location to an exact quantity, with a reason. This OVERWRITES the current number and is recorded as a stock adjustment: read the level first (sapo_list_inventory_levels). PUT /admin/inventory_levels/set.json.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Why the stock changes (default: Sapo's own default). | |
| on_hand | Yes | Physical on-hand quantity to set (at most 3 decimals are kept). | |
| location_id | Yes | Location id (see sapo_list_locations). | |
| inventory_item_id | Yes | Inventory item id (see sapo_list_inventory_items). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, idempotentHint=true and readOnlyHint=false, and the description adds real context on top: the write OVERWRITES the current number, is logged as a stock adjustment, and the underlying endpoint is PUT /admin/inventory_levels/set.json. It does not discuss permission requirements or what happens to concurrent edits, keeping it below 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence leading with the WRITE marker, then the overwrite/adjustment caveat, then the prerequisite pointer, then the endpoint. Zero filler and no repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter mutation with full schema coverage, destructive/idempotent annotations and no output schema, this covers the essential context: absolute semantics, audit reason, overwrite risk, and read-first workflow. Only permission/auth and concurrency behavior are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: 'exact quantity' plus 'OVERWRITES' clarifies that on_hand is an absolute value rather than a delta, and 'with a reason' signals the optional reason parameter's role in the audit record.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (set), the exact resource (physical stock / on_hand of one inventory item at one location), and scope limits (one item, one location, exact quantity with a reason). An agent can immediately distinguish it from the read-only sibling sapo_list_inventory_levels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs the agent to read the level first via sapo_list_inventory_levels, which is a concrete prerequisite step naming an alternative tool. It lacks an explicit when-not-to-use statement (e.g. use a delta/adjustment endpoint for increments), so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sapo_update_orderUpdate order note or tagsADestructiveIdempotentInspect
WRITE: set the note and/or the tags of an order (Sapo only lets an order's items and quantities stay fixed after creation). The value REPLACES the existing note or tags: read the order first to keep what is there. PUT /admin/orders/{id}.json.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | New order note (replaces the old one; empty string clears it). | |
| tags | No | New tag list (replaces all tags; an empty list clears them). | |
| order_id | Yes | Sapo order id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, but the description supplies the detail the annotation cannot: exactly what is destroyed (the existing note or tags are REPLACED, not merged) and how to avoid it (read first). It also discloses the domain constraint that line items are immutable after creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with 'WRITE', each carrying distinct payload: operation, overwrite warning, endpoint. No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation with no output schema, the description covers operation, replacement semantics, the read-before-write precaution, and the immutability boundary. Nothing an agent needs to avoid data loss is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so 3 is the baseline; the description still adds value by framing note/tags as 'and/or' — clarifying that at least one of the two optional fields should be supplied — and reinforcing replace semantics. It doesn't cover value formats or limits beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (WRITE / set) and resource (an order's note and/or tags), plus the endpoint PUT /admin/orders/{id}.json. It also pins the scope by noting that items and quantities stay fixed, which separates it from any sibling in the list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit pre-call guidance: read the order first so existing values are not lost. It also implies an exclusion (items/quantities cannot be modified). It does not name the sibling to use for that read (sapo_get_order), which keeps it short of a 5.
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.
20 tool updates
- First observed
sapo_count_customers - First observed
sapo_count_orders - First observed
sapo_count_products - First observed
sapo_get_customer - First observed
sapo_get_order - First observed
sapo_get_product - First observed
sapo_get_product_variant - First observed
sapo_get_store - First observed
sapo_list_custom_collections - First observed
sapo_list_customers - First observed
sapo_list_inventory_items - First observed
sapo_list_inventory_levels - First observed
sapo_list_locations - First observed
sapo_list_order_transactions - First observed
sapo_list_orders - First observed
sapo_list_price_rules - First observed
sapo_list_product_variants - First observed
sapo_list_products - First observed
sapo_set_inventory_level - First observed
sapo_update_order
Related MCP Connectors
Read KiotViet products, customers, invoices, orders and stock; create customers and orders.
1Read Megaventory products, stock, orders and partners; create clients, sales and purchase orders.
Read Veeqo orders, products, stock, warehouses, customers and POs; add notes, tag, set stock.
Read Hiboutik products, stock, customers, sales and turnover; edit customers and sale comments.
311
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables querying products and stock, sales orders, contacts, invoices, payables/receivables, and creating contacts through the official ERP API.MIT
- FlicenseBqualityDmaintenanceManages Shopee shops via Open Platform API v2. Enables viewing shop info, products, orders, posting products, and updating prices and inventory.141-
- AlicenseNot gradedqualityDmaintenanceEnables read-only access to retail ERP data through the official output WebService, letting users query products, stock and inventory, customers and suppliers, sales movement and billing, orders, salespeople, and store information with date-window and store filters.1MIT
- AlicenseAqualityCmaintenanceGives Agent Studio agents read-only access to a merchant's stock, sales orders and delivery records, so they can check sellable availability across SKUs and warehouses before pitching, and pull carrier, AWB and delivery facts as evidence for disputes or "where is my order" questions. It handles OAuth, rate limiting, PII masking and pagination, and runs offline in demo mode.9MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.