MerchantFlow
Server Details
MerchantFlow connects ecommerce, advertising, and analytics data into one profitability layer for AI assistants. Analyze revenue, product performance, COGS, fulfillment costs, advertising spend, marketing performance, and true profit across Shopify, WooCommerce, and connected marketing and analytics platforms. The hosted MCP connector uses OAuth, provides tenant-scoped read-only access, and runs over Streamable HTTP.
- Status
- Healthy
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 60 tools
Most tools have distinct, well-scoped purposes, but a few have overlapping domains (e.g., get_ad_performance vs get_channel_roas, search vs search_orders) that could cause confusion despite detailed descriptions. Overall, an agent can usually tell tools apart.
Tool names follow a snake_case verb-noun pattern but use many different verbs (get_, list_, run_, find_, search_, lookup_, etc.). This is readable but not a single predictable convention; the 'run_' prefix for audits is consistent within that group.
With 60 tools, this is a very large tool surface. Even though the server covers a broad domain, the high number of specialized audit tools (e.g., run_url_redirect_audit, run_gift_card_balance_report) feels excessive and makes the set heavy to navigate.
The tool set thoroughly covers the merchant analytics and operations domain: P&L, ads, customers, products, inventory, orders, audits, funding, and system status. Read-only workflows are well-connected, with lookups referencing each other (e.g., list_customers to get_customer_detail) and no obvious gaps.
Available Tools
60 toolsfetchFetch RecordARead-onlyIdempotentInspect
Retrieve the full record for an opaque document id from MerchantFlow's retrieval results. Returns id, title, text, URL, and metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | An opaque document id returned by `search` (formatted like `product:<id>` or `order:<id>`). Do not construct this id manually. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Opaque document id: 'product:<uuid>', 'order:<uuid>', or the initial-sync status id. Pass it back to `fetch` verbatim. |
| url | Yes | Deep link a citation can point at. |
| text | Yes | Plain-text summary. Carries no customer email, name or address. |
| title | Yes | |
| metadata | No | String-valued tags about the document, e.g. { type: 'order', currency: 'AUD' }. `found: 'false'` marks an unrecognised or unreadable id - which is returned as a readable document, not an error, so the model can recover by searching again. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds context about the source ('MerchantFlow's retrieval results') and the return fields, which is useful. However, it does not disclose behaviors like whether the id format is validated, what happens for invalid/expired ids, or pagination/truncation of metadata. With annotations covering safety, a 3 is appropriate.
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 with zero waste. The core action and resource are front-loaded, and the return fields are listed compactly. 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 simple single-parameter read tool with a rich schema, an output schema, and safety annotations, the description is nearly complete. It could mention what happens when the id is not found or invalid, but the schema's warning about not constructing ids manually partially covers misuse. The output schema likely documents the return shape, so the description need not repeat it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the single parameter thoroughly, including the opaque id format and the warning not to construct it manually. The description adds the return fields but no additional parameter semantics beyond what the schema provides. Baseline 3 is correct.
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 ('Retrieve'), a specific resource ('full record for an opaque document id from MerchantFlow's retrieval results'), and lists the returned fields (id, title, text, URL, metadata). This clearly distinguishes it from sibling tools like search or lookup_order, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: it is for retrieving a full record by an opaque id returned by search. The input schema reinforces this by warning not to construct the id manually. However, it does not explicitly state when to use this tool versus alternatives like lookup_order or get_customer_detail, so it misses the explicit when/when-not guidance that would earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_cogs_gapsProducts Missing COGSARead-onlyIdempotentInspect
Find products or variants with missing or stale COGS data that are affecting P&L accuracy. Returns product titles, SKUs, and the gap reason.
| Name | Required | Description | Default |
|---|---|---|---|
| include_zero_cost | No | Include products whose latest COGS entry is exactly zero as a gap (default true); set to false to only flag products with no COGS entry at all. | |
| stale_older_than_days | No | Also flag products whose latest COGS entry is older than this many days as stale (omit to skip the staleness check entirely). |
Output Schema
| Name | Required | Description |
|---|---|---|
| gaps | No | |
| _meta | No | |
| _message | No | |
| gap_count | No | |
| _truncated | No | |
| coverage_pct | No | Share of scanned products with usable COGS. 100 when nothing was scanned. |
| recommendation | No | |
| _tenant_context | No | |
| total_products_scanned | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds context about the impact on P&L accuracy and the returned fields, which is useful but does not reveal additional behavior beyond what annotations and schema 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 two concise sentences with no redundancy. The purpose is front-loaded, and the output specification is efficient. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full schema parameter coverage, the description adequately covers purpose and output. It could mention the read-only nature explicitly, but annotations handle that. The description is complete for a tool of this simplicity.
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%; both parameters (include_zero_cost, stale_older_than_days) have detailed descriptions in the schema. The tool description adds no new parameter semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'Find' and the resource 'products or variants with missing or stale COGS data', and specifies the output (product titles, SKUs, gap reason). It is specific and distinct from siblings like get_cogs_coverage, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for P&L accuracy monitoring but does not explicitly state when to choose this tool over related ones like get_cogs_coverage or get_item_cogs. The parameter schema offers some guidance (e.g., include_zero_cost, stale_older_than_days), but the description itself lacks clear when-to-use or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_duplicate_customersDuplicate CustomersARead-onlyIdempotentInspect
Group orders by customer email hash to find customers under multiple names or phone numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of duplicate-customer groups to return (default 50, 5 to 200). | |
| min_orders | No | Minimum number of orders under the same email hash for a customer to be reported as a possible duplicate (default 2, 2 to 20). |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that it groups orders by email hash, which is a useful algorithmic detail, but it does not discuss limitations (e.g., customers without email hashes) or output specifics. No contradiction, but the added transparency beyond annotations is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core action ('Group orders by customer email hash') and then states the purpose. Every word earns its place; there is 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?
Given the low complexity, a rich output schema, well-documented parameters, and complete annotations (read-only, idempotent, non-destructive), the description covers what the tool does and how. The output schema handles return-value details, and the description supplies enough context for correct invocation without missing prerequisites or vague warnings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% description coverage, with both 'limit' and 'min_orders' fully explained including defaults and ranges. The description does not repeat or elaborate on these parameters, so it adds no semantic value beyond the schema. 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 uses a specific verb ('Group orders') and clearly states the goal: finding customers under multiple names or phone numbers. This distinguishes it from siblings like list_customers or get_customer_detail, which would not detect duplicates, so an agent can tell it apart without inspecting 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 clearly implies when to use the tool (when duplicate customer identities are suspected) and specifies the detection mechanism (email hash). It does not explicitly name alternatives or state when not to use it, but the unique purpose and clear context make the intended usage evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_reportGenerate ReportARead-onlyIdempotentInspect
Generate the data for any report over a date range - the same numbers the dashboard shows. The report selector is exactly one of report_id (a saved or custom report identifier) and template_key (a built-in template such as pnl or product_performance). Dates default to the report's own default timeframe ending today; narrower ranges reduce truncation.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | End of the report date range as YYYY-MM-DD, resolved in the tenant's timezone. Defaults to today in the tenant's timezone. | |
| report_id | No | The internal MerchantFlow id of a saved or custom report from list_reports. Pass exactly one of report_id or template_key. | |
| start_date | No | Start of the report date range as YYYY-MM-DD, resolved in the tenant's timezone. Defaults to the report's own default timeframe measured back from end_date. | |
| template_key | No | The key of a built-in report template (e.g. pnl, product_performance) from list_reports. Pass exactly one of report_id or template_key. | |
| comparison_mode | No | How to compute the comparison_rows: "none" for no comparison, "previous_period" for the immediately preceding period of equal length, or "previous_year" for the same period one year earlier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | No | One row per period. Which metric keys appear depends on the report configuration. |
| _meta | No | |
| report | No | |
| _message | No | |
| currency | No | |
| _truncated | No | |
| date_range | No | |
| generated_at | No | ISO 8601. |
| pnl_statement | No | |
| summary_tiles | No | |
| _tenant_context | No | |
| comparison_rows | No | Present only when a comparison_mode other than "none" was requested and produced rows. |
| expense_breakdown | No | |
| marketing_campaigns | No | Top 50 campaigns. Revenue and ROAS here are per campaign; there is no per-campaign profit. |
| marketing_platforms | No | |
| product_performance | No | Top 50 products. Image URLs are stripped. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful operational behavior beyond annotations: dates default to the report's own timeframe ending today, and narrower ranges reduce truncation. No contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with no filler. The core purpose appears first, followed by the essential selector and date behavior. 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?
With a fully described 5-parameter schema, an output schema, and annotations covering read-only/idempotent behavior, the description is complete enough to call the tool correctly. It adds the remaining non-obvious context: report scope, date defaults, and truncation 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 baseline is 3, but the description adds meaningful context beyond the schema: 'exactly one of report_id and template_key' clarifies mutually exclusive selection, and 'narrower ranges reduce truncation' gives practical date-range guidance not present 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 states a specific action ('Generate the data for any report over a date range') and a clear resource ('any report'), with the dashboard comparison anchoring its meaning. It differentiates itself from the many metric-specific get_* siblings by covering saved/custom reports and built-in templates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the general report-data tool ('the same numbers the dashboard shows') and explains the report selector, but it does not explicitly say when to prefer generate_report over the get_*/run_* siblings or when not to use it. Usage context is present but left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_performanceAd PerformanceARead-onlyIdempotentInspect
Get paid and owned channel performance for a date range across Meta, Google, Snapchat, TikTok, Pinterest and Klaviyo, with spend, clicks, impressions, conversions and the revenue each platform reports for itself. Group by platform, campaign, or country. Klaviyo is an owned channel billed as a flat fee, so its spend is 0 by design and it is marked is_owned_channel.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | End of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). | |
| group_by | No | How to bucket ad spend rows: by platform (default), by campaign name, or by country. | |
| platforms | No | Restrict results to these ad platforms (meta, google, snapchat, tiktok, pinterest, klaviyo); omit to include every platform with synced spend in the period. | |
| start_date | Yes | Start of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Plain-language caveat the assistant should relay rather than paraphrase. |
| rows | No | |
| _meta | No | |
| period | No | |
| totals | No | |
| _message | No | |
| group_by | No | |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: Klaviyo is an owned channel with spend=0 by design and an is_owned_channel marker, and revenue is what each platform reports for itself (self-attributed). These details go beyond the schema and annotations and help set expectations about data semantics.
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 with no fluff. The first sentence packs the core function, scope, and key metrics; the second explains a critical edge case (Klaviyo spend=0). Information is front-loaded and 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?
Given the output schema exists and the annotations cover safety, the description is largely complete: it lists platforms, metrics, grouping options, and the Klaviyo owned-channel caveat. It could go slightly further by noting how rows are aggregated or whether zero-spend platforms are excluded, but these are minor gaps and the core information needed to call the tool correctly is 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 description coverage is 100%, so parameters are already fully documented. The description reiterates the group_by values (platform, campaign, country) and platform list, but adds no new parameter-level semantics. Baseline 3 is appropriate because the schema does the heavy lifting and the description contributes little beyond what is already structured.
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 action ('Get'), a specific resource ('paid and owned channel performance'), and enumerates the exact platforms and metrics involved. It clearly distinguishes this tool from siblings like get_channel_roas or get_revenue_breakdown by covering multiple ad platforms, including owned Klaviyo, and listing metric types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (when needing cross-platform ad performance across the listed channels) but does not explicitly state when to use this tool versus alternatives such as get_channel_roas or get_date_range_summary. It does not name any sibling or provide exclusions, leaving routing largely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_anomaliesAnomalies and AlertsBRead-onlyIdempotentInspect
Get recent anomalies detected by MerchantFlow (profit drops, spend spikes, missing sync data, attribution issues).
| Name | Required | Description | Default |
|---|---|---|---|
| severity | No | Only return anomalies at this severity level; omit to return anomalies of every severity. | |
| since_days | No | How many days back to look for anomalies (1-30, default 7). |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| count | No | |
| _message | No | |
| anomalies | No | |
| _truncated | No | |
| window_days | No | |
| _tenant_context | No | |
| severity_filter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior, so the safety profile is covered. The description adds useful context about the data source (MerchantFlow) and anomaly categories, but it does not disclose operational details like ordering, pagination, or limits; these are partially mitigated by the 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?
A single, front-loaded sentence with no filler. The parenthetical examples add valuable specificity without bloating the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only query with two optional params, an output schema, and rich annotations, the description is largely complete. It could be slightly stronger with a note about when to use it versus sibling anomaly-adjacent tools, but nothing critical is missing for a correct call.
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 both parameters already have clear descriptions. The tool description adds no extra parameter-level meaning beyond the schema, which fits the baseline of 3.
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 clear resource ('recent anomalies detected by MerchantFlow') with concrete examples that define what counts as an anomaly. It is specific enough to separate this tool from generic getters, though it does not explicitly differentiate it from sibling reporting tools like get_recent_activity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to prefer this tool over alternatives, nor are any exclusions or related tools mentioned. The description only restates the action, leaving the agent to infer when 'get anomalies' is the right call relative to the many sibling reporting tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bank_balanceBank BalanceARead-onlyIdempotentInspect
Get the current bank balance, burn rate over the last 30/60/90 days, and projected runway in days.
| Name | Required | Description | Default |
|---|---|---|---|
| runway_periods | No | Day windows to compute burn rate over, e.g. [30, 60, 90] (default [30, 60, 90] when omitted); the largest value also sets how far back the burn history is aggregated, and the 30-day figure drives the runway projection. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| _message | No | |
| accounts | No | |
| currency | No | |
| burn_rate | No | Keyed by window, e.g. '30d'. Negative net profit is burn; positive is profitable. |
| _truncated | No | |
| account_count | No | |
| runway_status | No | |
| _tenant_context | No | |
| current_balance | No | Sum of every active account’s latest balance in the reporting currency. Null when any account had no FX rate - report the gap rather than a partial total. |
| last_recorded_at | No | The OLDEST per-account recording date, so it shows how stale the weakest account is. Balances are manually tracked and lag real cash. |
| unconverted_accounts | No | Above zero means current_balance and projected_runway_days are null. |
| projected_runway_days | No | From the 30-day burn only. Null when the store is profitable or the balance could not be totalled. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds context about the data scope (burn rate windows, runway) but does not disclose additional behavioral details such as authentication requirements, rate limits, or error handling. Given annotations carry the safety burden, a 3 is appropriate for the added 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?
A single, compact sentence that front-loads the primary output (current bank balance) and then lists the secondary metrics. There is no redundant or filler text; every clause conveys essential information about the tool's output.
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 an optional parameter, a full output schema, and annotations covering safety, the description provides sufficient information for an agent to understand what the tool returns and how to invoke it. The parameter's optionality and defaults are in the schema, and the output schema defines return values, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter is fully documented in the schema, including the default behavior and how the largest window affects burn history aggregation. The description mentions '30/60/90 days' but does not name or explain the parameter beyond what the schema already provides. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves the current bank balance, burn rate over 30/60/90 days, and projected runway in days. This is a specific, action-oriented verb ('Get') with a clear resource and distinct outputs, differentiating it from sibling tools like get_pnl_summary or get_cac_payback which focus on other financial metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (financial health check) but does not explicitly state when to use this tool versus alternatives, nor any exclusions or conditions. Since it is a distinct getter for bank data among many getters, the purpose itself provides implied guidance, but the lack of explicit comparison or alternative routing leaves some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bottom_productsBottom Products by ProfitARead-onlyIdempotentInspect
Get the bottom N products ranked by profit or margin. Useful for finding SKUs that are losing money. Supports a minimum units filter to drop low-volume noise.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of products to return (default 10, hard-capped at 50). | |
| rank_by | Yes | Metric to rank products by, lowest first: net profit after overhead allocation, or net margin percentage. | |
| end_date | Yes | End of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). | |
| start_date | Yes | Start of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). | |
| exclude_below_units | No | Drop products that sold fewer than this many units in the period, to filter out low-volume noise (default 0, meaning no filter). |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| period | No | |
| rank_by | No | |
| _message | No | |
| products | No | |
| _truncated | No | |
| _tenant_context | No | |
| min_units_filter | No | Products below this unit count were excluded, so a low-volume loser may be absent. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds context about low-volume noise filtering, but this is already largely present in the schema description for exclude_below_units, and no additional behavioral details like tie-handling or data completeness are provided.
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 concise sentences, front-loaded with the core purpose, followed by rationale and a key filtering capability. Every sentence contributes meaningful information with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple list-style tool, a full output schema, and rich parameter descriptions, the description is nearly complete. It could slightly improve by explicitly contrasting with get_top_products, but nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter already well-described including formats, defaults, and semantics. The description's mention of a 'minimum units filter' and 'bottom N' adds narrative framing but no new technical details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a concrete resource ('bottom N products'), and the ranking basis ('by profit or margin'). It clearly identifies the tool's purpose of finding losing SKUs and implicitly differentiates itself from siblings like get_top_products.
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 a clear use case: 'Useful for finding SKUs that are losing money,' which tells an agent when to call this tool. However, it doesn't explicitly name alternatives or state when not to use it, so it lacks exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cac_paybackCAC and PaybackARead-onlyIdempotentInspect
Get overall customer acquisition cost and payback metrics for a date range.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | End of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). | |
| start_date | Yes | Start of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| _meta | No | |
| period | No | |
| overall | No | |
| _message | No | |
| channels | No | Empty when per-channel acquisition detail is unavailable for this tenant; read `note` in that case. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the 'overall' aggregation qualifier but otherwise does not explain calculation basis, segmentation, or response behavior; with annotations present, this is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 13-word sentence leads with the resource and scope, with no filler or redundant restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only metrics call, the complete parameter schema and available output schema cover the necessary detail. The description is enough to invoke and scope the call, though the exact meaning of 'payback metrics' is left to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters are already documented with format, timezone resolution, and inclusive bounds. The description adds no parameter semantics beyond what the schema provides, 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 action ('Get'), a specific resource ('overall customer acquisition cost and payback metrics'), and a scope ('for a date range'). The resource is unique among the sibling tools, so an agent can identify it without inspecting 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 description provides no guidance on when to prefer this tool over related metrics tools such as get_ad_performance, get_channel_roas, or get_ltv_summary, and no exclusions or prerequisites. The date-range wording only restates what the input schema already encodes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_channel_roasChannel ROASARead-onlyIdempotentInspect
Get blended MER (Marketing Efficiency Ratio) and per-platform spend over a date range, with optional comparison to the previous period. Each row also carries platform_reported_revenue and platform_reported_roas - the ad platform’s own self-attributed claim. These figures are non-additive across platforms because Meta and Google may claim the same order; MerchantFlow-attributed revenue remains null in this result.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | End of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). | |
| compare_to | No | Set to 'previous_period' to also compute the same metrics for the immediately preceding period of equal length and return the percentage change in blended MER; omit for no comparison. | |
| start_date | Yes | Start of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| period | No | |
| current | No | |
| _message | No | |
| _truncated | No | |
| comparison | No | Present only when compare_to was requested, null otherwise. |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: the non-additive nature of platform-reported figures, the fact that Meta and Google may double-claim orders, and that MerchantFlow-attributed revenue is null in this result. This goes beyond the annotations and helps the agent interpret results correctly.
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 with zero waste. The core purpose is front-loaded, the optional comparison is stated, and the critical non-additivity caveat is placed at the end where it can be absorbed without obscuring the main function. 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?
The description is complete for a read-only analytics tool with a rich output schema. It explains the key metric (blended MER), the per-platform breakdown, the optional comparison, and the critical interpretation caveat (non-additive, null MerchantFlow revenue). The only minor gap is not describing the exact output shape, but the output schema exists and covers that.
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 schema already documents all three parameters. The description adds context about the compare_to parameter ('optional comparison to the previous period') and the date range, but does not add syntax or format details beyond the schema. Baseline 3 is correct when the schema carries the parameter documentation burden.
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 ('Get'), a specific resource (blended MER and per-platform spend over a date range), and adds a distinctive scope (optional comparison to previous period). It clearly distinguishes itself from sibling tools like get_ad_performance or get_revenue_breakdown by naming the exact metrics and the non-additive caveat.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when you need blended MER and per-platform spend with optional period comparison. It does not explicitly name alternatives or exclusions, but the specificity of the metrics and the caveat about non-additivity give clear context. A 4 is appropriate because it lacks an explicit 'use this instead of X' statement but is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cogs_coverageCOGS CoverageARead-onlyIdempotentInspect
Report how much of the store's catalogue, units sold, and revenue is covered by COGS data over a date range (default: last 30 days), including margin distribution and the top products still missing costs.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | End of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (default: today). | |
| start_date | No | Start of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (default: 30 days before end_date). |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| _message | No | |
| coverage | No | |
| _truncated | No | |
| date_range | No | |
| missing_skus | No | Up to 50 SKUs sold in the period with no cost recorded. |
| top_performers | No | Top products by revenue. |
| _tenant_context | No | |
| bottom_performers | No | Bottom products by margin. |
| margin_distribution | No | |
| products_missing_cogs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context about the computation scope (date range, default last 30 days) and report contents (coverage of catalogue, units, revenue, margin distribution, missing-cost products), which enriches behavioral understanding beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core action ('Report how much... is covered') and efficiently includes key output dimensions. No filler or redundant phrases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists and parameters are fully documented, the description provides a sufficient overview of the report's scope and contents. It could mention edge cases or data handling, but these are not necessary for correct invocation given the rich schema and annotations.
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%; both start_date and end_date are fully documented with formats, defaults, and timezone behavior. The description only restates the default date range and adds no further parameter-level meaning, so the baseline score of 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?
The description states a specific verb and resource: 'Report how much of the store's catalogue, units sold, and revenue is covered by COGS data.' It also details output components (margin distribution, top missing-cost products), making it clearly distinct from siblings like get_item_cogs or list_cogs that likely return raw COGS data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as find_cogs_gaps or get_item_cogs. The description implies it is a coverage overview but does not state conditions or prerequisites for choosing it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cohort_analysisCustomer Cohort AnalysisBRead-onlyIdempotentInspect
Get customer cohort analysis showing LTV, repeat purchase rate, and revenue by cohort month/week over time.
| Name | Required | Description | Default |
|---|---|---|---|
| metric | Yes | Metric to track per cohort period: 'ltv' and 'revenue' both show accumulated revenue per customer over time, 'repeat_rate' shows the repurchase rate. | |
| period | Yes | Cohort grouping granularity: group customers by acquisition month or acquisition week. | |
| cohort_end_date | Yes | End of the cohort acquisition window in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). | |
| cohort_start_date | Yes | Start of the cohort acquisition window in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| matrix | No | Cohort-by-period grid, truncated to the first 10 cohorts and 12 periods to stay inside the response limit. cohort_labels and period_headers are NOT truncated, so index past those bounds is absent by design, not missing data. |
| metric | No | |
| period | No | |
| summary | No | |
| _message | No | |
| metadata | No | |
| _truncated | No | |
| period_unit | No | |
| cohort_labels | No | |
| period_headers | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the 'over time' aspect and the cohort month/week grouping, which is somewhat behavioral. However, it does not disclose additional details such as pagination, result limits, or handling of missing data. Given annotations, this is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no redundant words. It front-loads the core action and immediately lists the key output metrics and grouping options. Every element earns its place, 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?
Given that an output schema exists (which presumably describes the return format), the description does not need to explain return values. The essential aspects for calling the tool—what it returns and the parameters—are covered by the schema. The description provides a clear high-level overview. The only minor gap is the lack of explicit usage context, but for a read-only query tool with rich schema and annotations, this is adequate.
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 parameters are already documented in the input schema. The description only reiterates the metric names and period granularity, which are already present in the schema's enum descriptions. It adds no new semantic information beyond what the schema provides, so the baseline score of 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?
The description clearly states the verb 'Get' and the resource 'customer cohort analysis', and lists the key metrics (LTV, repeat purchase rate, revenue) and time granularity (month/week). It is specific and unambiguous, but it does not explicitly differentiate from sibling tools like get_ltv_summary or run_repeat_purchase_rate, which could overlap in purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. For example, it does not explain when to prefer cohort analysis over a simple LTV summary or repeat rate report, nor does it mention any prerequisites or context. The agent is left to infer usage from the tool name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_combined_pnlCombined P&L Across StoresARead-onlyIdempotentInspect
Combined profit and loss across every linked store for a date range (default: last 30 days), converted into one reporting currency. Set per_store to also get the per-store breakdown. Requires a plan covering more than one store.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | End of the date range, in YYYY-MM-DD format, resolved in the tenant's timezone. Defaults to today. | |
| per_store | No | Include the per-store breakdown alongside the combined totals. | |
| start_date | No | Start of the date range, in YYYY-MM-DD format, resolved in the tenant's timezone. Defaults to 30 days before end_date. | |
| reporting_currency | No | ISO 4217 code to convert every store into. Defaults to the primary store currency. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| reason | No | |
| totals | No | |
| message | No | Present on the plan-boundary and no-linked-stores responses, in place of totals. |
| partial | No | True when unconverted_store_count is non-zero. Say the total is partial rather than presenting it as complete. |
| _message | No | |
| available | No | Present, and always false, when the plan covers a single store. Its absence is the success case. |
| per_store | No | Omitted entirely unless a per-store breakdown was requested. |
| _truncated | No | |
| date_range | No | |
| store_count | No | |
| _tenant_context | No | |
| reporting_currency | No | The single currency every total below was converted into. |
| unconverted_store_count | No | Stores dropped for a missing FX rate. Non-zero means every total is PARTIAL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, idempotent, and non-destructive safety profile. The description adds behavioral context beyond that: the default last-30-day range, conversion into one reporting currency, and the multi-store plan requirement. No contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences that front-load the core purpose and scope, then mention the optional breakdown and the prerequisite. There is no filler, repetition of the schema, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that all parameters are optional, richly described in the schema, and an output schema exists, the description provides the remaining operational context: default date range, currency conversion, per-store mode, and the plan requirement. 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 100%, so the baseline is 3. The description lightly reinforces per_store and reporting_currency, but it does not add meaning beyond what each parameter's schema description already 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?
The description states a specific verb ('get'), a concrete resource ('combined profit and loss across every linked store'), and key qualifiers: date range, currency conversion, and the per-store breakdown option. It clearly distinguishes itself from single-store P&L tools by emphasizing 'across every linked store' and 'combined'.
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 prerequisite ('Requires a plan covering more than one store') and explains when to set per_store. It does not explicitly point to an alternative tool for single-store P&L, so the when-not-to-use guidance is implicit rather than fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_customer_detailCustomer DetailARead-onlyIdempotentInspect
Get lifetime value detail for a single customer: net profit, revenue, CAC, tenure, and order history (most recent 200 orders). Customer name and email in the response are partially redacted. The customer identifier is the id returned in the customer lifetime value list.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | Customer id, from list_customers. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| cac | No | |
| _meta | No | |
| No | Partially redacted email, e.g. 'a***@example.com'. | |
| orders | No | Most recent 200 orders. |
| _message | No | |
| currency | No | |
| _truncated | No | |
| margin_ltv | No | |
| hash_suffix | No | Last six characters of the email hash. The stable identifier when name and email are absent. |
| order_count | No | |
| revenue_ltv | No | |
| tenure_days | No | |
| customerName | No | Partially redacted display name, e.g. 'A*** (5 chars)'. |
| margin_ratio | No | |
| last_order_at | No | |
| ltv_cac_ratio | No | |
| total_refunds | No | |
| first_order_at | No | |
| _tenant_context | No | |
| avg_order_value | No | |
| total_discounts | No | |
| avg_order_profit | No | |
| acquisition_channel | No | |
| attribution_enabled | No | |
| days_since_last_order | No | |
| acquisition_country_code | No | |
| total_allocated_overhead | No | Overhead subtracted from contribution margin to derive margin_ltv. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is known. The description adds valuable behavioral context beyond annotations: customer name and email are partially redacted, and order history is capped at the most recent 200 orders. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with zero fluff. The core action is front-loaded, followed by output scope and identifier provenance, and each sentence contributes distinct 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 single-parameter, read-only tool with a rich output schema and comprehensive annotations, the description fully covers redaction, the 200-order cap, and identifier provenance. 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 covers the only parameter (customer_id) at 100%, giving the source as 'from list_customers.' The description reinforces this by saying the id comes from the customer lifetime value list, but that's a minor addition rather than substantive semantic enrichment. 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?
The description uses a specific verb ('Get') and resource ('lifetime value detail for a single customer'), and enumerates the exact fields returned: net profit, revenue, revenue, CAC, tenure, and order history. This clearly differentiates it from aggregate siblings like get_ltv_summary and direct list tools like list_customers.
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 clear context: the tool is for a single customer and requires the customer id from the customer lifetime value list. However, it doesn't explicitly name alternatives or state when not to use this tool, so it falls just short of full exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_date_range_summaryDate Range SummaryARead-onlyIdempotentInspect
Get a high-level summary of revenue, profit, orders, ad spend, and top metrics for an arbitrary date range, suitable for quick time-period comparisons.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | End of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). | |
| start_date | Yes | Start of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| period | No | |
| _message | No | |
| currency | No | |
| _truncated | No | |
| key_metrics | No | |
| cost_breakdown | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description aligns with these. The description adds useful context about arbitrary date ranges and high-level aggregation, but it does not disclose additional behavioral caveats such as how data is aggregated or whether results are cached.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that names the tool's purpose, the metrics involved, and the intended use case without redundant words. It is concise, structured, and scannable.
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 only two well-documented parameters and an output schema present, the description plus schema provide enough information for an agent to invoke the tool correctly. It lacks explicit sibling differentiation, but that is not essential for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both start_date and end_date fully documented including format, timezone resolution, and inclusivity. The description adds no additional parameter-specific meaning, which is acceptable because the schema already carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns a high-level summary of specific metrics (revenue, profit, orders, ad spend, top metrics) for an arbitrary date range. It conveys the verb and resource well, but it does not explicitly differentiate itself from similar sibling tools like get_pnl_summary or get_revenue_breakdown.
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 'suitable for quick time-period comparisons' gives clear usage context, indicating when an agent would choose this tool. However, it does not provide explicit when-not-to-use guidance or name alternatives among the many overlapping summary tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_discount_code_performanceDiscount Code PerformanceARead-onlyIdempotentInspect
Get per-discount-code margin metrics: uses, revenue, discount cost, COGS, allocated ad spend, gross profit, and margin percent, ranked by any column. Pre-aggregated rolling timeframes provide the fastest results, while an explicit start_date/end_date produces a custom range computed live.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, 1-based (default 1). | |
| sort_by | No | Sort field, default 'grossProfit'. | |
| end_date | No | Custom range end (YYYY-MM-DD, tenant timezone). Requires start_date. | |
| page_size | No | Rows per page, 1 to 100 (default 25). | |
| timeframe | No | Pre-aggregated rolling window: 'today', '7d', '30d' (default), '90d', or '1y'. Ignored when start_date and end_date are both provided. | |
| sort_order | No | Sort direction, default 'desc'. | |
| start_date | No | Custom range start (YYYY-MM-DD, tenant timezone). Requires end_date. Overrides timeframe. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| codes | No | |
| period | No | |
| source | No | Whether the figures came from the pre-computed cache or were calculated live for this request. |
| summary | No | |
| _message | No | |
| _truncated | No | |
| pagination | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful behavioral context: rolling timeframes are pre-aggregated and fastest, while explicit dates are computed live. No contradiction with annotations exists.
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 with no filler. The core metrics and the key parameter tradeoff are front-loaded, and 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?
Given the output schema and rich annotations, the description covers the essential purpose, returned metrics, and the main parameter behavior. It is complete enough for correct invocation, though it does not discuss pagination or sort defaults, which the schema already documents.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful cross-parameter semantics by explaining the performance difference between timeframe and explicit start_date/end_date. This goes beyond individual schema property descriptions and helps the agent choose the right parameter combination.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get per-discount-code margin metrics', then enumerates the exact fields returned. This level of detail clearly distinguishes it from sibling tools like get_ad_performance or get_pnl_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for selecting between pre-aggregated rolling timeframes and a custom live-computed date range, including the performance tradeoff. It does not explicitly name sibling alternatives or exclusion criteria, but the usage context is practical and clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_expenses_breakdownExpenses BreakdownARead-onlyIdempotentInspect
Get OPEX and CAPEX expenses broken down by category and vendor over a date range, including recurring expenses and CAPEX amortisation.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter to a single expense category, matched exactly against the recorded Expense category; omit to include every category. | |
| end_date | Yes | End of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). | |
| start_date | Yes | Start of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). | |
| include_capex | No | Include CAPEX expenses alongside OPEX in the by_category/by_vendor breakdown (default true); set to false to return only OPEX. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| period | No | |
| totals | No | |
| _message | No | |
| by_vendor | No | Top 20 vendors by amount, from recorded Expense entries only. |
| _truncated | No | |
| by_category | No | Recorded Expense entries only. COGS, ad spend, payment fees, shipping and fulfilment appear in `totals` but NOT here, so these rows do not sum to dashboard_total_expenses. |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds behavioral context about what the result includes ('including recurring expenses and CAPEX amortisation') and the breakdown dimensions. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is one tight sentence that front-loads the verb and resource, then adds only the two most informative details (breakdown dimensions and inclusion of recurring/amortisation). Every clause earns its place, and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a read-only filtered list with an output schema, and the annotations cover safety, so the description's single sentence is close to sufficient. The only real gap is the absence of usage-routing guidance relative to sibling tools, which is captured separately. For an agent deciding whether the tool fits, the description plus schema and annotations are enough.
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%; the schema already documents start_date, end_date, category, and include_capex with formats and defaults. The description does add the 'by category and vendor' framing, but that more describes the output than the parameters. Baseline 3 applies because the schema carries the parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') with a named resource ('OPEX and CAPEX expenses') and defines the output breakdown ('by category and vendor') over a date range. It also names unique inclusions ('recurring expenses and CAPEX amortisation') that set it apart from siblings like get_revenue_breakdown or get_pnl_summary. Even without naming a sibling explicitly, the content clearly identifies what this tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context (when an expense breakdown is needed) but gives no explicit 'use this instead of X' guidance or exclusion boundaries. Alternatives like get_revenue_breakdown or get_combined_pnl are not mentioned, leaving the choice to inference. This is better than nothing but below the explicit routing bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_integration_statusIntegration StatusARead-onlyIdempotentInspect
Get the connection status of all integrations (Shopify, WooCommerce, GA4, ad platforms, SpeedFulfill) including last sync time and any errors.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| summary | No | |
| _message | No | |
| _truncated | No | |
| integrations | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds context about output content (last sync time, errors) but reveals no behavioral traits beyond what a read-only status query implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with the action upfront, followed by the integration list and the two output components. 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?
With zero parameters, rich annotations, and an output schema present, the description is complete for invocation. The enumeration and mention of errors/last sync cover what the response contains; the output schema handles detailed fields.
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?
There are zero parameters and the schema has no properties, so there is nothing for the description to add. The 0-parameter baseline of 4 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?
Description starts with a specific verb ('Get') and a precise resource ('connection status of all integrations'), and enumerates the exact integrations. This scope clearly distinguishes it from sibling status tools like get_mca_status and get_north_star_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when a global integration-health check is needed (all integrations, last sync time, errors), but it never states when to prefer this tool over siblings or when not to use it. There are no exclusion conditions or alternative tool mentions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_item_cogsItem Cost of GoodsARead-onlyIdempotentInspect
Get the current cost of goods sold and full cost history for one item, identified by sku, product_id (internal product id), or variant_id (the commerce platform's variant id, e.g. the Shopify variant id - not an internal uuid). Optional on_date returns the cost effective on that date.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | No | The item's SKU. Provide at least one of sku, product_id, or variant_id. | |
| on_date | No | Return the cost effective on this date, in YYYY-MM-DD format, resolved in the tenant's timezone (default: today). | |
| product_id | No | The internal MerchantFlow product id (Product.id), not the commerce platform's own product id. Provide at least one of sku, product_id, or variant_id. | |
| variant_id | No | The commerce platform's own variant id (e.g. the Shopify variant id), not the internal ProductVariant.id. Provide at least one of sku, product_id, or variant_id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| _meta | No | |
| as_of | No | |
| current | No | The cost effective on the requested date, or null when the item has none. |
| history | No | Every cost record for the item, newest first. |
| _message | No | |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the tool is read-only and idempotent. The description adds useful behavioral detail beyond that: it returns both current COGS and full cost history, and on_date changes the effective valuation date. This is meaningful context without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with the primary action and scope front-loaded, followed by the identifier options and optional date behavior. Every sentence earns its place and there is no filler or redundant explanation.
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 single-item lookup with a rich input schema, detailed annotations, and an output schema, the description covers what the tool does, how to identify the item, and the optional historical-date behavior. No additional context is needed for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters in detail. The description mostly restates the schema's identifier guidance and adds only a small clarification about variant_id being the commerce platform's id, which is already present in the schema. It therefore adds little beyond the 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?
The description opens with 'Get the current cost of goods sold and full cost history for one item,' which names a specific verb, resource, and scope. It further clarifies the three accepted identifiers, making it easy to distinguish from siblings like list_cogs or get_cogs_coverage.
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 clearly scopes the tool to a single item and explains the optional on_date behavior, which gives strong contextual guidance. It does not explicitly name sibling alternatives or state when not to use it, but the 'for one item' phrasing implies the boundary versus list-style tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ltv_summaryLifetime Value SummaryARead-onlyIdempotentInspect
Get customer lifetime value summary, optionally segmented by country, including average LTV, CAC, and LTV:CAC ratio.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | End of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). | |
| segment_by | No | How to segment LTV: 'channel' groups by acquisition channel (only available when attribution is enabled for the tenant), 'country' groups by shipping country, 'first_product' is not supported in this MCP release and returns no segment rows. Defaults to 'channel' when attribution is enabled for the tenant, otherwise 'country'. | |
| start_date | Yes | Start of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Plain-language caveat the assistant should relay rather than paraphrase. |
| _meta | No | |
| period | No | |
| overall | No | |
| _message | No | |
| segments | No | |
| _truncated | No | |
| segment_by | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the description need not re-state safety. The description adds value by naming the computed metrics (LTV, CAC, ratio) and the optional segmentation, which gives the agent a sense of the output scope. However, it does not disclose behavior like timezone handling (already in schema) or error conditions. The addition of metric names is useful, but not extensive, so a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence, front-loaded with the core purpose and then optional segmentation. Every word is necessary; no filler. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is an output schema (visible to the agent, though not fully in the prompt) and rich annotations, the description sufficiently covers the tool's purpose and key fields. The only missing element is explicit guidance on when to use it versus other LTV-related siblings, but given the tool's simplicity and the output schema, it is mostly complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for all three parameters, with detailed descriptions of each parameter in the schema. The description mentions 'segmented by country' which maps to the segment_by enum but does not add syntax or type details beyond what the schema provides. The description does clarify that only 'country' is available in this release (though the schema is more detailed, it includes other enum values), but the schema description already covers this nuance adequately. Since the schema handles semantics, the description adds minimal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns customer lifetime value summary with optional segmentation by country and includes the key metrics (average LTV, CAC, LTV:CAC ratio). It is a specific verb-resource pair ('Get LTV summary') that distinguishes it from sibling analytics tools. The description is concise and action-oriented, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving LTV summaries, but it does not explicitly state when to use this tool versus siblings like get_cac_payback or get_cohort_analysis. There is no mention of prerequisites (e.g., attribution enabled) or when NOT to use it. However, the description does mention the optional segmentation, giving some context. The lack of explicit guidance for alternative tools prevents a higher score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_productsProducts by MarketARead-onlyIdempotentInspect
Get the Markets country drilldown for a date range, ranked by variant and bundle contribution margin using the same service as the dashboard.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of variants (and bundles, if included) to return, ranked by contribution margin (default 50, hard-capped at 100). | |
| end_date | Yes | End of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). | |
| start_date | Yes | Start of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive); clamped forward to the plan's history window if it reaches further back than allowed. | |
| country_code | Yes | ISO 3166-1 alpha-2 shipping country code to drill into, e.g. 'US' or 'AU'. | |
| include_bundles | No | Include product bundle rows alongside individual variants (default true). |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| period | No | |
| bundles | No | Empty when include_bundles is false or the tenant defines no bundles. |
| filters | No | |
| _message | No | |
| currency | No | |
| metadata | No | |
| variants | No | |
| _truncated | No | |
| country_code | No | |
| country_name | No | |
| _tenant_context | No | |
| history_clamped | No | Null when the requested range fell inside the plan history window. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds behavioral context by noting results are ranked by variant and bundle contribution margin and that the tool uses the same service as the dashboard. This is useful but not extensive; it does not describe output structure or pagination, though an output schema exists.
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 30-word sentence with no filler and the key purpose is front-loaded. The phrase 'using the same service as the dashboard' is somewhat vague but not wasted; it gives a provenance signal. It is appropriately concise and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema (100% parameter coverage), strong annotations, and presence of an output schema, the description covers what is needed for basic invocation. It could improve by explicitly naming sibling alternatives or clarifying the product-list output shape, but for a read-only, well-schematized tool it is substantially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and every parameter already has a meaningful description covering defaults, formats, clamping behavior, and timezone resolution. The tool description adds no additional parameter-level meaning, so the baseline 3 is appropriate: the schema does the heavy lifting and the description does not need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Get'), a resource ('Markets country drilldown'), and a ranking criterion ('variant and bundle contribution margin'), which makes the core purpose clear. It does not explicitly distinguish itself from closely related siblings like get_markets or get_top_products, but the 'country drilldown' and product-level focus separate it enough for a 4.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when a country-level product drilldown ranked by contribution margin is needed. However, it gives no explicit guidance about when not to use it or which alternative sibling tools to prefer, such as get_markets for country aggregates or get_top_products for global rankings. The usage context is clear but the routing guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_marketsMarkets OverviewARead-onlyIdempotentInspect
Get the Markets dashboard table for a date range, including real geo ad spend, blended fallback spend, revenue, net profit, margins, ROAS, POAS, CAC, and spend-without-orders markets.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of markets to return after sorting (default 50, hard-capped at 100). | |
| sort_by | No | Metric to sort markets by, highest first. 'dashboard' (default) uses the dashboard's own net-profit-based ordering; other values sort directly by that metric: net_profit, revenue, orders, spend, net_margin_pct, roas, poas, cac. | |
| end_date | Yes | End of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). | |
| start_date | Yes | Start of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive); clamped forward to the plan's history window if it reaches further back than allowed. | |
| country_codes | No | Restrict results to these ISO 3166-1 alpha-2 shipping country codes (up to 50); omit to return every market with activity in the period. | |
| include_spend_without_orders | No | Include markets that had ad spend but no orders in the period (default true); set to false to hide spend-without-orders markets. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| period | No | |
| filters | No | |
| markets | No | |
| summary | No | |
| _message | No | |
| coverage | No | |
| currency | No | |
| metadata | No | |
| _truncated | No | |
| _tenant_context | No | |
| history_clamped | No | Null when the requested range fell inside the plan history window. |
| total_matching_markets | No | Markets matching the filters before `limit` was applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is established. The description adds useful behavioral context by specifying that results include real geo ad spend, blended fallback spend, revenue, net profit, margins, ROAS, POAS, CAC, and spend-without-orders markets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that opens with the action and resource and then enumerates the included metrics. It is concise, information-dense, and contains 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?
Given the rich parameter schema, output schema, and annotations, the description covers the essential intent and output scope. Nothing critical for selecting or invoking the tool 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 description coverage is 100%, with detailed parameter descriptions for start_date, end_date, limit, sort_by, country_codes, and include_spend_without_orders. The tool description does not add parameter-level meaning beyond the schema, so the baseline score of 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?
The description uses a specific verb and resource: 'Get the Markets dashboard table for a date range'. It lists the exact metrics included, making the tool's purpose unmistakable and distinguishing it from related market/product tools like get_market_products.
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 clearly states the tool returns the Markets dashboard table for a date range, so an agent knows when this tool is appropriate. It does not explicitly name alternatives or exclusions, but the context is clear enough for selection among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mca_statusRevenue-Based Funding StatusARead-onlyIdempotentInspect
Get active revenue-based funding (MCA) agreements, repayment schedule, and impact on current period P&L.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| _message | No | |
| currency | No | The tenant-level reporting currency. Per-agreement amounts are in each agreement’s own currency. |
| _truncated | No | |
| agreements | No | |
| total_repaid | No | |
| _tenant_context | No | |
| total_remaining | No | |
| active_agreements | No | |
| has_estimated_figures | No | True when any agreement’s repaid figure is a projection rather than logged remittances. |
| projected_payoff_date | No | YYYY-MM-DD. |
| unconverted_agreements | No | Agreements excluded from the totals for want of an FX rate. |
| daily_repayment_estimate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe, non-mutating operation. The description adds two behavioral specifics: it filters for 'active' agreements and includes the 'impact on current period P&L'. These are useful, but the description does not disclose edge cases (e.g., behavior when no active agreements exist, or whether the P&L impact is a calculated figure). Given the annotations cover the safety profile, the description's added value is moderate, warranting a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly worded sentence that front-loads the action ('Get') and lists the key outputs (agreements, repayment schedule, P&L impact). Every word contributes to the meaning, with no redundancy or filler. It is appropriately concise and well-structured for a simple read-only 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?
Given the tool has no parameters and an output schema exists (which will define the return fields), the description only needs to convey the high-level content, which it does: it specifies the three main components (active agreements, repayment schedule, and current-period P&L impact). For a no-argument read-only tool, this is fully sufficient for an agent to call it correctly and interpret the response shape via the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema is empty with 100% coverage. According to the rubric, a 0-parameter tool receives a baseline score of 4. The description does not need to elaborate on parameters since there are none, and it correctly omits any parameter-related discussion. No additional semantic value is required or possible here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: it retrieves active revenue-based funding (MCA) agreements, repayment schedule, and their impact on the current period P&L. This is a specific verb-resource pairing (get + MCA status) that distinguishes it from sibling tools like get_bank_balance or get_pnl_summary, which address different financial aspects. The term 'MCA' is defined, removing ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool—whenever an agent needs MCA agreement details, repayment schedules, or their effect on P&L. It does not explicitly name alternative tools or state when not to use it, but the specificity of the resource (MCA) makes the usage context unambiguous. A small exclusion note would have made it perfect, but it is not necessary for this straightforward read.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_north_star_statusNorth Star MetricsARead-onlyIdempotentInspect
Get the current status of all configured North Star KPIs with target, actual, delta, and trend direction.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Comparison window for the KPIs: 'today', 'week' (last 7 days), 'month' (last 30 days), or 'quarter' (last 90 days). Defaults to 'month' when omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kpis | No | |
| _meta | No | |
| period | No | The period the KPIs cover, e.g. 'month'. |
| _message | No | |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds modest context beyond those annotations by specifying that this is a snapshot of configured KPIs and listing the computed fields returned, but it reveals no further behavioral traits such as freshness or aggregation 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 19-word sentence that front-loads the verb and resource, then compresses the deliverable into four concrete data fields. Zero filler words; every element 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 low-complexity, read-only tool with one fully described optional parameter, a rich annotation set, and an output schema, the description covers the essential payload (target, actual, delta, trend). The only gap is usage/alternative context, which is minor given how self-contained and unambiguous this tool is.
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%: the single optional 'period' parameter is fully documented in the schema with its enum values, their exact date windows, and the 'month' default when omitted. The description adds nothing about parameters, but with this coverage the baseline 3 is appropriate — the schema carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get'), an exact resource ('status of all configured North Star KPIs'), and enumerates the returned fields (target, actual, delta, trend direction). The 'current status' framing plus the field list makes it distinct from every sibling, none of which target North Star KPIs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no when-to-use guidance, no exclusions, and no alternative tools. Unlike get_calls, it never names a sibling to prefer for other metric questions (e.g., get_anomalies, get_pnl_summary), so an agent must infer the appropriate context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pnl_summaryProfit and Loss SummaryARead-onlyIdempotentInspect
Get a profit and loss summary for the tenant's store over a date range, broken down by revenue, COGS, ad spend, expenses, fees, and net profit. Optionally compare to the previous period or previous year for percentage deltas.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | End of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). | |
| compare_to | No | Optional comparison window - 'previous_period' compares to the immediately preceding range of equal length; 'previous_year' compares to the same date range last year | |
| start_date | Yes | Start of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| period | No | |
| totals | No | |
| _message | No | |
| currency | No | |
| _truncated | No | |
| comparison | No | Null unless compare_to was supplied. |
| store_name | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the comparison feature and the breakdown categories, but does not disclose additional behaviors like data freshness, handling of missing periods, or whether the summary is tenant-scoped (though that's implied). It does not contradict annotations, so a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core purpose and then mentions the optional comparison. No wasted words; it is concise and immediately informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (not shown but present), the description need not detail return values. The description covers the main behavior, optional comparison, and the breakdown components. Minor gaps like timezone resolution are already in parameter descriptions, and the read-only nature is in annotations. It is adequately complete for a read-only summary 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 parameters (start_date, end_date, compare_to) are already well-documented with types, formats, and meaning. The description reinforces the date-range and comparison concepts but adds no new parameter syntax or constraints beyond what the schema provides. Baseline 3 applies when schema carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves a profit and loss summary over a date range, broken down by specific financial components, and optionally compares to previous periods. It names the resource (P&L summary), the action (get), and the scope (date range), which distinguishes it from siblings like get_revenue_breakdown or get_expenses_breakdown.
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 its use case (getting a P&L summary) but does not explicitly state when to prefer this over alternatives like get_combined_pnl or get_date_range_summary. No exclusions or alternative tools are mentioned, so the agent must infer when this is the right choice from the tool name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_product_detailProduct DetailARead-onlyIdempotentInspect
Get detailed profitability for a specific product including current catalogue price, variant-level pricing breakdown, COGS, and 90-day trend from the analytics snapshots.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | The internal MerchantFlow product id (Product.id, the same value returned as product_id by get_top_products/get_bottom_products/find_cogs_gaps), not the commerce platform's own product id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| pricing | No | |
| product | No | |
| _message | No | |
| variants | No | |
| trend_90d | No | |
| _truncated | No | |
| _tenant_context | No | |
| financials_by_timeframe | No | Read from ProductMetricsCache, populated during sync - so these lag the last sync rather than being live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and idempotentHint=true, so the description does not need to repeat safety info. It adds value by clarifying the source of data ('from the analytics snapshots'), which hints at potential staleness and distinguishes it from real-time sources. This is useful context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that leads with the core purpose, then enumerates key data points, and ends with the data source. Every clause adds information; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and the presence of an output schema, most return details are covered. The description adequately sets expectations for what fields are returned (catalogue price, variant pricing, COGS, 90-day trend) and the parameter semantics are clear. A slight gap is not explaining that the data may be based on snapshots, but that is hinted.
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?
While the schema already covers the parameter at 100% coverage, the description adds critical disambiguation: the product_id must be the internal MerchantFlow id, not the commerce platform's. This is exactly the kind of semantic context that prevents misuse.
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 ('Get') and a precise resource ('detailed profitability for a specific product'), then lists the exact data returned: catalogue price, variant-level pricing, COGS, and 90-day trend. This clearly distinguishes it from siblings like get_customer_detail or get_top_products, which target different 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?
The description implies when to use it: when needing product-level profitability details, as opposed to aggregate or trend views. It doesn't explicitly state when not to use it or name alternatives, but the specificity is strong enough for an agent to infer the right context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_activityRecent ActivityBRead-onlyIdempotentInspect
Get a chronological feed of recent tenant activity: syncs, large orders, and integration events.
| Name | Required | Description | Default |
|---|---|---|---|
| since_hours | No | How many hours back to look for activity (1-168, default 24). | |
| activity_types | No | Only include these activity types in the feed (e.g. 'sync', 'large_order', 'integration_event'); omit to include every type. |
Output Schema
| Name | Required | Description |
|---|---|---|
| feed | No | Most recent 50 events. |
| _meta | No | |
| count | No | Total matching events, which may exceed the 50 returned in `feed`. |
| _message | No | |
| _truncated | No | |
| window_hours | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the behavioral detail of a 'chronological feed', which is useful, but does not disclose other potential behaviors like rate limits or response size constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that leads with the action and resource, and it packs the key detail (activity types) efficiently. No filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and annotations cover safety, the description covers the core purpose. It could mention the default time window (24 hours) explicitly, but that is already in the schema parameter description. Overall, it is sufficient for an agent to decide to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters having explicit descriptions. The tool description reiterates the activity type examples from the schema but adds no new semantic meaning beyond what the schema already 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?
The description states a clear verb ('Get') and resource ('recent tenant activity') and lists specific activity types (syncs, large orders, integration events). It is distinct from sibling tools by naming these feed categories, though it does not explicitly contrast with any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like get_anomalies or get_date_range_summary. The description does not indicate selection criteria or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_revenue_breakdownRevenue BreakdownBRead-onlyIdempotentInspect
Get revenue broken down by country over a date range.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | End of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). | |
| group_by | Yes | How to bucket revenue: 'source' groups by the order's attribution source (organic, paid, direct, email, referral), 'channel' groups by the named ad or marketing channel, 'country' groups by the ISO 3166-1 alpha-2 shipping country code, and 'category' currently returns no rows in this MCP release (use get_top_products for per-product revenue instead). 'source' and 'channel' require attribution to be enabled for the tenant. | |
| start_date | Yes | Start of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Present only when the requested grouping is unsupported, explaining what to call instead. |
| rows | No | Empty, with a `note`, when the requested grouping is unsupported in this release. |
| _meta | No | |
| period | No | |
| totals | No | |
| _message | No | |
| group_by | No | |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds minimal behavioral context (e.g., date-range scoping) but does not describe return format or pagination; the output schema exists but is not referenced. This is adequate given the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no redundant words. It front-loads the core action and scope, achieving maximum 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 read-only tool with an output schema and detailed parameter schema, the description is minimal but not wholly inadequate. It omits usage guidance and fails to correct the misleading group_by schema description. Given the complexity and the presence of many sibling tools, a bit more context would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter (start_date, end_date, group_by) having its own description. The tool description adds no parameter-level detail. However, the group_by schema description is inconsistent—it describes values like 'source' and 'channel' that are not in the enum (which only allows 'country')—and the tool description does not clarify this. Baseline of 3 applies since schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get revenue broken down by country over a date range' clearly states the verb, resource, and scope. It is specific enough to distinguish from many sibling tools that focus on other metrics, though it doesn't explicitly contrast with revenue-related siblings like get_pnl_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The sibling list includes numerous get_* tools, but the description offers no context on selection criteria, exclusions, or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_store_listConnected StoresARead-onlyIdempotentInspect
List the stores linked to this account, with each store's platform, currency, timezone, connection state and last sync time. The result defines the store set available for combined figures.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| reason | No | |
| stores | No | Absent on the plan-boundary response. |
| message | No | Present only on the plan-boundary response. |
| _message | No | |
| available | No | Present, and always false, when the plan covers a single store. Its absence is the success case. |
| _truncated | No | |
| store_count | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety is covered. The description adds the semantic context that the result is the store set for combined figures, which is useful but not a behavioral trait like side effects or auth requirements. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The main action is front-loaded, followed by the field list and a single clarifying statement about its role in combined figures. 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 simple list tool with no parameters, an output schema present, and annotations covering safety, the description is complete. It tells the agent exactly what the tool returns and the purpose it serves. No missing information is needed for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema fully covers them (100% coverage by trivially having none). The description does not need to add parameter information. It does mention output fields, but that is not parameter semantics; the baseline of 3 applies when schema coverage is high and no parameter info is added.
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 ('List'), a clear resource ('the stores linked to this account'), and enumerates the fields returned (platform, currency, timezone, connection state, last sync time). It also clarifies the purpose by defining this as the store set for combined figures, distinguishing it from other get_* tools like get_markets or get_integration_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context that this tool defines the store set available for combined figures, which implies when to use it (when you need the authoritative list of stores for aggregated metrics). However, it does not explicitly contrast with alternatives or state when not to use it, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tax_insightsTax InsightsARead-onlyIdempotentInspect
Get period tax totals and the blended effective tax rate over a trailing N-day window, plus a per-country split. Tax figures combine tax the platform reported on orders with tax computed from active manual TaxRule entries where the platform reported none (or a fixed-amount rule applies). Mirrors the dashboard tax settings page tiles.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Trailing window in days, 1 to 365 (default 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | No | The trailing window the figures cover. |
| _meta | No | |
| _message | No | |
| _truncated | No | |
| per_country | No | Only countries with nonzero tax in the window. Carries no per-country revenue split - use get_markets for that. |
| active_rules | No | Number of manual TaxRule entries currently active for this tenant. |
| effective_tax | No | tax_collected + tax_estimated. |
| gross_revenue | No | |
| tax_collected | No | Tax the commerce platform reported on orders, net of any manual-rule estimate folded into the same figure. |
| tax_estimated | No | Tax computed from an active manual TaxRule where the platform reported none, or where a fixed-amount rule applies. |
| _tenant_context | No | |
| blended_rate_pct | No | effective_tax / gross_revenue as a percentage. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral detail by explaining that tax figures combine platform-reported order tax with computed manual TaxRule entries where the platform reported none or a fixed-amount rule applies. This clarifies the underlying calculation behavior beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. The primary output is front-loaded, the second sentence explains a nuanced data-combination behavior, and the third sentence gives a useful dashboard comparison. 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?
Given the tool has one optional parameter, a rich output schema, and safety annotations, the description is largely complete: it states the result components, the data sources, and the calculation nuance. The only gap is the absence of explicit alternative-tool routing, but that is already accounted for under usage guidelines.
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% for the single 'days' parameter, including its bounds and default value. The description only mentions a 'trailing N-day window' and does not add extra parameter-level semantics, so it neither compensates for missing schema documentation nor adds meaningful value beyond it.
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 and resource: 'Get period tax totals and the blended effective tax rate over a trailing N-day window, plus a per-country split.' This clearly distinguishes it from sibling reporting tools by naming tax-specific outputs and the country breakdown, so an agent can recognize its purpose without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for tax-period summaries by noting it 'Mirrors the dashboard tax settings page tiles,' but it does not explicitly state when to use this tool over alternatives or when not to use it. No sibling alternative is named, so the usage guidance is only 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_top_productsTop Products by ProfitARead-onlyIdempotentInspect
Get the top N products ranked by revenue, profit, margin, or units sold over a date range using the same order-based product profit math as the dashboard.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of products to return (default 10, hard-capped at 50). | |
| rank_by | Yes | Metric to rank products by, highest first: gross revenue, net profit after overhead allocation, net margin percentage, or units sold. | |
| end_date | Yes | End of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). | |
| start_date | Yes | Start of the date range in YYYY-MM-DD format, resolved in the tenant's timezone (inclusive). |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Present only when no product sales were found in the range. |
| _meta | No | |
| period | No | |
| rank_by | No | |
| _message | No | |
| products | No | |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The read-only, idempotent, and non-destructive traits are already supplied by annotations, so the description only needs to add extra behavioral context. It does so with the clause 'using the same order-based product profit math as the dashboard,' which clarifies the exact profit methodology and promises dashboard-consistent figures. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with the action and result front-loaded: 'Get the top N products ranked...'. The final clause about dashboard math is the only elaboration and it earns its place by specifying methodology. There is no filler, repetition, or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only ranked-list tool with a fully documented input schema, an output schema, and annotations covering safety, the description covers the remaining essentials: what is returned, the ranking dimensions, and the date range. Operational details such as the 50-product cap, timezone resolution, and 'highest first' ordering live in the schema, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with start_date, end_date, limit, and rank_by all individually documented, including format, bounds, defaults, and enum values. The description only restates those concepts at a high level ('ranked by revenue, profit, margin, or units sold', 'over a date range') and does not add new parameter-level meaning. 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?
The description opens with a specific verb and resource: 'Get the top N products ranked by revenue, profit, margin, or units sold over a date range.' The 'top N' phrasing separates it from the sibling get_bottom_products, and the ranking-metric list makes clear this is a ranked list rather than a detail lookup like get_product_detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a ranked list is wanted, but it never states when to prefer this tool over alternatives such as get_bottom_products or get_product_detail, nor does it give any when-not-to-use conditions. An agent has to infer applicability from the name and sibling list rather than from explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_capabilitiesAccount CapabilitiesARead-onlyIdempotentInspect
Report this connection's plan tier, available history, cross-store availability, current rate-limit headroom, and known data limits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | No | |
| _meta | No | |
| store | No | |
| _message | No | |
| _truncated | No | |
| tool_count | No | How many tools this connection exposes. |
| data_limits | No | Plain-language statements of what this dataset cannot support. Relay them rather than working around them. |
| rate_limits | No | Current rate-limit headroom, or null when the counters could not be read. |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds meaningful behavioral context by specifying the exact categories of connection capabilities reported, such as current rate-limit headroom and cross-store availability, which goes beyond the generic title and 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?
A single, front-loaded sentence efficiently lists the tool's output categories without filler or redundancy. Every phrase adds information, making the description easy to parse and acting on.
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 parameters, an output schema, and a read-only/idempotent annotation profile, the description provides all necessary context for an agent to invoke the tool correctly. The enumerated result categories fully convey what the tool will report, so nothing critical 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?
The input schema has zero parameters and 100% schema description coverage, so there is nothing for the description to clarify. The baseline for a no-parameter tool is 4, and the description appropriately focuses on what the tool returns rather than inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Report') and precisely identifies the resource: this connection's plan tier, available history, cross-store availability, rate-limit headroom, and data limits. It clearly differentiates this introspection tool from the many data-oriented sibling tools by enumerating exactly what capability information is returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a clear use case—checking connection capabilities like rate-limit headroom and data limits—but it does not explicitly state when to prefer this tool over siblings such as get_integration_status or get_mca_status. No exclusions or alternative conditions are given, so usage guidance 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.
list_cogsCost of Goods ListARead-onlyIdempotentInspect
List cost-of-goods-sold entries for all items and variants in this store, newest effective date first, enriched with the matching product and variant. Paginate with page/page_size; filter by SKU substring or effective-date range.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to return, 1-indexed (default 1). | |
| page_size | No | Number of entries per page (default 50, hard-capped at 100). | |
| effective_to | No | Only include entries effective on or before this date, in YYYY-MM-DD format, resolved in the tenant's timezone. | |
| sku_contains | No | Case-insensitive substring match against the SKU; omit to return entries for every SKU. | |
| effective_from | No | Only include entries effective on or after this date, in YYYY-MM-DD format, resolved in the tenant's timezone. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| entries | No | |
| _message | No | |
| _truncated | No | |
| pagination | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety is covered. The description adds valuable behavioral context: sorting by newest effective date, enrichment with product/variant, pagination, and filtering options. These are not available in the schema and help an agent understand the tool's behavior beyond safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero waste. The core purpose and scope are front-loaded, followed by a compact summary of pagination and filters. Every clause earns its place, making it highly 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?
Given the output schema exists, the description need not explain return values. It covers the listing scope, ordering, enrichment, pagination, and filter options. It does not mention timezone resolution for date filters, but the schema already handles that. Overall, it is complete for a list tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter already has a detailed description. The tool description summarizes pagination and filtering but adds no new semantics beyond a concise overview. Since the schema carries the full load, the description meets the baseline of 3 without adding extra depth.
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 clear verb ('List') and resource ('cost-of-goods-sold entries') with explicit scope ('for all items and variants') and a specific ordering ('newest effective date first'). It also mentions enrichment with product and variant, which distinguishes it from single-item tools like get_item_cogs. The purpose is unambiguous and distinguishable from 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?
The description clearly indicates this tool lists all COGS entries, implying it is for broad queries rather than single-item lookups. However, it does not explicitly name alternatives (e.g., get_item_cogs) or state when not to use it. The context is implied but not made explicit, so an agent might need to infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_customersCustomer Lifetime Value ListARead-onlyIdempotentInspect
List customers ranked by lifetime value (net profit after allocated overhead, summed across each customer's full order history) - the same source as the dashboard Customers page. start_date/end_date filter WHICH customers appear, by their first-order date; they do NOT clamp a customer's lifetime totals to that window. Customer name and email in the response are partially redacted. Each returned id identifies a customer record whose detail includes up to 200 recent orders.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Sort direction, default 'desc'. | |
| page | No | Page number, 1-based (default 1). | |
| sort | No | Sort key: 'marginLtv' (net profit, default), 'revenueLtv', 'orderCount', or 'firstOrderAt'. | |
| limit | No | Rows per page, 1 to 50 (default 25). | |
| end_date | No | Only include customers whose first order falls on or before this date (YYYY-MM-DD, tenant timezone). Omit for all-time. | |
| start_date | No | Only include customers whose first order falls on or after this date (YYYY-MM-DD, tenant timezone). Omit for all-time. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| filters | No | |
| summary | No | |
| _message | No | |
| currency | No | |
| customers | No | |
| _truncated | No | |
| pagination | No | |
| _tenant_context | No | |
| attribution_enabled | No | When false, acquisition_channel and acquisition_country_code are unreliable and must not be reported as fact. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description discloses important behavioral quirks: customer name and email are partially redacted, the date range only selects which customers appear rather than clamping their lifetime totals, and each id points to a detail record with up to 200 recent orders. This is exactly the kind of non-obvious behavior an agent needs to know.
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 with no filler. The core definition is front-loaded, followed by the most important semantic caveat, then response-level redaction and id behavior. Every sentence earns its place without repeating schema defaults.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return-value structure does not need to be restated. The description supplies the missing context: metric definition, dashboard parity, date-filter semantics, redaction, and what the returned ids point to. Nothing critical is missing for an agent 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 input schema already documents all six parameters with 100% coverage, so the baseline is 3. The description adds a valuable clarification that start_date/end_date filter by first-order date and do NOT clamp lifetime totals, which prevents an easy misuse not fully spelled out 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 uses a specific verb and resource: 'List customers ranked by lifetime value' and precisely defines the metric ('net profit after allocated overhead, summed across each customer's full order history'). It also distinguishes this tool by tying it to the dashboard Customers page and noting that each returned id maps to a customer detail record, which helps separate it from get_customer_detail and get_ltv_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use it: it mirrors the dashboard Customers page and returns an LTV-ranked customer list. It does not explicitly name alternatives or exclusion conditions, but the dashboard-source statement and the precise filter semantics provide enough situational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reportsList ReportsARead-onlyIdempotentInspect
List every report available to this store: saved template reports, custom reports, and the built-in template catalogue. Each returned report id or template key identifies a report available for generation.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Restrict the listing to "template" (the built-in report catalogue) or "custom" (saved custom reports); omit to list both. | |
| include_archived | No | Include archived saved reports in the listing (default false, archived reports are hidden). |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| _meta | No | |
| reports | No | Saved template and custom reports. |
| _message | No | |
| templates | No | The built-in template catalogue. Empty when the listing was restricted to custom reports. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds the taxonomy of what the listing contains and that ids are generation-ready, which is consistent with the closed-world annotation. It adds no further behavioral detail (ordering, pagination, or how items are mixed when type is omitted), but with strong annotations plus an output schema present, this is an acceptable level of disclosure.
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 totaling roughly 30 words, with the core action ('List every report available to this store') front-loaded in the first sentence and the output's purpose in the second. There is no repetition of the title and no filler; 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 zero-required-parameter listing tool with full schema coverage, comprehensive annotations, and an output schema present, the description is nearly complete. The only meaningful gap is the absence of an explicit pointer to the consuming sibling (generate_report) to close the workflow loop, which the phrase 'available for generation' partially mitigates.
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%: both the type enum (with semantics for each value) and include_archived (with default and behavior) are fully documented in the schema, setting the baseline at 3. The description reinforces the enum taxonomy (template=catalogue, custom=saved) and explains what returned identifiers mean, adding modest value beyond the schema without contradicting it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource pair ('List every report available to this store') and enumerates the three output categories (saved template reports, custom reports, built-in template catalogue), which distinguishes it from sibling list_* tools like list_customers, list_cogs, and list_capabilities by resource type. The final sentence ties returned ids to 'generation,' implicitly contrasting with generate_report. It stops short of 5 because of a minor vocabulary overlap between 'saved template reports' and the 'template' type enum.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a list-then-generate workflow ('Each returned report id or template key identifies a report available for generation') and clarifies the tool's scope (reports, not stores/customers/cogs). However, it never names an alternative tool (e.g., generate_report) nor states when NOT to use this tool, leaving routing decisions to agent inference rather than explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_orderLook Up OrderARead-onlyIdempotentInspect
Look up a single order by number and return its line items, margin, fulfillment state, and refund history.
| Name | Required | Description | Default |
|---|---|---|---|
| order_number | Yes | Order number as shown in the store, with or without a leading "#" (for example "1001" or "#1001"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is known. The description adds the specific return fields (line items, margin, fulfillment state, refund history), which is valuable context beyond the annotations. It does not discuss auth, rate limits, or error behavior, but for a read-only lookup that is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action and resource, then lists the return contents. Every word earns its place; there is no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and a single well-documented parameter, the description fully covers what an agent needs to call the tool correctly. It states the purpose and the return fields, and the schema handles parameter details. No significant information 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 parameter description in the schema already explains the format (with or without leading '#'). The tool description does not add any parameter-specific information beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('look up'), resource ('a single order by number'), and lists the returned data (line items, margin, fulfillment state, refund history). This distinguishes it from search_orders or report tools; an agent can immediately tell it is for retrieving a specific 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?
The description implies usage when you have a specific order number and need its details, but it does not explicitly name alternatives or exclusion conditions. It provides clear context ('single order') but lacks an explicit when-not-to-use statement, 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.
query_order_basket_analyticsOrder Basket AnalyticsARead-onlyIdempotentInspect
Analyse orders filtered by what is IN the basket (which products, and how many units), broken down by region, channel or month. Answers questions the pre-computed dashboard context cannot, such as 'orders containing two chairs, average shipping cost per region'. Returns order counts, net revenue, and BOTH shipping figures: what customers were charged (revenue) and what fulfilment actually cost the merchant, with an explicit coverage percentage for the cost side.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum groups to return, highest order count first. Defaults to 50. | |
| end_date | Yes | Inclusive end of the window, YYYY-MM-DD, in the store's timezone. | |
| group_by | No | Dimension to break results down by. Defaults to 'none' (one total row). | |
| start_date | Yes | Inclusive start of the window, YYYY-MM-DD, in the store's timezone. | |
| product_ids | No | Only count orders whose basket contains these products. Get IDs from resolve_products. Omit to analyse all orders in the window. | |
| min_quantity | No | Order must contain at least this many units across product_ids. Use for 'two or more chairs'. Mutually exclusive with exact_quantity. | |
| region_codes | No | Restrict to these ISO 3166-1 alpha-2 shipping country codes, e.g. ['AU','NZ']. | |
| sales_channel | No | Restrict to a single sales channel value. | |
| exact_quantity | No | Order must contain exactly this many units across product_ids. Use for 'orders with two chairs'. Mutually exclusive with min_quantity. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Present only when no orders matched. |
| _meta | No | |
| groups | No | |
| _message | No | |
| currency | No | |
| truncated | No | Present only when the matched order set hit the internal cap. |
| _truncated | No | |
| group_count | No | |
| groups_omitted | No | Present only when `limit` cut groups from the response. |
| _tenant_context | No | |
| filters_applied | No | |
| truncation_note | No | |
| matched_order_count | No | |
| shipping_metric_definitions | No | Definitions of the shipping metrics, restating that charged is revenue and cost is the merchant outlay. Absent on the no-matches branch. |
| fulfillment_cost_coverage_percent | No | Coverage across every matched order, not per group. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds valuable context about the output: order counts, net revenue, charged vs. actual shipping cost, and an explicit coverage percentage for the cost side—details not inferable from the annotations or schema alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tightly written sentences with no filler. It front-loads the core operation, then supplies a clarifying example, then describes the return payload. 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?
Given the 9-parameter complexity, the description covers the essential aspects: the unique basket-filtering behavior, the grouping dimensions, and the non-obvious dual shipping figure semantics. The full input schema, annotations, and output schema handle the remaining details, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter is documented. The description enriches these meanings by mapping the filter concept (basket products and quantities) to the relevant parameters and using the example 'orders containing two chairs' to clarify exact_quantity and min_quantity usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's specific function: analyzing orders filtered by basket contents and grouping by region, channel, or month. It also distinguishes itself from pre-computed dashboard context and provides a concrete example query, making its purpose unmistakable even among many sibling analytics 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?
The description explains when this tool is the right choice ('Answers questions the pre-computed dashboard context cannot') and gives a concrete example. However, it does not explicitly name alternative tools or state when not to use it, so it leaves some routing judgment to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_productsResolve Product NamesARead-onlyIdempotentInspect
Resolve a product name, category word or SKU (e.g. 'chairs', 'oak desk', 'CHR-01') to concrete product IDs in this store's catalog. Each match includes a similarity score and supports disambiguation of natural-language product references for product-level basket analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum matches to return. Defaults to 10. | |
| query | Yes | Product name, category word, or SKU to look up. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Present only when nothing matched. |
| _meta | No | |
| query | No | The normalised query the matcher actually ran. |
| matches | No | |
| _message | No | |
| _truncated | No | |
| match_strategy | No | Which pass produced the matches. 'exact_sku' is certain; 'substring' and 'trigram' are fuzzy - confirm with the merchant before acting on a low match_score. |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description only needs to add context. It adds that matches include a similarity score and that the tool supports disambiguation, which goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise, front-loaded sentences: the first states the core resolve-to-IDs behavior with examples, and the second gives the key output trait and use case. There is no filler, repetition, or extraneous detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter, read-only resolver with a full input schema and output schema, the description covers the necessary context: accepted input types, return concept (product IDs with similarity scores), and the intended analytical use case. Nothing essential 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 100% schema description coverage, the baseline is 3. The description adds value by giving concrete example query values and clarifying that query can be a product name, category word, or SKU, which helps the agent formulate valid calls. It does not add anything about limit beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action ('Resolve') and a concrete resource ('product name, category word or SKU... to concrete product IDs'), backed by concrete examples like 'chairs', 'oak desk', and 'CHR-01'. It clearly distinguishes this tool from the many sibling report/query tools by focusing on catalog ID resolution rather than reporting or analytics.
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: use this when natural-language product references, category words, or SKUs need to be resolved to catalog IDs for product-level basket analysis. It does not explicitly name sibling alternatives or state when not to use it, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_abandoned_cart_identifierAbandoned Cart CandidatesBRead-onlyIdempotentInspect
Recent abandoned checkouts with recoverable value. Read-only - does not send messages.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | How many days back to look for abandoned checkouts, from 1 to 30 (default 7). |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description's 'Read-only - does not send messages' partially repeats this. However, the explicit statement about not sending messages adds a specific behavioral guarantee not fully captured by the read-only hint alone. The description does not contradict annotations, and it provides a small additional detail about side-effect-free operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short sentences that state the purpose and the read-only nature. There is no redundancy or filler, and the key information is front-loaded. Every word earns its place, making it an exemplar of minimal but informative writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple single-parameter interface, the presence of an output schema, and annotations covering safety, the description covers the essential facts. It does not explain how results are ordered or paginated, but those may be documented in the output schema. The only notable gap is the lack of differentiation from similar tools, which is more of a usage-guideline issue and already penalized there. Overall, the description is sufficient for a straightforward read-only operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single 'days' parameter, including a clear range and default. The tool description adds no additional semantics about the parameter, so it relies entirely on the schema. This meets the baseline for high schema coverage, though it does not enhance the parameter understanding beyond what is already available.
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 that the tool identifies recent abandoned checkouts with recoverable value, making the core purpose clear. However, it lacks an explicit verb like 'list' or 'retrieve', and it does not distinguish itself from the closely named sibling 'run_win_back_candidates', which could cause confusion. The title 'Abandoned Cart Candidates' reinforces the intent but does not fully differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as 'run_win_back_candidates' or 'run_repeat_purchase_rate'. The description only states what it does, not when it should be selected over other similar tools. No exclusions or preferred contexts are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_business_valuationBusiness ValuationARead-onlyIdempotentInspect
Run the SDE-multiple business valuation for the tenant based on current P&L data, growth, margin, MER, and risk scoring. Returns valuation range with sensitivity analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| lookback_months | No | How many months of P&L history to use for the valuation (1-36, default 12). 6 or fewer switches the calculation to 6-month mode; more uses 12-month mode, matching the dashboard valuation page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Present instead of a valuation when the tenant is a demo account. |
| _meta | No | |
| history | No | Most recent 12 monthly valuation points. |
| _message | No | |
| currency | No | |
| insights | No | |
| scorecard | No | |
| _truncated | No | |
| period_mode | No | How much history the valuation was built from. |
| data_quality | No | |
| final_multiple | No | |
| _tenant_context | No | |
| valuation_range | No | |
| profit_breakdown | No | |
| multiple_breakdown | No | |
| annual_adjusted_profit | No | Seller discretionary earnings the multiple is applied to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that it returns a valuation range with sensitivity analysis, which is useful output context. However, it does not disclose any additional behavioral traits such as data dependencies or performance characteristics, but this is minor given the read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action and then provides the key inputs and output. It is concise but packs essential information without unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter and an output schema present, the description is sufficient. It states the inputs (P&L, growth, margin, MER, risk) and the output (valuation range with sensitivity analysis). No prerequisites or error conditions are mentioned, but given its simplicity and read-only nature, this is not a critical gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description for lookback_months is very detailed, explaining the mode switch (6 vs 12 months) and matching the dashboard. Since schema coverage is 100% and the parameter is well-documented, the description does not need to add more. The baseline of 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs an SDE-multiple business valuation based on specific factors (P&L, growth, margin, MER, risk) and returns a valuation range with sensitivity analysis. It uses a specific verb (run) and resource (business valuation), and is distinct from siblings like run_inventory_valuation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on what the tool does and the basis of the valuation, but does not explicitly mention when to use it over alternatives or any exclusions. Given the tool is the only business valuation tool in the sibling list, the lack of explicit alternatives is acceptable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_collection_membership_auditCollection Membership AuditARead-onlyIdempotentInspect
Collections in the store with product count and last-updated date, flagging empty collections. Returns the first "limit" collections and reports how many matched in total. The result covers collection hygiene, empty collections, and potentially stale collections.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of matching rows to return, sorted worst-first (default 50, hard-capped at 100). The response reports the total number of rows that matched even when more were found than were returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and non-destructive. The description adds useful behavioral detail beyond annotations: it returns only the first 'limit' collections, reports total matches, and flags empty collections, helping an agent predict pagination and result scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the main output and audit purpose. The phrase 'potentially stale collections' is somewhat vague, but every sentence earns its place and there is no unnecessary 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 a detailed parameter schema, output schema, and safety annotations, the description covers what the tool returns, pagination behavior, and intended audit use cases. The only minor gap is the undefined meaning of 'stale,' which is acceptable for a read-only audit 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 100%, and the limit parameter is already documented thoroughly with default, cap, sorting, and total-match reporting. The description echoes the limit behavior but adds little new parameter meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it audits collection membership by returning collections with product count and last-updated date, flagging empty collections. This clearly distinguishes it from sibling audit tools focused on products, pages, SEO, or inventory.
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 names concrete use cases: collection hygiene, empty collections, and potentially stale collections, giving an agent clear context for when to choose this tool. It does not explicitly name alternatives or when-not conditions, but the context is sufficient given the sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_customer_spend_tier_classifierCustomer Spend TiersARead-onlyIdempotentInspect
Classify customers into VIP / regular / casual / one-time tiers based on lifetime spend and order count.
| Name | Required | Description | Default |
|---|---|---|---|
| window_days | No | How many days of order history to consider when computing lifetime spend and order count, from 30 to 1825 (default 365). | |
| vip_spend_threshold | No | Lifetime spend, in the tenant currency, at or above which a customer is classified VIP (default 1000). | |
| regular_spend_threshold | No | Lifetime spend, in the tenant currency, at or above which a customer is classified regular rather than casual (default 300). |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint: false, and the description adds behavioral context by stating the classification basis (lifetime spend and order count) and the tier taxonomy. It does not contradict the annotations and gives an agent confidence that this is a safe, side-effect-free classification operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that states the action, the resource, the criteria, and the output categories with no filler or redundancy. It earns its place and is immediately scannable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only classifier with optional params and an output schema, the description is largely complete: the schema covers parameters, and annotations cover safety. Slight room for improvement is that the exact distinction between tiers and the role of order count could be clarified, but nothing required for a basic call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of the three optional parameters is already described with ranges and defaults, so the schema carries the documentation burden. The description adds only the high-level criteria ('lifetime spend and order count') without adding parameter-level detail beyond what the schema already 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?
The description uses a specific verb ('Classify') with a clear resource ('customers') and names the exact output categories (VIP / regular / casual / one-time), so an agent knows immediately what the tool produces and can tell it apart from sibling reporting 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?
The description implies when to use it: whenever customer spend-tier classification is needed. However, it offers no explicit when-to-use guidance, no exclusion conditions, and does not contrast with similar sibling tools such as run_win_back_candidates or get_ltv_summary, so the agent must infer the intended context on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_dead_stock_reportDead Stock ReportBRead-onlyIdempotentInspect
Identify products with zero sales in the window and (when Shopify is connected) their current on-hand inventory.
| Name | Required | Description | Default |
|---|---|---|---|
| timeframe | No | Window to check for zero sales activity before a product counts as dead stock (default 90d). |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds the conditional 'when Shopify is connected' for inventory data, which is useful context about data availability. However, it does not disclose return format, pagination, or any edge cases beyond the zero-sales definition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the core purpose without any fluff. The main action ('Identify products with zero sales') is stated immediately, and the conditional inventory clause is appended naturally. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only report with one optional parameter and an output schema, the description is sufficient. It explains the core logic (zero sales window) and the conditional inventory availability. The output schema covers the return structure, and annotations cover safety, so nothing critical 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?
There is only one parameter (timeframe), and the schema description covers it fully with an enum and default. The description mentions 'window' but adds no extra syntax or formatting details beyond the schema. With 100% schema coverage, the description correctly relies on the schema, earning the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: identifying products with zero sales in a window and optionally their on-hand inventory. It uses a specific verb ('Identify') and resource ('products'), and the 'dead stock report' title aligns with the purpose. However, it does not explicitly distinguish itself from sibling tools like run_stock_velocity or run_inventory_valuation, so it misses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention any conditions for preferring it over run_stock_velocity, get_bottom_products, or other reporting tools. The only implicit signal is the tool name and title, which is insufficient for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_fulfillment_digestFulfilment DigestARead-onlyIdempotentInspect
Digest of open orders by fulfillment status and age. Surfaces orders stuck for more than 3 days.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | How many days back to look for open orders (default 30, 1 to 180). |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds the 3-day stuck threshold and the grouping by status/age, which is useful behavioral context beyond annotations, but it does not describe output format, pagination, or system effects—consistent with the low 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 sentences, both essential: the first defines the resource and grouping, the second highlights the key use case (stuck orders). No filler, front-loaded with the core purpose, and readable at a glance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one optional, well-documented parameter), strong annotations, and an existing output schema, the description is nearly complete. It covers the tool's purpose and key behavior without needing to explain return values. The only minor gap is the lack of explicit differentiation from similar report tools, but this is not essential for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single `days` parameter, fully documenting its range and default. The description does not reference the parameter, so it adds no meaning beyond the schema; the baseline of 3 applies because the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource (open orders) and the organizing dimensions (fulfillment status and age), and adds a distinct behavior (surfaces orders stuck >3 days). This clearly differentiates it from siblings like run_wismo_digest or generic order lookups, as it is a digest specifically about fulfillment status and age.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when an agent needs a status/age digest of open orders or wants to find stuck orders, but it does not explicitly state when to prefer this over alternatives, nor does it name any sibling or exclusion. The context is clear enough for inference but lacks direct routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_gift_card_balance_reportGift Card BalancesARead-onlyIdempotentInspect
Outstanding gift card balance grouped by currency plus redemption percentage against initial issuance.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful output-shape detail, such as currency grouping and redemption percentage against initial issuance, but does not disclose further behavioral traits like calculation cutoffs or assumptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence that front-loads the core outcome ('Outstanding gift card balance') and appends the grouping and percentage detail with 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 inputs, strong annotations, and an existing output schema, the description conveys the essential computation. The main remaining ambiguity is the exact construction of 'redemption percentage against initial issuance,' but that does not block correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and 100% coverage, so there are no parameter meanings for the description to clarify. The baseline for a parameterless tool 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 clearly identifies the resource (gift card balances), the currency grouping, and the redemption-percentage metric, which distinguishes it from every sibling report. It stops short of a 5 because it is phrased as a result noun-phrase rather than an explicit action such as 'Returns' or 'Lists'.
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 intended use is implied: an agent can infer this tool is for outstanding gift card balance information. However, the description does not explicitly state when to prefer it over other reports or mention any exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_high_risk_order_reportHigh-Risk OrdersBRead-onlyIdempotentInspect
Shopify-flagged orders with medium or high fraud risk in the recent window. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | How many days back to scan for flagged orders (default 7, 1 to 30). | |
| min_level | No | Minimum Shopify fraud risk level to include: LOW includes every flagged order, MEDIUM (the default) excludes LOW-risk orders, HIGH returns only the highest-risk orders. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description reinforces the read-only nature. It adds context about Shopify fraud-risk filtering and a recent window, but the statement 'medium or high fraud risk' is not fully accurate because min_level can be set to LOW. It does not describe output details, though an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the core domain in the first sentence. The second sentence, 'Read-only.', is redundant with the readOnlyHint annotation, so not every sentence earns its place. Still, there is no filler or irrelevant detail, and the structure is clean.
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 2-parameter tool with fully documented schemas and an output schema, the description is mostly sufficient but minimal. It omits any when-to-use guidance and its threshold wording is slightly misleading given the LOW option. Given roughly 60 siblings, an explicit use-case or alternative statement would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with detailed descriptions of both parameters, including defaults, ranges, and enum meanings, so the baseline is 3. The description adds no parameter-level detail: 'recent window' is vaguer than the days parameter, and 'medium or high' is less precise than the min_level enum.
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 concrete resource ('Shopify-flagged orders') and a specific filter ('medium or high fraud risk'), with a temporal scope ('recent window'). It lacks an explicit verb like 'returns' or 'generates', but the tool name and resource make the primary action clear. It does not explicitly distinguish itself from sibling order-related tools, though the fraud-risk angle provides some differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as lookup_order, search_orders, or other run_* audit tools. The description does not mention exclusions or recommend this over sibling tools. The use case must be inferred entirely from the resource description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_inventory_valuationInventory ValuationARead-onlyIdempotentInspect
Total dollar value of inventory currently on hand (on-hand quantity x recorded COGS per SKU).
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | Maximum number of highest-value SKUs to include in the returned breakdown (default 50). |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety profile is covered. The description adds value by specifying the calculation method (on-hand quantity x COGS), which is behavioral context beyond the annotations. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It conveys the core purpose and formula efficiently, and every element 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 read-only valuation tool with strong annotations and a documented output schema (present, though not shown), the description is sufficient. The formula and parameter are covered, and no additional behavioral caveats are needed. An agent can invoke it correctly with the given information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with top_n well-documented (max 200, min 10, default 50). The description does not add parameter details, but the schema covers the semantics adequately. Baseline 3 is appropriate given high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states precisely what the tool computes: 'Total dollar value of inventory currently on hand (on-hand quantity x recorded COGS per SKU).' It identifies a specific resource (inventory), a verb (value), and the exact formula, clearly distinguishing it from sibling tools like get_item_cogs (which likely returns per-SKU COGS) or run_stock_velocity (which measures turnover).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given for when to use this tool versus alternatives. However, the purpose is self-evident (compute total inventory value), so usage is implied. Lacks exclusions or references to related tools like run_business_valuation or get_item_cogs, but the name and description make the primary use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_multi_location_inventory_auditMulti-Location Inventory AuditARead-onlyIdempotentInspect
Find variants that are out of stock at some locations but available at others - candidates for transfers.
| Name | Required | Description | Default |
|---|---|---|---|
| min_locations | No | Minimum number of distinct stock locations a variant must be tracked at to be considered for a transfer candidate (default 2). |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context about what the tool finds and that results are candidates, but it does not disclose additional behavioral details such as scope limits or how min_locations affects results—though that is documented 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?
A single front-loaded sentence states the action, the target data, and the practical outcome with zero filler. Every phrase 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 only one optional parameter, no required parameters, full schema coverage, an output schema available, and annotations covering read-only/idempotent/non-destructive behavior, the description is sufficient for an agent to invoke the tool correctly. Nothing critical is missing for this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with min_locations fully described including type, bounds, default, and meaning. The description itself adds no parameter-level detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Find'), a clear resource ('variants'), and a concrete selection condition: out of stock at some locations but available at others. This also differentiates it from sibling inventory tools like run_dead_stock_report or run_stock_velocity by framing the output as transfer candidates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the phrase 'candidates for transfers,' so an agent can infer this is for identifying stock-imbalance transfer opportunities. However, there is no explicit when-to-use guidance or differentiation from the many sibling run_* audit tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_page_content_auditPage Content AuditCRead-onlyIdempotentInspect
Store pages flagged by content thinness, unpublished status, or staleness.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of matching rows to return, sorted worst-first (default 50, hard-capped at 100). The response reports the total number of rows that matched even when more were found than were returned. | |
| stale_days | No | Number of days since a page was last updated before it is flagged as stale (default 180). | |
| min_body_chars | No | Minimum body content length in characters required to avoid being flagged as thin content (default 100). |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is established. The description's 'Store' verb is confusing in light of readOnlyHint=true — it hints at a write operation for an explicitly read-only tool. Beyond that, the description adds little behavioral context (no pagination, no response shape). Not a hard contradiction, but the wording undermines clarity rather than adding value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with no filler, and the flagging criteria are stated up front. It earns a high conciseness score, though the misused verb 'Store' slightly undercuts the efficiency.
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?
Parameters are fully documented and an output schema exists, so the main call-time details are covered. However, the description doesn't explain what 'running' the audit entails or how results are shaped beyond the schema, and for an audit tool some prose on returned findings would help. Adequate but minimal.
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 schema fully documents limit, stale_days, and min_body_chars with defaults, bounds, and purposes. The description adds zero parameter-level detail, so it rests entirely on the schema — the correct baseline for full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource (pages) and the flagging criteria (content thinness, unpublished status, staleness), which distinguishes it from seo/content-related siblings like run_seo_metadata_audit. However, the verb 'Store' is vague and misleading for an audit tool — it doesn't clearly say the tool analyzes/returns flagged pages. The name suggests 'audit' but the description never confirms the evaluation or reporting behavior.
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 states what pages get flagged but gives no when-to-use or when-not-to-use guidance, no alternatives, and no prerequisites. An agent cannot tell from the description when to pick this over run_seo_metadata_audit or run_product_completeness_score beyond guessing from the criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_product_completeness_scoreProduct Completeness ScoreARead-onlyIdempotentInspect
Scores every product on a 0-100 scale based on images, SEO fields, description length, and taxonomy.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of lowest-scoring products to return, sorted worst-first (default 50, minimum 10, hard-capped at 100). |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a concrete behavioral contract beyond the annotations: it computes a 0-100 score from four specified dimensions for every product. This is consistent with readOnlyHint=true and idempotentHint=true and clarifies the nature of the operation. It does not mention that only the lowest-scoring products are returned, but the output schema likely covers that detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the verb and scope, then enumerates the scoring dimensions compactly. There is no filler, repetition, or unnecessary detail. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with one optional, fully documented parameter and an output schema, the description covers what the tool computes and the scale used. The main gap is the absence of usage guidance relative to the many sibling audit tools, which keeps it from being fully complete. Overall, it is sufficient for correct invocation but not for confident sibling selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for the only parameter, limit, including default, minimum, maximum, and sorting behavior. The description adds no parameter-level information, which is acceptable given the high schema coverage. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ("Scores every product") and names the exact scoring criteria (images, SEO fields, description length, taxonomy), making the tool's function clear. It distinguishes itself from image- or SEO-only audits through the composite criteria, though it does not explicitly reference sibling tools. A small gap remains in not naming the sibling it is not, 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 no guidance on when to use this tool versus the many related sibling tools such as run_product_image_audit, run_seo_metadata_audit, or get_bottom_products. The only implied context is that it evaluates all products on a completeness scale. An agent must infer the appropriate selection context entirely from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_product_image_auditProduct Image AuditBRead-onlyIdempotentInspect
Products without a featured image or fewer than N total images.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of matching rows to return, sorted worst-first (default 50, hard-capped at 100). The response reports the total number of rows that matched even when more were found than were returned. | |
| min_images | No | Minimum number of images a product must have to pass the audit; products with fewer (or no featured image) are flagged (default 1). |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds the selection criteria but does not elaborate on output behavior, ordering, or side effects; it is consistent with annotations and adds no contradictory behavioral claims.
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 terse phrase with no fluff, keeping the key criteria front and center. It sacrifices a full sentence structure for brevity, which is acceptable though slightly cryptic with the undefined 'N'.
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 an output schema present and fully documented parameters, the description is minimally viable for selecting the tool inferably. However, it does not explicitly state that it returns a report or how it relates to sibling audit tools, leaving some context gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with detailed descriptions for limit and min_images. The description's 'fewer than N total images' maps to min_images but does not add meaningful semantics beyond the schema, so the high schema coverage sets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific resource (products) and the exact audit criteria (missing featured image or fewer than N total images), which distinguishes it from general product or SEO audits. It lacks an explicit verb like 'returns' or 'flags,' but the tool name and 'products without...' make the purpose reasonably 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?
There is no guidance about when to use this audit instead of a sibling like run_product_completeness_score or run_seo_metadata_audit. The intended context is only implied by the title and description; no alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_product_viabilityProduct Viability ScoreARead-onlyIdempotentInspect
Run a product viability simulation: given a proposed selling price, COGS, and expected ad spend, compute break-even ROAS, contribution margin, and sensitivity analysis against store averages.
| Name | Required | Description | Default |
|---|---|---|---|
| cogs | Yes | Proposed cost of goods sold per unit, in the tenant's currency. | |
| price | Yes | Proposed selling price per unit, in the tenant's currency; must be greater than 0. | |
| shipping_cost | No | Shipping cost per unit not already covered by COGS, in the tenant's currency (default 0). | |
| expected_volume_per_month | No | Expected units sold per month; when provided, the response includes a monthly_projection of contribution and ad spend (omitted otherwise). | |
| expected_ad_spend_per_unit | Yes | Expected ad spend required to sell one unit, in the tenant's currency (this is what break_even_roas is measured against). |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| inputs | No | |
| verdict | No | red when contribution is not positive, amber below 30% margin, green at or above it. |
| _message | No | |
| _truncated | No | |
| verdict_reason | No | |
| _tenant_context | No | |
| break_even_roas | No | Null when the margin leaves no room to break even at any ROAS. |
| store_benchmark | No | Store averages to compare against, or null when the benchmark service was unavailable. The simulation itself is still valid without it. |
| monthly_projection | No | Null unless expected_volume_per_month was supplied. |
| contribution_margin | No | Per unit: price minus COGS, ad spend per unit and shipping. |
| contribution_margin_pct | No | |
| sensitivity_contribution | No | Per-unit contribution margin under each single-variable shock. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description need not repeat safety. It adds useful context about the simulation nature and that it benchmarks against store averages, which is beyond what annotations state. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence that front-loads the core action and then lists inputs and outputs efficiently. It could be split into two sentences for readability, but it's concise and free of filler. Every clause adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description doesn't need to detail return formats. It covers the essential purpose, key inputs, and primary outputs, including the sensitivity analysis against store averages. It doesn't mention the optional monthly_projection, but that's documented in the schema. Sufficient for an agent to decide whether to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented with types, defaults, and meaning. The description only mentions three of them (price, COGS, ad spend) but adds no extra semantics beyond what the schema provides. Baseline 3 is appropriate when schema carries the documentation load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Run a product viability simulation'), the resource (product viability), and the specific outputs (break-even ROAS, contribution margin, sensitivity analysis). It distinguishes this tool from siblings like get_bottom_products or get_cogs_gaps by focusing on forward-looking simulation rather than analysis of existing data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for evaluating a proposed product's viability given price, COGS, and ad spend, which is distinct from sibling tools that analyze existing products or financials. However, it doesn't explicitly name alternatives or state when not to use it, leaving some inference to the agent. Clear context but no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_repeat_purchase_rateRepeat Purchase RateARead-onlyIdempotentInspect
Percentage of customers in the selected window who placed two or more orders.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Size of the trailing window in days used to compute the repeat purchase rate (default 90, 7 to 730). |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds meaningful behavioral context by defining exactly what the percentage represents and that it depends on a selected trailing window.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no filler. The core definition is front-loaded and every word contributes to understanding the metric.
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 low-complexity, single-parameter tool with full schema coverage, an output schema, and safety annotations, the description is complete enough for an agent to select and invoke the tool correctly. No critical missing information is apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'days' is fully documented in the schema with range and default. The description's mention of 'selected window' aligns with the parameter but adds no new semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the computed metric: percentage of customers in a window who placed two or more orders. It is understandable and distinct from sibling metrics, though it lacks an explicit verb like 'computes' or 'returns'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as get_cohort_analysis, get_ltv_summary, or run_win_back_candidates. There are no exclusions or selection criteria beyond the metric itself, which is implied by the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_seo_metadata_auditSEO Metadata AuditARead-onlyIdempotentInspect
Products missing SEO title or with SEO description shorter than threshold.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of matching rows to return, sorted worst-first (default 50, hard-capped at 100). The response reports the total number of rows that matched even when more were found than were returned. | |
| min_description_length | No | Minimum SEO description character length required to pass; products with a shorter or missing SEO description are flagged (default 50). |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds the audit criteria but does not describe output format or pagination; however, the schema covers the limit parameter's behavior, and the output schema exists. Given the annotations, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the purpose and uses no filler. Every word earns its place, and the structure is clean and immediately comprehensible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only audit tool with two optional parameters, an output schema, and annotations covering safety, the description is complete. The agent has everything needed to invoke it correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters fully documented in the schema. The description does not add any parameter-specific context beyond what the schema provides, 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 states a specific verb (audit), resource (products), and the exact criteria (missing SEO title or short description). It clearly distinguishes from sibling audit tools like run_page_content_audit or run_product_image_audit by focusing on SEO metadata, so an agent can tell it apart 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 description implies the use case (auditing SEO metadata) but provides no explicit guidance on when to choose this tool over the many other run_*_audit siblings. There are no exclusions or alternative suggestions, leaving the agent to infer from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_stock_velocityStock VelocityARead-onlyIdempotentInspect
Rank products by units sold in the selected timeframe and classify them as fast, steady, slow, or dead.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of ranked products to return (default 50, hard-capped at 100). | |
| timeframe | No | Lookback window used to compute units sold and velocity classification (default 30d). |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description only needs to add behavioral context. It adds the classification output categories and the units-sold basis, but it doesn't disclose thresholds or any additional behavior; this is acceptable given the output schema but not rich.
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 front-loads the verb and finishes with the output classes; no filler or redundancy. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite its brevity, the description is complete for this simple tool: 2 optional params fully documented in the schema, an output schema for return values, and annotations for safety. No agent-required call detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents limit and timeframe defaults, enums, and bounds. The description's 'selected timeframe' merely paraphrases the schema and adds no new parameter-level 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?
The description names a specific action ('Rank products'), the resource ('products'), the metric ('units sold'), and the time scope, and it gives concrete output classes ('fast, steady, slow, or dead'). It does not explicitly contrast with siblings such as get_top_products or run_dead_stock_report, so it stops short of full differentiation.
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 operation itself makes the use case inferable: if an agent needs a units-sold velocity ranking and classification, this tool fits. However, it gives no when-to-use or when-not-to-use guidance and no reference to sibling alternatives, leaving selection partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_url_redirect_auditURL Redirect AuditARead-onlyIdempotentInspect
URL redirects in the store, flagging loops, empty targets and redirect chains. Returns the first "limit" redirects and reports the total matched. The result covers broken links, redirect loops, and SEO risks from redirect chains after a replatform.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of matching rows to return, sorted worst-first (default 50, hard-capped at 100). The response reports the total number of rows that matched even when more were found than were returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavioral details: it returns only the first 'limit' redirects and reports the total matched, and lists the issue types covered. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences with zero waste. The purpose is front-loaded, and the return behavior is stated compactly. 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?
With an output schema present, the description doesn't need to detail return values. It covers the purpose, the limit behavior, and the scope of issues. For a simple one-parameter audit tool, this is complete, though it could mention prerequisites or exclusions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage for the single parameter 'limit', fully describing min, max, default, and sorting. The description reiterates the limit behavior without adding new semantics beyond what the schema already provides, so 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?
The description clearly states the tool audits URL redirects, flagging loops, empty targets, and redirect chains, and mentions coverage of broken links and SEO risks. This specific verb+resource distinguishes it from sibling audits like run_seo_metadata_audit or run_page_content_audit.
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 context that this is relevant after a replatform, implying when to use it, but does not explicitly name alternatives or state when not to use it. The context is clear enough for an agent to infer applicability, though exclusions are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_win_back_candidatesWin-Back CandidatesBRead-onlyIdempotentInspect
Identify valuable customers who haven't purchased in the last N days.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of candidates to return, from 10 to 500 (default 100). | |
| inactive_days | No | Minimum days since a customer last purchased to count as inactive, from 30 to 730 (default 90). | |
| min_lifetime_spend | No | Minimum lifetime spend a customer must have to be considered valuable enough to win back, in the tenant currency (default 100). |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the selection criteria (inactivity and value) but does not disclose any additional behaviors such as permission requirements or response specifics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that directly states the tool's purpose without unnecessary words. It 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 a full output schema, complete parameter documentation, and safety annotations, the description is adequate for a simple read-only tool. It could add a note about when to prefer this over run_abandoned_cart_identifier, but that is a usage guidance 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%, so the baseline is 3. The description mentions 'N days' and 'valuable' which loosely map to parameters but does not add meaningful semantics beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('identify') and resource ('valuable customers who haven't purchased in the last N days'). It is clear and distinct from sibling tools like run_abandoned_cart_identifier, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention any conditions or exclusions relative to the many sibling run_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_wismo_digestWhere Is My Order DigestBRead-onlyIdempotentInspect
Where Is My Order digest - in-flight orders with tracking status, age, and destination.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | How many trailing days of in-flight orders to include in the digest, from 1 to 90 (default 14). |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Per-skill parameters and totals, e.g. the timeframe the report was run for. |
| rows | No | The report body. Absent when the skill returns summary only. |
| _meta | No | |
| notes | No | Plain-language context, including why a report came back empty. |
| summary | No | Headline figures for the report, in display order. |
| _message | No | |
| warnings | No | Conditions that make the figures less reliable. Relay these. |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds that it covers only in-flight orders, which is a scoping constraint, but doesn't disclose any other behavior (e.g., aggregation, pagination). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence that front-loads the tool's purpose. No wasted words or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only digest with one documented parameter and an output schema, the description is sufficient. It names the data scope and relies on structured fields for details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema fully documents the 'days' parameter with min, max, and default. The description adds no additional meaning for the parameter, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States it produces a digest of in-flight orders with tracking status, age, and destination, which distinguishes it from broader fulfillment reports like run_fulfillment_digest. Lacks an explicit verb like 'generates' but the purpose 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?
No explicit guidance on when to use this vs. sibling digest tools. With siblings like run_fulfillment_digest and run_high_risk_order_report, an agent cannot infer which report to choose. The description implies a reporting use case but doesn't state alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch MerchantFlowARead-onlyIdempotentInspect
Search this MerchantFlow store for products and orders matching a query. Returns retrieval documents with an id, title, and URL; each id resolves to its full record. This endpoint provides record retrieval rather than profit, ad, cohort, or valuation analytics.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Free-text search string matched against product names/SKUs and order numbers (truncated to 200 characters). |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | At most 20 results. A single 'First import still running' document means the store has no synced data yet, not that nothing matched. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful behavioral context by explaining the return document shape (id, title, URL) and that each id resolves to its full record. It also states the scope boundary of record retrieval versus analytics, which goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three focused sentences with no redundant filler. The first sentence front-loads the action, the second describes the output shape, and the third gives an exclusion that helps with tool selection. 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?
There is one required parameter with full schema coverage, an output schema exists, and the description explains what the returned documents contain and how ids resolve. Nothing critical is missing for an agent to invoke this tool 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 input schema fully documents the query parameter, including that it is free text matched against product names/SKUs and order numbers and truncated to 200 characters. The description only generally says 'matching a query,' adding little beyond the schema. With 100% schema coverage, a baseline of 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?
The description states a specific action and resource: searching this MerchantFlow store for products and orders. It also clarifies the output as retrieval documents with id, title, and URL, and explicitly excludes analytics categories. It does not directly distinguish itself from the close sibling search_orders, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: use this when you need record retrieval for products and orders rather than profit, ad, cohort, or valuation analytics. It names what the endpoint is not for, though it does not explicitly compare with search_orders or other retrieval siblings. This is enough guidance for most agents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ordersSearch OrdersARead-onlyIdempotentInspect
Search orders by date range, customer email, order number, or product SKU. Returns a summary of matching orders with profit per order. Hard-capped at 100 results.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | No | Product SKU to match against any line item on the order. | |
| limit | No | Maximum number of orders to return (default 20, hard-capped at 100). | |
| end_date | No | End of the date range, in YYYY-MM-DD format, resolved as the end of that day in the tenant's timezone. | |
| start_date | No | Start of the date range, in YYYY-MM-DD format, resolved as the start of that day in the tenant's timezone. At least one of start_date, end_date, customer_email, order_number, or sku is required. | |
| order_number | No | The store's own order number, with or without a leading '#', not the internal MerchantFlow order id. | |
| customer_email | No | Customer email to search for; it is hashed before querying so no plaintext email is used as a lookup key, and the customer_email field on each returned order is redacted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| count | No | |
| orders | No | |
| filters | No | |
| _message | No | |
| currency | No | |
| _truncated | No | |
| _tenant_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds genuine behavioral context beyond the annotations: the hard 100-result cap and the summary output shape with profit. No contradictions exist between description and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero filler. The first sentence front-loads the primary action and criteria, the second adds output specifics, and the third gives the critical limit. 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?
The tool has six parameters but all are fully documented in the schema, and an output schema exists. The description contributes the summary-with-profit behavior and the hard cap, covering the non-obvious facets. An agent has everything needed to invoke it correctly without hunting for missing details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%—every parameter has a detailed description, including the hard cap, date format, and the requirement for at least one filter. The description merely lists the filter types (date range, email, order number, SKU) without adding new meaning, matching the baseline of 3 for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search') and resource ('orders'), and enumerates the exact filter dimensions (date range, customer email, order number, product SKU), which clearly distinguishes it from generic search or lookup_order. The statement about returning a summary with profit per order further pins down its unique purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when searching orders by one of the listed criteria) but never states when not to use it or names an alternative. With a sibling named lookup_order, explicit routing guidance would have been valuable, but the omission drops this to merely implied usage.
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.
60 tool updates
- First observed
fetch - First observed
find_cogs_gaps - First observed
find_duplicate_customers - First observed
generate_report - First observed
get_ad_performance - First observed
get_anomalies - First observed
get_bank_balance - First observed
get_bottom_products - First observed
get_cac_payback - First observed
get_channel_roas - First observed
get_cogs_coverage - First observed
get_cohort_analysis - First observed
get_combined_pnl - First observed
get_customer_detail - First observed
get_date_range_summary - First observed
get_discount_code_performance - First observed
get_expenses_breakdown - First observed
get_integration_status - First observed
get_item_cogs - First observed
get_ltv_summary - First observed
get_market_products - First observed
get_markets - First observed
get_mca_status - First observed
get_north_star_status - First observed
get_pnl_summary - First observed
get_product_detail - First observed
get_recent_activity - First observed
get_revenue_breakdown - First observed
get_store_list - First observed
get_tax_insights - First observed
get_top_products - First observed
list_capabilities - First observed
list_cogs - First observed
list_customers - First observed
list_reports - First observed
lookup_order - First observed
query_order_basket_analytics - First observed
resolve_products - First observed
run_abandoned_cart_identifier - First observed
run_business_valuation - First observed
run_collection_membership_audit - First observed
run_customer_spend_tier_classifier - First observed
run_dead_stock_report - First observed
run_fulfillment_digest - First observed
run_gift_card_balance_report - First observed
run_high_risk_order_report - First observed
run_inventory_valuation - First observed
run_multi_location_inventory_audit - First observed
run_page_content_audit - First observed
run_product_completeness_score - First observed
run_product_image_audit - First observed
run_product_viability - First observed
run_repeat_purchase_rate - First observed
run_seo_metadata_audit - First observed
run_stock_velocity - First observed
run_url_redirect_audit - First observed
run_win_back_candidates - First observed
run_wismo_digest - First observed
search - First observed
search_orders
Publisher details
- Operator
- MerchantFlow · Publisher source
- Operator website
- https://merchantflow.ai · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://docs.merchantflow.ai · Publisher source
- Trust center
- Not available
- Restrictions
- Requires a MerchantFlow account and an active plan after the 14-day trial. Users connect through OAuth; access is tenant-scoped and read-only. · Publisher source
Related MCP Connectors
Multi-tenant MCP gateway for AI commerce. One connection, every store.
Multi-tenant MCP gateway for AI commerce. One connection, every store.
Multi-tenant MCP gateway for AI commerce. One connection, every store.
- PressoOAuthnow.presso
Connect e-commerce and marketing data to AI assistants via MCP.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceHosted MCP server connecting Shopify, Klaviyo, GA4, Meta Ads, Google Ads, Xero, Gorgias and 20+ e-commerce data sources so AI assistants can answer merchant questions that span every source at once.-

Presso MCP Serverofficial
AlicenseNot gradedqualityDmaintenanceConnects e-commerce and marketing data sources like Shopify, GA4, Google Ads, and Meta Ads to AI assistants, enabling natural language queries about store performance, ad campaigns, and customer behavior.7 npm2MIT- FlicenseNot gradedqualityDmaintenanceHosted MCP server that gives AI agents read and write access to your full marketing & ecommerce stack — Google Analytics, Search Console, Google & Meta Ads, Shopify, WooCommerce, Shopware, Slack and LinkedIn. 100+ tools across 10 connectors. BYOK, OAuth 2.1.-
- AlicenseAqualityFmaintenanceFree, open-source MCP server that connects Claude to the Shopify Partner API. 25 tools for revenue analytics, churn analysis, retention cohorts, merchant health scoring, conversion funnels, revenue forecasting, and growth velocity.2513MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.