medusa-mcp
You can run and analyze a Medusa v2 store through MCP clients with read/write tools, reports, prompts, resources, and interactive dashboards.
Read/analyze: store info, orders, customers, customer groups, products, catalog, inventory, promotions, price lists, and sales/customer/inventory reports.
Orders/fulfillment: create fulfillments/shipments, mark delivered, cancel fulfillments, update/complete/cancel orders, and edit order items.
Payments/returns: mark orders paid, capture/refund payments, create/receive returns.
Draft orders: create and convert draft orders.
Products/catalog: create/update/delete products, variants, prices, categories, collections, and product images.
Inventory: list stock and set/adjust stock levels.
Customers/groups: create/update customers and customer groups, delete groups.
Promotions/pricing: create/update/delete promotions, manage price lists, and run bulk price/stock/product updates with dry-run previews.
Generic API: call allowed
/admin/endpoints viamedusa_requestfor gaps like reservations, exchanges, tax rates.Extras: inline sales/restock dashboards, workflow prompts, attachable resources, destructive-action confirmations, audit logging, stdio local mode, and remote HTTP/OAuth mode.
Provides tools for interacting with the Medusa v2 Admin API, enabling access to orders, customers, products, inventory, and sales reports, plus scoped write actions such as fulfilling and shipping orders, completing or cancelling orders, updating or deleting products, setting variant prices, and restocking inventory.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@medusa-mcplist products that are running low on stock"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
medusa-mcp
π¨πΏ Δesky
An MCP server for the Medusa v2 Admin API. It lets Claude, ChatGPT or any MCP client run a Medusa store: orders, payments and refunds, returns, order edits, draft orders, products and catalog, inventory, customers, promotions and price lists β plus sales, customer and restock analytics with interactive dashboards right in the chat.
55 tools for day-to-day store management, and
medusa_requestfor any other Admin API endpointInteractive views (MCP Apps) β a sales dashboard and a restock planner render inline in Claude and ChatGPT
Prompts β ready-made workflows (store briefing, fulfillment, returns, restocking, monthly reportβ¦) as slash commands
Resources β orders, products and customers as attachable context, with autocompletion
Guard rails β previews (dry run) for bulk changes, confirmation dialogs for destructive actions, an audit log of every change
It runs in two modes:
stdio β locally for Claude Desktop, Claude Code and other MCP clients
Streamable HTTP + OAuth 2.1 β as a remote connector for Claude (web, desktop, mobile) and ChatGPT
It is listed in the MCP Registry as io.github.trhonpavel/medusa-mcp, and also ships as a Claude Code / Cowork plugin with skills and as a one-click Claude Desktop extension (.mcpb).
Tools
Read and analyze
Tool | What it does |
| regions and currencies, sales channels, stock locations, shipping options and profiles, return and refund reasons |
| orders by full-text, date range, customer or status; full detail by ID or order number ( |
| customers (also by group or e-mail), order history, total spent |
| customer groups |
| products by status, collection, category or tag; variants, options, prices, images, inventory items (by ID or handle) |
| categories (tree), collections, tags, product types |
| stock per location, |
| discount codes with conditions, usage and validity; sale and customer-group price lists |
| revenue, net revenue after refunds, AOV, units, customers β compared with the previous period or last year, day/week/month series, top products and variants, countries, discount codes, sales channels Β· interactive dashboard |
| new vs returning customers, repeat purchase rate, top customers, lapsed customers worth winning back |
| sales velocity vs stock: days of cover, out-of-stock / reorder-now / reorder-soon, suggested order quantities, slow movers Β· interactive restock planner |
Write (not registered with MEDUSA_READ_ONLY=true)
Area | Tools |
Fulfillment |
|
Orders |
|
Payments |
|
Returns |
|
Draft orders |
|
Products |
|
Variants |
|
Catalog |
|
Inventory |
|
Customers |
|
Promotions |
|
Price lists |
|
Bulk |
|
Generic
Tool | What it does |
| any Admin API endpoint ( |
Amounts are in major currency units (Medusa v2 does not store minor units). Plain dates (2026-09-01) are interpreted in REPORT_TIMEZONE (default UTC). Large reports send MCP progress notifications.
Fewer tools, less context: MEDUSA_TOOLSETS=orders,reports registers only those groups (orders, customers, products, catalog, inventory, pricing, promotions, reports, bulk, raw; get_store_info is always on).
Related MCP server: managed-agent-control-mcp
Beyond tools
Interactive views (MCP Apps). sales_report and inventory_forecast come with HTML views that clients supporting MCP Apps β Claude, ChatGPT, VS Code, Goose β render inline: KPI tiles with period-over-period changes, a revenue chart, top products, discount codes and countries; and a sortable restock table with status filters, adjustable lead time and a button that asks the assistant to draft a purchase order. The views follow the client's theme and language (Czech or English), switch periods by calling the tools themselves, and make no network requests of their own. Other clients get the same data as text.
Prompts. store_briefing, fulfill_orders, restock_plan, handle_return, customer_overview, monthly_report and plan_promotion β each walks the assistant through a whole workflow and asks before changing anything. Arguments autocomplete (order numbers, customer e-mails, months).
Resources. medusa://store, medusa://orders/{order}, medusa://products/{handle} and medusa://customers/{email} β attach an order or a product to the conversation (e.g. with @ in Claude Code); recent orders are listed and every template autocompletes.
Confirmations. Destructive actions β canceling, refunding, capturing, deleting, bulk changes and writes through medusa_request β ask the user directly through MCP elicitation with a plain-language summary ("Refund 249 CZK to the customer of order 1042?") when the client supports it (Claude Code). A declined dialog changes nothing. Turn it off with MEDUSA_CONFIRM_DESTRUCTIVE=false. The stateless remote connector cannot elicit, so there the client's own tool approval applies.
1. Create a Medusa API key
In the Medusa Admin go to Settings β Developer β Secret API Keys β Create. The key (sk_β¦) acts with the permissions of the user who created it, so consider a dedicated admin user that you can revoke independently.
2. Local use (stdio)
Claude Code / Cowork plugin
claude plugin marketplace add trhonpavel/medusa-mcp
claude plugin install medusa@medusa-mcpClaude Code asks for the backend URL and the API key when you enable the plugin (the key goes to the system keychain). Write tools stay off until you turn off Read-only in /config. Besides the server's prompts, the plugin adds two skills:
store-briefingβ sales vs the previous period, paid orders waiting to ship, what to restockfulfill-ordersβ fulfill paid orders and add tracking numbers, after you confirm the list
Claude Desktop extension
Download medusa-mcp-<version>.mcpb from the latest release and open it, or drag it to Settings β Extensions. Claude Desktop asks for the same settings and runs the server with its bundled Node.js. Build it yourself with npm run build:mcpb.
Manual configuration
Claude Desktop β claude_desktop_config.json:
{
"mcpServers": {
"medusa": {
"command": "npx",
"args": ["-y", "medusa-mcp", "stdio"],
"env": {
"MEDUSA_BACKEND_URL": "https://api.example.com",
"MEDUSA_API_KEY": "sk_...",
"MEDUSA_READ_ONLY": "true"
}
}
}
}Claude Code:
claude mcp add medusa \
-e MEDUSA_BACKEND_URL=https://api.example.com -e MEDUSA_API_KEY=sk_... \
-- npx -y medusa-mcp stdio3. Remote connector (HTTP + OAuth)
docker run -d --name medusa-mcp -p 127.0.0.1:3000:3000 -v medusa-mcp-data:/data \
-e MEDUSA_BACKEND_URL=https://api.example.com \
-e MEDUSA_API_KEY=sk_... \
-e PUBLIC_URL=https://mcp.example.com \
-e OWNER_PASSWORD="$(openssl rand -base64 24)" \
ghcr.io/trhonpavel/medusa-mcp:latestOr clone the repo, copy .env.example to .env and run docker compose up -d --build.
The server listens on 127.0.0.1:3000; expose it through a reverse proxy with TLS. Claude connects to remote connectors from Anthropic's servers, so the endpoint must be publicly reachable over HTTPS. Caddy example:
mcp.example.com {
reverse_proxy 127.0.0.1:3000
}Then add a custom connector in Claude with the URL https://mcp.example.com/mcp. Claude registers itself (Dynamic Client Registration), opens the consent page, you enter OWNER_PASSWORD and click Allow.
ChatGPT
In ChatGPT turn on developer mode in the settings, then create an app (connector) with the MCP server URL https://mcp.example.com/mcp and OAuth authentication. ChatGPT registers itself the same way and redirects to chatgpt.com, which is in the default ALLOWED_REDIRECT_HOSTS. The server returns the RFC 9207 iss parameter, so ChatGPT uses its stable callback URL.
Claude Code
Claude Code can use the same OAuth flow, or a static token if you set MCP_STATIC_TOKEN:
claude mcp add --transport http medusa https://mcp.example.com/mcp \
--header "Authorization: Bearer <MCP_STATIC_TOKEN>"Configuration
Variable | Required | Default | Description |
| yes | Medusa backend URL | |
| yes | Secret API key ( | |
|
| Register read and report tools only | |
|
| Register the generic | |
| all | Comma-separated tool groups to register, e.g. | |
|
| Ask for confirmation through MCP elicitation before destructive actions (clients that support it) | |
| File that receives every write tool call as a JSON line (they always go to stderr too) | ||
|
| IANA timezone for date filters and report buckets | |
|
| Timeout for Medusa requests | |
| HTTP | Public HTTPS origin of this server (without | |
| HTTP | Password required on the consent page | |
| Optional static bearer token | ||
|
| Hosts OAuth clients may use as redirect targets | |
|
| Express | |
|
| Listen address | |
|
| Where OAuth clients and token hashes are stored | |
|
| Token lifetimes in seconds |
Endpoints
Path | Purpose |
| MCP over Streamable HTTP (stateless), requires a bearer token |
| RFC 9728 protected resource metadata |
| RFC 8414 authorization server metadata |
| OAuth 2.1 (DCR, PKCE S256) |
| consent form (rate limited: 10 attempts / 15 min / IP) |
| health check |
Security model
The Medusa API key never leaves the server. Clients get their own short-lived tokens (1 h access, 30-day refresh with rotation).
Only SHA-256 hashes of tokens are stored, in
DATA_DIR/oauth-state.json(mode 600). Delete the file to sign out every client.Dynamic Client Registration only accepts redirect URIs on
ALLOWED_REDIRECT_HOSTS, so an arbitrary app cannot register its own callback and phish a token.Authorization codes are single-use, expire after 5 minutes, and PKCE S256 is mandatory.
The consent page sends
Content-Security-Policy: default-src 'none'andX-Frame-Options: DENY, and compares the password in constant time.Write tools are not marked
readOnlyHint, and tools that cancel, delete or move money carrydestructiveHint, so clients like Claude ask for approval before running them.medusa_requestonly reaches/admin/β¦paths, never writes toapi-keys,usersorinvites(so a prompt injection cannot mint new credentials), and can be disabled withMEDUSA_RAW_API=false.Every write tool call is logged as
[audit] {β¦}on stderr (docker logs) β time, tool, OAuth client (e.g. "Claude"), outcome and arguments β and toAUDIT_LOGwhen set.Destructive actions ask for confirmation through MCP elicitation when the client supports it; bulk tools and
edit_orderpreview by default and change nothing until called withdry_run: false.add_product_imagesdownloads only from public http(s) addresses: private, loopback and link-local targets are refused, also after redirects, so the server cannot be used to reach its own network.The interactive views are self-contained HTML (no external scripts or requests) and are rendered by the client in a sandboxed iframe.
Set
TRUST_PROXYto the number of reverse proxies in front of the server, otherwise rate limiting only sees the proxy's IP.
See SECURITY.md for reporting vulnerabilities.
Development
npm ci
npm run build # TypeScript + the MCP Apps views (dist/apps/*.html with the ext-apps runtime inlined)
npm test # build + tests against a mock Medusa (tools, prompts, resources, views and the full OAuth flow)
npm run smoke # read-only check against a real Medusa β prints response shapes only, no data
npm run dev # HTTP mode via tsxnpm run smoke needs MEDUSA_BACKEND_URL and MEDUSA_API_KEY. Its output contains only keys and types, so it is safe to paste into an issue.
License
Available Tools
48 toolscancel_fulfillmentCancel fulfillmentADestructive
Cancels a fulfillment that has not been shipped yet, so its items can be fulfilled again. Without 'fulfillment_id' it uses the only unshipped fulfillment.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | Order ID or order number | |
| fulfillment_id | No | ||
| notify_customer | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With destructiveHint=true, idempotentHint=false and readOnlyHint=false already declared, the description adds real behavioral value: it explains the downstream effect ('so its items can be fulfilled again') and the implicit default resolution when no id is supplied. It does not address non-idempotency or permission requirements, so it stops at a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste, and the operational constraint and default resolution are front-loaded where the agent reads them first.
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 destructive mutation with no output schema, the description covers the important ambiguities (preconditions and id resolution) and annotations carry the safety profile. The unexplained 'notify_customer' flag and the absence of any error/edge-case note (e.g., multiple unshipped fulfillments) keep it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% - 'order' is documented and 'fulfillment_id' is bare - so the description must compensate, and it does explain the fallback behavior of the optional 'fulfillment_id'. However, 'notify_customer' is left entirely unexplained in both the schema and the description, so the compensation is incomplete.
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 ('Cancels a fulfillment') plus the qualifying scope ('that has not been shipped yet'), which cleanly separates it from sibling tools like cancel_order or create_shipment without needing the schema opened.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives the applicability condition (unshipped fulfillment) and the fallback resolution rule when 'fulfillment_id' is omitted, which is genuine usage guidance. It stops short of naming an alternative tool or explicitly stating the when-not case (e.g., what to do instead for a shipped fulfillment), so it misses the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_orderCancel orderADestructiveIdempotent
CANCELS the order. Irreversible β get explicit confirmation from the user before calling. The order must not have active fulfillments.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | Order ID or order number |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds real value beyond that: irreversibility and the active-fulfillment precondition. It does not describe the failure mode when the precondition is violated or what the caller gets back.
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, front-loaded with the operation, then the confirmation requirement, then the precondition. Every clause carries information an agent needs.
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 destructive mutation, the annotations cover the safety profile and the description covers irreversibility, confirmation, and preconditions. Nothing needed to invoke it correctly 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 the single 'order' parameter is documented as 'Order ID or order number'. The description adds no syntax or format detail beyond the schema, so the baseline of 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 ('CANCELS the order') with no ambiguity, and no sibling tool competes for the cancel operation, so the agent can route to it directly.
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 an explicit call-time requirement ('get explicit confirmation from the user before calling') and a precondition ('must not have active fulfillments'), which is strong contextual guidance. It stops short of naming alternatives, but none exist among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_paymentCapture paymentADestructive
Captures an authorized payment (charges the customer). Without 'amount' captures the full remaining amount. Without 'payment_id' uses the only payment that is not fully captured.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | Order ID or order number | |
| amount | No | Major units; defaults to the full remaining amount | |
| payment_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is covered. The description adds genuine value by disclosing the money-moving effect and the two implicit-resolution rules (full remaining amount; sole uncaptured payment), which are not visible in the schema.
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, effect stated first, default-resolution rules second. No filler; 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?
For a three-parameter mutation with no output schema, the description covers the action, its preconditions, and the optional-argument behavior. It could say more about partial captures or error conditions (e.g., over-capture, non-idempotency consequences), but nothing essential for 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 67% and payment_id has no schema description, so the description compensates by explaining the 'only payment not fully captured' fallback; it also restates the amount default. It does not clarify accepted formats for order (ID vs number) beyond the schema, but overall adds real meaning.
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 ('Captures an authorized payment') and clarifies the effect in plain terms ('charges the customer'), which cleanly separates it from sibling refund_payment and mark_order_paid. An agent can identify the operation 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?
The phrase 'authorized payment' implies the precondition that a prior authorization must exist, and the fallback clauses describe behavior when optional args are omitted. However, there is no explicit statement of when to prefer this over refund_payment/cancel_order or what happens if the payment is not authorized.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_orderComplete orderCIdempotent
Marks the order as completed.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | Order ID or order number |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds nothing beyond restating the name: no state-transition rules (can a cancelled order be completed? does it require payment?), no side effects, no permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with no wasted words. It is appropriately sized, though its brevity reflects under-specification rather than disciplined conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation with a single well-documented parameter and annotations covering idempotency and safety, the description is minimally adequate. It omits the state-transition semantics an agent would need to call it correctly in edge cases (already-completed or cancelled orders).
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?
Only one parameter ('order') exists and the schema documents it fully at 100% coverage ('Order ID or order number'). Per the rubric, full schema coverage yields a baseline of 3, and the description adds no extra parameter meaning.
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 verb and resource ('Marks the order as completed'), so the operation is unambiguous. However, it does nothing to distinguish this from sibling mutations like cancel_order or create_fulfillment beyond the obvious wording of the name 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?
There is no guidance on when this tool should be used versus alternatives such as cancel_order, nor any prerequisite (e.g., order must be paid/shipped). The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_draft_orderConvert draft orderA
Turns a draft order into a regular order (reserves stock). Record the payment afterwards with mark_order_paid.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_order_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (not read-only, not idempotent, not destructive), and the description adds value beyond them by disclosing the 'reserves stock' side effect and the required payment follow-up. It does not state what happens on failure or whether the reservation is reversible.
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, action stated first, follow-up second. Every clause carries information and nothing is padded.
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 mutation with no output schema, the description covers the action, its side effect, and the next step. Missing only edge-case behavior (invalid/already-converted draft, error response), which is a small residual 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?
One parameter at 0% schema description coverage, so the description technically carries the burden, but it says nothing about draft_order_id. The name and string type are largely self-explanatory, so this is a minor gap rather than a blocking one.
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 ('turns a draft order into a regular order') so the agent knows exactly what mutation occurs. It does not, however, distinguish itself from the sibling complete_order, which an agent could plausibly confuse with this step.
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 second sentence supplies sequencing guidance by naming the follow-up tool ('Record the payment afterwards with mark_order_paid'), which tells the agent where this fits in the workflow. It still lacks an explicit when-not or a contrast against complete_order/cancel_order.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_draft_orderCreate draft orderA
Creates a draft order on behalf of a customer (phone or e-mail orders, B2B). Items by variant_id or SKU (of published products), optionally with a custom unit price. Shipping options are listed by get_store_info. Turn the draft into a real order with convert_draft_order.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Customer e-mail (required unless customer_id is given) | ||
| items | Yes | ||
| region_id | No | Defaults to the only region | |
| customer_id | No | ||
| promo_codes | No | ||
| billing_address | No | Postal address | |
| notify_customer | No | ||
| shipping_amount | No | Custom shipping price; defaults to the option's price | |
| shipping_address | No | Postal address | |
| shipping_option_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds the useful behavioral fact that items must belong to published products and that this only creates a draft rather than a real order, but says nothing about permissions, error behavior, or side effects like customer notification.
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 compact sentences, front-loaded with the purpose, then item semantics, then the follow-up step. No filler, though the parenthetical asides make it slightly dense.
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 10-parameter, nested-object creation tool with no output schema and only half the schema documented, the description covers the core (what it makes, how items are specified, how to finalize) but omits how the customer is identified, what region/promo/shipping parameters do, and what the tool returns. Adequate but with real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50% across 10 parameters, so the description must carry weight. It usefully explains item identification (variant_id or SKU of published products) and optional custom unit_price, but leaves email/customer_id, region_id, promo_codes, shipping_amount, and the address objects entirely to 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 ('Creates a draft order') plus the business context that scopes it (phone/e-mail orders, B2B). It also distinguishes itself from convert_draft_order by making clear this produces a draft, not a live order.
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 clear context for use (manual/phone/e-mail/B2B orders) and explicitly routes two dependencies: shipping options come from get_store_info and the draft is finalized with convert_draft_order. It does not state any when-not-to-use condition (e.g. don't use for storefront checkout flows), so it falls 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.
create_fulfillmentCreate fulfillmentA
Creates a fulfillment for an order. Without 'items' it fulfills all remaining unfulfilled quantities. Without 'location_id' it uses the only stock location, if there is exactly one.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | Specific line items; defaults to everything remaining | |
| order | Yes | Order ID or order number | |
| location_id | No | Stock location to ship from | |
| notify_customer | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-idempotent write (readOnlyHint=false, idempotentHint=false, non-destructive). The description adds genuinely useful behavioral context beyond them: the implicit bulk action of fulfilling all remaining quantities when items is omitted, and the single-location fallback. It does not disclose the customer-visible effect of notify_customer, which is the one notable 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 short sentences, each earning its place, with the core action front-loaded and the two conditional defaults following immediately.
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 non-idempotent mutation with no output schema, the description covers the essential default behaviors an agent must know before calling. Missing only the notify_customer side effect and the failure mode when no location_id is given and multiple locations exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and the description adds cross-parameter semantics the schema cannot express: the default expansion of items to 'everything remaining' and the conditional resolution of location_id. Only notify_customer's customer-facing effect remains unexplained.
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: 'Creates a fulfillment for an order.' An agent can distinguish it from order-mutating siblings like complete_order and cancel_order, though it doesn't explicitly separate itself from the closest sibling create_shipment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives conditional default behavior ('Without items...', 'Without location_id...') which implies when the optional parameters can be omitted, but it never states when to prefer this tool over create_shipment or gives any prerequisites/exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_productCreate productA
Creates a product with its variants and prices. For a simple product without options pass just 'prices' (and optionally 'sku', 'stock'). For variants define 'options' (e.g. Size: S, M, L) and one variant per combination. Defaults: status draft, the store's default sales channel, the default shipping profile. Category and collection IDs come from list_catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | No | Simple product: SKU of its single variant | |
| tags | No | Tag values; missing tags are created | |
| stock | No | Simple product: initial stock | |
| title | Yes | ||
| handle | No | URL slug; derived from the title when omitted | |
| images | No | Image URLs | |
| prices | No | Simple product: prices of its single variant | |
| status | No | draft | |
| weight | No | Grams | |
| options | No | E.g. [{ title: 'Size', values: ['S','M','L'] }] | |
| metadata | No | ||
| subtitle | No | ||
| variants | No | ||
| thumbnail | No | Image URL | |
| description | No | ||
| location_id | No | Stock location for initial stock; defaults to the only one | |
| category_ids | No | ||
| discountable | No | ||
| collection_id | No | ||
| sales_channel_ids | No | ||
| shipping_profile_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false, idempotent=false, and openWorld=true. The description adds useful default behavior (draft status, default sales channel, default shipping profile) but does not discuss permissions, duplicate-creation risk, or return behavior 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four efficient sentences, front-loaded with the purpose, then mode guidance, defaults, and ID sourcing. Nothing is repetitive or 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 21-parameter tool with nested objects and no output schema, the description covers the main creation modes and defaults but omits return values, permission needs, and many optional parameter details. It is adequate for common cases but leaves clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 48% schema description coverage, the description compensates by explaining core relationships: prices for a simple product, options plus one variant per combination, and the default status/sales channel/shipping profile. It still leaves many optional parameters unexplained, but it adds real meaning for the main creation paths.
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 ('Creates') and resource ('a product with its variants and prices'). It also distinguishes two creation modes (simple vs variant), which sets it apart from sibling tools like create_variant and update_product.
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?
Clearly explains how to use the tool for a simple product versus a variant product, and points to list_catalog for category/collection IDs. It does not name alternatives or when not to use it, but the in-tool guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_promotionCreate promotionA
Creates a discount code (or an automatic promotion): percentage or fixed amount off the order, specific products, or shipping. Free shipping = applies_to 'shipping', percentage 100. Restricting to products/categories/collections makes it apply to those items only. Plain dates are interpreted in the reporting timezone.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The code customers enter, e.g. AUTUMN20 | |
| value | Yes | Percent (20 = 20 %) or amount in major units | |
| status | No | active | |
| ends_at | No | Inclusive, e.g. 2026-11-30 | |
| starts_at | No | E.g. 2026-11-01 | |
| allocation | No | 'across' (default) splits the discount over the eligible items; 'each' applies it to every unit up to max_quantity | |
| applies_to | No | Defaults to 'items' when restricted to products/categories/collections, otherwise 'order' | |
| extra_rules | No | Advanced eligibility conditions | |
| product_ids | No | ||
| usage_limit | No | Total number of uses (not for automatic promotions) | |
| category_ids | No | ||
| is_automatic | No | Applies without entering the code | |
| max_quantity | No | Required with allocation 'each' | |
| currency_code | No | Required for a fixed amount, e.g. czk | |
| discount_type | Yes | ||
| collection_ids | No | ||
| customer_group_ids | No | Only for customers in these groups |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose write/non-idempotent/open-world behavior, so the bar is lower. The description adds genuinely useful context the annotations don't: plain dates are interpreted in the reporting timezone, and restriction arrays change the discount's scope. It stops short of covering duplicate-code handling or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then four tight sentences covering the main configuration axes. Dense but every clause carries information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter write tool with no output schema, the description covers the high-risk semantics (scope, dates/timezone, free-shipping, automatic vs code). Remaining gaps are advanced fields like extra_rules, which the schema documents adequately.
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 71%, and the description compensates on the ambiguous parts: it explains the applies_to default logic, the free-shipping recipe, and the timezone interpretation of starts_at/ends_at, none of which appear in the schema. Parameters like extra_rules and customer_group_ids are left to the schema, so it isn't exhaustive.
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 ('Creates a discount code (or an automatic promotion)') and immediately enumerates the discount forms it produces (percentage/fixed, order/products/shipping). This clearly distinguishes it from the sibling list_promotions, update_promotion and delete_promotion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete configuration recipes ('Free shipping = applies_to "shipping", percentage 100') and states that restricting to products/categories/collections scopes the discount, which implies when to use each mode. However, it never names an alternative tool or an explicit when-not condition, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_returnCreate returnA
Requests a return of order items (the customer is sending them back). Without 'items' returns every shipped item. When the parcel arrives, call receive_return. Refund the money separately with refund_payment. Return reasons are listed by get_store_info.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Internal note | |
| items | No | Defaults to every shipped item | |
| order | Yes | Order ID or order number | |
| location_id | No | Where the goods return to; defaults to the only stock location | |
| notify_customer | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this is a non-destructive, non-idempotent, open-world write. The description reinforces the two-phase workflow but adds little about behavior beyond what the schema states (default to all shipped items). It omits any warning that repeated calls are not idempotent, leaving a behavioral 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?
Four short sentences, each earning its place, with the core action front-loaded and the routing hints following. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, no-output-schema tool, the description covers the action, the default scope, and the two follow-up tools well. It leaves out the response shape and any auth/permission requirements, but nothing essential to invoking it correctly 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 high (80%), so the baseline is 3, but the description adds real value by telling the agent that 'reason_id' values come from get_store_info and that 'items' defaults to every shipped item, tying parameters to their source of truth.
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 action and resource ('Requests a return of order items') and clarifies direction ('the customer is sending them back'). It explicitly distinguishes itself from siblings receive_return and refund_payment, so an agent can route without opening schemas.
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 when-to-use and when-to-use-something-else rules: call receive_return when the parcel arrives, refund separately via refund_payment. It also notes that omitting 'items' returns every shipped item, so the agent knows the default scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_shipmentMark as shippedB
Marks a fulfillment as shipped and attaches a tracking number. Without 'fulfillment_id' it uses the only unshipped fulfillment.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | Order ID or order number | |
| tracking_url | No | ||
| fulfillment_id | No | ||
| notify_customer | No | ||
| tracking_number | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true). The description adds the non-obvious fallback behavior when fulfillment_id is omitted, which is genuine extra context, but it says nothing about notify_customer's effect, validation failures, or what happens when multiple unshipped fulfillments exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler; the primary purpose is front-loaded and the fallback rule follows immediately. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with 20% schema coverage and no output schema, the description covers purpose and one default rule but omits the role of the other three optional parameters and any error/precondition behavior. It is adequate to identify the tool but thin for calling it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20% and 5 parameters exist, so the description must compensate and largely does not. Only fulfillment_id gets any explanation; tracking_number, tracking_url, and notify_customer (default true) are left entirely undocumented, so the agent must guess whether they are required or what they control.
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 ('Marks a fulfillment as shipped') plus the side effect (attaches a tracking number), which is enough to distinguish it from siblings like create_fulfillment and complete_order. It stops short of explicitly naming those siblings, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description adds one useful conditional rule ('Without fulfillment_id it uses the only unshipped fulfillment'), which is closer to behavioral context than usage guidance. It never says when to prefer this over create_fulfillment or complete_order, nor any prerequisite for shipping, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_variantCreate variantA
Adds a variant to an existing product, e.g. a new size. 'options' must name every product option; new option values are added automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| ean | No | ||
| sku | No | ||
| upc | No | ||
| stock | No | Initial stocked quantity at location_id (or the only location) | |
| title | No | Defaults to the option values, e.g. 'M / Red' | |
| prices | Yes | ||
| weight | No | Grams | |
| barcode | No | ||
| options | No | Option title -> value, e.g. { Size: 'M', Color: 'Red' } | |
| product_id | Yes | ||
| location_id | No | Stock location for initial stock; defaults to the only one | |
| allow_backorder | No | Allow selling when out of stock | |
| manage_inventory | No | Track stock (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, openWorld=true, idempotent=false and destructive=false, so the safety profile is covered. The description adds genuinely new behavioral information beyond them: that 'options' must name every product option and that unknown option values are created automatically as a side effect.
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 tight sentences with zero filler; the core action comes first and the non-obvious constraint about 'options' follows immediately. 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?
For a 13-parameter creation tool with nested objects, no output schema and openWorld=true, the description covers only the options mechanic. It omits how the required 'prices' and 'stock'/'location_id' pair behave and gives no sense of the created resource, leaving notable gaps for such a wide 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 coverage is 54%, so roughly half the 13 parameters are undocumented by the schema. The description compensates for the most important one by explaining 'options' semantics ('must name every product option'), which the schema does not say, but says nothing about the required 'prices' array, stock/location_id interaction, or the identifier fields.
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 ('Adds a variant to an existing product') and adds a concrete example ('e.g. a new size'), so the agent knows exactly what is created. It doesn't explicitly contrast with siblings like update_variant or create_product, so sibling differentiation is only implied by 'existing product'.
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 phrase 'to an existing product' implies a prerequisite (the product must already exist), which is useful context. However, there is no explicit guidance on when to use this over create_product (new product with variants) or update_variant, and no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_categoryDelete categoryADestructiveIdempotent
DELETES a product category (products stay, they just lose the category). Confirm with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| category_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuine value beyond that by disclosing the blast radius (products are retained, only the category association is removed) and mandating user confirmation, though it omits irreversibility and failure behavior for a bad or missing category_id.
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 destructive action and immediately followed by the side effect and the confirmation requirement. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation with annotations covering safety and no output schema, the description supplies the essential effect and the user-confirmation rule. Only the parameter's expected value and error conditions are missing, which is a modest 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 0% and there is one required parameter, so the description carries the burden of explaining category_id. It says nothing about the identifier's format, source (e.g. from list_catalog or save_category), or behavior on an unknown id, leaving the sole parameter undocumented in both places.
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 (DELETES) and resource (product category), and the parenthetical clarifies the non-cascading effect, which meaningfully separates it from siblings like delete_product and delete_collection. It does not name an alternative tool directly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Confirm with the user first" is a process prerequisite, not selection guidance. It never says when to delete a category versus e.g. reassigning products or using save_category to edit, so usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_collectionDelete collectionADestructiveIdempotent
DELETES a collection (products stay, they just leave the collection). Confirm with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| collection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true. The description adds real value beyond them by disclosing the non-cascading effect (products survive, only membership is removed) and mandating user confirmation β both are behavioral facts the annotations cannot convey.
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 action and its side effect, then the safety instruction. No filler; the capitalized DELETES signals the destructive nature immediately.
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 destructive tool with annotations covering the safety profile and no output schema, the description covers action, side effect, and confirmation requirement. The only gap is guidance on where collection_id comes from.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (collection_id) is required and its name is self-explanatory, but schema description coverage is 0%, so nothing explains the identifier's source or format. The description implies which collection is targeted but adds no syntax or lookup detail.
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 (DELETES) and resource (collection) and disambiguates the semantics with the parenthetical that products are not deleted, only unlinked β which matters given delete_product and delete_category siblings. It does not explicitly name an alternative tool, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Confirm with the user first" gives an explicit behavioral precondition, which is useful usage guidance. However, there is no when-to-use vs when-not guidance and no reference to alternative siblings, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_customer_groupDelete customer groupADestructiveIdempotent
DELETES a customer group (the customers stay). Price lists and promotions targeting it stop applying. Confirm with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| group_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds real value beyond them: it discloses the cascade effects (price lists and promotions targeting the group stop applying) and explicitly states the non-obvious side effect that member customers are preserved.
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 clauses, each load-bearing: the action, the non-destructive side effect, and the cascade consequence, with the confirmation rule last. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with no output schema, the description covers action, side effects, and the required user-confirmation step. The only gap is that the group_id parameter is left entirely undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and group_id carries no format, ID-prefix, or sourcing guidance in either the schema or the description. With one undocumented parameter and a low coverage signal, the description should have compensated and does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('DELETES a customer group') and immediately clarifies scope with '(the customers stay)', which separates it from sibling group tools like save_customer_group and list_customer_groups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one actionable usage rule β 'Confirm with the user first' β which is meaningful for a destructive tool, but never says when deletion is preferred over alternatives (e.g., leaving the group, or using save_customer_group to modify it) or what prerequisites exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_price_listDelete price listADestructiveIdempotent
DELETES a price list β its prices stop applying immediately. Confirm with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| price_list_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds genuine business consequence β 'its prices stop applying immediately' β which is not derivable from structured fields and is the key risk an agent must convey to a user. It stops short of describing failure behavior on a missing/invalid ID.
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 clauses, front-loaded with the verb and the consequence before the caution. No filler; the only soft cost is the all-caps emphasis, which is stylistic rather than wasted length.
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 destructive tool with no output schema, the description covers the action, the immediate effect, and a confirmation requirement, while annotations cover reversibility and safety. Missing only edge-case behavior (what happens if the price_list_id does not exist).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden and mentions no parameter at all. The single parameter is a self-explanatory identifier (price_list_id), which limits the damage, but the description adds no semantics or format guidance beyond the name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb in caps plus exact resource: it deletes a price list. Among siblings like delete_product, delete_category, delete_collection and delete_variant, the resource noun alone pins down which entity is affected, so an agent can select it 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?
'Confirm with the user first' is a safety caution, not usage guidance. Nothing tells the agent when to prefer this over save_price_list, list_price_lists, or other deletion tools, nor what preconditions the target must satisfy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_productDelete productADestructiveIdempotent
DELETES the product with all its variants. Irreversible β get explicit confirmation from the user before calling. 'confirm_title' must match the product title exactly. By default the inventory items of its variants are deleted too (only those with nothing reserved).
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | ||
| confirm_title | Yes | The exact product title, as a safeguard against deleting the wrong product | |
| delete_inventory_items | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description adds substantially: the irreversible nature, the cascade to all variants, and the non-obvious caveat that inventory items are only deleted when nothing is reserved. That is exactly the behavioral context an agent cannot get from the structured fields.
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, front-loaded with the destructive action and the confirmation requirement; every clause carries information with no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema, the description covers confirmation, irreversibility, and cascade semantics. It omits what happens when confirm_title does not match (error vs. silent refusal) and whether the inventory caveat can be overridden, but the essentials are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, so the description must compensate. It does explain the confirm_title safeguard and the default behavior of delete_inventory_items, but product_id is undocumented in both places and the exactness requirement for confirm_title largely repeats the schema text. Adequate but with a real gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (DELETES) and resource (product with all its variants), and the scope of the cascade is included. This clearly separates it from update_product among the siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs the agent to obtain user confirmation before calling and explains the confirm_title safeguard condition, which is real usage guidance. It does not name update_product as the non-destructive alternative, so it stops short of full when-not-to-use routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_promotionDelete promotionADestructiveIdempotent
DELETES a promotion β the code stops working. To pause it, prefer update_promotion with status 'inactive'. Confirm with the user first. A campaign created for its dates (named after the code) is deleted too.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | ||
| promotion_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety bar is pre-set; the description goes beyond them by disclosing the cascade behavior ('A campaign created for its dates ... is deleted too') and the human-confirmation requirement. That is exactly the kind of consequence detail annotations cannot express.
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 sentences, each load-bearing: effect, safer alternative, human gate, side effect. The destructive consequence is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, it covers impact, cascading deletion, and the confirmation requirement well. The only real hole is the ambiguity between code and promotion_id, which an agent calling this tool could get wrong.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for two parameters (code, promotion_id) and neither is marked required, so the description must carry the load. It only alludes to 'the code' as the identifying handle and never explains what promotion_id is, whether one or both must be supplied, or how they interact.
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 a specific verb + resource ('DELETES a promotion') and immediately clarifies the operational consequence ('the code stops working'), which distinguishes it from the sibling update_promotion. An agent can tell exactly what this does 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?
Explicitly routes the alternative case: 'To pause it, prefer update_promotion with status inactive', and adds a procedural prerequisite ('Confirm with the user first'). Both when-to-use and when-not-to-use are stated, not inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_variantDelete variantADestructiveIdempotent
DELETES one variant of a product. Irreversible β confirm with the user first. 'confirm' must equal the variant's SKU (or its title when it has no SKU). By default its inventory item is deleted too (only when nothing is reserved).
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | The variant's exact SKU, or title when it has no SKU | |
| product_id | Yes | ||
| variant_id | Yes | ||
| delete_inventory_items | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description goes well beyond them: it states the operation is irreversible, discloses a side effect (the inventory item is deleted by default) plus the condition that limits it (only when nothing is reserved), and defines the confirmation contract. This is exactly the extra behavioral context annotations cannot carry.
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, zero filler, and the destructive verb and irreversibility are front-loaded before the parameter mechanics. Every sentence carries distinct information (scope, safety, confirm contract, side effect).
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 destructive single-resource delete with no output schema, the description covers what an agent actually needs: irreversibility, the human-confirmation requirement, the exact confirm value, and the conditional inventory side effect. The annotations handle the safety profile, so no material gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25% (only 'confirm' is documented), so the description must compensate. It restates the confirm semantics (SKU, or title when no SKU) and, more usefully, explains the meaning of the undocumented delete_inventory_items flag: on by default, deleting the inventory item only when nothing is reserved. product_id and variant_id remain unexplained, keeping this short of a 5.
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 first line gives a specific verb and a precisely scoped resource: 'DELETES one variant of a product.' The singular scope ('one variant') cleanly separates it from delete_product, delete_category, delete_collection, and delete_promotion in the sibling set, so an agent can route by resource without further inference.
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 provides one concrete operational rule ('confirm with the user first'), which is real usage guidance for a destructive call. However, it never names an alternative (e.g. update_variant or setting status instead of deleting) or states a when-not-to-use condition, so the routing guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_customerGet customerARead-only
Customer detail with addresses, groups and order history (count, total spent, recent orders).
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | Customer ID (cus_β¦) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real value by disclosing what is returned (addresses, groups, counts, total spent, recent orders), which is needed since there is no output schema.
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 tight sentence with no filler, and the resource is front-loaded. It is appropriately sized for a simple single-parameter read, though the parenthetical enumeration is slightly dense.
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 compensates by naming the return contents, and annotations cover the safety profile. For a one-parameter read tool it is nearly complete, missing only a note about error/not-found behavior.
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 single customer_id parameter (with the 'cus_β¦' format hint) is fully documented in the schema. The description adds no additional parameter semantics beyond that, making the baseline 3 appropriate.
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 (get customer) and enumerates the detail returned: addresses, groups, order history. It implicitly distinguishes itself from the sibling list_customers by being a single-customer detail call, but never names that 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?
Usage is only implied: 'detail' vs the sibling 'list_customers' suggests this is for one customer rather than enumeration. No explicit when-to-use, when-not-to-use, or alternative is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_orderGet orderARead-only
Full order detail β line items, addresses, payments (with captures and refunds), fulfillments, tracking numbers and returns. Accepts an order ID (order_β¦) or the order number.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | Order ID (order_β¦) or order number, e.g. 1042 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description goes further by disclosing the returned payload (payments including captures and refunds, fulfillments, tracking numbers, returns), which is real behavioral value given there is no output schema.
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 tight sentences with no filler: the scope and returned contents come first, the accepted identifier formats second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully compensates by enumerating what comes back, and the single required parameter is fully documented in the schema. Only minor gaps remain, such as what happens for an unknown or deleted order.
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 states the parameter accepts an order ID (order_β¦) or order number, so the description's identical statement adds nothing beyond structured data. 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 gives a specific verb+resource ('Full order detail') and enumerates the payload contents (line items, addresses, payments, fulfillments, tracking, returns), which makes the tool's scope unambiguous. It does not name the sibling list_orders as the contrasting option, so sibling differentiation is only implied by the word 'Full'.
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: fetch the complete record for a single order when you already have its ID or number. There is no explicit statement of when to prefer this over list_orders or update_order, and no preconditions or error behavior (e.g., order not found) are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productGet productBRead-only
Product detail β variants, prices in all currencies, linked inventory items, options, categories, collection, tags, images and sales channels.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | Product ID (prod_β¦) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description usefully adds that the response is a full detail payload enumerating related entities, but says nothing about not-found/error behavior or how the linked entities are shaped.
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 dense sentence, front-loaded with the resource name followed by the payload contents; no filler. The long field list is justified since there is no output schema, though it reads as a comma dump rather than structured 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's enumeration of returned fields is the only source of return-value information and it covers the main ones. Single-parameter tool with annotations covering safety, so little else is needed, though routing guidance against list_products is 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 description coverage is 100% and there is a single required product_id with its format documented in the schema, so the baseline of 3 applies. The description adds no further meaning about the identifier beyond what the schema provides.
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 ('Product detail') and then enumerates the data it returns: variants, prices, inventory items, options, categories, collection, tags, images, sales channels. That clearly separates it from list_products and update_product, though no sibling is named 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 description gives no when-to-use guidance, no prerequisites, and never mentions the alternative siblings (list_products for browsing, update_product for changes). The detail-fetch use case is only inferable from the name and the field list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_store_infoStore overviewARead-only
Returns regions (currencies), sales channels, stock locations, shipping options and profiles, and return/refund reasons. A good first call to learn the IDs other tools need.
| 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 and openWorldHint=false, so safety is covered. The description adds genuine context beyond that by enumerating the payload categories returned, which is valuable since there is no output schema. It stops short of detailing structure or shape, keeping it at a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The return contents come first and the usage hint second, which is the right front-loading for a discovery tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description carries the burden of describing return values and does so by listing each category. Combined with annotations that cover the safety profile, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is nothing to document and the baseline of 4 applies. The description correctly implies a zero-argument, whole-store lookup.
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 ('Returns') and enumerates the exact resource categories (regions/currencies, sales channels, stock locations, shipping options/profiles, return/refund reasons). No sibling tool in the list exposes store configuration, so an agent can immediately distinguish this from the order/customer/product CRUD 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?
It states clear usage context: 'A good first call to learn the IDs other tools need,' which tells the agent to invoke this up front for ID discovery. It does not name any exclusion or alternative, but for a read-only metadata tool there is no meaningful competing sibling to route away from.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_catalogCatalog structureBRead-only
Product categories (with parent, so the tree can be rebuilt), collections, tags and product types β with IDs for other tools.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Full-text filter applied to every section |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description usefully adds that categories carry their parent so the tree can be rebuilt, but says nothing about pagination, result size, or what happens when a section is empty.
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 tightly packed sentence that leads with the returned resources and uses the parenthetical only to justify why parent data matters. No filler, though the four-resource list plus aside is slightly dense.
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 does much of the work by naming the returned entity types and their IDs, which is good. However, it omits the existence of the text filter and any indication of result shape or volume, leaving gaps for a catalog-listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single 'q' parameter (full-text filter applied to every section) is already fully documented. The description adds no extra meaning about filtering behavior, 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 enumerates the concrete resources returned (product categories, collections, tags, product types), which clearly separates it from siblings like list_products or list_customers. The retrieval verb itself is only implied by the tool name, but the resource scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'with IDs for other tools' implies the intended workflow (fetch IDs to feed save_category, delete_category, save_collection, etc.), but there is no explicit when-to-use or when-not-to-use statement, nor any mention of an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_customer_groupsList customer groupsCRead-only
Customer groups (e.g. B2B, VIP) β used by price lists and promotions.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | ||
| limit | No | Number of records (max 200) | |
| offset | No | Records to skip (pagination) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds only a domain definition and does not disclose pagination behavior, default result size, filtering behavior, or any permission constraints 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler. It is front-loaded with the entity definition, though the sentence is so minimal that it omits the tool's action entirely.
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 list tool with q, limit, and offset parameters and no output schema, the description is missing the core action, filtering semantics, and pagination context. The annotations cover read-only safety, but the description does not give an agent enough to invoke or interpret results confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, with the q search parameter undocumented in the schema. The description adds no meaning for q, limit, or offset, so it does not compensate for the coverage gap. An agent gets no help understanding what q searches or how pagination behaves.
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 defines what a customer group is (e.g. B2B, VIP) but never states the tool's action. It does not say it lists or retrieves customer groups, and it does not distinguish this tool from save_customer_group or delete_customer_group. The name and title carry the actual purpose, so the description itself is largely tautological domain context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of alternatives such as list_customers or save_customer_group. The phrase 'used by price lists and promotions' describes the entity's domain role, not when an agent should call this listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_customersList customersBRead-only
Searches customers by name, email or company, optionally within a customer group.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Full-text search β name, email, company | |
| No | |||
| limit | No | Number of records (max 200) | |
| offset | No | Records to skip (pagination) | |
| group_id | No | Only members of this customer group | |
| has_account | No | true = registered, false = guests |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered and the bar is lower. The description adds the scoping constraint (name/email/company, optional group) but says nothing about result caps, pagination behavior, or what happens when no filters are supplied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the primary search capability front-loaded. Nothing is wasted, though it is short enough that the missing usage guidance reads as omission rather than brevity.
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 6-parameter read-only list tool with no output schema, the description covers the search intent but leaves pagination, the has_account filter, and default result behavior unaddressed. Minimum viable, with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83%, so the schema already documents q, limit, offset, group_id and has_account. The description restates the q/group_id semantics but adds no format or interaction detail (e.g., whether email overrides q, or that has_account is a guest/registered switch).
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 verb (searches) and resource (customers) plus the searchable fields, so an agent can tell it apart from get_customer's single-record lookup. It does not explicitly say it is the list/browse counterpart, but the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Optionally within a customer group' hints at the group_id filter but there is no when-to-use guidance, no mention of get_customer for single-record lookup, and no explanation of how the multiple filter parameters combine.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_inventoryInventory levelsBRead-only
Inventory items with stock per location (stocked, reserved, available). With low_stock_threshold returns only items at or below the threshold.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Full-text search β title, SKU | |
| sku | No | Exact SKU | |
| limit | No | Number of records (max 200) | |
| offset | No | Records to skip (pagination) | |
| location_id | No | Only this stock location | |
| low_stock_threshold | No | Only return items whose available quantity is less than or equal to this value |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds useful behavioral detail by enumerating the returned quantity fields (stocked, reserved, available) and clarifying that the threshold filters rather than sorts, but says nothing about pagination defaults or result limits beyond what the schema states.
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 tight sentences, front-loaded with what the tool returns before the optional filter modifier. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema and fully documented parameters, this covers what an agent needs: the payload shape and the one non-obvious filter. Missing only pagination/ordering guidance, which the schema partially implies via limit/offset.
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 already documented, including that low_stock_threshold compares against available quantity β which the description simply restates. Baseline 3 for high coverage with no meaningful added meaning.
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 resource (inventory items with per-location stocked/reserved/available quantities) and a filtering behavior, so an agent knows exactly what data comes back. It stops short of an explicit 'list' verb and never distinguishes itself from list_products, a close sibling in the same catalog.
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 list_products or get_product, and no prerequisites or exclusions. The only usage signal is implicit in the low_stock_threshold sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ordersList ordersARead-only
Lists orders, newest first. Filters: full-text, date range (YYYY-MM-DD in the reporting timezone), customer, order/payment/fulfillment status.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Full-text search β order number, email, nameβ¦ | |
| limit | No | Number of records (max 200) | |
| offset | No | Records to skip (pagination) | |
| status | No | Order status | |
| created_to | No | To date (inclusive), e.g. 2026-09-30 | |
| customer_id | No | ||
| created_from | No | From date, e.g. 2026-09-01 | |
| payment_status | No | ||
| fulfillment_status | No | E.g. ['not_fulfilled'] = waiting to be fulfilled |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuinely new behavioral context: results are ordered newest-first, and date filter inputs are YYYY-MM-DD interpreted in the reporting timezone β neither of which the schema states (created_from/created_to say only 'From date, e.g. ...'). It stops short of describing result size or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The core behavior and sort order come first, then the filter list β exactly the order an agent needs them.
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 9-parameter, zero-required read tool with no output schema, the description covers ordering, date format/timezone, and filter categories. It leaves default behavior when no filters are supplied and result-set/pagination implications of limit/offset to the schema, 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?
Schema coverage is 78%, and the description fills the most important gaps: it supplies the timezone semantics for the date range parameters and confirms that 'customer' maps to the otherwise undocumented customer_id field. It also groups status vs payment_status vs fulfillment_status for the reader, though it adds no enum values 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 ('Lists orders') plus the sort order ('newest first') and the full set of filter dimensions. The list-vs-get distinction against the sibling get_order is implied rather than named, and no sibling is explicitly referenced, so it falls short of the top band.
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 enumeration of available filters implies the browsing/search use case, but there is no explicit when-to-use guidance and no mention of the closest alternative, get_order, for retrieving a single order. Usage is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_price_listsList price listsBRead-only
Price lists β sales (temporary discounted prices) and overrides (e.g. B2B prices for a customer group). With price_list_id returns that list including all its prices.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | ||
| limit | No | Number of records (max 200) | |
| offset | No | Records to skip (pagination) | |
| status | No | ||
| price_list_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful domain context (what 'sales' and 'override' price lists mean) and notes that supplying price_list_id returns the list with all its prices, but it says nothing about pagination behavior, default result counts, or ordering despite limit/offset being present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the domain definitions are front-loaded before the price_list_id behavior. It is economically sized for the information it carries, though the parenthetical example is slightly verbose.
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?
There is no output schema, so the description carries return-shape burden; it partially meets this by noting that price_list_id returns the list with all its prices. But the default listing response, q/status filtering, and pagination semantics are unaddressed, leaving gaps for a 5-parameter listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 40%: limit and offset are documented in the schema itself, but q and status have no description anywhere. The description explains price_list_id's dual role (filter vs. single-fetch), which is real added value, but it leaves q and status semantics entirely unexplained. Partial compensation for a real gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (price lists) and clarifies that it covers two kinds -- sales (temporary discounts) and overrides (customer-group/B2B prices) -- which meaningfully distinguishes it from siblings like save_price_list and list_promotions. The implicit 'list' verb comes from the name, not the text, so it's clear but not maximally explicit.
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 a mode switch: pass price_list_id to fetch one list with its prices, otherwise list them. However, it never states when to prefer this tool over list_promotions, list_catalog, or get_product for pricing data, and offers no exclusions or prerequisites. Usage is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_productsList productsARead-only
Lists products with their variants (SKUs). Filter by full-text, status, collection, category or tag.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | ||
| limit | No | Number of records (max 200) | |
| offset | No | Records to skip (pagination) | |
| status | No | ||
| tag_id | No | ||
| category_id | No | ||
| collection_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds that variants/SKUs are returned alongside products, but says nothing about pagination behavior, ordering, or result size beyond what the schema states. Reasonable but thin given annotations carry most of the load.
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 compact sentences, front-loaded with the core purpose followed immediately by filtering capability. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with annotations covering the safety profile and no output schema, the description gives enough to call it correctly: purpose, filter dimensions, and variant inclusion. Minor gaps around pagination and result ordering keep it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 29% (just limit/offset), but the description names the five filter dimensions that map directly to the otherwise-undocumented q, status, collection_id, category_id, and tag_id parameters. It compensates for the coverage gap by identifying what can be filtered, though it omits ID-format expectations.
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 (Lists) and resource (products) and adds scope detail that it includes variants/SKUs, which single-product tools like get_product do not. It does not explicitly differentiate itself from adjacent collection tools such as list_catalog or list_inventory, so an agent must infer the boundary.
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 enumerates the filter dimensions (full-text, status, collection, category, tag), which implies how to narrow results, but gives no explicit when-to-use guidance or alternatives (e.g., use get_product for a single product, list_inventory for stock). Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_promotionsList promotionsBRead-only
Discount codes and automatic promotions with their value, conditions, usage and validity.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search in codes | |
| code | No | Exact code | |
| limit | No | Number of records (max 200) | |
| offset | No | Records to skip (pagination) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safe-read profile is covered. The description adds that returned promotions carry value, conditions, usage and validity, which is useful content-level context, but says nothing about pagination or ordering behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with no padding. It is well sized for a simple list tool, though it front-loads resource content rather than the list action.
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 tool with complete parameter schema and safety annotations, little more is strictly required. However, with no output schema, the description could say more about the shape of returned promotions, and there is no routing guidance among the many list_* siblings.
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 every parameter (q, code, limit, offset) is already documented in the schema. The description adds no filter syntax or usage 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?
The description adds real content beyond the name/title by clarifying that 'promotions' covers both discount codes and automatic promotions, and lists the attributes involved (value, conditions, usage, validity). It has no verb, but the resource scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this vs. siblings like list_price_lists or get_product, and no note of when to filter with 'code' vs. 'q'. The agent must infer usage entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_deliveredMark as deliveredAIdempotent
Marks a fulfillment as delivered. Without 'fulfillment_id' it uses the only fulfillment that is not delivered yet.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | Order ID or order number | |
| fulfillment_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (not read-only, non-destructive, idempotent, open-world), so the bar is lower. The description adds the useful auto-selection behavior when fulfillment_id is omitted, but does not disclose side effects such as whether a shipping/delivery notification is sent or what error condition arises with ambiguous fulfillment selection.
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 tight sentences, zero filler, and the fallback behavior is front-loaded. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the main ambiguity (optional fulfillment_id) but leaves the caller without knowledge of return values, side effects, or behavior when multiple undelivered fulfillments exist. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% β 'order' is documented but 'fulfillment_id' is not. The description compensates by explaining exactly what omitting fulfillment_id does, which is semantic information the schema lacks. This is a genuine addition beyond structured data.
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 ('Marks') and resource ('a fulfillment as delivered'), which clearly separates it from siblings like create_fulfillment and cancel_fulfillment. It does not name a sibling explicitly, but the resource is specific enough to distinguish.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a conditional rule β omit fulfillment_id to target the single not-yet-delivered fulfillment β which is real usage guidance implied for the caller. It stops short of saying when to prefer this over alternatives like cancel_fulfillment or what error/behavior occurs if multiple undelivered fulfillments exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_order_paidMark order as paidAIdempotent
Records a manual payment (e.g. a received bank transfer or cash on delivery) for the order's unpaid payment collection. Orders without one (e.g. converted draft orders) get a payment collection for the outstanding amount first.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | Order ID or order number |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (non-read-only, idempotent, non-destructive, open world). The description adds real behavioral value beyond them: it discloses the side effect that orders lacking a payment collection (e.g. converted drafts) will have one created for the outstanding amount. It does not mention required permissions or what amount is ultimately recorded.
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 tight sentences, front-loaded with the primary action and followed by the edge-case behavior. No filler, though the second sentence is dense and could be split for clarity.
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 mutation with no output schema, the description covers the core action, the trigger scenario, and the notable side effect. Return behavior and permission requirements are unstated, but annotations carry the safety profile and the tool is simple enough that this 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?
Schema description coverage is 100% and the single 'order' parameter is already documented as 'Order ID or order number'. The description adds no further syntax or format detail, so the baseline of 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 gives a specific verb+resource: 'Records a manual payment ... for the order's unpaid payment collection', and the parenthetical examples (bank transfer, cash on delivery) pin down the exact scenario. It does not explicitly name the closest sibling, capture_payment, so an agent must infer the manual-vs-automatic distinction.
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 examples imply when this is appropriate (offline/manual settlement rather than a gateway capture), but there is no explicit when-to-use or when-not-to-use statement and no named alternative such as capture_payment or complete_order. Usage must be inferred from the examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
medusa_requestMedusa Admin API requestADestructive
Calls any Medusa v2 Admin API endpoint directly β for anything the other tools do not cover (e.g. /admin/reservations, /admin/order-edits, /admin/exchanges, /admin/tax-rates, /admin/shipping-options). Prefer the dedicated tools when one fits. Amounts are in major units. Use 'fields' in the query to choose fields: '+field' adds to the defaults, '*relation' expands a relation. POST creates or updates, DELETE deletes β confirm changes with the user first. Writes to api-keys, users and invites are blocked.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | JSON body for POST | |
| path | Yes | Path starting with /admin/, e.g. /admin/reservations | |
| query | No | Query parameters; nested objects become a[b]=c | |
| method | No | GET |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, but the description adds unusually valuable context beyond them: which method performs which mutation, that api-keys/users/invites writes are blocked, that changes should be confirmed with the user, and that amounts use major units. These are non-obvious constraints an agent could not infer from the schema.
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?
Front-loaded with the tool's role, then alternative routing, then method/field/unit conventions, then the safety block. Five dense sentences, each carrying a distinct operational fact with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an open-world proxy with no output schema, the description covers routing, mutation semantics, blocked resources, and value conventions well. The one gap is response behavior (error shape, pagination, partial failures), which matters for a catch-all endpoint caller but is not addressed.
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?
With 75% schema description coverage the schema already documents path, body, and query. The description adds semantics the schema does not: the '+field' / '*relation' modifiers for the fields query key and the major-unit convention for amounts. It does not document the method enum's practical implications further, keeping it just short of a 5.
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 ('Calls any Medusa v2 Admin API endpoint directly') and immediately bounds the scope with concrete example paths. It explicitly distinguishes itself from the ~40 sibling tools by positioning itself as the fallback for uncovered endpoints.
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 when-to-use ('anything the other tools do not cover') and when-not ('Prefer the dedicated tools when one fits'), plus a concrete confirmation rule for destructive calls. An agent has no ambiguity about routing between this and domain-specific siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
receive_returnReceive returnA
Records that returned items arrived; they go back to stock. Without 'items' receives everything requested. Without 'return_id' uses the order's only open return.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Internal note | |
| items | No | Defaults to every requested item | |
| order | No | Order ID or order number (to find the return) | |
| return_id | No | ||
| notify_customer | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=true), and the description adds a key side effect beyond them: received items are restocked. It does not, however, disclose the notify_customer behavior or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and consequence, then two tightly-scoped conditional clauses. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the primary effect and the two most important defaulting rules. Only the notify_customer side effect and the role of 'order' vs 'return_id' resolution are left unaddressed.
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?
With 60% schema coverage, the description usefully explains the defaulting behavior of 'items' and 'return_id'. It leaves the semantics of 'note', 'order', and 'notify_customer' (default true) to the schema/reader inference.
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 ('Records that returned items arrived') and adds the concrete consequence ('they go back to stock'). This clearly distinguishes it from the sibling create_return, though it never names a 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?
Provides conditional rules for two parameters (defaults when 'items' or 'return_id' are omitted), which is helpful operational guidance, but says nothing about when to prefer this over create_return or other return-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refund_paymentRefund paymentADestructive
REFUNDS money to the customer through the payment provider. Irreversible β confirm the amount with the user before calling. Without 'payment_id' uses the only captured payment that can cover the amount. Refund reasons are listed by get_store_info.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| order | Yes | Order ID or order number | |
| amount | Yes | Major units, e.g. 249.50 | |
| payment_id | No | ||
| refund_reason_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false, so the safety profile is covered; the description reinforces this with 'Irreversible' and adds genuine context beyond the annotations: the automatic payment-selection behavior when payment_id is absent. It does not disclose what the call returns or whether partial refunds against a payment are constrained.
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, each earning its place: the destructive/confirmation warning is front-loaded, followed by the default-resolution rule and the value-source pointer. Zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers irreversibility, a user-confirmation requirement, parameter defaulting, and reason-code lookup. Only the response shape and any refund-eligibility constraints are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 40%, so the description must compensate, and it does for the two undocumented functional params: payment_id's defaulting behavior and where refund_reason_id values come from (get_store_info). The 'note' param remains unexplained in both schema and description.
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 (refunds), the resource (money/customer payment) and the mechanism (through the payment provider). It is unambiguously distinct from siblings like capture_payment, cancel_order, or create_return, with no overlap.
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 concrete pre-call guidance ('confirm the amount with the user') and an explicit fallback rule for when payment_id is omitted. It also routes the agent to get_store_info for valid refund reasons. It stops short of naming alternative tools for adjacent scenarios (e.g., when a refund is not possible and a return/cancel is appropriate).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sales_reportSales reportARead-only
Computes sales for a period: order count, revenue, average order value, units sold, unique customers, a time series (day/week/month) and top products. Amounts are per currency. Canceled and draft orders are excluded.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | To date (inclusive), e.g. 2026-09-30 | |
| from | Yes | From date, e.g. 2026-09-01 | |
| top_n | No | How many top products to return | |
| group_by | No | day | |
| timezone | No | IANA timezone used for date boundaries and buckets | UTC |
| only_paid | No | Only count paid orders (captured / partially_refunded / partially_captured) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=false, and the description adds real behavioral context: canceled and draft orders are excluded, amounts are per-currency (so no cross-currency rollup), and a time series is produced. It stops short of disclosing performance, limits, or empty-range behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the metric list and followed by the important scoping caveats. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the returned metrics and the exclusion rules that determine the numbers, which is the key information an agent needs. It omits how currency grouping interacts with the totals and what the top-products ordering is based 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 coverage is 83%, so the schema already documents from/to/top_n/timezone/only_paid. The description only indirectly echoes parameters by mentioning day/week/month buckets and top products, and does not clarify only_paid or timezone semantics beyond the schema. Baseline 3 is appropriate.
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 (computes) and resource (sales report) and enumerates the exact metrics returned: order count, revenue, AOV, units, unique customers, time series, and top products. This makes it clearly distinguishable from the sibling list/get tools, which return raw entities.
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?
Implicitly signals it is an aggregation tool rather than a record lister, and notes that canceled and draft orders are excluded. However, it never states when to prefer this over list_orders plus manual aggregation, nor any prerequisite or exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_categoryCreate or update categoryAIdempotent
Without category_id creates a product category (name required); with category_id updates only the given fields. Can also add or remove products.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| rank | No | Position among siblings | |
| handle | No | ||
| metadata | No | Merged into existing metadata; an empty string deletes a key | |
| is_active | No | Visible in the storefront (new categories default to inactive in Medusa) | |
| category_id | No | ||
| description | No | ||
| is_internal | No | Hidden from the storefront | |
| add_products | No | Product IDs to add | |
| remove_products | No | Product IDs to remove | |
| parent_category_id | No | null moves it to the top level |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotent=true, destructiveHint=false and openWorld=true. The description adds meaningful semantics beyond them: updates are partial ('only the given fields'), name is required only on creation, and the call can mutate product associations. It doesn't clarify permissions or what happens to omitted fields on update, but it is well above the annotation-only bar.
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 dense sentences, front-loaded with the mode switch, no filler. Every clause carries information an agent needs.
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 an 11-param, no-required, no-output-schema tool, the description covers the essential decision logic and the side-effect on product associations. Return shape and behavior when category_id is absent/invalid are unaddressed, but the core calling contract is clear.
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 64%, so the schema documents the more subtle params (metadata merge, rank as sibling position, parent_category_id null behavior). The description supplies the critical semantic that category_id switches create vs update, and that add_products/remove_products are side-effect lists, but says nothing about the remaining params (is_active, is_internal, handle).
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 (create/update a product category) and disambiguates the two modes by the presence of category_id. It also flags a secondary effect (add/remove products). It doesn't explicitly differentiate itself from the similarly named save_collection or delete_category, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear branching rule for when to use each mode (no category_id = create, with category_id = update), which is genuine usage guidance. However, it names no alternatives (e.g. delete_category for removal) and states no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_collectionCreate or update collectionAIdempotent
Without collection_id creates a collection (title required); with collection_id updates it. Can add or remove products (a product belongs to at most one collection).
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| handle | No | ||
| metadata | No | Merged into existing metadata; an empty string deletes a key | |
| add_products | No | Product IDs to add | |
| collection_id | No | ||
| remove_products | No | Product IDs to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that this is a non-destructive, idempotent, open-world write, so the safety profile is covered. The description adds one genuinely behavioral fact: 'a product belongs to at most one collection', which warns the agent that adding a product may implicitly move it. It does not explain what happens to title/handle conflicts, or whether removed products are deleted or merely detached.
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 dense sentences, front-loaded with the create/update branch that determines everything else. Every clause earns its place; the only minor cost is that the parenthetical product-membership rule is squeezed in rather than given its own emphasis.
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 dual-mode tool with six parameters, no required markers, and no output schema, the description covers the decision-critical facts: mode selection, the required field for creation, and the product-membership side effect. Gaps are minor β no mention of handle conflicts or validation behavior β and the absence of an output schema excuses return-value detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, and the schema marks zero parameters as required, so the description carries real load: it states title is required for creation, and it explains add_products/remove_products by describing the one-collection membership constraint. handle and the update-mode requirements remain undocumented in the description, but it meaningfully compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource pair (create/update collection) and makes the branch condition explicit: 'Without collection_id creates a collection (title required); with collection_id updates it.' That conditional framing is more precise than the title alone and lets an agent pick the right mode without opening the schema. It does not, however, compare itself to sibling tools such as delete_collection or save_category.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear routing guidance on the create-vs-update decision, which is the primary ambiguity for a 'save' tool. It also implies product-association usage via add_products/remove_products. It stops short of naming when to avoid this tool (e.g., use delete_collection instead), so no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_customerCreate or update customerAIdempotent
Without customer_id creates a customer (email required); with customer_id updates only the given fields. Can also add an address and add/remove the customer from groups.
| Name | Required | Description | Default |
|---|---|---|---|
| No | |||
| phone | No | ||
| metadata | No | Merged into existing metadata; an empty string deletes a key | |
| last_name | No | ||
| first_name | No | ||
| add_address | No | ||
| customer_id | No | ||
| company_name | No | ||
| add_to_groups | No | Customer group IDs to join | |
| remove_from_groups | No | Customer group IDs to leave |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare non-read-only, non-destructive, idempotent, open-world, and the description is consistent with them while adding real value: partial-update semantics (only given fields change) and the create-vs-update switch. It does not disclose error behavior or what happens if customer_id doesn't exist, which for a mutation tool would be the 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?
Two dense sentences, front-loaded with the create/update distinction, with no filler. The second sentence packs three capabilities together, which is slightly run-on but still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, nested-object mutation with no output schema and low schema coverage, the description covers the essential decision logic and side effects. It omits failure modes and return behavior, but nothing that would cause a wrong 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 coverage is only 30% across 10 parameters, so the description must compensate, and it does: it clarifies the customer_id gating logic, that email is required for creation, and the roles of add_address, add_to_groups and remove_from_groups. It still leaves some params (phone, company_name, metadata merge behavior) unexplained in prose.
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, crucially, splits the tool's two modes by the presence or absence of customer_id. An agent immediately knows this is an upsert-style save, not a read or delete, and can distinguish it from list_customers/get_customer siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional usage: omit customer_id to create (email required), include it to partially update. It does not name alternatives or explicitly say when not to use it (e.g. to fetch a customer), so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_customer_groupCreate or update customer groupAIdempotent
Without group_id creates a group (name required); with group_id renames it. Can add/remove customers.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| group_id | No | ||
| metadata | No | Merged into existing metadata; an empty string deletes a key | |
| add_customers | No | Customer IDs to add | |
| remove_customers | No | Customer IDs to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly=false, idempotent=true, destructive=false, openWorld=true), so the bar is lower. The description usefully adds that behavior branches on group_id and that members can be added/removed, but it does not disclose permission requirements, what happens to membership on rename, or whether removing customers has side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the mode-switching rule front-loaded before the secondary capability. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, no-required-params mutation tool with no output schema, the description covers the critical decision logic (create vs update, name requirement). It falls short only on permissions, error/partial-update behavior, and the metadata merge semantics, which the schema partially covers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 60%, and the description compensates by tying group_id to the update path and clarifying that name is only required in the create path. add/remove customers are described loosely ('Can add/remove customers') while metadata is left entirely to its schema description.
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 (create/rename a customer group) and distinguishes its two modes via the presence or absence of group_id. It is less explicit about how it differs from siblings like save_customer or list_customer_groups, but the create-vs-update framing is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when each mode applies (no group_id = create, group_id = rename), which is genuinely useful, but it never names alternatives or states prerequisites/exclusions against sibling tools such as save_customer or delete_customer_group.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_price_listCreate or update price listAIdempotent
Without price_list_id creates a price list (title required); with price_list_id updates it. 'set_prices' adds or changes the price of a variant in a currency; 'remove_variants' drops variants from the list. type 'sale' shows the original price struck through, 'override' simply replaces it. Plain dates use the reporting timezone.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Default for new lists: sale | |
| title | No | ||
| status | No | Default for new lists: active | |
| ends_at | No | Inclusive, e.g. 2026-11-30; null removes | |
| starts_at | No | E.g. 2026-11-27; null removes | |
| set_prices | No | ||
| description | No | ||
| price_list_id | No | ||
| remove_variants | No | Variant IDs whose prices are removed from the list | |
| customer_group_ids | No | Only for these customer groups; [] or null = everyone |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare mutation, idempotency and non-destructiveness, so the bar is lower, and the description still adds real behavioral context: that title is required only on create, that remove_variants drops variants from the list, that 'sale' vs 'override' changes displayed pricing semantics, and that plain dates use the reporting timezone. It stops short of describing auth requirements, partial-failure behavior, or what a successful call returns.
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 tightly packed clauses with no filler, front-loaded with the create-vs-update discriminator and then the sub-operation semantics. Every sentence carries information an agent needs to call the tool correctly.
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 10-parameter mutation tool with no output schema and only 60% schema description coverage, the description covers the operation mode, the two array operations, type semantics and date handling. Gaps remain on customer_group_ids scoping, status behavior on update, and error/partial-apply behavior, so it is strong but not exhaustive.
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?
With 10 parameters at 60% schema coverage, the description compensates by explaining the conditional role of price_list_id and title, the semantics of set_prices and remove_variants, and the sale/override meaning of 'type' plus the timezone convention for plain dates. It leaves customer_group_ids, status, description and starts_at/ends_at removal semantics to the schema, so it does not fully close the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact verb+resource and disambiguates the dual mode with a concrete rule: 'Without price_list_id creates a price list (title required); with price_list_id updates it.' It also enumerates the sub-operations (set_prices, remove_variants) so an agent can separate this from siblings like set_variant_price or list_price_lists without reading 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 gives clear context for choosing create vs update and for choosing set_prices vs remove_variants within the call. It never names an alternative sibling (e.g. set_variant_price for changing a single variant's price, or list_price_lists/delete_price_list), so routing to competing tools is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_stock_levelSet stock levelA
Sets the stocked quantity of an item at a location. Provide either an absolute 'stocked_quantity' or a relative 'adjust_by' (+/-). Identify the item by inventory_item_id or SKU. Without location_id the item's only location is used. If the item is not stocked at the given location yet, it is added there.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | No | ||
| adjust_by | No | E.g. +10 when restocking, -2 when writing off | |
| location_id | No | ||
| stocked_quantity | No | ||
| inventory_item_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the safety profile (readOnly=false, idempotent=false, destructive=false, openWorld=true), so the bar is lower. The description adds real side-effect context: omitting location_id falls back to the item's only location, and an unstocked item is auto-added at that location. It does not, however, spell out the non-idempotent nature of 'adjust_by'.
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 sentences, fully front-loaded with the core action first, followed by the quantity mode, the identification modes, and the location fallback. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must cover behavior; it does describe the write and its auto-create side effect. Minor gaps remain on error/failure behavior and whether the two quantity parameters are mutually exclusive or mandatory.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 20%, so the description carries most of the load: it explains the stocked_quantity/adjust_by mutual alternative and the sku/inventory_item_id identification choice, and clarifies location_id's defaulting behavior. It does not state whether exactly one of the two quantity modes must be supplied (required count is 0).
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 with scope: 'Sets the stocked quantity of an item at a location.' It is unmistakably distinct from the sibling read tool list_inventory and from the variant/price tools, so an agent can select it 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?
Gives clear operational context: absolute 'stocked_quantity' vs relative 'adjust_by', and the id-or-SKU identification choice. It stops short of naming an alternative tool for reading stock levels (e.g. list_inventory) or stating any when-not-to-use condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_variant_priceSet variant priceAIdempotent
Sets the base price (no price rules) of a variant in one currency. All other prices of the variant are preserved. The amount is in major currency units (e.g. 49.99 = 49.99 EUR). For sale or customer-group prices use price lists.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | ||
| product_id | Yes | ||
| variant_id | Yes | ||
| currency_code | Yes | E.g. eur, usd |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false. The description adds genuinely useful behavior the annotations do not: all other prices of the variant are preserved, so the agent knows this is a partial, non-clobbering write. It does not state permission requirements or what the response returns, 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?
Three tight sentences with zero filler, and the core operation plus its scope constraint is front-loaded before the format note and the alternative routing. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-output-schema mutation tool, the description supplies the behavioral context an agent needs: scope of the write, preservation of sibling prices, unit format, and where to go for other price types. Nothing required to invoke it correctly 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 only 25% (just currency_code), so the description must compensate. It does for the most ambiguous field: 'amount is in major currency units (e.g. 49.99 = 49.99 EUR)', which clarifies the number type that the schema leaves bare. product_id and variant_id remain unexplained in both places, so the coverage is not complete.
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 (sets the base price of a variant) plus a scoping qualifier (one currency, base only, no price rules). It also differentiates itself from the price-list path, so an agent can distinguish it from siblings like save_price_list without opening a 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?
Explicitly routes the agent elsewhere for a related but different need: 'For sale or customer-group prices use price lists.' That is a clear alternative-selection rule. It stops short of a full when/when-not treatment (e.g. what to do when the variant already has overlapping price rules), so it is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_orderUpdate orderAIdempotent
Changes the order's email, shipping or billing address, or metadata (e.g. an internal note). Send only what should change; an address replaces the whole previous address.
| Name | Required | Description | Default |
|---|---|---|---|
| No | |||
| order | Yes | Order ID or order number | |
| metadata | No | Merged into existing metadata; an empty string deletes a key | |
| billing_address | No | Postal address | |
| shipping_address | No | Postal address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds genuinely non-derived behavior: an address field fully replaces the previous address rather than merging it, which is a partial-overwrite hazard the schema never states (the schema just calls these 'Postal address'). It does not mention permissions, validation failures, or rate limits, but the replacement semantics are the key disclosure and are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the field scope front-loaded before the update-semantics caveat. Every clause changes how an agent calls the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with full annotation coverage and no output schema, the description covers what can change and the two non-obvious update rules (partial send, full address replacement). It omits error/edge behavior on a non-existent or completed order, 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?
With 80% schema description coverage the baseline is 3, and the description earns above it by clarifying semantics the schema does not: that updates are partial ('send only what should change') and that no field is required beyond the order identifier. It also signals the email/address/metadata parameter families by name, though the metadata merge-vs-delete rule lives only in 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 gives a specific verb ('Changes') plus resource ('the order's') and enumerates the exact mutable fields: email, shipping/billing address, and metadata. This scoping implicitly separates it from siblings like complete_order, cancel_order, and get_order without the agent needing to open any 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?
'Send only what should change' is a real invocation guideline for a partial-update tool, and it prevents an agent from resending unchanged fields. However, it says nothing about when to choose this tool over alternatives such as complete_order or cancel_order, and lists no prerequisites (e.g. order must exist, must not be cancelled), so usage is only implied rather than contrasted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_productUpdate productAIdempotent
Updates product fields β texts, status, handle, images, collection, categories, tags, sales channels, metadata. Send only the fields that should change. Lists (category_ids, tags, images, sales_channel_ids) replace the previous list.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tag values; missing tags are created | |
| title | No | ||
| handle | No | ||
| images | No | Image URLs β replaces all images | |
| status | No | ||
| weight | No | ||
| metadata | No | Merged into existing metadata; an empty string deletes a key | |
| subtitle | No | ||
| thumbnail | No | ||
| product_id | Yes | ||
| description | No | ||
| category_ids | No | ||
| discountable | No | ||
| collection_id | No | null removes the product from its collection | |
| sales_channel_ids | No | ||
| shipping_profile_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description goes beyond them by disclosing two non-obvious behaviors: partial-update semantics (only changed fields are sent) and that list fields (category_ids, tags, images, sales_channel_ids) fully replace prior values rather than appending. That replace behavior is the kind of data-loss nuance annotations do not capture, though it omits permission/return context.
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 tightly written sentences, front-loaded with the core action, followed by the patch instruction and then the list-replace caveat. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter mutation with no output schema, the description covers the most important behavioral surprises (patch semantics, list replacement) but omits return behavior, permission requirements, and semantics for roughly half the parameters. It is adequate but not complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, so the description must compensate and it only partially does so. It clarifies the replace semantics for the four list params and names the field families, but leaves many of the 16 params (weight, subtitle, thumbnail, discountable, shipping_profile_id, description) without added meaning, and does not explain the null-removes-collection behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Updates product fields') and enumerates the exact field families affected (texts, status, handle, images, collection, categories, tags, sales channels, metadata). An agent can tell it apart from create_product, get_product, and update_variant from the text alone, though it never explicitly names those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Send only the fields that should change' is a useful patch-semantics guideline for how to call it, but there is no statement of when to prefer this over create_product, update_variant, or the various set_* siblings, and no prerequisites or exclusions. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_promotionUpdate promotionAIdempotent
Changes a promotion: activate/deactivate (status), rename the code, change the value, usage limit or validity dates. Identify it by promotion_id or code.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Current code, to find the promotion | |
| value | No | ||
| status | No | ||
| ends_at | No | null removes the end date | |
| new_code | No | ||
| starts_at | No | null removes the start date | |
| usage_limit | No | null removes the limit | |
| promotion_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true, openWorldHint=true), so the bar is lower. The description adds that activation/deactivation is done via status and lists what is mutable, but omits partial-update semantics, error behavior, and permission requirements for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the mutability list and the identification method front-loaded. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter optional-field mutation with 50% schema coverage and no output schema, the description covers the what (fields) and the how-to-identify, but says nothing about unspecified fields remaining unchanged, validation constraints (e.g., value > 0, date ordering), or the result. Sufficient to start, incomplete for safe use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, so the description must compensate. It does: it clarifies that promotion_id or code is used to locate the record and that new_code performs a rename, a meaning absent from the schema, and ties value/usage_limit/dates/status to concrete changes.
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 (changes) and resource (a promotion), then enumerates the mutable aspects: status, code, value, usage limit, validity dates. It also distinguishes itself from list/create/delete_promotion by naming the update operation and the identifier fields used to target the record.
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: use this to modify an existing promotion, identified by promotion_id or code. It does not state when to prefer it over siblings (e.g., delete_promotion for removal) or any preconditions such as needing an existing promotion id. Adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_variantUpdate variantAIdempotent
Updates variant fields β title, SKU, barcodes, inventory tracking, backorders, weight, metadata. For prices use set_variant_price.
| Name | Required | Description | Default |
|---|---|---|---|
| ean | No | ||
| sku | No | ||
| upc | No | ||
| title | No | ||
| weight | No | Grams | |
| barcode | No | ||
| metadata | No | Merged into existing metadata; an empty string deletes a key | |
| product_id | Yes | ||
| variant_id | Yes | ||
| allow_backorder | No | Allow selling when out of stock | |
| manage_inventory | No | Track stock (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered structurally. The description adds the scope of mutation (which fields change) but says nothing about partial-vs-full replacement semantics, merge behavior, or validation failures; it is adequate but thin given the lower bar set 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?
Two compact sentences with zero filler; the positive scope comes first and the routing exception second. Nothing is repeated from the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutation tool with a nested metadata object and no output schema, the description covers the mutation scope, the key field groups, and the price exception. The notable remaining omission is whether unspecified fields are preserved, which matters for an update tool, but nothing essential for 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 description coverage is only 36%, so the description has to compensate, and it does by grouping the updatable fields (title, SKU, barcodes/ean/upc, inventory tracking/manage_inventory, backorders/allow_backorder, weight, metadata). Only the required identifiers product_id and variant_id go unnamed, which is a minor gap; the remaining semantics like grams and metadata merge are already documented in 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 (updates) and resource (variant) and enumerates the mutable field groups: title, SKU, barcodes, inventory tracking, backorders, weight, metadata. It also explicitly separates itself from the nearest sibling by stating that prices belong to set_variant_price, so an agent can route without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear exclusion rule and names the alternative tool for the price case ('For prices use set_variant_price'). It stops short of broader when-to-use context, such as preferring this over delete_variant/create_variant or noting that it is a partial update, but the routing guidance is explicit and actionable.
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.
34 tool updates
v0.3.0- Added
cancel_fulfillment - Added
capture_payment - Added
convert_draft_order - Added
create_draft_order - Added
create_product - Added
create_promotion - Added
create_return - Added
create_variant - Added
delete_category - Added
delete_collection - Added
delete_customer_group - Added
delete_price_list - Added
delete_promotion - Added
delete_variant - Added
list_catalog - Added
list_customer_groups - Changed
list_customers1 field changed- added
Input schema / properties / group_idAdded value: +{ + "description": "Only members of this customer group", + "type": "string" +}
- Added
list_price_lists - Changed
list_products1 field changed- added
Input schema / properties / tag_idAdded value: +{ + "type": "string" +}
- Added
list_promotions - Added
mark_delivered - Added
mark_order_paid - Added
medusa_request - Added
receive_return - Added
refund_payment - Added
save_category - Added
save_collection - Added
save_customer - Added
save_customer_group - Added
save_price_list - Added
update_order - Changed
update_product9 fields changed- added
Input schema / properties / category_idsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / collection_idAdded value: +{ + "description": "null removes the product from its collection", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / discountableAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / imagesAdded value: +{ + "description": "Image URLs β replaces all images", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / sales_channel_idsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / shipping_profile_idAdded value: +{ + "type": "string" +} - added
Input schema / properties / tagsAdded value: +{ + "description": "Tag values; missing tags are created", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / thumbnailAdded value: +{ + "type": "string" +} - added
Input schema / properties / weightAdded value: +{ + "minimum": 0, + "type": "number" +}
- Added
update_promotion - Added
update_variant
17 tool updates
v0.1.0- First observed
cancel_order - First observed
complete_order - First observed
create_fulfillment - First observed
create_shipment - First observed
delete_product - First observed
get_customer - First observed
get_order - First observed
get_product - First observed
get_store_info - First observed
list_customers - First observed
list_inventory - First observed
list_orders - First observed
list_products - First observed
sales_report - First observed
set_stock_level - First observed
set_variant_price - First observed
update_product
TDQS
Scored across 48 tools
Despite 48 tools, each targets a distinct resource-action pair. Fulfillment, payment, and return tool families are clearly delineated by verbs (create, mark, cancel, capture, refund, receive), and the generic medusa_request is explicitly a fallback. No two tools appear to do the same thing.
The set uses snake_case throughout with a dominant verb_noun pattern, but it mixes upsert conventions: some resources use save_* for create/update (save_collection, save_customer) while others use separate create_* and update_* (create_product, update_product). Two tools (sales_report, medusa_request) are noun-only, breaking the strict verb_noun pattern. This is mostly consistent but not perfectly uniform.
48 tools far exceeds the 16β25 'heavy' threshold and is close to the 50+ extreme. While the Medusa admin domain is broad, the count imposes high selection overhead; a generic medusa_request already provides an escape hatch, so many CRUD tools could be consolidated.
Core lifecycle coverage is strong for orders, products, variants, customers, categories, collections, inventory, price lists, and promotions. Notable gaps include no dedicated delete_customer or order edit/claim/exchange tools, but medusa_request lets agents work around these gaps, so the surface is largely complete.
Maintenance
Related MCP Connectors
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client β Claude, ChatGPT, Cursor, Cline, Windsurf.
Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.
MCP server for Argo RPG Platform β connects AI assistants to campaign data via OAuth2
Hosted WooCommerce MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Related MCP Servers
- AlicenseBqualityDmaintenanceA minimal local MCP server that wraps any Claude Messages API-compatible upstream into a unified ask_model tool. It enables MCP clients to interact with these models through a standard tool interface using stdio transport.17MIT
- AlicenseAqualityDmaintenanceStart, observe, and interact with Claude Managed Agents from any MCP client β launch an agent, watch its events, reply, approve the tools it wants to run, and stop it. Runs over stdio, HTTP, or AWS Lambda with pluggable auth.171MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that connects Claude to Shopify stores, enabling natural language queries and actions on products, orders, customers, inventory, and sales analytics. Includes a demo mode with bundled fixtures for trying tools without credentials.28 npmMIT
- FlicenseNot gradedqualityBmaintenanceMCP server exposing WIBI's API v2 as tools, supporting OAuth 2.1 for production (Claude web/desktop) and stdio for local dev, enabling natural-language queries about campaigns, products, clients, reports, broadcasts, and subscriptions with per-commerce isolation and admin scope switching.-