mcp-server
Server Details
Koongo product-feed & marketplace tools: manage feeds, listings & orders from your AI assistant.
- Status
- Unhealthy
- OAuth
- Not checked
- Last Tested
- Transport
- Streamable HTTP
- URL
Available Tools
105 toolsad_statusARead-onlyInspect
Get the live run status of one ad: readiness, connection, and product counts. Ads are ads-based channels (advertising / price-comparison / classifieds), not marketplaces: they publish products to the ad platform and have no order sync. Returns {integrationId, status, ready, lastStep, isReady, isConnected, isOverlimit, productsRefreshing, productsSubmitting, productStats:{listed, processing, errors, inactive, total}, upgradeUrl}. productStats counts the products in the ad feed. isOverlimit=true means the plan product limit is exceeded — upgradeUrl then points to the plan upgrade. productsRefreshing=true means an export / feed generation is running (the ad is 'updating'); productsSubmitting=true means items are being pushed to the channel. While EITHER is true the data is still changing — this is the signal to WAIT: after any export (finishing the wizard summary, repair_ad, a step transition that re-exports, or a submit) poll ad_status until BOTH productsRefreshing AND productsSubmitting are false, THEN read the results. The KOONGO DATA CHECK (get_ad_report's dataCheckErrors) and the productStats counts are only current once the refresh has finished — reading mid-refresh gives stale/empty data. ad_id is the id from categoryAttributeWarmup is the OTHER wait: on channels whose attributes depend on the mapped categories, that download runs in the background. While the block is present with pending:true the category-driven attributes are NOT in get_ad_attributes yet — poll ad_status (retryAfterSeconds says how long to wait; state 'rescheduled' means a channel rate limit parked it until nextTryAt) until the block is absent or state is 'ready'. state 'failed' is terminal: call refresh_ad_category_attributes ONCE to start it again, do not poll on. list_ads. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects). Use ad_status for run progress and get_ad for configuration/mapping. For the detailed error breakdown use get_ad_report.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnly/destructive false, but the description goes well beyond: explains productsRefreshing/productsSubmitting as wait signals, warns that productStats and dataCheckErrors are stale mid-refresh, defines isOverlimit/upgradeUrl, and covers terminal failed state plus retryAfterSeconds/rescheduled 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?
Front-loaded with purpose, but the body is a dense run-on paragraph with a corrupted sentence and a stray 'list_ads.' fragment. The information is valuable but would benefit from splitting the export-wait and category-warmup concerns into distinct, clearly structured sections.
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?
Covers the return shape (no output schema exists), field meanings, polling/wait conditions, stale-data warning, terminal failure handling, and sibling-tool routing. It only loses a point for the unclear ad_id sourcing and the jumbled warmup sentence, which leave minor ambiguity in an otherwise thorough definition.
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 0% schema coverage, the description must explain the parameters. It does clearly explain project_id optionality (inferred vs required, list_projects), but the ad_id explanation is garbled — 'ad_id is the id from categoryAttributeWarmup is the OTHER wait' — so it never cleanly states where ad_id comes from.
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?
Opens with a precise verb+resource: 'Get the live run status of one ad: readiness, connection, and product counts.' It explicitly scopes ads vs marketplaces and later contrasts with get_ad and get_ad_report, so an agent can distinguish it from sibling 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?
States exact usage: 'Use ad_status for run progress and get_ad for configuration/mapping. For the detailed error breakdown use get_ad_report.' It also gives the waiting/polling scenario after exports and the project_id_required fallback to list_projects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clone_adAInspect
Clone an ad — create a copy of it (settings and configuration) as a new ad. Ads are ads-based channels (advertising / price-comparison / classifieds), not marketplaces: they publish products to the ad platform and have no order sync. Returns {integrationId, action:'clone', status:'cloned', kind:'ads', editUrl, message}, where integrationId is the id of the NEW clone. ad_id is the source ad from list_ads. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal this is a non-read-only, non-destructive mutation. The description adds meaningful behavior beyond those hints: it creates a new ad copy, has no order sync, and returns a specific payload where integrationId belongs to the new clone. It does not detail every possible side effect, but the annotation coverage lowers the burden and the description handles the essentials.
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 dense sentences, with the core action front-loaded in the first sentence. The return payload and parameter semantics are packed into the final sentence without redundancy. Every sentence earns its place and no space is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter clone operation with no output schema, the description covers purpose, scope versus marketplaces, both parameters, conditional project_id handling, and the exact return payload. The only minor omission is explicitly naming clone_marketplace as the alternative, but the marketplace exclusion is already stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries full responsibility for explaining parameters. It clearly identifies ad_id as the source ad from list_ads and explains project_id's optionality with the conditional requirement to call list_projects. This fully compensates for the schema's lack of 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 opens with the specific action 'Clone an ad' and defines it as creating a copy of settings and configuration as a new ad. It explicitly distinguishes ads from marketplaces, which differentiates this tool from clone_marketplace and create_ad without requiring the agent to inspect 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 says ad_id comes from list_ads and explains when project_id is optional versus when the agent should call list_projects. It implicitly excludes marketplaces by stating ads are not marketplaces, though it does not explicitly name clone_marketplace as the alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clone_marketplaceAInspect
Clone a marketplace — create a copy of it (settings and configuration) as a new marketplace. Returns {integrationId, action:'clone', status:'cloned', kind, editUrl, message}, where integrationId is the id of the NEW clone. marketplace_id is the source marketplace from list_marketplaces. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| marketplace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state readOnlyHint=false and destructiveHint=false, so the description must disclose side effects. It clearly states that a copy is created (a mutating action) and describes the exact return payload, including that integrationId refers to the NEW clone. This goes beyond the annotations by specifying output structure and confirming the clone is a separate entity. It does not contradict any annotations, so a 4 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, dense sentence followed by a clear return specification. It front-loads the core purpose and then packs parameter guidance and return details without waste. While it is longer than minimal, every clause earns its place – no redundancy. It could be slightly more concise, but it is well-structured and easy to parse.
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 covers the essential information an agent needs: what it does, what parameters are required and how to source them, the return value structure, and the distinction between the original and the clone. It also indicates the action type ('clone') and status ('cloned') in the output. Given there is no output schema, this description serves as the complete contract for the operation. 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?
With schema description coverage at 0%, the description fully compensates by explaining both parameters: marketplace_id is the source (referencing list_marketplaces) and project_id is optional with conditions (inferred for single-project customers, otherwise required and must be obtained from list_projects). This adds significant meaning beyond the bare integer schema, giving the agent enough to supply correct values. This is excellent 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 ('clone'), a specific resource ('marketplace'), and clarifies what is copied ('settings and configuration'). It distinguishes itself from create_marketplace (which creates from scratch) by explicitly stating it makes a copy of an existing marketplace, and the required source field is clearly identified. This leaves no ambiguity about the tool's 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 gives practical usage context: marketplace_id is the source from list_marketplaces, and project_id is optional or required depending on the customer's project setup, with a pointer to list_projects. This tells the agent when and how to call the tool, though it does not explicitly contrast with sibling tools like create_marketplace or delete_marketplace. It provides clear prerequisites and conditional logic, so it earns a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_ad_stepAInspect
Configure ONE step of an ad's setup wizard. CRITICAL: configuring the SUMMARY step FINISHES + ACTIVATES the ad — in AUTO product mode that publishes EVERY matching product to the LIVE channel (spends budget), so to test safely set MANUAL mode FIRST (set_ad_product_mode) and submit one item with run_ad_item_action; check activationBehavior in get_ad before finishing. Ads are ads-based channels (advertising / price-comparison / classifieds), not marketplaces, and have no order sync. Ads are set up step by step IN ORDER: call this repeatedly, targeting each step the previous result reported as nextStepType, until nextStepType is null (setup complete). Identify the step by step_index (from get_ad steps[].index) — REQUIRED to disambiguate when two steps share a step_type (e.g. two 'form' steps); step_type alone targets the FIRST step of that type. Configuring out of order or before prerequisites are met returns 'prerequisite_not_met' / 'step_not_available' (e.g. category mapping precedes the attribute step). PAYLOAD: for a form / order-settings step, payload = {items: {fieldCode: value, ...}} built from that step's fields (get_ad steps[].fields — each field is {code, label, type, required, options, optionsSource, htmlAttributes, value, help}); send ONLY the fields you want to change — the others keep their current value and nothing is deleted. A dropdown/options field takes the option's VALUE — options is a list of {value, label} rows, so send options[].value, NEVER a row's position in that list; If a field arrives with optionsPending=true its option list is not known yet (usually because the channel connection does not exist); finish the auth step and re-read get_ad rather than guessing a value. A REQUIRED field with an empty value is yours to fill even when htmlAttributes look pre-filled — the server only supplies it when it can resolve it from the connection, and it says so in the error when it cannot. read steps[].fields[].options first. Structured steps use their own payload: the product-filter step accepts attribute_filter (the condition tree as a JSON string, or "" to clear it), category_filter (a JSON string {categories_operator, categories:[...]}), and the flag export_out_of_stock ("0"|"1"); send ONLY what changes — it merges over the current filter, so the untouched flags/filters are kept. To include or exclude out-of-stock products use the export_out_of_stock flag — NEVER put a qty/stock condition in attribute_filter (it is an invalid state and is rejected). (export_children_as_parent and export_removed_products are managed in the Koongo UI and CANNOT be set here — sending either is rejected.) category-mapping and mapping-table likewise take their own payload. Returns {integrationId, stepType, status, ready, lastStep, nextStepType, oauthUrl, transitions[], message}. When transitions[] reports a product export/generation (e.g. moving into the summary/preview), that runs ASYNC — poll ad_status until productsRefreshing AND productsSubmitting are false before reading get_ad_report (its dataCheckErrors = the KOONGO DATA CHECK) or trusting counts. status: 'saved' (applied; transitions[] lists automation that ran), 'oauth_required' or 'credentials_in_ui' (a CONNECTION step — see below; TERMINAL, do not retry), 'prerequisite_not_met' / 'step_not_available', or 'validation_failed' (the message lists the field problems — unknown field, value outside its options, non-numeric value, or missing required field — fix them using the step's fields). CATEGORY ATTRIBUTES MAY BE DEFERRED: on channels whose attributes depend on the mapped categories, saving the product-filter step starts that download in the BACKGROUND instead of doing it inline. You can tell: transitions[] then says the download was started (and does NOT claim the attributes were fetched or an export ran), and categoryAttributeWarmup is present with pending:true. Do not call the refresh tool and do not read the attribute list yet — poll ad_status until the block is absent or reports state 'ready'. The attributes are pulled in automatically when it finishes; state 'failed' means call refresh_ad_category_attributes once. CONNECTION IS NOT CONFIGURABLE HERE: the connection/auth step (credentials, API keys, OAuth, auth settings) can NEVER be set through MCP — this is intentional and permanent for security, not a limitation to work around. When a step returns 'oauth_required' or 'credentials_in_ui', that status is FINAL for that step: do NOT resend it, do NOT guess field codes or a payload, do NOT keep retrying — the result will not change (it is not transient and not a validation error you can fix). Hand the returned oauthUrl (OAuth) or editUrl (credentials, entered in the Koongo UI) to the USER, then STOP and wait; once they finish, re-check ad_status (isConnected) and continue with the NEXT step. ad_id is from list_ads / create_ad. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| payload | No | Settings for this step. Form / order-settings: {items: {fieldCode: value}} from get_ad steps[].fields. A connection/auth step takes NO payload and cannot be configured here — omit it (also for advance-only steps). | |
| step_type | No | Target the step by type (the nextStepType from the previous step). Ambiguous when two steps share a type — prefer step_index. | |
| project_id | No | ||
| step_index | No | Target the step by its index (get_ad steps[].index) — use this to disambiguate steps that share a step_type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint false, destructiveHint false), so the description carries the burden — and it over-delivers. It discloses the budget-spending activation side effect of the SUMMARY step, async product export/generation in transitions[], background category-attribute downloads, terminal (non-retryable) oauth/credentials statuses, and the reject-list of unsettable flags. It also corrects a plausible misreading of destructiveHint=false by warning that AUTO mode publishes to the LIVE channel and spends budget. No contradiction with annotations, which simply understate this risk.
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 very long, but nearly every sentence carries unique operational information for a genuinely complex tool with heterogeneous step types, async transitions, and deferred attribute loading. It is front-loaded with the critical activation warning and ordering rule before payload details. Minor redundancy exists — the non-configurability of the connection step and the do-not-retry instruction are stated two or three times — which costs it full marks but is arguably intentional emphasis.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description correctly documents the return shape ({integrationId, stepType, status, ready, lastStep, nextStepType, oauthUrl, transitions[], message}) and explains every status value, the async polling requirements, terminal vs retryable conditions, and the success path. For a tool this complex, nothing an agent needs to call it safely and correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 60%, and the description compensates massively. It explains ad_id provenance (list_ads/create_ad), when project_id is required and how to resolve it (list_projects), the step_index vs step_type disambiguation rule, the exact payload shape {items: {fieldCode: value}} with send-only-changed semantics, dropdown value-vs-position rule, optionsPending handling, required-field behavior, and dedicated payloads for the product-filter step (attribute_filter, category_filter, export_out_of_stock) including what gets rejected.
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?
Opens with a specific verb + resource + scope: "Configure ONE step of an ad's setup wizard." The emphasis on "ONE step" and the repeated contrast with ads-based channels ("not marketplaces, and have no order sync") clearly distinguishes it from siblings like configure_marketplace_step, set_ad_product_mode, and set_ad_name without needing to open their 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?
Exceptionally explicit about when and when not to use the tool: it names set_ad_product_mode for safe testing, says to poll ad_status instead of calling the refresh tool while attributes warm up, routes state 'failed' to refresh_ad_category_attributes once, and states the connection/auth step "can NEVER be set through MCP." It even prescribes the stop-and-wait user handoff for oauthUrl/editUrl. The description also documents the step-by-step iteration loop terminating at nextStepType null.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_marketplace_stepAInspect
Configure ONE step of a marketplace's setup wizard. CRITICAL: configuring the SUMMARY step FINISHES + ACTIVATES the marketplace — in AUTO product mode that publishes EVERY matching product to the LIVE channel (spends budget), so to test safely set MANUAL mode FIRST (set_marketplace_product_mode) and submit one item with run_marketplace_item_action; check activationBehavior in get_marketplace before finishing. Marketplaces are set up step by step IN ORDER: call this repeatedly, targeting each step the previous result reported as nextStepType, until nextStepType is null (setup complete). Identify the step by step_index (from get_marketplace steps[].index) — REQUIRED to disambiguate when two steps share a step_type (e.g. two 'form' steps: Identifiers and Offer Features); step_type alone targets the FIRST step of that type. Configuring out of order or before prerequisites are met returns 'prerequisite_not_met' / 'step_not_available' (e.g. category mapping precedes the attribute step). PAYLOAD: for a form / order-settings step, payload = {items: {fieldCode: value, ...}} built from that step's fields (get_marketplace steps[].fields — each field is {code, label, type, required, options, optionsSource, htmlAttributes, value, help}); send ONLY the fields you want to change — the others keep their current value and nothing is deleted. A dropdown/options field takes the option's VALUE — options is a list of {value, label} rows, so send options[].value (e.g. external_product_id: "ean" for the Ean source attribute), NEVER a row's position in that list; read steps[].fields[].options first. If a field arrives with optionsPending=true its option list is not known yet (usually because the channel connection does not exist); finish the auth step and re-read get_marketplace rather than guessing a value. A REQUIRED field with an empty value is yours to fill even when htmlAttributes look pre-filled — the server only supplies it when it can resolve it from the connection, and it says so in the error when it cannot. Structured steps use their own payload: the product-filter step accepts attribute_filter (the condition tree as a JSON string, or "" to clear it), category_filter (a JSON string {categories_operator, categories:[...]}), and the flag export_out_of_stock ("0"|"1"); send ONLY what changes — it merges over the current filter, so the untouched flags/filters are kept. To include or exclude out-of-stock products use the export_out_of_stock flag — NEVER put a qty/stock condition in attribute_filter (it is an invalid state and is rejected). (export_children_as_parent and export_removed_products are managed in the Koongo UI and CANNOT be set here — sending either is rejected.) category-mapping and mapping-table likewise take their own payload. Returns {integrationId, stepType, status, ready, lastStep, nextStepType, oauthUrl, transitions[], message}. When transitions[] reports a product export/generation (e.g. moving into the summary/preview), that runs ASYNC — poll marketplace_status until productsRefreshing AND productsSubmitting are false before reading get_marketplace_report (its dataCheckErrors = the KOONGO DATA CHECK) or trusting counts. status: 'saved' (applied; transitions[] lists automation that ran), 'oauth_required' or 'credentials_in_ui' (a CONNECTION step — see below; TERMINAL, do not retry), 'prerequisite_not_met' / 'step_not_available', or 'validation_failed' (the message lists the field problems — unknown field, value outside its options, non-numeric value, or missing required field — fix them using the step's fields). CATEGORY ATTRIBUTES MAY BE DEFERRED: on channels whose attributes depend on the mapped categories, saving the product-filter step starts that download in the BACKGROUND instead of doing it inline. You can tell: transitions[] then says the download was started (and does NOT claim the attributes were fetched or an export ran), and categoryAttributeWarmup is present with pending:true. Do not call the refresh tool and do not read the attribute list yet — poll marketplace_status until the block is absent or reports state 'ready'. The attributes are pulled in automatically when it finishes; state 'failed' means call refresh_marketplace_category_attributes once. CONNECTION IS NOT CONFIGURABLE HERE: the connection/auth step (credentials, API keys, OAuth, auth settings) can NEVER be set through MCP — this is intentional and permanent for security, not a limitation to work around. When a step returns 'oauth_required' or 'credentials_in_ui', that status is FINAL for that step: do NOT resend it, do NOT guess field codes or a payload, do NOT keep retrying — the result will not change (it is not transient and not a validation error you can fix). Hand the returned oauthUrl (OAuth) or editUrl (credentials, entered in the Koongo UI) to the USER, then STOP and wait; once they finish, re-check marketplace_status (isConnected) and continue with the NEXT step. marketplace_id is from list_marketplaces / create_marketplace. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| payload | No | Settings for this step. Form / order-settings: {items: {fieldCode: value}} from get_marketplace steps[].fields. A connection/auth step takes NO payload and cannot be configured here — omit it (also for advance-only steps). | |
| step_type | No | Target the step by type (the nextStepType from the previous step). Ambiguous when two steps share a type — prefer step_index. | |
| project_id | No | ||
| step_index | No | Target the step by its index (get_marketplace steps[].index) — use this to disambiguate steps that share a step_type. | |
| marketplace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses major side effects: the summary step activates the marketplace and may publish to the LIVE channel, spending budget; transitions may run async exports; category attributes may download in the background; and connection/auth steps are permanently non-configurable via MCP. It also communicates terminal statuses, error conditions, and what not to retry.
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 long, but justified by the tool's complexity and the number of failure modes. Critical safety information is front-loaded, though some redundancy exists around retrying auth steps and out-of-order configuration, which slightly bloats the text.
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 having no output schema, the description fully explains the return object's key fields, statuses, async behavior, deferred attribute warmup, and when to poll marketplace_status. It covers prerequisites, error handling, and user-interaction requirements, leaving no obvious gap that would cause an agent to invoke the tool incorrectly.
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 60%, but the description more than compensates: it explains that payload is built from steps[].fields, that options must be sent by value rather than list position, how to handle optionsPending, and gives exact structured payloads for product-filter, category-filter, and export_out_of_stock. It also clarifies where marketplace_id and project_id come from.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Configure ONE step of a marketplace's setup wizard') and immediately distinguishes this tool from related siblings like configure_ad_step and configure_order_connection. It makes the tool's role unmistakable even before reading the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: call repeatedly in step order, stop when nextStepType is null, use step_index to disambiguate, and never configure connection/auth steps through MCP. It also names alternative tools for safe testing (set_marketplace_product_mode, run_marketplace_item_action) and for handling failed attribute warmup (refresh_marketplace_category_attributes).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_order_connectionAIdempotentInspect
Set a standalone order connection's Orders Config, sync level and on/off state. order_config is a {code: value} map using codes from get_order_connection.orderConfigFields; order_sync_level is 'orders_and_stock' or 'stock_only'; order_status 'active' enables order syncing for this connection, 'disabled' turns it off. Returns {connectionId, action:'configure', status, orderStatus, addonCode, upsellUrl, message}: 'updated' on success; 'rejected' (HTTP 400) if you tried to set an unknown, paid-locked or unavailable field (NOTHING is saved — message lists them, upsellUrl for a paid field); or 'prerequisite_not_met' (HTTP 409) if you try to enable a connection that has not finished authentication yet (complete it in the Koongo UI and confirm with test_order_connection first). Only order settings are changed here — marketplace credentials are NEVER set via MCP. Provided order_config keys are merged (other settings are left untouched). connection_id is from get_order_overview. project_id is OPTIONAL (project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| order_config | No | Map of Orders Config values, {code: value}, using codes from get_order_connection.orderConfigFields. | |
| order_status | No | 'active' enables order syncing for this connection, 'disabled' turns it off. | |
| connection_id | Yes | connectionId of the order connection (from get_order_overview). | |
| order_sync_level | No | Order sync level: 'orders_and_stock' or 'stock_only'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (idempotentHint=true, readOnlyHint=false), the description discloses important behavioral traits: exact return shape, success/error statuses ('updated', 'rejected' with HTTP 400, 'prerequisite_not_met' with HTTP 409), the fact that rejected writes save NOTHING, merging behavior for order_config keys, and the guarantee that credentials are never changed. This significantly exceeds what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries essential information: the action, parameter semantics, error behavior, prerequisite flow, merge semantics, and credential boundaries. It is front-loaded with the main purpose and structured logically 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?
Given no output schema, the description fully covers return values and error conditions. It also covers prerequisites, how to obtain required IDs, what happens on partial failure, and where to route for missing project_id. There are no obvious gaps an agent would need filled to invoke the 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 schema already has 80% description coverage, and the tool description adds further meaning: it explains that order_config uses codes from get_order_connection.orderConfigFields, that order_sync_level is restricted to two values, that order_status toggles syncing on/off, and that order_config keys are merged rather than replaced. It also clarifies the source of connection_id and the optional/required nature of project_id.
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 ('Set a standalone order connection's Orders Config, sync level and on/off state') with a clear resource and scope. It explicitly distinguishes itself from sibling tools by noting that marketplace credentials are NEVER set via MCP, so an agent can tell it apart from configure_marketplace_step or enable_marketplace_order_sync.
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 explicit when-to-use and when-not-to-use guidance: it is for order settings only, not marketplace credentials; it can only enable connections after authentication is completed via the Koongo UI and test_order_connection; and it directs the agent to list_projects when project_id is required. This is strong routing relative to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_adAInspect
Create a new ad for a project from one of the channels in list_ad_channels. Ads are ads-based channels (advertising / price-comparison / classifieds), not marketplaces: they publish products to the ad platform and have no order sync. channel_code is the channelCode from list_ad_channels. Returns {integrationId, action:'create', status, kind:'ads', editUrl, nextStepType, message}. status is 'created' (the ad exists; continue with configure_ad_step starting at nextStepType) or 'prerequisite_not_met' (HTTP 409 — message explains what must be done first, e.g. an offer/primary feed must exist first, or you are over your plan's ads limit (the message carries the upgrade link — see PLANS, ADDONS & UPGRADES); nextStepType names the step). multichannel_code links a multichannel definition when the channel offers one. definition_code picks a SPECIFIC definition of the channel when it has more than one — take it from get_ad_channel definitions[].definitionCode; omit it for the channel's default/primary definition. name is an OPTIONAL human-readable label so you can later find this ad by name (names are not unique — set_ad_name can change it later). project_id is OPTIONAL (inferred for a single-project customer; if project_id_required is returned, call list_projects and pass project_id). The returned integrationId is the ad_id for get_ad / configure_ad_step and other ads tools.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional human-readable name for the new ad. | |
| project_id | No | ||
| channel_code | Yes | channelCode of the ad channel (from list_ad_channels). | |
| definition_code | No | Pick a specific definition (definitionCode from get_ad_channel) when the channel has more than one; omit for the default/primary definition. | |
| multichannel_code | No | Definition code of a multichannel option when the channel offers one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description thoroughly discloses the return shape, including integrationId, action, status, kind, editUrl, nextStepType, and message. It also explains the 'created' vs 'prerequisite_not_met' statuses, the HTTP 409 case, and that the returned integrationId is the ad_id used by get_ad and configure_ad_step.
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 long but well organized, moving from channel eligibility to response semantics to each parameter in schema order. Nearly every sentence earns its place, though a few asides like the upgrade-link reference add marginal value and prevent it from being maximally concise.
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 lack of an output schema and the five-parameter surface, the description is operationally complete. It covers return fields, status handling, prerequisite failures, the project_id inference edge case, and the relationship between the returned integrationId and subsequent ad tooling.
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?
Although the schema already covers 80% of parameters, the description adds essential meaning: how channel_code is obtained, when definition_code must be omitted, what multichannel_code links, name non-uniqueness, and the project_id fallback via list_projects. It specifically compensates for project_id having no schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create a new ad for a project from one of the channels in list_ad_channels.' It further distinguishes ads from marketplaces by saying they 'publish products to the ad platform and have no order sync,' so an agent can separate this from marketplace creation 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 gives clear context for sourcing channel_code from list_ad_channels and explicitly rules out marketplaces by contrast, including the no-order-sync distinction. It does not explicitly name an alternative tool like create_marketplace, but the behavioral boundary makes the intended usage clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_feedAInspect
Create a Koongo product feed for a project. feed_code MUST be one returned by list_feed_templates. Returns {feedId, feedCode, status, customerId, editUrl, categoryMappingNeeded}. project_id is OPTIONAL: omit it when the customer has a single project (it is inferred); if they have several you get project_id_required — call list_projects and pass one. If categoryMappingNeeded is true, map its categories with list_unmapped_categories + search_target_categories + set_category_mapping (pass the returned feedId as feed_id). The core next step is to MAP output attributes: call get_feed + list_source_attributes, then map_feed_attribute per attribute (category mapping only covers categories, not attributes). Requires the project's data imported (dataStatus='ok', see get_import_status). If the plan's channels limit is reached, the call is refused with error 'quota_reached' (HTTP 403) + addonCode + upsellUrl — show the upsellUrl and do not retry (see PLANS, ADDONS & UPGRADES).
| Name | Required | Description | Default |
|---|---|---|---|
| feed_code | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations providing no behavioral hints, the description fully discloses behavior: return fields, optional vs required behavior, downstream mapping requirements, data import prerequisite, and the quota_reached error with upsellUrl. This is far beyond what structured annotations provide and gives the agent everything needed to understand side effects and follow-ups.
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 dense and information-rich, front-loaded with the core purpose before diving into prerequisites, optional behavior, and error handling. It is longer than average but nearly every sentence earns its place; a slightly tighter structure could improve scannability.
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 creation tool with no output schema and only two parameters, this description is exceptionally complete: it names return fields, explains category mapping, attribute mapping, import prerequisites, and quota errors with next steps. An agent can invoke this tool and handle the subsequent workflow without needing additional tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description fully compensates: feed_code is constrained to values from list_feed_templates, and project_id is explained as optional with inference rules and the project_id_required error case. Every parameter's semantics are meaningfully described beyond the bare 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 verb and resource: 'Create a Koongo product feed for a project.' This clearly distinguishes it from sibling creation tools like create_ad, create_marketplace, and create_rule, and the rest of the description reinforces that this tool specifically deals with product feeds.
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 strong usage guidance: feed_code must come from list_feed_templates, project_id handling is explained based on customer project count, and it covers prerequisites and error handling. However, it does not explicitly contrast this with update_feed or state when to prefer one over the other.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_marketplaceAInspect
Create a new marketplace integration for a project from one of the channels in list_marketplace_channels. channel_code is the channelCode from list_marketplace_channels. Returns {integrationId, action:'create', status, kind:'marketplace', editUrl, nextStepType, message}. status is 'created' (the marketplace exists; continue with configure_marketplace_step starting at nextStepType) or 'prerequisite_not_met' (HTTP 409 — message explains what must be done first, e.g. an offer/primary feed must exist first, a plan limit is reached (the message carries the upgrade link — see PLANS, ADDONS & UPGRADES), or the primary channel must be created first — see nextStepType). primary_sync marks this as the primary product source; order_sync enables order synchronization if the channel supports it; multichannel_code links a multichannel definition when the channel offers one (see get_marketplace_channel). definition_code picks a SPECIFIC definition of the channel when it has more than one (e.g. Amazon/Kaufland expose 'Offers' AND 'New Products') — take it from get_marketplace_channel definitions[].definitionCode; OMIT it to create the channel's default/primary definition. (versionType primary/secondary in get_marketplace_channel tells the definitions apart; it is NOT the same as primary_sync, which just marks this integration as the primary product source.) name is an OPTIONAL human-readable label so you can later find this marketplace by name (names are not unique — set_marketplace_name can change it later). project_id is OPTIONAL (inferred for a single-project customer; if project_id_required is returned, call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional human-readable name for the new marketplace. | |
| order_sync | No | Enable order synchronization (only if the channel supports it). | |
| project_id | No | ||
| channel_code | Yes | channelCode of the marketplace channel (from list_marketplace_channels). | |
| primary_sync | No | Mark this marketplace as the primary product source. | |
| definition_code | No | Pick a specific definition (definitionCode from get_marketplace_channel) when the channel has more than one, e.g. New Products vs Offers; omit for the default/primary definition. | |
| multichannel_code | No | Definition code of a multichannel option when the channel offers one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description fully discloses behavioral details: status can be 'created' or 'prerequisite_not_met' with HTTP 409 semantics, the message can explain required prerequisites and upgrade links, and the definition_code/versionType behavior is clarified. It also explains optional project_id inference and the distinction between primary_sync and versionType, which the annotations alone would not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long and dense, but every clause carries operational detail and the core purpose is front-loaded. Some parenthetical interruptions and repeated clarifications make it read as a wall of text, so bullet structure could improve scannability, but there is no filler language.
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 seven parameters, one required field, no output schema, and sparse annotations, the description is unusually complete: it covers return fields, status semantics, prerequisite handling, upgrade links, next-step routing, optional parameters, and how to resolve missing project_id. An agent has almost everything needed to call the 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?
Although schema description coverage is 86%, the description adds substantial meaning: it ties channel_code directly to list_marketplace_channels, explains how definition_code is sourced and when to omit it, disambiguates primary_sync from versionType, describes name uniqueness and rename behavior, and explains project_id inference. These additions go well beyond the schema descriptions, especially for project_id, which has no schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb–resource pair: 'Create a new marketplace integration for a project,' and immediately scopes the channel source to list_marketplace_channels. It also clarifies exactly what is created and what the expected status outcomes are, distinguishing it from sibling create tools like create_ad and create_feed. The return shape and follow-up flow make the tool's role unmistakable.
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 strong workflow guidance: where to get channel_code, where to get definition_code, when to call list_projects, and how to proceed with configure_marketplace_step after creation. It does not explicitly state when not to use this tool versus alternatives like clone_marketplace or configure_marketplace_step, so it stops just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_order_connectionAInspect
Start adding a standalone order connection for a channel from list_order_channels. IMPORTANT: the assistant NEVER handles connection credentials — this does NOT create or authenticate the connection itself; it returns a Koongo UI link where the USER enters the API key or completes the OAuth login in the browser. Returns {action:'create', status, authType ('oauth'|'api_key'), authUrl, upsellUrl, message, costImpact:{willIncrease, amount, currency, interval, note}|null}: status 'auth_required' with the authUrl to open, or 'rejected' if the channel does not support order connections. COST: when costImpact.willIncrease is true, adding this connection RAISES the monthly bill (e.g. +10 EUR/month, billed at cycle end) — TELL the user the amount and get their confirmation BEFORE opening the link. Adding a connection may instead require a plan upgrade when the order-connection limit is reached (upsellUrl set). After the user finishes authentication the new connection appears in get_order_overview — then verify it with test_order_connection and set it up with configure_order_connection. channel_api_code is from list_order_channels. project_id is OPTIONAL (project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| channel_api_code | Yes | channelApiCode of the channel to add (from list_order_channels). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutability and open-world behavior, but the description adds crucial behavioral detail beyond them: the tool returns an authUrl for the user, does not handle credentials, can return 'auth_required' or 'rejected', may raise the monthly bill, and may require a plan upgrade. This is exactly the kind of side-effect and workflow context an agent needs and the structured fields do not 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 long, but every sentence carries decision-critical information: what the tool does, what it does not do, user action required, return shape, cost consequences, plan upgrade possibility, and post-auth workflow. It is front-loaded with the most important trait (no credential handling) immediately after the purpose statement. Slightly dense, but justifiably so.
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 no output schema, the description remarkably covers the return object's key fields, possible statuses, cost impact semantics, the upsell/plan-upgrade case, and the expected next steps after authentication. An agent has enough information to call the tool correctly, interpret its response, and avoid a costly or dangerous action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, so the description must compensate for the undocumented project_id parameter. It does so by explaining project_id is optional and that list_projects should be called when it is required. It also reinforces channel_api_code's origin from list_order_channels, adding practical sourcing meaning beyond the schema text.
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: 'Start adding a standalone order connection for a channel from list_order_channels.' It clearly distinguishes itself from related siblings by emphasizing that it does NOT create or authenticate the connection itself, but returns a user-facing Koongo UI link. This makes the tool's role unambiguous even 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 gives clear context for when to use the tool: when starting a standalone order connection, and it explicitly instructs that the assistant must not handle credentials and must get user confirmation before opening the link when costImpact.willIncrease is true. It also names the project_id-required fallback (call list_projects) and the follow-up tools (test_order_connection, configure_order_connection), though it does not formally state exclusions versus all alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ruleAInspect
Create a NEW product rule (an Attribute Rule). GUARDRAIL: a Rule is NEVER a substitute for per-product enrichment — if you would need MORE THAN 3 text-contains conditions (contains/contains_any/starts_with on a description/title) to derive a value (color, material, gender…), do NOT create a Rule; enrich instead with set_api_source/set_ai_source and map that source attribute (see the server ENRICH guidance). A Rule patches FEED OUTPUT only and writes NOTHING onto the products; if the user asked to enrich the products / add attribute X to the products, use set_api_source/set_ai_source (or ask first) — never substitute a Rule. ALWAYS validate_rule it first and fix every error. Pass the full rule document as rule — {name, description, category, icon, rules:[{sortId, enabled, type, conditions, operationGroups:[{mode, parentMode, attributes, operations:[{name, arguments:{key:value}}]}]}]} (see discover_rule_operations for the vocabulary). Any _id/id you include is IGNORED — the server always mints a new one (this tool never overwrites an existing rule; use update_rule for edits). scope selects where it is created: 'project' (default) = the project's own library; 'shared_template' = the reusable shared template library (a template_read_only error means your access cannot write there). Returns {ruleId, scope, status, changed, reason, validation}; status 'created' on success, or 'rejected' with the validation errors when the rule is invalid (HTTP 200, nothing written). SAVE-ONLY: a new rule has NO effect on any feed until you attach it to a feed attribute with map_feed_attribute (rule_id) and then export_feed; a shared_template rule affects no feed at all until it is used by a project. VALUE/OPTIONS MAPPING: for a map_attribute_value operation, search and replace are arrays of {value:''} objects paired by index (NOT plain strings — plain strings save but map nothing, showing empty rows); replace optional. That op is not executed by validate_rule's dry-run (passthrough computedValue) — verify only after a real export/build. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| rule | Yes | ||
| scope | No | Where to create the rule: 'project' (default) = the project's own library; 'shared_template' = the reusable shared template library. | |
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state readOnlyHint/idempotentHint/destructiveHint all false; the description adds substantial behavioral context: rules write nothing onto products, included _id/id is ignored, the server always mints a new id, the tool never overwrites, invalid rules return HTTP 200 with status 'rejected', and new rules have no feed effect until attached and exported. 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?
Long, but appropriately so for a complex creation tool with many failure modes. It is front-loaded with purpose and guardrail, uses labeled sections (GUARDRAIL, SAVE-ONLY, VALUE/OPTIONS MAPPING), and every block addresses a distinct pitfall an agent would otherwise hit. Dense and structured rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return contract: {ruleId, scope, status, changed, reason, validation}. It also covers project_id inference, dry-run limitations, value mapping array semantics, and post-create attachment workflow. An agent has everything needed to invoke this tool correctly and avoid common mistakes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, but the description compensates fully. It supplies the complete nested rule document shape, explains that scope has 'project' as default and the shared_template behavior including template_read_only error, and clarifies project_id is optional/inferred unless required. This goes well beyond the sparse 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?
Opens with a specific verb and resource: 'Create a NEW product rule (an Attribute Rule).' It is clearly distinguished from siblings like update_rule, delete_rule, and validate_rule by explicitly saying edits use update_rule and validation is a prerequisite. The purpose is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides emphatic when-not-to-use guidance: do not create a Rule for complex per-product enrichment; use set_api_source/set_ai_source instead; validate_rule first; use map_feed_attribute/export_feed to give it effect; use update_rule for edits. Alternatives and exclusions are explicit and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_adADestructiveIdempotentInspect
Delete an ad. DESTRUCTIVE and NOT reversible from this surface: it stops syncing, is removed from the list, and ALSO hard-deletes the ad's feeds (channel profiles) — there is no restore tool here, so warn the user that deletion cannot be undone. Ads are ads-based channels (advertising / price-comparison / classifieds), not marketplaces: they publish products to the ad platform and have no order sync. Confirm with the user first, then call with confirm:true. Without confirm:true the call returns error 'confirm_required' (HTTP 400) and nothing is deleted. Returns {integrationId, action:'delete', status:'deleted', kind:'ads'}. ad_id is from list_ads. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| confirm | No | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations: it discloses that deletion stops syncing, removes the ad from the list, hard-deletes the ad's feeds/channel profiles, and has no restore tool. It also explains the HTTP 400 error when confirm is missing and specifies the exact return payload. This is unusually transparent for a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every clause earns its place. It front-loads the destructive warning, then covers confirmation behavior, scope of deletion, return value, and parameter provenance in a tight sequence. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, multi-effect mutation with a confirmation guard, the description covers the essential context: what is deleted, what is not affected (no order sync), what happens without confirmation, how to get required IDs, and the expected return. There is no output schema, so the return shape description is necessary and sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It does: ad_id is sourced from list_ads, confirm must be true to execute, and project_id is optional/inferred unless project_id_required, in which case list_projects is the prerequisite. This fully compensates for the bare 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 precise verb and resource ('Delete an ad') and immediately differentiates ads from marketplaces: 'Ads are ads-based channels ... not marketplaces: they publish products to the ad platform and have no order sync.' This clearly distinguishes it from sibling tools like delete_marketplace and delete_feed.
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 guidance is explicit and actionable: confirm with the user first, call with confirm:true, warn that deletion cannot be undone. It also gives the failure mode ('Without confirm:true the call returns error confirm_required') and instructs when to call list_projects for project_id. No inference is left to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_ai_sourceADestructiveIdempotentInspect
Remove an AI source (its CSV + registration) by code so it is no longer applied on future imports. Set apply:true to re-import now. NOTE: the custom_ values already written onto products are NOT immediately erased — they clear on the next full product import. project_id is OPTIONAL (inferred for a single-project customer). Requires the additional-sources addon: without it the call is refused with error 'addon_required' (HTTP 403) + addonCode + upsellUrl — show the upsellUrl and do not retry. Returns {status:'deleted'|'not_found', code, applied}.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| apply | No | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry destructiveHint=true and idempotentHint=true, but the description adds crucial context: custom_<code> values are not immediately erased but clear on the next full product import; the addon requirement (without it returns 403 with addonCode+upsellUrl, and instructs to show the upsellUrl and not retry); and the exact return shape. This significantly enriches the behavioral profile beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the primary action and purpose appear in the first sentence. Supporting notes (delay, addon, return) follow logically without redundancy. Every sentence adds value; no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, idempotent mutation with an optional parameter and a prerequisite addon, the description covers all necessary aspects: what is deleted, when it takes effect, how to re-import, optional parameter behavior, the error condition and required response, and the return contract (including both statuses and the applied field). No critical 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 0%, so the description must explain parameters. It does: code is the identifier ('by code'), apply is explained ('set apply:true to re-import now'), and project_id is noted as optional and inferred for single-project customers. All three parameters receive meaningful explanation, fully compensating for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the verb 'Remove' and the resource 'AI source (its CSV + registration)' and identifies the key 'code'. It clearly distinguishes this from delete_api_source or delete_feed by naming the resource type, so an agent can pick the correct deletion tool 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 clarifies the effect ('so it is no longer applied on future imports') and the option to re-import with apply:true. It does not explicitly name alternatives or state when to prefer this over delete_api_source, but the resource type is unambiguous. Context is clear; exclusions are not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_api_sourceADestructiveIdempotentInspect
Remove an API source attribute by code from every product so it is no longer applied. Set apply:true to re-import now (otherwise it clears on the next import). project_id is OPTIONAL (inferred for a single-project customer). Requires the additional-sources addon: without it the call is refused with error 'addon_required' (HTTP 403) + addonCode + upsellUrl — show the upsellUrl and do not retry. Returns {status:'deleted', code, applied}.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| apply | No | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant side-effect context beyond the destructiveHint annotation: removal applies to every product, is immediate only when apply is true, otherwise clears on next import, and is guarded by an addon requirement with exact error fields. It also states the return shape, so the agent knows what success looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the primary action and then pack optional behavior, addon error handling, and response format without redundancy. Every clause adds operational 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?
The description covers parameters, behavior, error handling, and return shape, which is strong given there is no output schema. It leaves a small ambiguity around whether project_id is required for multi-project customers and does not state behavior when code is absent, so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description explains all three parameters: code (the attribute identifier), apply (controls immediate versus next-import clearing), and project_id (optional, inferred for single-project customers). This fully compensates for the schema's lack of 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 opens with 'Remove an API source attribute by `code` from every product so it is no longer applied', naming the verb, resource, and scope. This clearly distinguishes it from set_api_source (set vs remove), list_api_sources (list vs delete), and delete_ai_source (API vs AI).
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 tells the agent when to set apply:true (re-import now) versus letting it clear on the next import, and when to stop by showing the upsellUrl and not retrying on addon_required. project_id inference is also covered, but the description never names sibling alternatives or an explicit do-not-use condition, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_feedADestructiveIdempotentInspect
Delete a feed (soft delete — the generated file and config are removed but it can be restored with restore_feed). DESTRUCTIVE: confirm with the user first, then call with confirm:true. Without confirm:true the call returns error 'confirm_required' (HTTP 400) and nothing is deleted. Returns {feedId, action:'delete', status:'deleted'}. feed_id from list_feeds; project_id OPTIONAL.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| feed_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, it discloses soft-delete behavior, the confirm guard and its exact error/HTTP status, that nothing is deleted without confirmation, the return shape, and recoverability via restore_feed. This is rich behavioral context that annotations alone do not provide, and it does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense, purpose-driven sentences with the destructive warning front-loaded. Every sentence adds operational value: semantics, confirmation requirement, error behavior, return value, and parameter provenance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-param, no-output-schema tool, the description covers input semantics, required confirmation, error behavior, return value, and recovery path. An agent has everything needed to invoke it safely and 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 0%, so the description carries the burden. It explains confirm:true as required for deletion, identifies feed_id's source, and marks project_id as optional. It does not explain project_id's role further, but all three params receive at least meaningful semantic 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 clearly states 'Delete a feed' with specific soft-delete semantics, and explicitly references restore_feed, distinguishing it from other delete_* siblings. The resource and action are 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?
It gives explicit operational guidance: confirm with the user first, pass confirm:true, and notes the error without it. It also tells the agent where feed_id comes from. It doesn't deeply contrast with alternatives, but the restore_feed mention and deletion context make the guidance clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_marketplaceADestructiveIdempotentInspect
Delete a marketplace. DESTRUCTIVE and NOT reversible from this surface: it stops syncing, is removed from the list, and ALSO hard-deletes the marketplace's feeds (channel profiles) and unregisters its webhooks — there is no restore tool here, so warn the user that deletion cannot be undone. Confirm with the user first, then call with confirm:true. Without confirm:true the call returns error 'confirm_required' (HTTP 400) and nothing is deleted. Returns {integrationId, action:'delete', status:'deleted', kind}. marketplace_id is from list_marketplaces. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| project_id | No | ||
| marketplace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the annotations: it details the full cascade of side effects (stops syncing, removes from list, hard-deletes feeds/channel profiles, unregisters webhooks), states irreversibility, and explains the confirm_required error path. No contradiction with the destructiveHint or readOnlyHint annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: warning, side effects, confirmation requirement, error behavior, return shape, and parameter sourcing. The destructive warning is front-loaded, and the text remains readable despite covering multiple consequential 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 destructive tool with no output schema, the description provides complete operational context: return value shape, error condition, side effects, irreversibility warning, and parameter prerequisites. An agent has everything needed to invoke it correctly and safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries full responsibility for parameter meaning. It clearly explains confirm (must be true), marketplace_id (from list_marketplaces), and project_id (optional/inferred vs. required depending on customer type). This fully compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific verb ('Delete') and resource ('marketplace'), clearly differentiating it from create/pause/resume/repair siblings. Immediately adds the critical destructive scope, 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?
Provides explicit workflow guidance: warn the user, confirm first, then call with confirm:true; also specifies where marketplace_id comes from and when project_id is required. It does not explicitly name a less-destructive alternative like pause_marketplace, but the confirmation and prerequisites make usage conditions clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_ruleADestructiveIdempotentInspect
Delete a product rule (Attribute Rule) and unlink it from every feed attribute that uses it. DESTRUCTIVE: a rule may shape a live feed — check its usageCount with list_rules / get_rule first, warn the user, then call with confirm:true. Without confirm:true the call returns error 'confirm_required' and nothing is deleted. Identify the rule by rule_id (from list_rules). scope selects the library: 'project' (default) or 'shared_template' (a template_read_only error means your access cannot write there). Returns {ruleId, scope, status:'deleted', changed, reason, validation}. Any feed that used this rule reverts to its other value source; run export_feed on those feeds to refresh their output. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Which library the rule lives in: 'project' (default) = the project's own library; 'shared_template' = the reusable shared template library. | |
| confirm | No | Must be true to actually delete; without it the call returns 'confirm_required' and nothing is deleted. | |
| rule_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations that already mark destructiveHint=true, the description discloses the confirm_required guardrail, the unlink behavior, the effect on feeds reverting to another value source, and the return payload shape. It also explains that export_feed should be run on affected feeds, which is important operational 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?
The description is dense but well-structured, front-loading the destructive nature and key prerequisite before scope and project_id details. Every sentence carries real guidance, though the information density makes it slightly longer than strictly necessary.
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 covers prerequisites, error cases, return values, side effects, and required follow-up actions. With no output schema present, it fully explains what the agent should expect and do, leaving no critical gaps for a destructive 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?
Schema coverage is only 50%; rule_id and project_id lack descriptions in the schema. The description compensates by explaining how to identify the rule via list_rules and by detailing when project_id is optional versus required, adding meaning the schema alone does not provide.
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 — 'Delete a product rule (Attribute Rule)' — and clearly distinguishes the scope of what happens: the rule is deleted and unlinked from every feed attribute using it. It differentiates from siblings like update_rule by naming the unique destructive behavior and its consequences.
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 explicit when-to-use guidance: check usageCount with list_rules/get_rule first, warn the user, and only call with confirm:true. It also explains the shared_template access error and how to handle missing project_id, providing clear prerequisites and troubleshooting steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_rule_operationsARead-onlyInspect
Discover the vocabulary for building a product rule (an attribute-value transformation — the feature Koongo's UI and help call "Attribute Rules" / "Rules"). GUARDRAIL: a Rule must never be keyword-matching — if a value would need MORE THAN 3 text-contains conditions to derive (color, material, gender… from free text), STOP and enrich per-product with set_api_source/set_ai_source instead of building the Rule. A Rule patches FEED OUTPUT only and writes NOTHING onto the products; if the user asked to enrich the products, use set_api_source/set_ai_source (or ask first) — never substitute a Rule. Call this FIRST, before you write a rule, so you use only supported operations, conditions and arguments. Returns {operations:[{name, label, group, returnType, valueType, math, attributeVariant, arguments:[{name, label, type, required, options, placeholder, optionsSource}]}], conditions:[{operator, label, group, disabledFor, arguments}], ruleSchema, examples:[{title, description, rule, sampleProduct, expectedValue}]}. A rule document has the shape {name, description, category, icon, rules:[...]}. Each rule is {sortId (int, precedence — the server reassigns it 1,2,3… by position on save), enabled (bool), type, conditions (a condition tree, optional), operationGroups:[{mode, parentMode, attributes:[...], operations:[{name, arguments:{key:value}}]}]}. A rule's conditions (when present) is a combine node {type:"combine", operator:"and"|"or", conditions:[ {type:"expression", attribute, operator, value} | nested combine]} — a single condition is a combine wrapping one expression, and the comparison value always goes in the expression's value (an operator's arguments only describe that value's input). AUTHOR the unconditional "Default Rule" FIRST, then the "Conditional Rule" exceptions — the server normalizes to that shape and reassigns sortId 1,2,3…; among conditionals a lower sortId is evaluated first and the Default Rule (at most one) is the fallback. Match a condition value's type to its attribute: a numeric attribute (dataType integer/double from list_source_attributes) needs a NUMBER not a quoted string (the server casts on save), and a text operator (disabledFor includes "number": contains/starts_with/ length_exceeds/*_any/…) on a numeric attribute is REJECTED — use greater/less/equals instead. Operations in a group run left-to-right and chain by type: an op's valueType is its INPUT and returnType its OUTPUT, so each op's returnType must match the next op's valueType. The Rules help's text "Functions" (trim, upper/lower case, strip HTML, base64…) are the single textoperations operation via its function argument; collection "Functions" (sort, unique, join, first non-empty…) are the Collections-group operations. An operation's arguments object keys come from that operation's argument spec here; enum arguments accept only the listed options ids. Filter to one operation group with group; set detail 'full' for the complete argument specs and 'compact' (default) for a lighter list. include_conditions adds the condition operators; include_examples adds curated end-to-end worked examples. VALUE / OPTIONS MAPPING (the map_attribute_value operation) remaps a source attribute's store values onto a target/channel attribute's allowed set (the CP "store value → channel value" table). Its search and replace arguments are ARRAYS OF OBJECTS {value:''} paired by index (search[i] → replace[i], SAME length) — NOT plain-string arrays. Plain strings save without error but map nothing (empty rows in the UI, passthrough at runtime) — the #1 gotcha. replace is OPTIONAL (the CP "AI Mapping (unmapped)" autofills the rest) but provide it for deterministic output. A source value NOT listed in search passes through UNCHANGED (no implicit default), so for a CLOSED target allowed-value set either map EVERY value or add a Default Rule (set_value) fallback, otherwise unmapped values violate the channel spec. Place it in an operationGroup with mode:'single', attributes:['']. SET OPTION (the setoption operation) assigns an attribute a fixed value from its CLOSED option list: put it in an operationGroup mode:'set_option', attributes:[], operations:[{name:'setoption', arguments:{value: ''}}] — value is the option VALUE, not its label. More generally, an argument whose spec has optionsSource (e.g. 'feedAttribute') means its value must be one of the target attribute's options — read them with get_attribute_options. ALWAYS validate_rule a rule before create_rule / update_rule.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | ||
| detail | No | ||
| include_examples | No | ||
| include_conditions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=true, but the description adds significant behavioral detail: a Rule writes nothing to products, the server reassigns sortId values, casts numeric values on save, and silently accepts mis-typed mapping arrays that result in no mapping. 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?
Although long, the description is dense and every major block (guardrail, returned shapes, condition trees, type matching, mapping gotchas, validation workflow) adds decision-relevant information for a complex tool. It front-loads the core purpose and guardrail before diving into 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?
With no output schema, the description supplies the complete return contract: operations, conditions, ruleSchema, examples, and the rule document and condition tree shapes. It also covers parameter effects, common failure modes, and the surrounding create/validate workflow, so an agent has what it needs to call the 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?
Schema description coverage is 0%, but the description fully compensates: it explains group filtering, detail 'full' vs 'compact' behavior, include_conditions, and include_examples. It also explains argument spec semantics such as optionsSource, enum options, and array-of-object mapping arguments.
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: 'Discover the vocabulary for building a product rule' and defines the domain ('attribute-value transformation'). It clearly separates this from sibling write tools by instructing to call it FIRST before writing a rule.
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 explicit when-to-use guidance: call before create/update/validate and before writing any rule, so only supported operations/conditions/arguments are used. It also names alternatives and exclusions, including enriching products with set_api_source/set_ai_source instead of a Rule, and mandates validate_rule before create_rule/update_rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enable_marketplace_order_syncAIdempotentInspect
Add ORDER SYNC to an existing marketplace — the capability, not the on/off switch. Order sync has two layers: the capability (whether the marketplace pulls orders at all, which adds an 'order-settings' wizard step) and the active on/off mode (set_marketplace_order_mode). This tool turns the CAPABILITY on for a marketplace created without it: it adds the order-settings step and leaves syncing OFF. Only offer it when get_marketplace reports canEnableOrderSync:true (the channel definition allows order sync and the store platform supports orders); otherwise it returns status 'prerequisite_not_met' (HTTP 409). After it succeeds: (1) re-fetch get_marketplace, find the new 'order-settings' step and configure it with configure_marketplace_step (a form step — payload {items:{fieldCode:value}} from the step's fields), then (2) call set_marketplace_order_mode enabled:true to START syncing. Returns {integrationId, action:'enable_order_sync', status, kind, editUrl, message}; status is 'updated' (added, or already on) or 'prerequisite_not_met'. marketplace_id is from list_marketplaces. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects). Marketplaces only — ads have no order sync.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| marketplace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotentHint:true, but the description adds substantial behavioral context beyond that: it states that the tool adds the order-settings step and leaves syncing OFF, that status can be 'updated' (added or already on) or 'prerequisite_not_met', and that it returns a specific object shape. It also clarifies that it is a capability enabler, not a toggle, which is a non-obvious nuance. The description complements and extends the annotation rather than 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?
The description is dense but every sentence earns its place: it defines the tool, distinguishes it from the mode toggle, explains the prerequisite, outlines the workflow, defines return values, and specifies both parameters. It is organized logically from definition to mechanics to follow-up actions, and it front-loads the core distinction. Length is justified by the tool's complexity; 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 tool's complexity, the absence of an output schema, and the 0% schema coverage, the description covers everything an agent needs: the exact purpose, the precondition, the post-step workflow referencing sibling tools (configure_marketplace_step, set_marketplace_order_mode, list_marketplaces, list_projects), the return object structure, and the domain restriction. 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?
The input schema has zero description coverage (0%), so the description must carry the full burden for both parameters. It does: it explains that marketplace_id comes from list_marketplaces, and that project_id is optional when the customer has a single project but required otherwise, and to call list_projects if needed. This fully compensates for the schema's silence.
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 precise verb+resource: 'Add ORDER SYNC to an existing marketplace' and immediately distinguishes the capability from the on/off switch, framing it as 'the capability, not the on/off switch.' It explicitly names the alternative tool (set_marketplace_order_mode) and specifies that this tool turns the capability ON for marketplaces created without it. This leaves no ambiguity about what the tool does or how it differs from its 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 gives explicit when-to-use and when-not-to-use guidance: only offer it when get_marketplace reports canEnableOrderSync:true, and that otherwise it returns 'prerequisite_not_met' (HTTP 409). It also details the full following workflow: re-fetch get_marketplace, configure the new 'order-settings' step with configure_marketplace_step, then call set_marketplace_order_mode enabled:true. It even explains the marketplaces-only limitation. This is thorough and leaves no inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_feedAInspect
Trigger a (re)generation of the feed file. Returns {feedId, action:'export', status, feedStatus}. status is 'queued' (async via the export queue — normal) or 'done'. After this, poll get_feed_status until status becomes 'generated'. feed_id from list_feeds / create_feed; project_id OPTIONAL.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate that this is not read-only; the description adds the important async behavior: status is 'queued' via the export queue and the agent must poll get_feed_status. This is genuinely useful context beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences cover the action, return shape, async behavior, polling step, and parameter provenance. Every sentence earns its place and key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter trigger tool with no output schema, the description is complete: it gives the return fields, status semantics, the required next step, and parameter source. Nothing essential to invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by explaining that feed_id comes from list_feeds / create_feed and that project_id is optional. It could further explain project_id's purpose, but for two integer parameters this is reasonable.
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: 'Trigger a (re)generation of the feed file.' It clearly identifies the resource and differentiates this tool from read-only siblings by emphasizing the export action and async status response.
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 explicit follow-up guidance: 'poll get_feed_status until status becomes generated.' It also tells the agent where feed_id comes from and that project_id is optional. It does not explicitly name an alternative tool or when-not-to-use conditions, 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.
get_adARead-onlyInspect
Get the full detail of one ad: identity + state + the configuration wizard steps. CRITICAL — read activationBehavior in the RESULT: 'summary_step_activates_and_submits_all' means completing the wizard's SUMMARY step ACTIVATES the ad and publishes EVERY matching product to the LIVE channel (spends budget), so to test safely set MANUAL mode FIRST (set_ad_product_mode) — it then reads 'summary_step_activates_no_auto_submit' and activation auto-submits nothing; 'already_active' = already live. Ads are ads-based channels (advertising / price-comparison / classifieds), not marketplaces: they publish products to the ad platform and have no order sync. Returns {integrationId, projectId, name, channelCode, kind:'ads', definitionCode, status, ready, lastStep, isReady, isConnected, isOverlimit, primarySync, orderSync, productMode, orderMode, taxonomyCode, categoryMappingRequired, connectionStatus, connectionMessage, connectionExpiresAt, steps:[{type, label, sort, index, ready, current, fields:[{code, label, type, required, options, optionsSource, optionsPending, htmlAttributes, value, help, showIf, hiddenIf}]}], editUrl, activationBehavior}. steps describe the setup wizard: 'current' is the next step to configure (via configure_ad_step, targeting it by its index — two steps can share a type) and 'ready' marks completed steps. fields is the step's input schema: for a form/order-settings step, build configure_ad_step payload {items:{code:value}} from it — required marks mandatory fields, options is the allowed value set (value→label), htmlAttributes carry constraints, value is Some field metadata comes from the channel connection and does NOT exist before the auth step is done: optionsPending=true means the option list could not be resolved yet (an empty options array is a state, not permission to send anything), and a disabled field whose default could not be resolved arrives without that flag because you have to supply the value yourself. Do not cache this schema across the auth step — re-read it once the connection exists. the current value. Steps with an empty fields list take a structured payload instead. The connection/auth step (OAuth or credentials) is NOT configurable via MCP: the user completes it in the browser / Koongo UI, and configure_ad_step returns oauth_required / credentials_in_ui for it — terminal, never retry it with a payload. Each ad owns exactly ONE connection (never shared): connectionStatus is its health (NEW / OK / WARNING / ERROR / EXPIRED), connectionMessage/connectionExpiresAt add detail, and test_ad_connection re-checks it live. taxonomyCode is set AUTOMATICALLY from the channel and is READ-ONLY — it cannot be changed via MCP; category mapping (a wizard step) maps your store categories TO this fixed taxonomy, and categoryMappingRequired says whether that step applies. Secrets are never returned. ad_id is the id from list_ads / create_ad. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects). Use get_ad for configuration and ad_status for run progress.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds substantial context beyond that: activationBehavior semantics, secret handling, connection ownership/health, taxonomy read-only constraints, and the warning that the auth step cannot be configured via MCP. 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 front-loaded with the purpose and a CRITICAL warning, which is good, but it is far too long and contains a garbled, broken sentence: 'value is Some field metadata comes from the channel connection and does NOT exist before the auth step is done...' and then 'the current value.' Some important details are present, but the structure makes them harder to parse than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a complex nested response, the description compensates thoroughly: it enumerates the full return object, explains the wizard steps, fields, optionsPending semantics, connection/auth restrictions, and how to build configure_ad_step payloads. It is complete enough for an agent to use the tool correctly in its surrounding workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden. It explains both parameters explicitly: ad_id comes from list_ads / create_ad, and project_id is optional when inferred for a single-project customer, required otherwise with a pointer to list_projects. This goes well beyond the raw integer types 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 opening sentence states a specific verb and resource: 'Get the full detail of one ad: identity + state + the configuration wizard steps.' It clearly distinguishes this from siblings like ad_status, and the later note that ads are not marketplaces further differentiates it from marketplace 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 explicitly says 'Use get_ad for configuration and ad_status for run progress,' directly routing an agent between two similar-looking tools. It also names related tools (configure_ad_step, set_ad_product_mode, test_ad_connection, list_ads, create_ad, list_projects) and explains when project_id is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_attributesARead-onlyInspect
List an ad's OUTPUT attributes and how each is currently sourced — the tool for SOLVING THE ATTRIBUTE FORM (the discipline users struggle with). Returns {integrationId, attributes:[{code, label, required, hidden, valueSource, platformCode, constant, composedValue, defaultPlatformCode, defaultConstant, allowedValues, formatType, ruleId, ruleName, ruleEnabled, priceAttribute, currency, currencyConversionEnabled, configured, stepField}], requiredCount, requiredUnmappedCount, unresolvedCodes}. valueSource is rule|composed|attribute|constant|unmapped (the effective source; a rule attached but ruleEnabled=false does NOT count and the attribute reads 'unmapped'). priceAttribute=true marks a money attribute (formatType price / price_with_delete); currency is its target currency and currencyConversionEnabled whether Koongo converts the value into it (null = not a price attribute). Conversion only matters when the price is in a DIFFERENT currency than the store; if the attribute's name already names a currency (e.g. its label/code contains "EUR") the value is ALREADY in that currency, so set currencyConversionEnabled=false to avoid converting it twice. requiredUnmappedCount is the running count of REQUIRED attributes with no working source — 0 means the form is solved and the ad can build/export; unresolvedCodes lists exactly which ones to fix. Pass only_unresolved:true to get just those rows. To fill one, match the user's attribute label to its code, then map_ad_attribute. ad_id is from Each row also says WHERE its value comes from: configured=true is a mapping of the customer's own, stepField names a wizard form step field that drives it (change it there with configure_ad_step — mapping it here writes an override that beats the step for good), and neither means the value is only the channel definition's default. A default is not a decision: check it against the store's data before trusting it. list_ads. project_id is OPTIONAL (project_id_required otherwise — then call list_projects). IF categoryAttributeWarmup IS PRESENT WITH pending:true THIS LIST IS INCOMPLETE: the channel's category-specific attributes are still downloading, so requiredUnmappedCount and unresolvedCodes are PROVISIONAL — a required attribute that is not in the list yet cannot be counted as unmapped, so the form can look solved when it is not. Poll ad_status until the block is absent or state is 'ready', then read this again before mapping.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| project_id | No | ||
| only_unresolved | No | Return only REQUIRED attributes that still have no working value source. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and destructiveHint, so the description adds substantial behavioral value: the categoryAttributeWarmup pending:true provisional-count caveat, the ruleEnabled=false effective-source nuance, the currency double-conversion risk, the 'default is not a decision' trust warning, and the step-vs-override precedence rule. The mention of writing an override refers to map_ad_attribute's behavior, not this tool's, so it does not contradict readOnlyHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and nearly every clause carries unique, non-redundant information, so the length is largely justified by complexity. However, the definition is one dense unbroken paragraph with two text-merge artifacts — 'ad_id is from Each row also says WHERE its value comes from' and the orphaned 'list_ads.' fragment — that break the reading flow and obscure meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and high complexity (20+ return fields, provisional-state semantics, currency conversion rules), the description carries the full burden and nearly succeeds: it enumerates the return structure, defines the valueSource enum, explains requiredUnmappedCount/unresolvedCodes, and flags the warmup incompleteness. The garbled ad_id provenance sentence and the mid-paragraph burial of the critical warmup warning slightly reduce practical 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?
With only 33% schema description coverage (only only_unresolved documented), the description compensates for all three parameters: ad_id is sourced from list_ads, project_id's optionality plus the project_id_required branch to list_projects, and only_unresolved:true filters to required-unmapped rows. This is full semantic compensation for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause 'List an ad's OUTPUT attributes and how each is currently sourced' names a specific verb, resource, and scope, and the parenthetical 'the tool for SOLVING THE ATTRIBUTE FORM' brands its distinct role among siblings like get_marketplace_attributes, get_attribute_options, and map_ad_attribute. The read-vs-write nature is unambiguous from 'List' and '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?
Provides explicit route guidance: fill attributes via map_ad_attribute, change step-driven fields via configure_ad_step with the warning that mapping writes a permanent override, obtain ad_id from list_ads, call list_projects when project_id_required, and poll ad_status during categoryAttributeWarmup. This is exemplary when/when-not coverage against a large sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_channelARead-onlyInspect
Get one ad channel's detail: the integration TYPES it supports and each type's capabilities. Ads are ads-based channels (advertising / price-comparison / classifieds), not marketplaces: they publish products to the ad platform and have no order sync. Returns {channelCode, label, kind:'ads', devOnly, multichannel, multichannelCode, definitions:[{ definitionCode, type, typeLabel, label, versionType, primary, capabilities:{orderSync, categoryMapping, productFilter, attributeMapping}}]}. versionType is 'primary' or 'secondary' (primary marks the default). Call this before create_ad to choose the right definitionCode for the channel. channel_code is the channelCode from list_ad_channels. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects and pass its project_id).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| channel_code | Yes | channelCode of the ad channel (from list_ad_channels). |
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 goes beyond this by defining the semantic domain (ads vs. marketplaces, no order sync), explaining the meaning of versionType ('primary' vs. 'secondary'), and disclosing that project_id is optional only under a specific condition (single-project customer vs. project_id_required). These are behavioral details the annotations do not convey, making the description genuinely informative.
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 longer than typical but every sentence carries essential information: the what, the domain disambiguation, the return structure, field semantics, and usage callout. It is well-structured: the primary purpose is front-loaded, followed by clarifying context, then parameter guidance. It is not padded with fluff, though it could potentially shorten the return-structure details since there is no output schema and they are necessary for the agent to understand the result.
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 getter, this description is unusually complete. It includes the full return payload shape with nested definitions, clarifies how to interpret versionType, states the exact ordering of use relative to list_ad_channels and create_ad, and covers the project_id edge case. No output schema is provided, so the description must carry the return contract — and it does. An agent has everything needed 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?
With schema coverage at 50%, only channel_code has a schema description, and it is minimal. The description compensates fully: it explains channel_code's provenance ('from list_ad_channels'), describes project_id's optionality and the exact condition for when it is required, and maps both to their roles in selecting a definitionCode. This adds meaning beyond the schema's bare type constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb–resource pair ('Get one ad channel's detail') and immediately narrows scope to 'integration TYPES it supports and each type's capabilities.' It explicitly differentiates ad channels from marketplaces ('Ads are ads-based channels... not marketplaces') and names the sibling tools it is not (list_ad_channels, create_ad). This leaves no ambiguity about what the tool does and how it differs from get_marketplace_channel.
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 explicit when-to-use guidance: 'Call this before create_ad to choose the right definitionCode for the channel.' It also specifies where input comes from ('channel_code is the channelCode from list_ad_channels') and when the optional project_id is needed (project_id_required otherwise — then call list_projects and pass its project_id). This is direct operational guidance that an agent can act on without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_item_historyARead-onlyInspect
Get ONE ad listing item's action-log timeline — the sequence of events that acted on the product and its Koongo/channel state at each point, so you can explain WHY an item ended in its current state. Returns {itemId, returned, entries:[{createdAt, event, eventLabel, message, messageLabel, operation, operationLabel, koongoStatus, channelStatus}]} newest first. eventLabel/messageLabel/operationLabel are the human-readable rendering the Koongo UI shows (event name, plain-language explanation, operation title); event/message/operation are the raw codes. Entries are process metadata only (no raw product values); an item with no recorded activity yet returns an empty list. item_id is the itemId from list_ad_items (the same id get_ad_item_report uses); pair the two to diagnose a failing product. ad_id is the integrationId from list_ads. project_id is OPTIONAL (project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | integrationId of the ad (from list_ads). | |
| limit | No | Max timeline entries to return (default 20, max 50). | |
| item_id | Yes | The listing itemId (from list_ad_items). | |
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/destructive annotations, it discloses ordering ('newest first'), content type ('process metadata only, no raw product values'), empty-result behavior, and the raw-vs-label distinction. This is rich, non-redundant behavioral 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?
The description is long but every sentence carries signal: purpose, return shape, label semantics, empty behavior, id provenance, and optionality. The main use is front-loaded and the details are organized from most to least important.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, it supplies the exact return shape and field semantics for the human-readable labels, which is sufficient for an agent to interpret results. Inputs are fully covered by the schema plus the added id and optionality context. No critical behavioral gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents ad_id, item_id, and limit; the description adds the cross-tool provenance ('same id get_ad_item_report uses') and the optional/required project_id branch. It also clarifies ad_id is the integrationId from list_ads, closing the one gap left by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource ('ONE ad listing item's action-log timeline') and the diagnostic intent ('explain WHY an item ended in its current state'). It clearly differentiates from get_ad_item_report by stating it uses the same item_id and is meant to be paired with it, not confused with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives the intended use case (diagnosing a failing product), source-tool relationships (item_id from list_ad_items, ad_id from list_ads), and conditional project_id routing ('call list_projects'). It does not explicitly say when not to use it or mention the analogous marketplace-history sibling, so it stops short of a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_item_reportARead-onlyInspect
Get the full error report of ONE ad listing item (why the product passed/failed): {itemId, koongoProductId, status, statusDescription, channelStatus, channelStatusLabel, channelStatusDescription, reportMessage, reportCode, errors:[{source, field, fieldLabel, message, code, level, additionalInfo, currentValue}], sensitiveGate}. statusDescription/channelStatusLabel/channelStatusDescription and each error's fieldLabel are the human wording the Koongo UI shows; status/channelStatus/field are raw codes. Each error names the offending attribute (field), its source (export = Koongo-side validation, fixable via a mapping/rule change; adapter / api_error = channel-side reject) and severity (level). SENSITIVE: the offending attribute's currentValue is withheld on the first call (returns a sensitiveGate with confirmationRequired:true + the field CODES); show the gate to the user, then re-call with acknowledge_sensitive:true to receive the values. item_id is the itemId from list_ad_items. ad_id is the integrationId from list_ads. project_id is OPTIONAL (project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | integrationId of the ad (from list_ads). | |
| item_id | Yes | The listing itemId (from list_ad_items). | |
| project_id | No | ||
| acknowledge_sensitive | No | Set true only AFTER the user approves seeing the item's real attribute value(s). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/destructive annotations, it discloses the sensitiveGate behavior (currentValue withheld until acknowledge_sensitive:true is sent), the meaning of error sources ('export = Koongo-side validation... adapter / api_error = channel-side reject'), and raw versus human-readable field semantics. This is substantial behavioral context with no contradiction to 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 long but dense and front-loaded: the first sentence states purpose and the full output shape, then each clause explains a distinct aspect such as human vs raw codes, error source/severity, sensitive gate, and ID provenance. There is no filler or repetition of annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description enumerates the report shape and the semantics of its key fields, including the nested errors array and sensitiveGate. It covers ID sourcing, project_id error handling, and the two-step sensitive-data retrieval, so an agent has enough context to invoke the 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?
Schema coverage is 75%, and the description compensates fully: item_id/ad_id origins are pinned to source calls, project_id's optionality and fallback are explained (project_id has no schema description), and acknowledge_sensitive is tied to the sensitiveGate flow. It adds clear meaning beyond the input 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 a specific action and resource: 'Get the full error report of ONE ad listing item,' with the purpose 'why the product passed/failed.' The scope is clear enough to distinguish from ad-level reports, though it does not explicitly name sibling tools like get_ad_report or get_ad_item_history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context: per-item error reports, ID provenance ('item_id is the itemId from list_ad_items', 'ad_id is the integrationId from list_ads'), and a fallback ('project_id is OPTIONAL (project_id_required otherwise — then call list_projects)'). It also explains the two-call sensitive-data flow. It does not explicitly contrast with aggregate or history siblings, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_reportARead-onlyInspect
Get the validation report for one ad: the aggregated errors and warnings that block or degrade its feed, with fix suggestions. Ads are ads-based channels (advertising / price-comparison / classifieds), not marketplaces: they publish products to the ad platform and have no order sync. The errors are SPLIT into two groups (as in the CP's two separate views). Returns {integrationId, errorCount, warningCount, statusCounts:[{status, count}], listingStatusCounts:[{status, count}], dataCheckErrors:[...], channelErrors:[...]}, where each error is {source, field, message, code, level, count, fixSuggestions:[{type, stepType, label}]}. dataCheckErrors = the pre-submission KOONGO DATA CHECK (feed-generation validation, source='export' — the same the wizard summary/preview shows, produced when the feed is generated BEFORE anything reaches the channel). channelErrors = the ad channel's OWN responses AFTER submission (source='adapter'/'api_error'). errorCount/warningCount are the COMBINED totals across both groups. Data-check errors exist only after a generation has run — finish the wizard, or repair_ad to (re)generate; export is async, so poll ad_status until productsRefreshing AND productsSubmitting are false, then read the report. statusCounts is how many items sit in each koongo processing status (e.g. completed / error / pending); listingStatusCounts the same by channel listing status (e.g. active / rejected / error). level is error|danger(=warning)|info; count is how many products hit that error. fixSuggestions.type is add_category_mapping|fix_settings|rewrite_attribute|exclude_product, and stepType (when set) names the wizard step to open with configure_ad_step. ad_id is the id from list_ads. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare readOnlyHint=true and destructiveHint=false, the description adds significant behavioral nuance: the split between dataCheckErrors (pre-submission koongo data check) and channelErrors (post-submission channel responses), the combined totals in errorCount/warningCount, and the async generation prerequisite. It also explains the source field values ('export' vs 'adapter'/'api_error') and the meaning of statusCounts vs listingStatusCounts. This goes well beyond the annotations and fully discloses report 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?
The description is long but dense: every sentence adds distinct information, from return shape to async behavior to field semantics. The opening sentence immediately states purpose, satisfying front-loading. It could be slightly better structured (e.g., bulletized return fields), but no sentence feels wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully documents the return structure including integrationId, errorCount, warningCount, statusCounts, listingStatusCounts, dataCheckErrors, and channelErrors, plus nested error and fixSuggestions fields. It also covers edge cases like project_id optionality and the need to poll ad_status. An agent has everything necessary to invoke the tool and interpret its result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry all parameter meaning. It explains that ad_id is 'the id from list_ads' and that project_id is 'OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).' This is exactly the kind of semantic routing information an agent needs, and it compensates fully for the empty schema 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?
Description opens with a specific verb-resource pair: 'Get the validation report for one ad' with the scope 'aggregated errors and warnings that block or degrade its feed, with fix suggestions.' It explicitly distinguishes ads from marketplaces ('Ads are ads-based channels... not marketplaces'), which separates it from get_marketplace_report. The report content and groups are also clearly stated, leaving no ambiguity about what the 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 provides strong contextual guidance on when the report is meaningful: 'Data-check errors exist only after a generation has run — finish the wizard, or repair_ad to (re)generate; export is async, so poll ad_status until productsRefreshing AND productsSubmitting are false, then read the report.' It also clarifies ads vs marketplaces, which helps choose between get_ad_report and get_marketplace_report. It does not explicitly contrast with get_ad_item_report or get_ad_item_history, 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_attribute_optionsARead-onlyInspect
Get the allowed OPTION choices (value + label) of a target feed/channel attribute, so you can pick a VALID value for a "Set option" — an attribute that takes a fixed value from its predefined list (select/dropdown attributes like Fastener Type, Availability, Condition…). Returns {options:[{value, label}], hasMore, nextOffset}. The stored/exported value is the option's value (NOT its label); label is the human-readable text (often equal to value). Two ways to apply a Set option once you pick a value: WITHOUT conditions set the attribute's constant to that value via map_feed_attribute / map_marketplace_attribute / map_ad_attribute (cheapest — no rule needed); CONDITIONALLY build a rule with a setoption operation (operationGroups mode 'set_option', operations [{name:'setoption', arguments:{value:''}}]) — see discover_rule_operations. Empty options = the attribute is not a closed-option attribute (free text — use set_value instead). Page with offset (from nextOffset) while hasMore is true. TARGET: pass EXACTLY ONE of feed_id (a feed, from list_feeds) or integration_id (a marketplace/ad — the marketplace_id/ad_id from list_marketplaces / list_ads). attribute_code comes from get_feed / get_marketplace_attributes / get_ad_attributes. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Pagination cursor: pass the previous response's nextOffset to fetch the next page (default 0). | |
| feed_id | No | Target a feed (from list_feeds). Pass exactly one of feed_id or integration_id. | |
| project_id | No | ||
| attribute_code | Yes | The target attribute whose options you want (code from get_feed / get_marketplace_attributes / get_ad_attributes). | |
| integration_id | No | Target a marketplace/ad — the marketplace_id or ad_id from list_marketplaces / list_ads. Pass exactly one of feed_id or integration_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/destructiveHint annotations, it discloses pagination behavior (offset/nextOffset/hasMore), the critical value-vs-label semantics for the stored/exported value, and the empty-options edge case meaning the attribute is free-text. These are non-obvious behavioral details that an agent needs to invoke the tool 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?
The description is long but dense and logically ordered: core purpose, return shape, key semantics, application methods, pagination, and target selection. Every major sentence adds value, though some points could be tightened or bulleted to improve scannability without losing content.
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 lookup tool with no output schema, the description fully covers what the tool returns, how to paginate, what empty results mean, how to choose the correct target, and where attribute_code originates. An agent has enough information to select and correctly invoke this tool without needing to inspect other schemas.
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 covers 80% of parameters with descriptions, and the description adds important nuance beyond the schema: project_id is optional for single-project customers but required otherwise (call list_projects), and integration_id can be either a marketplace_id or ad_id. It also reinforces the 'exactly one of feed_id or integration_id' constraint. A strong supplement to already-good 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 states a precise verb-resource pair: it retrieves the allowed 'OPTION choices (value + label)' for a target feed/channel attribute, specifically for closed-option 'Set option' attributes. It clearly differentiates itself from related tools like map_feed_attribute, set_value, and discover_rule_operations by explaining its exact role in the workflow.
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 explicit when-to-use and how-to-apply guidance: it names the two application paths (constant mapping via map_* tools vs. conditional rule with a 'setoption' operation), tells the user to use set_value when options are empty, and specifies how to choose between feed_id and integration_id. This leaves no ambiguity about how to route to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_category_mappingARead-onlyInspect
Get the current category-mapping rules for a taxonomy (store categories → marketplace/taxonomy categories). The rule set is SHARED per project + taxonomy_code + locale (every feed on that taxonomy sees it). Address the taxonomy either by feed_id (its taxonomy is used) OR explicitly by taxonomy_code (+ optional taxonomy_locale). Returns {taxonomyCode, taxonomyLocale, rules:[{type, operator, storeCategoryIds, storeCategoryPaths, attribute, value, targetHash, targetPath}], total}. Use list_unmapped_categories to find gaps, search_target_categories to find a target, and set_category_mapping to fill them. project_id is OPTIONAL (inferred for a single-project customer).
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | No | ||
| project_id | No | ||
| taxonomy_code | No | Target taxonomy id (e.g. 'google'); alternative to feed_id for addressing the taxonomy. | |
| taxonomy_locale | No | Locale of the taxonomy tree, e.g. 'en_GB' — defaults to the taxonomy's own default when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds behavioral context beyond that: the rule set is SHARED per project + taxonomy_code + locale, which affects how results should be interpreted. It also discloses the optional/inferred nature of project_id. 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?
Six sentences, each adding unique value: core purpose, shared semantics, addressing modes, return shape, sibling routing, and optional parameter. Front-loaded with the purpose, no filler or repetition of schema content.
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?
Since there is no output schema, the description includes the return shape inline. It covers sharing semantics, addressing modes, sibling tools, and optional parameters. The only minor gap is the lack of explicit guidance on what happens when both feed_id and taxonomy_code are sent together, but this is an edge case for a read-only 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 only 50% (taxonomy_code and taxonomy_locale are documented). The description compensates by explaining that feed_id selects the taxonomy via a feed, and that project_id is optional/inferred. It clarifies the relationship between parameters, though it doesn't state precedence if both feed_id and taxonomy_code are provided.
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 says 'Get the current category-mapping rules for a taxonomy' with an explicit mapping direction ('store categories → marketplace/taxonomy categories'), which is a specific verb and resource. It distinguishes itself from sibling tools like set_category_mapping by naming them in the description.
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 explicitly states when to use alternatives: 'Use list_unmapped_categories to find gaps, search_target_categories to find a target, and set_category_mapping to fill them.' It also clarifies the two valid addressing modes (feed_id or taxonomy_code) and notes project_id is optional/inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feedARead-onlyInspect
Get the full detail of one feed: identity + state + the attribute mapping (how each output column is sourced). Returns {feedId, projectId, feedCode, name, feedType, fileFormat, channelCode, status, enabled, taxonomyCode, taxonomyLocale, feedUrl, exportOutOfStock, attributeCount, requiredUnmappedCount, attributes:[{code, label, platformCode, constant, composedValue, required, hidden, valueSource, defaultPlatformCode, defaultConstant, allowedValues, formatType, ruleId, ruleName, ruleEnabled, priceAttribute, currency, currencyConversionEnabled}]}. hidden=true means the attribute is internal and must NEVER be mapped or surfaced in output; valueSource is rule|composed|attribute|constant|unmapped; allowedValues is the closed value set (empty = open). ruleId/ruleName/ruleEnabled describe an attached Attribute Rule (null when none); valueSource is 'rule' only when the rule is ENABLED — an attribute with ruleId set but ruleEnabled=false has a rule attached-but-disabled that does NOT drive its value (it reads as its other source, or 'unmapped'), so surface it and offer to enable it. priceAttribute=true marks a money attribute (formatType price / price_with_delete); currency is its target currency and currencyConversionEnabled whether Koongo converts the value into it (null = not a price attribute) — only relevant when the price is in a DIFFERENT currency than the store; if the attribute's name already names a currency (label/code contains "EUR") the value is ALREADY in it, so set currencyConversionEnabled=false to avoid double conversion. requiredUnmappedCount is how many REQUIRED attributes still have no working source (valueSource='unmapped'); 0 means the attribute form is solved and the feed can export. Map source attributes with map_feed_attribute (see list_source_attributes). The response also includes settings (the feed's channel output settings): currency/number-format (read-only here) plus stock {stockInValue, stockOutValue, stockAvailabilityAttribute} and shipping {shippingDependentAttribute, shippingMethodName, shippingIntervals:[{from,to,cost}]} — the stock and shipping settings are EDITABLE via set_feed_settings. feed_id is the id from list_feeds / create_feed. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects). A soft-deleted feed returns error 'feed_deleted' (not 'not_found') — the id is still valid and the feed can be brought back with restore_feed; it just won't appear in list_feeds while deleted. Use get_feed for configuration/mapping and get_feed_status for run progress. Requires the project's data imported (dataStatus='ok', see get_import_status).
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | ||
| project_id | No | ||
| response_format | No | Verbosity of the returned feed. 'full' (default) includes the complete attribute mapping; 'compact' asks for identity + state only (omit the attributes list) to save context when you just need the feed's status/config. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, and the description's behavior aligns with that. It adds substantial behavioral context beyond annotations: soft-deleted feeds return 'feed_deleted' rather than 'not_found', hidden attributes must never be mapped, ruleEnabled=false means a rule is attached-but-disabled and does not drive the value, and currencyConversionEnabled should be set false to avoid double conversion when the value is already in the target currency. This gives an agent real insight into subtle edge cases.
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 long, but it is dense with necessary edge-case information and every sentence earns its place. It is front-loaded with the core purpose and return shape before diving into semantic caveats. It could be better organized with bullets, but the single-paragraph structure is acceptable given the 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?
With no output schema, the description must fully explain the return values and behavior, and it does so thoroughly: it enumerates the return fields, explains the attribute mapping semantics, notes editable settings, describes the soft-delete error path, identifies sibling tools for follow-up actions, and states prerequisites. Nothing critical appears missing for an agent to correctly invoke and interpret this 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 only 33%, so the description carries most of the parameter burden. It explains that feed_id comes from list_feeds/create_feed and that project_id is optional/inferred for single-project customers or required otherwise, with a pointer to list_projects. The response_format parameter is already well described in the schema with an enum and default, so the description doesn't need to repeat 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 the full detail of one feed: identity + state + the attribute mapping'. It then lists the exact shape of the return object, making the tool's responsibility unambiguous. It also differentiates itself from get_feed_status by explicitly scoping this tool to configuration/mapping rather than run progress.
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 explicit routing guidance: 'Use get_feed for configuration/mapping and get_feed_status for run progress.' It also explains when project_id is required and to call list_projects, and mentions the prerequisite that the project's data must be imported (dataStatus='ok', see get_import_status). These are concrete, actionable conditions for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feed_outputARead-onlyInspect
Read the CURRENT output of a feed's already-generated file WITHOUT regenerating it — so it works on a read-only connection (unlike export_feed, which regenerates the file and is a write action). Use this to see what a feed currently contains: its live download URL, product count and a sample of the actual rows, instead of downloading the file and counting it yourself. Inputs: feed_id (the feed's id from list_feeds / create_feed), project_id (OPTIONAL — inferred for a single-project customer; project_id_required if they have several, then call list_projects), sample_size (default 20, max 20), offset (default 0 — skip this many rows to read a deeper page; page by increasing offset in steps of sample_size). Returns {feedId, projectId, feedCode, fileFormat, feedUrl, fileExists, fileSize, productsCount, lastGeneratedAt, sampleRowCount, sample:[{field: value}, ...]}. feedUrl is the public download URL of the current file; productsCount is exactly the number of rows in that file; lastGeneratedAt is when it was last generated. fileExists:false means the feed has not been generated yet — call export_feed, then poll get_feed_status until it is generated. The sample rows are real feed data returned only after you set acknowledge_sensitive:true. The first call (flag absent/false) returns {sensitiveGate:{confirmationRequired:true, itemCount, fields, kind}} with sample EMPTY (all the metadata is still returned) — present that gate to the USER, get approval, then re-call with acknowledge_sensitive:true to receive the rows.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Skip this many rows to read a deeper page of the feed; page by increasing offset in steps of sample_size (default 0). | |
| feed_id | Yes | ||
| project_id | No | ||
| sample_size | No | How many feed rows to return in the sample (default 20, max 20). | |
| acknowledge_sensitive | No | Set true only AFTER the user approves seeing real data. When absent/false the tool returns a sensitive gate with an empty sample (metadata still included); with true it returns the actual rows. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this by stating it works on a read-only connection and does not regenerate. It additionally discloses the sensitive gate behavior, fileExists:false handling, and the distinction between metadata-only and row-returning responses, which goes well 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 long but every sentence earns its place by covering usage, parameters, return fields, and edge cases. It front-loads the core purpose and differentiation before diving into details, though it is slightly dense and could be broken into clearer sections. Still, for a tool this behavior-rich, the density is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of explaining return values, and it does so thoroughly: every returned field is listed and key fields like feedUrl, productsCount, lastGeneratedAt, and sensitiveGate are semantically defined. The complete workflow from first call to gated sample to pagination is described, making the tool fully understandable without external 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 coverage is only 60%, but the description compensates fully: it explains feed_id provenance, project_id inference rules, sample_size default/max, offset paging semantics, and acknowledge_sensitive gating. This adds meaning beyond the raw schema, especially the non-obvious behavior of acknowledge_sensitive and the single-project inference for project_id.
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 ('Read') and resource ('CURRENT output of a feed's already-generated file') and immediately distinguishes itself from export_feed by noting it does NOT regenerate the file. An agent can clearly differentiate this tool from its closest sibling without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells when to use the tool ('see what a feed currently contains'), names the alternative export_feed and why it differs, and gives conditions for optional project_id. It also explains the sensitive-data workflow and pagination approach, leaving no ambiguity about how to proceed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feed_statusARead-onlyInspect
Get the runtime status of one feed: generation state, progress, last run/submit and any error. Returns {feedId, projectId, feedCode, status, enabled, progressPercent, productsCount, lastRunAt, submitStatus, lastSubmitAt, fileExists, errorMessage}. status is one of new|pending|processing|generated|submited|error|overlimit. Next action per status: generated → verify_feed_attributes then submit_feed; processing/pending → keep polling; error → read errorMessage, fix, export_feed; overlimit → feed exceeds the plan limit. Use get_feed for configuration/mapping and this tool for run progress. feed_id is the id from list_feeds / create_feed. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, and the description adds no contradiction. It enriches the read-only contract by enumerating the returned fields, the full status enum, and the expected next action per status, making clear that this is a safe, repeated polling 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?
Although long, the description is densely informative with no filler. The core purpose and return contract come first, followed by status semantics, action routing, and parameter provenance — each sentence earns its place given the lack of output schema and terse input schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no enum definitions, and 0% schema description coverage, the description carries the full burden and succeeds: it lists the return object, defines every status value, explains conditional parameter requirements, and gives status-specific follow-ups. Nothing essential for invoking this 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 0%, so the description must explain the parameters itself. It does: feed_id is defined as 'the id from list_feeds / create_feed', and project_id's optionality is clarified with the single-project vs multi-project inference behavior. This adds real meaning beyond the bare integer 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 verb and resource: 'Get the runtime status of one feed: generation state, progress, last run/submit and any error.' It also explicitly distinguishes itself from get_feed ('Use get_feed for configuration/mapping and this tool for run progress'), so an agent can choose among the large sibling set without guessing.
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 direct when-to-use guidance by naming get_feed as the alternative for configuration/mapping and this tool for run progress. It also explains the polling behavior ('processing/pending → keep polling'), error recovery ('error → read errorMessage, fix, export_feed'), and the conditional project_id requirement ('then call list_projects'), leaving little room for misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_import_statusARead-onlyInspect
Check whether a project's store data is connected, imported and fresh before advising on feeds/mapping. Returns {projectId, code, apiStatus, dataStatus, lastImportAt, progressPercent, productsCount, categoriesCount, lastRun:{...}, recentRuns:[{status, type, startedAt, endedAt, productTotal, productsAvailable, errorMessage, importTimeSeconds, running}]}. apiStatus is GRANTED|REVOKED|OVERLIMIT; dataStatus is not_imported|pending|processing|ok|error|suspend|stopped (the project-wide state — map only when 'ok'). recentRuns lists the latest runs newest-first, each tagged by type (normal|partial|api_source|additional_source|upgrade) and running (true while pending/processing); lastRun is the newest of them. Use recentRuns to verify a specific enrichment import: after set_api_source/set_ai_source with apply:true (or run_import), poll here until the newest run of that type (api_source for set_api_source, additional_source for set_ai_source) has running:false and status 'ok' — THEN the new attribute is available in list_source_attributes / list_api_sources and you can map it or continue the integration. A run with status 'error' → read its errorMessage and run_import to retry. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects). When dataStatus='ok', proceed to preview_products then list_feed_templates.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds substantial behavioral detail: status enums, polling semantics (running true while pending/processing), the meaning of dataStatus='ok' as the only state appropriate for mapping, and that recentRuns is newest-first. It also explains how to verify a specific import by type 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?
Although lengthy, every sentence carries essential operational information: statuses, output fields, polling workflow, error handling, and project_id inference. The description is front-loaded with the core purpose and then systematically details the response shape and usage sequence, 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?
For a tool with one optional parameter and no output schema, the description is unusually complete. It documents the full response shape, all status values, execution semantics, related next-step tools, and a concrete polling procedure. Nothing an agent needs to invoke it correctly or interpret its results 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 0%, but the description fully compensates: it explains that project_id is optional, inferred for single-project customers, required otherwise, and instructs to call list_projects in the latter case. This adds meaning far beyond the bare integer schema definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Check whether a project's store data is connected, imported and fresh' before advising on feeds/mapping. This clearly distinguishes it from sibling tools like get_feed_status or list_feeds by establishing its role as a readiness/import verification step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: before advising on feeds/mapping, after set_api_source/set_ai_source with apply:true, and when dataStatus is 'ok' then proceed to preview_products and list_feed_templates. It also explains the error path (read errorMessage, run_import to retry) and when to call list_projects, leaving no ambiguity about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_marketplaceARead-onlyInspect
Get the full detail of one marketplace: identity + state + the configuration wizard steps. CRITICAL — read activationBehavior in the RESULT: 'summary_step_activates_and_submits_all' means completing the wizard's SUMMARY step ACTIVATES the marketplace and publishes EVERY matching product to the LIVE channel (spends budget), so to test safely set MANUAL mode FIRST (set_marketplace_product_mode) — it then reads 'summary_step_activates_no_auto_submit' and activation auto-submits nothing; 'already_active' = already live. Returns {integrationId, projectId, name, channelCode, kind, definitionCode, status, ready, lastStep, isReady, isConnected, isOverlimit, primarySync, orderSync, canEnableOrderSync, productMode, orderMode, taxonomyCode, categoryMappingRequired, connectionStatus, connectionMessage, connectionExpiresAt, steps:[{type, label, sort, index, ready, current, fields:[{code, label, type, required, options, optionsSource, optionsPending, htmlAttributes, value, help, showIf, hiddenIf}]}], editUrl, activationBehavior}. kind is 'marketplace'. steps describe the setup wizard: 'current' is the next step to configure (via configure_marketplace_step, targeting it by its index — two steps can share a type) and 'ready' marks completed steps. fields is the step's input schema: for a form/order-settings step, build configure_marketplace_step payload {items:{code:value}} from it — required marks mandatory fields, options is the allowed value set (value→label), htmlAttributes carry constraints, value is the current value. Steps with an empty fields list take a structured payload instead (category Some field metadata comes from the channel connection and does NOT exist before the auth step is done: optionsPending=true means the option list could not be resolved yet (an empty options array is a state, not permission to send anything), and a disabled field whose default could not be resolved arrives without that flag because you have to supply the value yourself. Do not cache this schema across the auth step — re-read it once the connection exists. mapping / product filter / attribute table). The connection/auth step (OAuth or credentials) is NOT configurable via MCP: the user completes it in the browser / Koongo UI, and configure_marketplace_step returns oauth_required / credentials_in_ui for it — terminal, never retry it with a payload. Each marketplace owns exactly ONE connection (never shared): connectionStatus is its health (NEW / OK / WARNING / ERROR / EXPIRED), connectionMessage/connectionExpiresAt add detail, and test_marketplace_connection re-checks it live. taxonomyCode is set AUTOMATICALLY from the channel and is READ-ONLY — it cannot be changed via MCP; category mapping (a wizard step) maps your store categories TO this fixed taxonomy, and categoryMappingRequired says whether that step applies. Secrets are never returned. ORDER SYNC: orderSync is whether this marketplace pulls orders (adds an 'order-settings' step); orderMode is the active on/off state (enabled/disabled/null). canEnableOrderSync:true means order sync is not on yet but the channel allows it — you may offer enable_marketplace_order_sync to add it (then configure the order-settings step and set_marketplace_order_mode enabled:true to start). marketplace_id is the id from list_marketplaces / create_marketplace. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects). Use get_marketplace for configuration and marketplace_status for run progress.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| marketplace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe read-only nature is covered. The description adds substantial behavioral context beyond these: it warns about the activation behavior that can spend budget, explains that secrets are never returned, notes taxonomyCode is read-only, and clarifies that the connection/auth step is not configurable. These are critical behavioral disclosures not captured by annotations. No contradiction 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 very long, but every sentence carries essential information—it is dense, not verbose. However, it lacks any paragraph breaks or bullet points, making it a monolithic text wall. The purpose is front-loaded, but the rest could be better structured. Still, there is zero fluff, and the length is justified by 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 the tool returns a highly nested structure with steps, fields, activation behavior, order sync, and connection details, the description covers everything an agent needs to invoke it and interpret results: it lists all return fields, explains step/field semantics, describes the auth step limitations, connection ownership, order sync conditions, and even mentions test_marketplace_connection. 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?
Schema description coverage is 0%, so the description carries full parameter documentation. It explains marketplace_id as 'the id from list_marketplaces / create_marketplace' and project_id as 'OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).' This adds crucial meaning beyond the bare schema types.
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 full detail of one marketplace: identity + state + the configuration wizard steps.' It clearly distinguishes itself from siblings by explicitly stating 'Use get_marketplace for configuration and marketplace_status for run progress,' and by contrasting with other getters like get_marketplace_channel and get_marketplace_attributes. The purpose is unmistakable and non-tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'Use get_marketplace for configuration and marketplace_status for run progress.' It also explains when to call set_marketplace_product_mode (to set MANUAL mode before testing), when configure_marketplace_step applies, and when to call list_projects for project_id. It even states the auth step is not configurable via MCP and to never retry it. This is comprehensive routing advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_marketplace_attributesARead-onlyInspect
List a marketplace's OUTPUT attributes and how each is currently sourced — the tool for SOLVING THE ATTRIBUTE FORM (the discipline users struggle with). Returns {integrationId, attributes:[{code, label, required, hidden, valueSource, platformCode, constant, composedValue, defaultPlatformCode, defaultConstant, allowedValues, formatType, ruleId, ruleName, ruleEnabled, priceAttribute, currency, currencyConversionEnabled, configured, stepField}], requiredCount, requiredUnmappedCount, unresolvedCodes}. valueSource is rule|composed|attribute|constant|unmapped (the effective source; a rule attached but ruleEnabled=false does NOT count and the attribute reads 'unmapped'). priceAttribute=true marks a money attribute (formatType price / price_with_delete); for those, currency is its target currency and currencyConversionEnabled whether Koongo converts the value into it (null = not a price attribute). Currency conversion only matters when the price is in a DIFFERENT currency than the store; if the attribute's name already names a currency (e.g. its label/code contains "EUR") the value is ALREADY in that currency, so set currencyConversionEnabled=false to avoid converting it twice. requiredUnmappedCount is the running count of REQUIRED attributes with no working source — 0 means the form is solved and the integration can build/export; unresolvedCodes lists exactly which ones to fix. Pass only_unresolved:true to get just those rows. To fill one, match the user's attribute label to its code, then map_marketplace_attribute. Each row also says WHERE its value comes from: configured=true is a mapping of the customer's own, stepField names a wizard form step field that drives it (change it there with configure_marketplace_step — mapping it here writes an override that beats the step for good), and neither means the value is only the channel definition's default. A default is not a decision: check it against the store's data before trusting it. marketplace_id is from list_marketplaces. project_id is OPTIONAL (project_id_required otherwise — then call list_projects). IF categoryAttributeWarmup IS PRESENT WITH pending:true THIS LIST IS INCOMPLETE: the channel's category-specific attributes are still downloading, so requiredUnmappedCount and unresolvedCodes are PROVISIONAL — a required attribute that is not in the list yet cannot be counted as unmapped, so the form can look solved when it is not. Poll marketplace_status until the block is absent or state is 'ready', then read this again before mapping.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| marketplace_id | Yes | ||
| only_unresolved | No | Return only REQUIRED attributes that still have no working value source. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/destructiveHint annotations, the description discloses substantial behavior: the meaning of valueSource, the subtle ruleEnabled=false rule, currency conversion semantics, the provisional nature of results during warmup, and the 'configured/stepField/default' sourcing hierarchy. This is far more than the annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and information-rich, but it is long and contains some run-on sentences that require careful parsing. It is well front-loaded with the core purpose, but the sheer density and lengthy qualifiers reduce scannability slightly.
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 covers the return payload semantics, important edge cases, the warmup provisional state, and follow-up actions. There is no output schema, so the description carries the full burden and delivers nearly everything an agent needs to call it correctly and interpret results.
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 low (33%), but the description richly explains only_unresolved and project_id, and even clarifies the role of marketplace_id. It adds meaning beyond the schema by explaining what only_unresolved returns and when project_id is optional/required.
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 — listing a marketplace's OUTPUT attributes and their current sourcing — and immediately positions it as the tool for solving the attribute form, distinguishing it from generic get/list tools. It names related siblings (map_marketplace_attribute, configure_marketplace_step) without confusing its own role.
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 explicit context for when to use this tool (when dealing with the attribute form), what to do after (map_marketplace_attribute), and how to handle caveats (categoryAttributeWarmup pending, polling marketplace_status, optional project_id). It also names the source of marketplace_id and when to call list_projects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_marketplace_channelARead-onlyInspect
Get, for ONE marketplace channel, the integration TYPES it supports and each type's capabilities. Returns {channelCode, label, kind, devOnly, multichannel, multichannelCode, definitions:[{definitionCode, type, typeLabel, label, versionType, primary, capabilities:{orderSync, categoryMapping, productFilter, attributeMapping}}]}. kind is always 'marketplace' here. versionType is 'primary' or 'secondary' and primary marks the default definition. capabilities tell you what a given definition supports (order sync, category mapping, product filtering, attribute mapping). Call this before create_marketplace to choose the right definition for the channel. channel_code is the channelCode from list_marketplace_channels. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects and pass its project_id).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| channel_code | Yes | channelCode of the marketplace channel (from list_marketplace_channels). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context: kind is always 'marketplace', versionType marks primary/default definitions, and capabilities describe supported features. It does not contradict annotations, and the added detail goes beyond what annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence contributes: purpose, return shape, key invariants, usage timing, and parameter sourcing. The inline return JSON is justified because there is no output schema, and the information is ordered logically from outcome to invocation.
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 no output schema, the description provides the full return structure and explains the key fields. It also covers the dependency on list_marketplace_channels and the project_id edge case, making the tool effectively callable without further research.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, with channel_code documented in the schema but project_id not. The description compensates fully by explaining project_id's optional/required behavior and its source, and it reinforces that channel_code is the channelCode from list_marketplace_channels. This gives the agent sufficient parameter-level understanding.
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: getting, for ONE marketplace channel, the integration types and their capabilities. It clearly differentiates from list_marketplace_channels by emphasizing the singular channel focus and the capability details it 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?
It explicitly says to call this before create_marketplace to choose the right definition, and clarifies that channel_code comes from list_marketplace_channels. It also explains when project_id is optional versus required, giving the agent concrete routing and prerequisite guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_marketplace_item_historyARead-onlyInspect
Get ONE listing item's action-log timeline — the sequence of events that acted on the product and its Koongo/channel state at each point, so you can explain WHY an item ended in its current state (e.g. it was created, changed, validated, pre-paired, submitted, rescheduled, removed, locked). Returns {itemId, returned, entries:[{createdAt, event, eventLabel, message, messageLabel, operation, operationLabel, koongoStatus, channelStatus}]} newest first. eventLabel/messageLabel/operationLabel are the human-readable rendering the Koongo UI shows (event name, plain-language explanation, operation title); event/message/ operation are the raw codes. Entries are process metadata only (no raw product values). item_id is the itemId from list_marketplace_items (the same id get_marketplace_item_report uses). Pair this with get_marketplace_item_report (current errors) to diagnose a failing product. marketplace_id is the integrationId from list_marketplaces. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max timeline entries to return (default 20, max 50). | |
| item_id | Yes | The listing itemId (from list_marketplace_items). | |
| project_id | No | ||
| marketplace_id | Yes | integrationId of the marketplace (from list_marketplaces). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond the readOnlyHint=true annotation: it discloses the response structure, newest-first ordering, that entries contain only process metadata not raw product values, and the distinction between raw event codes and human-readable labels. This is far more than the annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence contributes: purpose, return contract, field semantics, pairing recommendation, identifier provenance, and conditional parameter behavior. It is front-loaded with the core purpose and does not repeat the schema verbatim.
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 having no output schema, the description embeds a full return contract including nested entry fields and the labels/raw-code distinction. It covers how to obtain parameters, when the tool is needed, and what the output means, making it fully actionable for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the schema already documents three of four parameters. The description adds meaningful extra semantics by clarifying that item_id is the same id used by get_marketplace_item_report, that marketplace_id is the integrationId from list_marketplaces, and that project_id is optional only for single-project customers. This goes beyond the bare schema 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 verb ('Get'), a precise resource ('ONE listing item's action-log timeline'), and the purpose (explaining WHY an item ended in its current state). It clearly differentiates from sibling tools like get_marketplace_item_report by focusing on the event timeline rather than current errors.
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?
Explicit guidance is given for when to use this tool: pair it with get_marketplace_item_report to diagnose a failing product. It also specifies where to obtain the required identifiers (item_id from list_marketplace_items, marketplace_id from list_marketplaces) and explains the optional project_id behavior, including when to call list_projects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_marketplace_item_reportARead-onlyInspect
Get the detailed report for ONE listing item of a marketplace: why this product fails or warns on the channel. Returns {itemId, koongoProductId, status, statusDescription, channelStatus, channelStatusLabel, channelStatusDescription, reportMessage, reportCode, errors:[{source, field, fieldLabel, message, code, level, additionalInfo, currentValue}], sensitiveGate}. statusDescription/channelStatusLabel/ channelStatusDescription and each error's fieldLabel are the human wording the Koongo UI shows (status + attribute name); status/channelStatus/field are the raw codes. source is export|adapter|api_error; level is error|danger(=warning)|info. currentValue is the offending value that was sent to the channel. SENSITIVE-GATE: currentValue exposes real product data, so the first call (acknowledge_sensitive absent/false) returns the report with currentValue withheld and a {sensitiveGate:{confirmationRequired:true, itemCount, fields, kind}} — present that gate to the USER, get their approval, then re-call with acknowledge_sensitive:true to receive the actual values. item_id is the id from list_marketplace_items; marketplace_id is the id from list_marketplaces. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects). For the marketplace-wide breakdown use get_marketplace_report.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | ||
| project_id | No | ||
| marketplace_id | Yes | ||
| acknowledge_sensitive | No | Set true only AFTER the user approves seeing real data. When absent/false the tool withholds currentValue and returns a sensitiveGate; with true it returns the actual values. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, destructiveHint), the description discloses the sensitive-gate behavior — first call withholds currentValue, returns a sensitiveGate, and requires re-call with acknowledge_sensitive:true after user approval. It also explains the return payload semantics: raw codes vs human labels, error fields, source values, and level meanings. This is substantial behavioral context the annotations alone would not 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 long but every sentence earns its place. It front-loads the core purpose, then packs return semantics, gate behavior, parameter sourcing, and the sibling distinction into a dense but scannable format. There is no filler 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?
With no output schema, the description carries the full burden of explaining return values — and it does so thoroughly, covering status fields, error entries, enumeration values, the sensitiveGate flow, and parameter dependencies. Nothing needed to invoke 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 only 25%, but the description compensates fully: it explains item_id and marketplace_id provenance, project_id optionality and inference, and the acknowledge_sensitive two-call flow. Every parameter's meaning and usage is clarified beyond the bare 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 verb/resource pair — 'Get the detailed report for ONE listing item of a marketplace' — and immediately states the tool's purpose. It also explicitly distinguishes itself from the sibling get_marketplace_report ('For the marketplace-wide breakdown'), so an agent can select it 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 gives clear when-to-use guidance: single item vs marketplace-wide, and names the alternative tool. It also tells the agent where the IDs come from (list_marketplace_items, list_marketplaces), explains when project_id is needed, and routes to list_projects when required. This is explicit, actionable selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_marketplace_reportARead-onlyInspect
Get the validation report for one marketplace: the aggregated errors and warnings that block or degrade its listing, with fix suggestions. The errors are SPLIT into two groups (as in the CP's two separate views). Returns {integrationId, errorCount, warningCount, statusCounts:[{status, count}], listingStatusCounts:[{status, count}], dataCheckErrors:[...], channelErrors:[...]}, where each error is {source, field, message, code, level, count, fixSuggestions:[{type, stepType, label}]}. dataCheckErrors = the pre-submission KOONGO DATA CHECK (feed-generation validation, source='export' — the same the wizard summary/preview shows, produced when the feed is generated BEFORE anything reaches the channel). channelErrors = the marketplace's OWN responses AFTER submission (source='adapter'/'api_error' — the integration detail). errorCount/warningCount are the COMBINED totals across both groups. Data-check errors exist only after a generation has run — finish the wizard, or repair_marketplace to (re)generate; export is async, so poll marketplace_status until productsRefreshing AND productsSubmitting are false, then read the report. statusCounts is how many items sit in each koongo processing status (e.g. completed / error / pending); listingStatusCounts the same by channel listing status (e.g. active / rejected / error). level is error|danger(=warning)|info; count is how many products hit that error. fixSuggestions.type is add_category_mapping|fix_settings|rewrite_attribute| exclude_product, and stepType (when set) names the wizard step to open with configure_marketplace_step. This is the marketplace-wide breakdown; for a single product's report use get_marketplace_item_report. marketplace_id is the id from list_marketplaces. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| marketplace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/destructiveHint annotations, the description discloses the dependency on prior feed generation, the async export nature, the two error groups (dataCheckErrors pre-submission vs channelErrors post-submission), and the semantics of level/count/fixSuggestions. No contradictions 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?
Dense but purposeful; the length is justified by the absence of an output schema and the nested return structure. It front-loads the core purpose, then methodically explains return shape, field semantics, prerequisites, and sibling routing. No wasted or redundant sentences.
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 2 parameters, no output schema, and nested return fields, the description covers everything needed: exact return JSON, field meanings, when data exists, how to poll, and how to act on fixSuggestions. An agent can invoke it correctly without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates: 'marketplace_id is the id from list_marketplaces' and 'project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects)' explains both parameters' origin, optionality, and conditional requirement.
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 and object: 'Get the validation report for one marketplace: the aggregated errors and warnings that block or degrade its listing, with fix suggestions.' It explicitly differentiates itself from the sibling: 'for a single product's report use get_marketplace_item_report', making its marketplace-wide scope unmistakable.
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 direct routing to the alternative tool for single-product reports, and states when the report is meaningful: 'Data-check errors exist only after a generation has run — finish the wizard, or repair_marketplace to (re)generate; export is async, so poll marketplace_status until productsRefreshing AND productsSubmitting are false'. It also tells where to get marketplace_id and when to call list_projects for project_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_connectionARead-onlyInspect
Full detail of ONE standalone order connection, including its Orders Config form. Returns {connectionId, name, channelCode, channelLabel, channelApiCode, status, orderStatus, orderSyncLevel, authType, connected, expired, hasCredentials, authMessage, lastSyncStatus, lastSyncAt, lastSyncMessage, ordersThisMonth, orderConfigFields:[{code, label, description, type, required, options, optionsSource, value, defaultValue, adminOnly, locked, addonCode, upsellUrl}]}. A field with locked:true is a paid feature (buy via upsellUrl) and cannot be set until unlocked; options may be null for a field whose choices are only known after the connection is authenticated. Use orderConfigFields to build a configure_order_connection call. connection_id is from get_order_overview. project_id is OPTIONAL (project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| connection_id | Yes | connectionId of the order connection (from get_order_overview). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description goes further by disclosing nuances like locked fields being paid features and options being potentially null until authentication. It also clarifies the relationship with configure_order_connection, adding significant value beyond structured metadata without any contradiction.
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 dense but every sentence carries weight: it states the purpose, lists the full output, explains key behaviors, and gives usage context. It is front-loaded with the primary function and structured logically, with no redundant or filler content.
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 complexity, the description is remarkably complete. It details the entire return payload, explains the meaning of locked and null options, indicates how to derive the required parameter, and instructs on the next step. With no output schema, the description fully carries the return-type burden.
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 only documents connection_id, but the description compensates fully by explaining the source of connection_id and the conditional requirement for project_id. It adds meaning to both parameters that the schema lacks, especially for project_id which has no description 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 clearly states it provides 'Full detail of ONE standalone order connection' with a specific verb and resource. It distinguishes itself from listing or overview tools by specifying it retrieves a single connection along with its configuration form. The output structure is explicitly enumerated, 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 gives precise guidance on when to use this tool: it specifies that connection_id comes from get_order_overview, and explains the optionality of project_id with a conditional call to list_projects. It also directs the agent to use the returned orderConfigFields for constructing configure_order_connection calls, clearly placing this tool in the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_overviewARead-onlyInspect
The project's ORDER dashboard for standalone order connections (marketplaces managed WITHOUT a product wizard). Returns order counts and the project's order connections in one call: {ordersToday, ordersThisMonth, ordersLastMonth, ordersLast12Months, ordersWithError, ordersNotInserted, activeConnectionCount, syncStatus, syncStatusLabel, syncStartedAt, syncedAt, syncMessage, connections:[{connectionId, name, channelCode, channelLabel, channelApiCode, status, orderStatus, orderSyncLevel, authType, hasCredentials, lastSyncStatus, lastSyncAt, lastSyncMessage}]}. orderStatus is 'active'|'disabled'|'not allowed'|'overlimit' (whether that connection is syncing orders). Start here to see order state, then drill into one connection with get_order_connection. A newly added connection appears here once the user finishes authentication in the Koongo UI. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | 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 core safety profile is covered. The description adds useful context: the return fields, the orderStatus enum semantics, and that a new connection appears only after authentication. This exceeds the baseline without being redundant.
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 long but information-dense, with the core return fields listed up front and usage context following. Every sentence adds value, though the list of return fields could be considered verbose. It is well-structured and not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of documenting the return shape and field semantics. It lists all expected fields, explains orderStatus values, notes sync-related fields, and covers project_id behavior. No critical information is missing for an agent to use the 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?
The schema provides only a type and exclusiveMinimum for project_id, with no description (coverage 0%). The description fully compensates by explaining optionality, single-project inference, and the fallback to list_projects. This is critical information an agent needs to call the tool correctly.
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 ('Returns') with a clear resource ('order counts and the project's order connections') and explicitly names the sibling tool (get_order_connection) it differs from. It distinguishes the overview from the drill-down 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?
It states 'Start here to see order state, then drill into one connection with get_order_connection,' giving explicit when-to-use and the alternative. It also explains the project_id optionality and when to call list_projects, covering edge cases for the parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_profileARead-onlyInspect
Get a project's catalog product profile so you can recommend suitable sales channels for it. Returns {projectId, marketCategories:[{name, score, source}], stats:{productsCount, productsTotal, categoriesCount, avgPrice, medianPrice, currency, eanFillRate, eanBucket, metricsSyncedAt}}. marketCategories is the AI-detected catalog VERTICAL, ordered by score DESC — the first is the dominant vertical (e.g. 'Fashion & Accessories', 'Home & Decoration'); score is 0–1 confidence, source is ai|manual; the list is empty when the catalog has not been categorised yet. stats are catalog aggregates: avgPrice/medianPrice are in currency; eanFillRate is the 0–1 EAN/GTIN coverage and eanBucket its coarse form none|low|medium|high; a null means not-yet-computed (metricsSyncedAt shows how fresh the price/EAN figures are). Use the dominant vertical + price band + EAN coverage to suggest fitting marketplaces/ads: cross-reference list_marketplace_channels / list_ad_channels and propose ONLY channels whose available is true, then walk the create/configure wizard. Never invent channels that aren't in the catalog. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and non-destructive. The description adds substantial behavioral context: the meaning of empty marketCategories lists, null handling for stats, field semantics (score confidence, source tags, freshness via metricsSyncedAt), and the optionality behavior of project_id. It fully discloses the tool's behavior beyond the safety hints.
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 long but every sentence serves a purpose: the lead states the goal, then the output schema is detailed with field semantics, then usage instructions follow. No fluff or repetition. It is front-loaded with the core purpose and ends with actionable guidance. The length is justified by the complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich output (no output schema provided), the description fully specifies the return structure, field meanings, null semantics, and how to use the data. It even references the prerequisite tool call for multi-project scenarios. An agent could confidently invoke and interpret the results without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With one parameter (project_id) and 0% schema description coverage, the description compensates completely. It explains that project_id is optional for single-project customers and required otherwise, and directs to call list_projects when needed. This adds essential meaning that the bare schema (integer, exclusiveMinimum 0) does not provide.
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 clear, specific verb+resource: 'Get a project's catalog product profile so you can recommend suitable sales channels for it.' It states the primary purpose and the intended downstream use, distinguishing it from siblings like list_projects or get_marketplace. The tool's role in the channel-recommendation workflow 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?
Includes explicit guidance on when to use the tool and how to act on its output: cross-reference list_marketplace_channels / list_ad_channels, propose only channels with available=true, and never invent channels. Also clarifies the conditional need for project_id and when to call list_projects instead. No ambiguity remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ruleARead-onlyInspect
Get the full definition of one product rule (Attribute Rule), including its verbatim rules[] (round-trippable — you can edit it and pass it back to update_rule). Returns {ruleId, name, description, category, scope, rules, createdAt, updatedAt}. rules[] is {sortId, enabled, type, conditions, operationGroups:[{mode, parentMode, attributes, operations:[{name, arguments}]}]} (see discover_rule_operations). scope selects the library: 'project' (default) or 'shared_template'. An unknown rule_id returns error 'not_found'. rule_id is from list_rules. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Which library to read from: 'project' (default) = the project's own rules; 'shared_template' = the reusable shared template library. | |
| rule_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description reveals the exact return shape, the round-trippable nature of rules[], the 'not_found' error for unknown rule_id, and the conditional behavior for project_id. These are important runtime behaviors an agent cannot infer from annotations 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?
Every sentence adds information: primary purpose, return contract, nested structure, scope semantics, error behavior, and parameter provenance. It is dense but structured, and the critical round-trip concept is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description provides the complete return shape and nested type details. It also covers error cases, parameter disambiguation, and relationships to sibling tools, leaving little ambiguity for an agent to invoke the 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?
Schema coverage is only 33%, but the description compensates by explaining all three parameters: rule_id originates from list_rules, scope selects the library with a default, and project_id is optional in some cases but required in others, with a pointer to list_projects. This is exactly the semantic grounding the schema lacks.
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: 'Get the full definition of one product rule (Attribute Rule)'. It distinguishes itself from sibling tools like list_rules (full vs. summary), update_rule (round-trippable), and delete_rule by emphasizing the read-only retrieval and the exact return payload.
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 on how rule_id relates to list_rules, how the returned rule feeds update_rule, and when project_id must be supplied (by referencing list_projects). It does not explicitly spell out 'do not use this to list rules', but the phrase 'one product rule' and the round-trip workflow imply the boundary sufficiently.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_value_mapping_inputsARead-onlyInspect
Get the inputs needed to build a value-mapping rule (Attribute Rule) that remaps a source attribute's values onto a target attribute's allowed set (e.g. store colours → the channel's accepted colour list). Works for BOTH a feed and a marketplace/ad. This is for value→value MAPPING (the map_attribute_value operation); to just assign ONE fixed value from an attribute's option list (a "Set option") use get_attribute_options instead. Returns {sourceValues:[{value, label}], targetAllowedValues:[{value, label}], alreadyMapped:[{search, replace}], hasMore, nextOffset}. sourceValues are the distinct values of source_attribute_code in the store; targetAllowedValues are the values target_attribute_code accepts on the target; alreadyMapped are the pairs already configured. YOU propose the search→replace pairs from these two lists — this tool runs no AI and never writes. Apply the pairs by adding a map_attribute_value operation (arguments search/replace) to the rule via create_rule / update_rule, then attach the rule (map_feed_attribute / map_marketplace_attribute / map_ad_attribute with rule_id); values you leave unmapped pass through unchanged for the user to finish manually. search/replace on the map_attribute_value op you build from these are arrays of {value:''} objects paired by index (NOT plain strings). Pass only_unmapped:true to get only source values that still need a pair; page with offset (from nextOffset) while hasMore is true. TARGET: pass EXACTLY ONE of feed_id (a feed, from list_feeds) or integration_id (a marketplace/ad — the marketplace_id/ad_id from list_marketplaces / list_ads); integration_id resolves the integration's attributes. The attribute codes come from get_feed / get_marketplace_attributes / get_ad_attributes / list_source_attributes. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects). This tool returns real store data values only after you set acknowledge_sensitive:true. The first call (flag absent/false) returns {sensitiveGate:{confirmationRequired:true, itemCount, fields, kind}} with the sourceValues / alreadyMapped arrays EMPTY — present that gate to the USER, get their approval, then re-call with acknowledge_sensitive:true to receive the actual values.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Pagination cursor: pass the previous response's nextOffset to fetch the next page (default 0). | |
| feed_id | No | Target a feed (from list_feeds). Pass exactly one of feed_id or integration_id. | |
| project_id | No | ||
| only_unmapped | No | When true, return only source values that still need a search→replace pair (skip already-mapped ones); default false. | |
| integration_id | No | Target a marketplace/ad — the marketplace_id or ad_id from list_marketplaces / list_ads. Pass exactly one of feed_id or integration_id. | |
| acknowledge_sensitive | No | Set true only AFTER the user approves seeing real data. When absent/false the tool returns a sensitiveGate with sourceValues / alreadyMapped empty; with true it returns the actual values. | |
| source_attribute_code | Yes | ||
| target_attribute_code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true and destructiveHint=false, and the description reinforces this by stating the tool 'runs no AI and never writes.' It additionally discloses the two-phase sensitive data gate, pagination via hasMore/nextOffset, and that unmapped values pass through unchanged—context well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries operational weight: purpose, scope, alternative, return shape, parameter targeting, sensitive gate, and follow-up workflow. It is front-loaded with the core purpose and differentiation before diving into parameter details, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description enumerates the full response shape including sourceValues, targetAllowedValues, alreadyMapped, hasMore, and nextOffset, and explains the sensitiveGate response. Given the tool's complexity—8 parameters, dual target types, and a sensitive-data gate—the description covers everything an agent needs 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?
With only 63% schema description coverage, the description compensates fully. It explains source_attribute_code as distinct store values, target_attribute_code as accepted target values, the exact semantics of feed_id vs integration_id, project_id inheritance, only_unmapped, acknowledge_sensitive, and offset/nextOffset pagination, plus the non-obvious array-of-objects format for search/replace.
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: 'Get the inputs needed to build a value-mapping rule' that remaps source values onto a target attribute's allowed set. It also distinguishes itself from the sibling get_attribute_options by contrasting value→value mapping with a single fixed 'Set option' assignment.
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 explicit when-to-use guidance for value→value mapping and explicitly points to get_attribute_options as the alternative for a single fixed value. It also explains the follow-up workflow (add map_attribute_value via create_rule/update_rule, then attach via map_feed_attribute/map_marketplace_attribute/map_ad_attribute), leaving no ambiguity about the downstream steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
koongo_knowledgeARead-onlyInspect
Fetch Koongo help/reference knowledge ON DEMAND — glossaries and deep-detail topics kept out of the always-loaded instructions to save context. Call with NO args for the topic index (slug + title + summary); with slug for one topic's full body (plus a canonical help url when available); with query to keyword-search the corpus. Reach for it when you need to interpret a marketplace/ad listing status or item status (from list_*items / get*_item_report / *_status / *_report), or need the reference for the product filter, value/options mapping, currency conversion, or safe activation. Topics: listing-and-item-status, product-filter, value-and-options-mapping, currency-conversion, safe-activation. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | ||
| query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Read-only behavior is already declared by annotations, and the description reinforces it. It adds useful behavioral context: results vary by argument mode, a canonical help URL may be returned, and the tool is designed to keep context small by not preloading content. It does not mention behavior when both slug and query are provided, but that is a minor gap for this kind of lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but purposeful, with the core purpose and rationale front-loaded, followed by call patterns, use cases, and topics. It is somewhat run-on and could be split into clearer sentences or bullets, but every part contributes meaning without significant 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 read-only knowledge tool with two optional parameters and no output schema, the description covers invocation modes, return expectations, topic list, and when to use it. There is no output schema, so the description's mention of returned index/body/search results is enough for an agent to select and 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 0%, so the description must explain the parameters, and it does: slug returns one topic's full body with optional canonical URL; query performs a keyword search; no args returns the index. This substantially compensates for the bare schema, though exact slug rules and mutual exclusivity are not spelled out.
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 tool as an on-demand reference/knowledge fetcher, with explicit scope ('Koongo help/reference knowledge') and a specific set of topics. It distinguishes itself from the many item/status/report sibling tools by describing its role as the lookup aid for interpreting those tools' outputs.
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 defines three concrete call modes (no args for index, slug for topic body, query for search) and gives explicit when-to-use guidance tied to sibling tool families like list_*_items, get_*_item_report, *_status, and *_report. This leaves little doubt about when the agent should reach for this tool versus the surrounding operational tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ad_channelsARead-onlyInspect
Search the CATALOG of ADS channels you can ADD — advertising channels (Google Shopping, Meta, Microsoft, Pinterest, …) you can create an ads integration for (to list the ads that ALREADY exist, use list_ads). Ads are ads-based channels (advertising / price-comparison / classifieds), not marketplaces: they publish products to the ad platform and have no order sync. SEARCHABLE + PAGED: pass query to match a channelCode/label, page with limit/offset (response carries hasMore + nextOffset). Response = {channels, returned, total, kind, hasMore, nextOffset}; each channel = {channelCode, label, kind, available, availabilityReason, authType, orderSyncSupported, multichannel, multichannelCode, primaryChannelCode, devOnly, upgradeUrl, appstoreUrl, feedManagerUrl}. available=false → availabilityReason says why: 'plan_limit' (upgradeUrl) or 'appstore' (appstoreUrl — available in the Koongo App). orderSyncSupported is always false for ads. Use channelCode with get_ad_channel (definition types + capabilities) then create_ad. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max channels per page (default 50, max 200). | |
| query | No | Filter to channels whose code or label contains this text. | |
| offset | No | Channels to skip; use the response nextOffset to page. | |
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds a wealth of behavioral context beyond that: paging semantics (hasMore + nextOffset), response shape, availability reasons (plan_limit vs appstore), and the invariant that orderSyncSupported is always false for ads. Nothing contradicts 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 long but information-dense; every sentence adds a distinct, useful fact. It is front-loaded with the core purpose, then flows into distinction, response format, field semantics, and workflow. No fluff or repetition of schema-only 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?
Given an absent output schema, the description fully compensates by enumerating the response fields and explaining key values (availabilityReason, authType, orderSyncSupported, etc.). It also covers edge cases like unavailable channels and project_id ambiguity, so an agent has everything needed to call the 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?
Schema covers 75% of parameters, and the description meaningfully enriches the remaining 25% (project_id optional/inferred vs required, plus link to list_projects). It also explains how query, limit, and offset work together ('page with limit/offset', response carries hasMore + nextOffset) and describes returned fields that clarify what 'available' means.
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?
'Search the CATALOG of ADS channels you can ADD' states the exact verb, resource, and scope, and explicitly contrasts with list_ads ('to list the ads that ALREADY exist, use list_ads'). It also distinguishes ads channels from marketplaces, so an agent can separate it from list_marketplace_channels 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 says when to use this tool versus list_ads, defines which channels qualify ('ads-based channels... not marketplaces'), and gives a concrete follow-on workflow: 'Use channelCode with get_ad_channel... then create_ad'. It also explains the project_id ambiguity and routes to list_projects when required, leaving no ambiguity about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ad_itemsARead-onlyInspect
List the individual listing items of one ADS integration — the per-product rows for listing-based ad channels (e.g. Marktplaats and other classifieds, which create one ad per product). Some ad channels (e.g. Google Shopping) submit the whole product set in bulk rather than as individual listings and so have no per-item rows — they return an empty list; use ad_status / get_ad_report for those. Returns {integrationId, total, returned, items:[{itemId, koongoProductId, parentId, productType, status, channelStatus, listingId, listingUrl, hasErrors, errorCount}]}. Filter with koongo_status, channel_status, listing_id or product_id to find failures; page with limit / offset. Rows carry only identifiers + statuses (no gate); an item's actual attribute value + full error report come from get_ad_item_report. itemId is what you pass to get_ad_item_report / get_ad_item_history. ad_id is the integrationId from list_ads. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | integrationId of the ad (from list_ads). | |
| limit | No | Max items to return (page size). | |
| offset | No | Number of items to skip (paging). | |
| listing_id | No | Filter by the item's listing id on the channel. | |
| product_id | No | Filter to one Koongo product id. | |
| project_id | No | ||
| koongo_status | No | Filter by the Koongo-side listing status. | |
| channel_status | No | Filter by the channel's own listing status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=true, openWorldHint=false, destructiveHint=false; the description adds essential behavior beyond that: some channels return an empty list, rows contain only identifiers and statuses (no gate), itemId is what subsequent report tools expect, and ad_id is the integrationId from list_ads. This is rich, accurate 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?
The description is long, but it is dense and front-loaded with the core purpose, then the empty-list caveat, return shape, filtering/paging, and related tools. Every sentence carries useful information; the only minor issue is that it reads as a solid block without clear paragraph or bullet separation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by explicitly listing the return shape, explaining the empty-list case, covering filtering and pagination, clarifying what data rows do and do not contain, and pointing to related tools for deeper item data. For an 8-parameter list tool in a sibling-heavy context, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already strong at 88%, with descriptions on most parameters. The description adds value by grouping filter parameters by purpose, explaining the relationship between ad_id and list_ads, and clarifying that project_id is optional for single-project customers but required otherwise — information the schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List the individual listing items of one ADS integration — the per-product rows'. It clearly distinguishes this tool from bulk channels and related tools like get_ad_report, and explains what kind of channel produces these rows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when not to use it (Google Shopping style bulk channels) and names the alternatives (ad_status / get_ad_report). It also gives practical usage guidance: filter with koongo_status, channel_status, listing_id or product_id to find failures, page with limit/offset, and use get_ad_item_report for full error reports.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_adsARead-onlyInspect
List the CREATED ads of a project (the advertising integrations that already exist, not the catalog of channels you can add — use list_ad_channels for that). Ads are ads-based channels (advertising / price-comparison / classifieds), not marketplaces: they publish products to the ad platform and have no order sync. Returns {integrations, returned, total}; each row is {integrationId, projectId, name, channelCode, kind:'ads', definitionCode, status, ready, lastStep, isReady, isConnected, isOverlimit, productMode, orderMode, orderSync}. project_id is OPTIONAL: with it you get that project's ads; WITHOUT it you get ads across ALL your projects (each row carries its projectId). If a call returns project_id_required, pick a project (see list_projects) and pass its project_id. integrationId is what you pass as ad_id to get_ad / ad_status and the other ads tools.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive behavior, and the description adds valuable context: return shape, row fields, absence of order sync, and the meaning of project_id omission. It clarifies what the tool does and returns, going well beyond the structured 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 dense but every sentence adds essential information: tool scope, sibling differentiation, return structure, parameter semantics, and integrationId linkage. Information is front-loaded with the core action and definition first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides the full return structure and key field list. It covers the optional parameter behavior, error signaling, and how the returned integrationId connects to other tools. Nothing critical 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 coverage is 0%, but the description fully compensates by explaining the project_id parameter: optional, scopes to one project or all projects, and its relationship to project_id_required. This gives the agent complete semantic understanding beyond the bare integer type.
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 lists existing ads for a project, distinguishing it from list_ad_channels and clarifying that ads are ad-based channels, not marketplaces. It explicitly differentiates from siblings and gives the exact resource being operated on.
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 explicitly says when to use list_ad_channels instead, explains the optional project_id behavior with and without it, and describes what to do if project_id_required is returned. This is direct, actionable routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ai_sourcesARead-onlyIdempotentInspect
List the AI sources currently registered on a project (attributes populated via set_ai_source). Returns {items:[{code, url, handle}]} — code is the attribute name (available as custom_ once applied), handle the product key it joins on. project_id is OPTIONAL (inferred for a single-project customer).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description documents the exact return shape {items:[{code, url, handle}]} and explains the meaning of each field, including the custom_<code> behavior and join semantics of handle. It also discloses that project_id may be inferred, adding valuable runtime behavior not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core action. Every sentence adds necessary information: the purpose, the response contract with field semantics, and the only parameter's optionality. There is no wasted text.
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 operation with one optional parameter and no output schema, the description is complete. It gives the return format, explains what code and handle mean, and clarifies project_id behavior, so an agent has everything needed to call the 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 provides only the integer type and exclusiveMinimum for project_id, with 0% schema description coverage. The description compensates fully by stating that project_id is optional and inferred for single-project customers, which is essential for correct invocation.
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 and resource: 'List the AI sources currently registered on a project'. It ties the data to set_ai_source, which helps distinguish from set/delete_ai_source, but it does not explicitly contrast with list_api_sources, leaving some sibling differentiation to the tool names.
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: to see AI sources that were previously populated via set_ai_source. It also clarifies that project_id is optional and inferred for single-project customers. However, it does not explicitly state when to prefer this over related list tools such as list_api_sources or list_source_attributes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_api_sourcesARead-onlyIdempotentInspect
List the API source attribute codes registered on a project (populated via set_api_source; usable in rules as api_source.). Returns {codes:[...]}. project_id is OPTIONAL (inferred for a single-project customer).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds useful behavioral detail beyond that: it states the exact return shape '{codes:[...]}' and discloses that project_id is inferred for single-project customers. 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?
The description is two succinct sentences with no filler. It front-loads the core purpose, then quickly covers output shape and parameter behavior, earning every word.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with one optional parameter and no output schema, the description is complete. It covers what is listed, where the data comes from, how it is used, what is returned, and when project_id can be omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates fully for the single parameter by explaining project_id is optional and inferred for a single-project customer. This gives the agent the key semantic nuance that the bare integer schema does not provide.
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: it lists 'API source attribute codes registered on a project' and clarifies their role as 'usable in rules as api_source.<code>'. This clearly distinguishes it from generic list tools and connects it to set_api_source.
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 the tool: to retrieve API source codes, especially after set_api_source. It also explains project_id optionality and inference for single-project customers, but it does not explicitly contrast this with sibling tools like list_source_attributes or list_ai_sources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_feedsARead-onlyInspect
List the customer's CREATED feeds (the feeds that already exist, not the catalog of types — use list_feed_templates for that). Each item is {feedId, projectId, feedCode, name, feedType, fileFormat, channelCode, status, feedUrl, lastRunAt}. project_id is OPTIONAL: with it you get that project's feeds; WITHOUT it you get your feeds across ALL your projects (each item carries its projectId). If a call returns project_id_required, pick a project (see list_projects) and pass its project_id. feedId is the per-project id you pass as feed_id to get_feed / verify_feed_attributes. Integration-managed feeds are excluded; only standalone feeds are returned. Returns all matching feeds in one call; not paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and non-destructive annotations, the description discloses the exact return fields, the exclusion of integration-managed feeds, the error sentinel project_id_required, and the non-paginated complete-return behavior. This gives the agent a full behavioral model of the operation beyond what annotations alone 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?
Every sentence adds a distinct fact: the sibling distinction, item shape, parameter semantics, error recovery, feedId usage, standalone-only exclusion, and pagination behavior. Despite being longer than typical descriptions, there is no filler and the most important scoping detail is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter read-only list tool, the description covers the return schema, error handling, exclusions, and pagination, so an agent can select and call it correctly without needing additional lookups. There is no output schema, but the inline item field list fully compensates.
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 only 'optional integer project_id' with zero description coverage, so the description carries the full burden and succeeds. It explains the semantic difference between passing and omitting project_id, the error condition that triggers its use, and the fact that each result carries its projectId even in the cross-project case.
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 precise verb and resource: it lists the customer's already-created feeds, explicitly distinguishing these from the catalog of feed types by naming list_feed_templates as the alternative. It even enumerates the returned item shape, removing ambiguity about what a 'feed' is in this context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use list_feed_templates for the catalog, and explains the optional project_id behavior with clear conditions: with it you get that project's feeds, without it you get all projects' feeds. It also handles the project_id_required error by directing the agent to list_projects to pick a project, and maps feedId to feed_id for get_feed/verify_feed_attributes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_feed_templatesARead-onlyInspect
List the PUBLIC Koongo feed TEMPLATES available for a project — the catalog of feed TYPES you can create from (the feedCode source for create_feed). These are NOT the customer's existing feeds (use list_feeds for those). Each item is {feedCode, name, type, fileType, channelCode, country}. project_id is OPTIONAL: omit it when the customer has a single project (it is inferred); if they have several you get project_id_required — call list_projects and pass one. Pass query as a BROAD coarse filter — ideally just the channel/marketplace name (e.g. 'google'); do NOT put country/format/language words in it, because feed codes are cryptic and a literal match will miss. Instead match the user's request (country e.g. CZ/Czech/Česko, format e.g. xml, type e.g. product vs promotions) against the STRUCTURED fields of the returned items yourself — word order and synonyms don't matter. Show the best matches, let the user confirm which feedCode, then call create_feed. Returns all matching templates in one call; not paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and non-destructive, and the description adds behavioral details: the project_id_required error/inference behavior, that all matches are returned unpaginated, and the item field structure. It clearly states the scope ('PUBLIC templates') and no contradiction 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?
Although longer than average, every sentence adds actionable information: differentiation, item structure, parameter guidance, and workflow. The text is front-loaded with the core definition and structured logically from purpose to usage to parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description tells the agent exactly what items look like ({feedCode, name, type, fileType, channelCode, country}), how to handle both parameters, and what to do with results. No critical invocation details are 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 has 0% description coverage, so the description carries the full burden. It fully defines query semantics (broad coarse filter, channel name, what to exclude) and project_id semantics (optional, inferred for single project, required and obtained via list_projects otherwise).
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?
Opens with a specific verb and resource: 'List the PUBLIC Koongo feed TEMPLATES available for a project'. It states the purpose as 'the catalog of feed TYPES you can create from' and explicitly differentiates from list_feeds, so an agent can distinguish it 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?
States when to use list_feeds instead for existing feeds, and when to call list_projects and pass a project_id if project_id_required. Gives precise query strategy: use coarse channel names like 'google', avoid country/format/language words, and match structured fields manually. Also routes the resulting workflow to create_feed after user confirmation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_marketplace_channelsARead-onlyInspect
Search the CATALOG of marketplace channels you can ADD — every sales channel (Amazon, eBay, Kaufland, Bol, Zalando, comparison sites, …) you can create a marketplace integration for (to list the marketplaces that ALREADY exist, use list_marketplaces). The catalog is large (many country variants), so it is SEARCHABLE + PAGED: pass query to match a channelCode/label (e.g. "amazon"), and page with limit/offset (the response carries hasMore + nextOffset). Response = {channels, returned, total, kind, hasMore, nextOffset}; each channel = {channelCode, label, kind, available, availabilityReason, authType, orderSyncSupported, multichannel, multichannelCode, primaryChannelCode, devOnly, upgradeUrl, appstoreUrl, feedManagerUrl}. available=false means you cannot add it now and availabilityReason says why: 'plan_limit' (upgradeUrl to upgrade the plan), 'appstore' (appstoreUrl — available in the Koongo App), or 'fallback' (feedManagerUrl — connect it via Feed Manager). authType is oauth|credentials|null. Use channelCode with get_marketplace_channel (to see the definition types + capabilities) and then create_marketplace. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max channels per page (default 50, max 200). | |
| query | No | Filter to channels whose code or label contains this text. | |
| offset | No | Channels to skip; use the response nextOffset to page. | |
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/destructive annotations, the description explains pagination semantics (hasMore, nextOffset), availability=false reasons (plan_limit, appstore, fallback) with the relevant remedy URLs, authType values, and project_id inference. This is substantial behavioral context an agent cannot derive from annotations 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 dense but every sentence earns its place: disambiguation, search/pagination behavior, response shape, availability semantics, and downstream tool chaining. It front-loads the key distinction from list_marketplaces and stays organized despite the 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?
With no output schema, the description fully documents the response envelope and channel fields, pagination behavior, availability reason variations, and project_id handling. It also names the follow-up tools needed to complete the workflow, making the definition 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?
The schema documents limit, query, and offset, but the description adds real meaning: query matches channelCode/label with an 'amazon' example, limit/offset produce hasMore/nextOffset, and the undocumented project_id parameter is fully explained as optional/inferred or requiring list_projects. This goes well 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 and resource: searching the catalog of marketplace channels that CAN be added, listing concrete examples (Amazon, eBay, Kaufland). It explicitly contrasts with list_marketplaces, which lists already-existing marketplaces, fully differentiating it from the closest 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?
It gives explicit routing: use list_marketplaces for existing marketplaces, use channelCode with get_marketplace_channel then create_marketplace, and call list_projects when project_id_required. These when/alternative instructions leave no ambiguity about how to use this tool in context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_marketplace_itemsARead-onlyInspect
List the individual listing items of one marketplace — the per-product rows of what is (or should be) listed on the channel. Applies to marketplace integrations. Returns {integrationId, total, returned, items:[{itemId, koongoProductId, parentId, productType, status, channelStatus, listingId, listingUrl, hasErrors, errorCount}]}. status is the Koongo-side listing state; channelStatus is the channel's own state; listingId / listingUrl are the item's identity on the channel. Rows carry only identifiers and statuses — never a raw product attribute VALUE — so no confirmation is needed here; to see an item's actual attribute value plus its full error report, use get_marketplace_item_report (which gates the value behind a user confirmation). Filter with koongo_status (e.g. the failed items), channel_status, listing_id or product_id to drive a fix; page with limit / offset. itemId is what you pass as item_id to get_marketplace_item_report. marketplace_id is the id from list_marketplaces. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items to return (page size). | |
| offset | No | Number of items to skip (paging). | |
| listing_id | No | Filter by the item's listing id on the channel. | |
| product_id | No | Filter to one Koongo product id. | |
| project_id | No | ||
| koongo_status | No | Filter by the Koongo-side listing status. | |
| channel_status | No | Filter by the channel's own listing status. | |
| marketplace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool readOnly and non-destructive, but the description adds meaningful behavioral context: it explicitly states that no user confirmation is required because no raw attribute values are exposed, clarifies the distinct meanings of status versus channelStatus, and explains that itemId is the value to pass to get_marketplace_item_report. No contradictions with annotations exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but organized: it front-loads the core purpose, then gives the exact return shape, then parameter semantics, filters, pagination, and cross-tool usage. Every clause adds information needed to invoke the tool correctly, and there is no filler or repetition of the tool name.
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 8 parameters, no output schema, and no enums, the description carries a heavy burden, and it fully meets it. It specifies the complete return structure, the semantics of status fields, the behavior around confirmation, filtering, pagination, the source of marketplace_id, and the project_id edge case. An agent has everything needed to call this tool correctly and to decide whether a different tool is required.
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?
Although the schema already documents most parameters, the description adds significant meaning: marketplace_id is identified as 'the id from list_marketplaces', project_id is explained as optional and inferred for single-project customers, koongo_status is illustrated with 'e.g. the failed items', and the mapping from return fields to downstream tool parameters is made explicit. This materially exceeds the schema's 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 opens with a specific verb and resource: 'List the individual listing items of one marketplace — the per-product rows of what is (or should be) listed on the channel.' It clearly scopes the tool to a single marketplace and distinguishes it from the closely related get_marketplace_item_report, so an agent can tell exactly 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 gives explicit routing guidance: it says list_marketplace_items needs no confirmation because it never returns attribute values, while get_marketplace_item_report should be used when actual values or full error reports are needed. It also explains how to use filters to 'drive a fix', how pagination works with limit/offset, and when project_id is required versus optional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_marketplacesARead-onlyInspect
List the CREATED marketplace integrations of a project — the marketplace integrations that already exist, not the catalog of channels you can add (use list_marketplace_channels for that). Each item is {integrationId, projectId, name, channelCode, kind, definitionCode, status, ready, lastStep, isReady, isConnected, isOverlimit, productMode, orderMode, orderSync}. The response wrapper is {integrations, returned, total}. project_id is OPTIONAL: with it you get that project's marketplaces; WITHOUT it you get marketplaces across ALL your projects (each item carries its projectId). If a call returns project_id_required, pick a project (see list_projects) and pass its project_id. integrationId is what you pass as marketplace_id to get_marketplace / marketplace_status and the other marketplace tools.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so no safety contradiction exists. The description adds substantial behavioral context: it clarifies these are created/existing integrations, explains the optional project_id behavior, lists the exact response fields and wrapper, and tells the agent that integrationId maps to marketplace_id in other tools. This goes well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place. The core distinction from list_marketplace_channels is front-loaded, and the subsequent sentences cover return shape, parameter behavior, error handling, and cross-tool ID mapping. Given that there is no output schema, the field enumeration is justified rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with one optional parameter and no output schema, the description is complete. It covers the purpose, the sibling distinction, parameter semantics, error behavior, response structure, and how results relate to other tools. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full explanatory burden for the single parameter. It thoroughly defines project_id semantics: optional, what happens when provided vs omitted, and how to recover from the project_id_required error. This adds meaning far beyond the bare integer type 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 verb and resource: list the already-created marketplace integrations of a project. It explicitly distinguishes itself from list_marketplace_channels, which is the catalog of channels that can be added, so there is no ambiguity about scope. The phrasing is specific and not a tautology.
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 explicit usage guidance: pass project_id to get a specific project's marketplaces, omit it to get all projects' marketplaces. It also names the alternative tool (list_marketplace_channels) and tells the agent when to use that instead. It even handles an error condition (project_id_required) with a concrete remedy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_order_channelsARead-onlyInspect
List the marketplaces that can be added as a standalone ORDER connection — order-capable channels that do NOT have a product wizard. (Channels that DO have a wizard are added with create_marketplace instead, not here.) Returns {channels:[{channelApiCode, label, channelCode, logoUrl, authType ('oauth'|'api_key'), available}], total}. 'available' is false when the plan's order-connection limit is already reached. Pass a channelApiCode to create_order_connection to start adding one. Optional query filters by name/code. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional filter on channel name/code. | |
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructive, and the description adds meaningful behavioral context: the 'available' flag reflects the plan's order-connection limit, authType values are disclosed, and the project_id inference behavior is explained. These details go well beyond the structured 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 dense but every sentence carries decision-relevant information: purpose, distinction from alternatives, return shape, field semantics, next-step action, and parameter nuances. Nothing is 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?
Without an output schema, the description fully specifies the return shape and field semantics. It also covers filtering, optionality, edge-case behavior, and the follow-up call to create_order_connection, making it complete for correct tool selection and 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 query parameter is already documented in the schema, and the description reinforces it. The project_id parameter, which lacks schema documentation, is meaningfully clarified with optionality rules and the list_projects fallback, compensating for the partial 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 names a specific verb and resource ('List the marketplaces that can be added as a standalone ORDER connection') and immediately distinguishes them from wizard-based channels. It is clearly differentiated from sibling tools like list_marketplaces and create_marketplace.
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 explicitly states when to use this tool versus create_marketplace, and gives the decision rule based on whether a channel has a product wizard. It also explains the project_id edge case and routes to list_projects when required, leaving no ambiguity about invocation conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ordersARead-onlyInspect
List recent order records for the project, PII-FREE — customer name, e-mail, phone and billing/shipping addresses are NEVER returned. Best for spotting sync problems: pass errors_only:true to see only orders that failed or were not inserted. Optional connection_id restricts to one order connection; limit caps the result (default 50, max 200). Returns {orders:[{channelOrderId, channelOrderName, storeOrderId, connectionId, channelCode, marketplaceCode, status, syncStatus, createdAt}], total}. syncStatus flags which orders failed ('error'/'not_inserted'); the free-text error reason is intentionally not exposed (it can contain customer data) — the user reviews details in the Koongo UI. project_id is OPTIONAL (project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max records (default 50, max 200). | |
| project_id | No | ||
| errors_only | No | Only orders that failed to sync / were not inserted. | |
| connection_id | No | Restrict to one order connection (from get_order_overview). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds substantial behavioral context: it guarantees no PII is ever returned, explains why the error reason is intentionally hidden (to avoid leaking customer data), and notes the conditional requirement for project_id based on the project's configuration. All this is beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place. It is front-loaded with the core purpose and PII-free guarantee, then systematically covers use case, parameters, return structure, and a conditional routing note, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with four optional parameters and no output schema, the description fully equips the agent: it explains the response shape ({orders:[...], total}), the meaning of syncStatus, the deliberate absence of error reasons, and the conditional project_id behavior. 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 covers 75% of parameters (limit, errors_only, connection_id), but the description adds meaning for all four: it specifies the default and max for limit, the filtering intent of errors_only, the restriction and source for connection_id (from get_order_overview), and clarifies project_id's optionality with a route to list_projects. This significantly compensates for the missing project_id schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('recent order records') and immediately clarifies the PII-free nature, which distinguishes it from sibling tools. It explicitly routes to list_projects when project_id is required, making differentiation 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?
It provides a clear primary use case ('Best for spotting sync problems') and explains how to filter with errors_only. It also gives an explicit exception: 'project_id is OPTIONAL (project_id_required otherwise — then call list_projects)', which guides the agent to the correct alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsARead-onlyInspect
List your projects. Each item is {projectId, code, name, apiStatus, dataStatus, language, customerId, customerEmail}. Call this FIRST when you don't know which project to act on, or when another tool returns project_id_required. Let the user pick, then pass the chosen projectId to the other tools. When you own a single project you usually don't need this — the other tools infer it. Pass query to search projects by name, code, or owner email. IMPORTANT: if the call returns an EMPTY list, do not assume there are no projects — some accounts only return projects that MATCH a search term, so ask the user what to look for (a project name/code or the owner's email) and retry with a query. A broad search may be capped, so keep the query specific. apiStatus GRANTED = active; REVOKED/OVERLIMIT projects are listed too so the user sees them. After the user picks, the usual next step is get_import_status for that projectId.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional search term to filter projects by name, code, or owner email. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/destructive annotations, it discloses important hidden behavior: an empty list does not mean no projects, broad searches may be capped, and REVOKED/OVERLIMIT projects are still listed. It also explains apiStatus semantics, adding real operational 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?
The description is long but every sentence earns its place: core purpose and return shape up front, then usage guidance, edge cases, and next steps. There is no filler or redundant repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still provides the item structure, status meanings, empty-list caveat, and a suggested next step. An agent has enough context to invoke it correctly and handle unusual responses.
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?
Although the schema covers 100% of the single `query` parameter, the description adds substantial value by naming what can be searched (name, code, owner email), warning that broad searches may be capped, and advising specific queries. This is more than a restatement of 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 exactly what the tool does ('List your projects'), enumerates the item shape, and frames it as the first discovery step when a projectId is unknown. It clearly distinguishes this tool from the many other project-requiring 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?
It gives explicit when-to-use guidance ('Call this FIRST when you don't know which project to act on'), when not to use it ('When you own a single project you usually don't need this'), search behavior, empty-list retry instructions, and the recommended follow-up tool. This is unusually complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rulesARead-onlyInspect
List the product rules (Attribute Rules) available to a project. Returns {rules:[{ruleId, name, description, category, scope, usageCount}], returned, total}. usageCount is how many feed attributes currently use the rule. scope selects which library to list: 'project' (default) = the project's own rules; 'shared_template' = the reusable shared template library; 'all' = both. Optionally pass query: a case-insensitive SUBSTRING match on the rule NAME only (a coarse pre-filter — rule names are not unique, so confirm the match yourself and disambiguate when more than one matches). Use get_rule to fetch a rule's full rules[]. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects). Returns all rules in one call (returned === total); not paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional case-insensitive SUBSTRING match on the rule NAME only (a coarse pre-filter; confirm the match yourself as names are not unique). | |
| scope | No | Which library to list: 'project' (default) = the project's own rules; 'shared_template' = the reusable shared template library; 'all' = both. | |
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/destructiveHint annotations, the description discloses substantive behavior: the exact return shape, that returned === total with no pagination, the meaning of usageCount, and the semantics of scope and query as a substring on NAME only. 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?
The description is dense and front-loads the core purpose and return shape. A few phrasings repeat the schema (e.g., scope enum, query substring), but they are integrated with extra context rather than pure duplication, and no sentence is gratuitous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return values, which it does: {rules:[...], returned, total}, plus pagination behavior and usageCount semantics. It also points to get_rule for full details, making the tool's scope complete for an agent deciding to invoke 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?
The schema covers query and scope, but project_id has no schema description; the description fills that gap by explaining it is optional, how it is inferred for single-project customers, and when list_projects must be called. It also adds operational nuance to query (coarse pre-filter, non-unique names, disambiguation duty) that goes beyond the schema text.
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: 'List the product rules (Attribute Rules) available to a project.' It explicitly distinguishes itself from get_rule ('Use get_rule to fetch a rule's full rules[]') and from the broader rule lifecycle tools, so an agent can confidently separate list from create/update/delete/get operations.
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 explicit conditional guidance: scope selects which library, query is a coarse pre-filter, and project_id is optional for single-project customers but required otherwise, with the instruction to call list_projects in that case. It even warns about non-unique rule names and advises the agent to confirm matches — clear when-to-use and when-not-to-use direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_source_attributesARead-onlyInspect
List the source attributes the store provides that a feed column can be mapped from (the valid platform_code values for map_feed_attribute) — e.g. brand, ean, price, color, category_name. Returns {attributes:[{code, label, dataType}], returned, total}. Pass feed_id for full parity with the feed editor (adds the feed's taxonomy_* attributes); project_id alone omits taxonomy. Call this BEFORE map_feed_attribute to choose a valid platform_code. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects). Requires the project's data imported (dataStatus='ok', see get_import_status). Returns all attributes in one call (returned === total); not paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | No | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description is fully consistent with them. Beyond the annotations, the description discloses the exact return shape ({attributes:[{code, label, dataType}], returned, total}), the non-paginated single-call behavior (returned === total), the conditional taxonomy behavior depending on which id is passed, and the data-import prerequisite — all genuinely additive 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?
Seven sentences, each earning its place: purpose with examples, return shape, parameter differentiation, call ordering, optionality logic, prerequisite, and pagination. The most decision-critical fact (relationship to map_feed_attribute) is front-loaded in the first sentence, and there is no redundancy or 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 tool's complexity — conditional parameter behavior, a prerequisite dependency, a downstream caller relationship, no output schema, and 0% schema coverage — the description is remarkably complete. It covers return format, non-pagination, the neither-parameter case via the inference logic, and points to both get_import_status and list_projects for adjacent concerns. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden — and it delivers. It explains that feed_id adds the feed's taxonomy_* attributes for editor parity, that project_id alone omits taxonomy, and that project_id is optional but conditionally required (inferred for single-project customers, otherwise call list_projects). This semantic distinction between the two integer parameters is exactly what an agent needs to choose correctly.
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 ('List the source attributes the store provides') and immediately defines the tool's purpose: it enumerates the valid platform_code values for map_feed_attribute. Concrete examples (brand, ean, price, color, category_name) anchor the meaning, and the explicit link to map_feed_attribute distinguishes it from sibling attribute tools like get_ad_attributes or get_marketplace_attributes.
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 guidance is explicit and actionable: 'Call this BEFORE map_feed_attribute to choose a valid platform_code' states the ordering constraint directly. It also covers when to pass each parameter (feed_id for full parity with taxonomy_* attributes vs project_id alone), when project_id is inferred vs required, routes to list_projects as an alternative, and names the prerequisite get_import_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_store_categoriesARead-onlyInspect
List the project's store categories (the source side of category mapping and of a feed's category filter). Returns {categories:[{id, name, path}], returned, total, hasMore, nextOffset}; path is the full breadcrumb (e.g. "Electronics > Computers > Laptops"). Use the ids with set_category_mapping (map store categories to a marketplace category) or set_feed_filter (category_ids). project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects). Paginated: default limit 200, max 1000. When hasMore is true, call again with offset = nextOffset and keep paging until hasMore is false to see every category.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max categories to return in this page (default 200, max 1000). | |
| offset | No | Pagination cursor: pass the previous response's nextOffset to fetch the next page (default 0). | |
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructive, and the description adds further behavioral detail beyond that: it documents the exact return shape, pagination semantics via hasMore/nextOffset, the paging loop until hasMore is false, and the project_id inference rule. No annotation contradiction 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 dense but each sentence contributes: scope, return shape, downstream usage, project_id nuance, and pagination. Some limit/max information is repeated from the schema descriptions, but the repetition is minor and the text remains front-loaded 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 no output schema provided, the description fully covers the return object structure and the pagination protocol, which is essential for an agent to call this tool correctly. The optional parameter handling and downstream consumer tools are also explained, leaving no significant gap for 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?
limit and offset are already well documented in the schema, while project_id has no schema description; the description compensates by explaining when it is optional, inferred, or required and how to resolve it via list_projects. This adds meaning beyond the schema for the one under-documented parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and a clearly scoped resource ('the project's store categories'), then distinguishes that resource as the source side of category mapping and feed filters. This makes it easy to tell apart from related siblings like search_target_categories or list_unmapped_categories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: the categories are for use with set_category_mapping and set_feed_filter, and explains when project_id is needed versus inferred. It does not explicitly say when not to use this tool versus list_unmapped_categories or other category-related siblings, so it stops just short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_unmapped_categoriesARead-onlyInspect
List the project's store categories that have NO mapping rule yet for a taxonomy — the gaps to map. Address the taxonomy by feed_id (its taxonomy is used) OR explicitly by taxonomy_code (+ optional taxonomy_locale). Returns {categories:[{id, name, path}], returned, total, taxonomyCode, taxonomyLocale, hasMore, nextOffset}. For each gap, find a target with search_target_categories and map it with set_category_mapping. project_id is OPTIONAL (inferred for a single-project customer). Paginated: default limit 200, max 1000. When hasMore is true, call again with offset = nextOffset and keep paging until hasMore is false to see every gap.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max categories to return in this page (default 200, max 1000). | |
| offset | No | Pagination cursor: pass the previous response's nextOffset to fetch the next page (default 0). | |
| feed_id | No | ||
| project_id | No | ||
| taxonomy_code | No | Target taxonomy id (e.g. 'google'); alternative to feed_id for addressing the taxonomy. | |
| taxonomy_locale | No | Locale of the taxonomy tree, e.g. 'en_GB' — defaults to the taxonomy's own default when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so no safety surprise. The description goes beyond this by disclosing pagination behavior (hasMore/nextOffset, limits), the exact return shape, and the fact that project_id is inferred for single-project customers — behavioral context an agent cannot get from annotations 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?
Every sentence adds value: purpose, addressing, return shape, workflow, optionality, pagination. The most important scoping fact (it lists unmapped gaps) is front-loaded, and the pagination instructions are concretely actionable with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully documents the return object including field names and pagination controls. It also gives the agent everything needed to page through all results and proceed to the next action in the mapping workflow, making the tool self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the description meaningfully bridges the gap: it explains that feed_id and taxonomy_code are alternative ways to address the taxonomy, and that taxonomy_locale is optional and defaults to the taxonomy's own locale. It also clarifies offset semantics by tying it to nextOffset. Only a small residual gap remains for feed_id/project_id not being individually described, but the description covers their roles collectively.
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 precise verb and resource: "List the project's store categories that have NO mapping rule yet for a taxonomy — the gaps to map." This distinguishes it from list_store_categories and get_category_mapping by explicitly framing the output as unmapped gaps, and the sibling workflow ties it to search_target_categories and set_category_mapping.
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 an explicit workflow: "For each gap, find a target with search_target_categories and map it with set_category_mapping," which tells the agent exactly when and with what alternatives this tool fits. It also states both addressing modes (feed_id vs taxonomy_code) and the optional project_id inference, so the agent knows the valid invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
map_ad_attributeAIdempotentInspect
Set where ONE of an ad's output attributes gets its value — the write half of solving the attribute form. Target the output attribute by code (from get_ad_attributes). Set platform_code to a source attribute (from list_source_attributes) to map it, and/or constant for a fixed value; default_platform_code / default_constant are the fallback used when the primary source is empty. For an IDENTIFIER (sku, gtin/ean/barcode, mpn), first confirm the chosen source is actually populated across the catalog (get_project_profile eanFillRate; page preview_products) — mapping or requiring an identifier the products lack yields an empty, non-functional integration. rule_id attaches an Attribute Rule (from list_rules / create_rule) — the value is then computed by that rule; send rule_id:"" to detach it, and rule_enabled:false to attach it disabled. To re-enable an attached-but-disabled rule, send rule_enabled:true (with or without its rule_id, from get_ad_attributes). rule_enabled on its own applies to whatever rule is already attached; with none attached it is rejected as unknown_rule. Provide at least one field (send an empty string to clear a text field). rule_id together with platform_code/constant in the same call is contradictory and is rejected. Setting a source (platform_code/constant) on an attribute that currently has a rule DETACHES that rule (mutually exclusive; changed then includes rule_id). SAVE + REBUILD: the mapping is written to the integration and its built feed is rebuilt immediately, but reaching the ad platform still needs a re-export/submit — call repair_ad or run_ad_operation (submit_all) afterwards (auto-pilot ads re-export on their next sync). Map only attributes returned by get_ad_attributes; hidden ones are internal and cannot be mapped by regular users. Returns {integrationId, code, status, changed:[...], reason, rebuilt, overridesStepField}; status is 'updated' | 'no_changes' | When the attribute was already driven by a wizard step field, the response says so in overridesStepField: the rewrite rule beats that step for good, so a later change in the step has no effect. If the step already sets the right source, change it there instead of mapping here. 'rejected' (reason: unknown_attribute | unknown_source_attribute | value_not_allowed | unknown_rule). Category-specific attributes are mapped here too, the same way — but they only exist after a category is mapped, so run refresh_ad_category_attributes first (they then appear in get_ad_attributes). ad_id is from list_ads. project_id is OPTIONAL (inferred for a single-project customer).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| ad_id | Yes | ||
| rule_id | No | ||
| constant | No | ||
| project_id | No | ||
| rule_enabled | No | ||
| platform_code | No | ||
| default_constant | No | ||
| default_platform_code | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Though annotations already indicate a non-read-only, idempotent write operation, the description goes far beyond them. It discloses that the mapping writes to the integration and rebuilds the feed immediately but still requires a separate re-export to reach the ad platform. It details the exact status response values, the behavior of overridesStepField (including that the rewrite rule permanently overrides a wizard step), the mutual exclusivity of rule with platform_code/constant leading to detachment, and the rejection of rule_enabled alone with no attached rule. All this is invaluable for correct invocation and interpretation of results.
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 long but every sentence earns its place. It is front-loaded with the core purpose, then systematically covers parameters, rules, save/rebuild behavior, response statuses, and edge cases. There is no filler or repetition; the information density is high while remaining logically ordered. For a tool with 9 parameters and many interdependencies, this length is justified and could not be significantly shortened without losing critical guidance.
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 complexity and the absence of an output schema, the description is exceptionally complete. It explains the return object (including status values and overridesStepField), prerequisites, the distinction between hidden and mappable attributes, the special handling of identifiers with eanFillRate, and the follow-up actions required for re-export. The agent has everything needed to call this correctly without any additional lookups.
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 schema description coverage at 0%, the description fully carries the parameter documentation. It explains every parameter explicitly: code (from get_ad_attributes), platform_code (source attribute), constant (fixed value), default_platform_code / default_constant (fallbacks), rule_id (attachment/detachment), rule_enabled (enable/disable), project_id (optional, inferred for single-project), and ad_id (from list_ads). It also clarifies the interplay between rule_id and platform_code/constant and the condition for providing at least one field. This is complete and handles the 0% coverage gap perfectly.
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 precise statement of what the tool does: 'Set where ONE of an ad's output attributes gets its value — the write half of solving the attribute form.' It names the specific verb ('Set'), the target resource ('an ad's output attribute'), and immediately distinguishes it from the read side by referencing get_ad_attributes. This clearly separates it from sibling tools like get_ad_attributes and map_feed_attribute.
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 extensive usage guidance: it states when to use the tool (the 'write half' of attribute mapping) and when not to ('If the step already sets the right source, change it there instead of mapping here'). It also prescribes the required prerequisites (get_ad_attributes, list_source_attributes) and even tells the agent to run refresh_ad_category_attributes first for category-specific attributes. It explicitly names alternative actions like repair_ad or run_ad_operation for the re-export step that follows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
map_feed_attributeAIdempotentInspect
Set where one feed attribute's value comes from. Target the output attribute by code (from get_feed). Set platform_code to a source attribute (from list_source_attributes) to map it, and/or constant for a fixed value; default_platform_code / default_constant are the fallback used when the primary source is empty. rule_id attaches a product rule (Attribute Rule, from list_rules / create_rule) — the attribute's value is then computed by that rule; send rule_id:"" to detach it (revert to platform_code/constant), and rule_enabled:false to attach it disabled. To re-enable an attached-but-disabled rule, send rule_enabled:true (with or without its rule_id, from get_feed). rule_enabled on its own applies to whatever rule is already attached; with none attached it is rejected as unknown_rule. Provide at least one field (send an empty string to clear a text field). rule_id together with platform_code/constant in the same call is contradictory and is rejected. Setting a source (platform_code/constant) on an attribute that currently has a rule DETACHES that rule (source and rule are mutually exclusive; changed then includes rule_id). SAVE-ONLY: persists the mapping and bumps the revision but does NOT regenerate the feed — call export_feed afterwards for the change to reach the output. Map only attributes returned by get_feed. Returns {feedId, code, status, changed:[...], reason, revisionBefore, revisionAfter}; status is 'updated' | 'no_changes' | 'rejected' (reason: unknown_attribute | unknown_source_attribute | value_not_allowed | unknown_rule). (rule_id together with platform_code/constant is a request-level invalid_request/400, not a 'rejected' reason.) project_id is OPTIONAL (inferred for a single-project customer). Attributes flagged hidden in get_feed are internal plumbing and cannot be mapped by regular users; skip them. PRECEDENCE: a feed value is resolved rule → composed → platform_code → constant (valueSource 'rule' is a Rule). If an attribute's valueSource (from get_feed) is 'composed', its value comes from a composed rule, so a platform_code/constant you set here is silently overridden — change composed values in the Koongo UI (the feed's editUrl). A 'rule' value source (a Rule), however, is settable here via rule_id.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| feed_id | Yes | ||
| rule_id | No | ||
| constant | No | ||
| project_id | No | ||
| rule_enabled | No | ||
| platform_code | No | ||
| default_constant | No | ||
| default_platform_code | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and idempotentHint=true, but the description adds crucial behavioral detail: SAVE-ONLY semantics, the need to call export_feed, mutual exclusivity of rule_id with source fields, rule_enabled rejection with no attached rule, silent override for composed values, and return status/reason vocabulary. This far exceeds what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place for a 9-parameter tool. It is front-loaded with the core purpose, then organized around save-only behavior, error modes, precedence, and edge cases. The SAVE-ONLY and PRECEDENCE markers help an agent scan.
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 complex mutation with no output schema and no param coverage, this is exceptionally complete. It covers return shape, status and reason enums, request-level 400 distinction, optional project_id, hidden-attribute restrictions, precedence resolution, and rule detachment behavior. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden and succeeds. It explains code, platform_code, constant, default_platform_code/default_constant, rule_id, rule_enabled, project_id, and the clearing behavior with empty strings. Only feed_id is implicit, but context makes it obvious.
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: 'Set where one feed attribute's value comes from.' It immediately distinguishes the feed-attribute mapping scope from sibling tools like map_ad_attribute and map_marketplace_attribute by repeatedly grounding it in get_feed and feed-specific concepts.
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 explains when to map (attributes returned by get_feed), when not to map (hidden attributes, composed-value source attributes), and what to do after a successful save ('call export_feed afterwards'). It even directs composed values to the Koongo UI as an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
map_marketplace_attributeAIdempotentInspect
Set where ONE of a marketplace's output attributes gets its value — the write half of solving the attribute form. Target the output attribute by code (from get_marketplace_attributes). Set platform_code to a source attribute (from list_source_attributes) to map it, and/or constant for a fixed value; default_platform_code / default_constant are the fallback used when the primary source is empty. For an IDENTIFIER (sku, gtin/ean/barcode, mpn), first confirm the chosen source is actually populated across the catalog (get_project_profile eanFillRate; page preview_products) — mapping or requiring an identifier the products lack yields an empty, non-functional integration. rule_id attaches an Attribute Rule (from list_rules / create_rule) — the value is then computed by that rule; send rule_id:"" to detach it, and rule_enabled:false to attach it disabled. To re-enable an attached-but-disabled rule, send rule_enabled:true (with or without its rule_id, from get_marketplace_attributes). rule_enabled on its own applies to whatever rule is already attached; with none attached it is rejected as unknown_rule. Provide at least one field (send an empty string to clear a text field). rule_id together with platform_code/constant in the same call is contradictory and is rejected. Setting a source (platform_code/constant) on an attribute that currently has a rule DETACHES that rule (mutually exclusive; changed then includes rule_id). SAVE + REBUILD: the mapping is written to the integration and its built feed is rebuilt immediately, but reaching the sales channel still needs a re-export/submit — call repair_marketplace or run_marketplace_operation (submit_all) afterwards (auto-pilot marketplaces re-export on their next sync). Map only attributes returned by get_marketplace_attributes; hidden ones are internal and cannot be mapped by regular users. Returns {integrationId, code, status, changed:[...], reason, rebuilt, overridesStepField}; status is 'updated' | 'no_changes' | 'rejected' (reason: unknown_attribute When the attribute was already driven by a wizard step field, the response says so in overridesStepField: the rewrite rule beats that step for good, so a later change in the step has no effect. If the step already sets the right source, change it there instead of mapping here. | unknown_source_attribute | value_not_allowed | unknown_rule). Category-specific attributes are mapped here too, the same way — but they only exist after a category is mapped, so run refresh_marketplace_category_attributes first (they then appear in get_marketplace_attributes). marketplace_id is from list_marketplaces. project_id is OPTIONAL (inferred for a single-project customer).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| rule_id | No | ||
| constant | No | ||
| project_id | No | ||
| rule_enabled | No | ||
| platform_code | No | ||
| marketplace_id | Yes | ||
| default_constant | No | ||
| default_platform_code | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds meaningful behavioral context beyond these: it discloses that mapping triggers an immediate rebuild of the integrated feed, but a separate export/submit is required to reach the sales channel. It also details side effects like detaching a rule when a source is set, overriding wizard step fields (overridesStepField), and the rejection of contradictory rule_id+source combinations. This goes well beyond what annotations state.
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 long (over 500 words) but every sentence contributes operational detail. It is structured: purpose → parameters → conditions → workflow → return values. However, it is not front-loaded with the most critical usage rules; several important warnings (e.g., identifier population check, wizard-step override) appear mid-way. Given the tool's complexity (9 parameters, many edge cases), the length is justified, but it could be organized more efficiently with earlier emphasis on common pitfalls.
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 exceptionally complete for a tool with no output schema. It specifies the return object fields (integrationId, code, status, changed, reason, rebuilt, overridesStepField) and enumerates status values with rejection reasons. It covers all prerequites (code from get_marketplace_attributes, source from list_source_attributes, rules from list_rules/create_rule), mentions the optional project_id inference, and explains category-specific attribute handling. Nothing an agent needs to call this 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?
With schema description coverage at 0%, the description carries full burden for all 9 parameters. It explains each: code (target from get_marketplace_attributes), platform_code/constant (source/fixed value), default_platform_code/default_constant (fallbacks), rule_id (attach/detach rule), rule_enabled (enable/disable), project_id (optional, inferred for single-project), and marketplace_id (from list_marketplaces). It also clarifies nuanced behaviors like sending rule_id:"" to detach and the rejection of unknown_rule when rule_enabled is set without an attached rule. This is comprehensive and meaningful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Set where ONE of a marketplace's output attributes gets its value' and names it as the write half of solving the attribute form. It distinguishes from sibling tools (map_feed_attribute, map_ad_attribute) by explicitly targeting marketplace attributes and referencing get_marketplace_attributes as the source of valid codes. This is unambiguous and fully differentiates the tool.
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 extensive when-to-use guidance: it directs to confirm identifier source population via get_project_profile and preview_products, instructs to run refresh_marketplace_category_attributes before mapping category-specific attributes, and warns against mapping attributes already driven by a wizard step ('change it there instead of mapping here'). It also explains the post-save workflow (repair_marketplace or run_marketplace_operation submit_all) and notes that hidden attributes cannot be mapped. This is exemplary usage guidance covering prerequisites, exclusions, and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketplace_statusARead-onlyInspect
Get the live run status of one marketplace: readiness, connection, and product/order counts. Returns {integrationId, status, ready, lastStep, isReady, isConnected, isOverlimit, productsRefreshing, productsSubmitting, productStats:{listed, processing, errors, inactive, total}, orderStats:{total, synced, error, pending}, upgradeUrl}. productStats counts the listing on the channel; orderStats is present only when order sync is enabled. isOverlimit=true means the plan product limit is exceeded — upgradeUrl then points to the plan upgrade. productsRefreshing=true means an export / feed generation is running (the integration is 'updating'); productsSubmitting=true means items are being pushed to the channel. While EITHER is true the data is still changing — this is the signal to WAIT: after any export (finishing the wizard summary, repair_marketplace, a step transition that re-exports, or a submit) poll marketplace_status until BOTH productsRefreshing AND productsSubmitting are false, THEN read the results. The KOONGO DATA CHECK (get_marketplace_report's dataCheckErrors) and the productStats counts are only current once the refresh has finished — reading mid-refresh gives stale/empty data. categoryAttributeWarmup is the OTHER wait: on channels whose attributes depend on the mapped categories, that download runs in the background. While the block is present with pending:true the category-driven attributes are NOT in get_marketplace_attributes yet — poll this tool (retryAfterSeconds says how long to wait; state 'rescheduled' means a channel rate limit parked it until nextTryAt) until the block is absent or state is 'ready'. state 'failed' is terminal: call refresh_marketplace_category_attributes ONCE to start it again, do not poll on. marketplace_id is the id from list_marketplaces. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects). Use marketplace_status for run progress and get_marketplace for configuration/mapping. For the detailed error breakdown use get_marketplace_report.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| marketplace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds substantial behavioral context beyond that: mid-refresh data is stale, productsRefreshing/productsSubmitting signal changing data, categoryAttributeWarmup can delay attribute availability, and retryAfterSeconds/rescheduled/nextTryAt explain rate-limit behavior. The terminal failed state and 'do not poll on' instruction are also clearly disclosed.
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 long but every sentence earns its place: return fields, field semantics, wait conditions, failure handling, parameter provenance, and sibling routing are all packed densely and front-loaded with the core purpose. The polling instructions are elaborate because the tool's complexity demands them, not because of 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 no output schema and no parameter descriptions in the schema, this description carries the full burden and meets it: it documents nested response fields, conditional fields like orderStats, wait semantics for both productsRefreshing/productsSubmitting and categoryAttributeWarmup, terminal failure handling, and parameter provenance. Nothing an agent needs to invoke this 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 0%, so the description must compensate, and it does thoroughly. It explains marketplace_id originates from list_marketplaces and clarifies project_id's optionality, when it is required, and where to obtain it via list_projects. This is essential meaning the bare integer schema does not convey.
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 live run status of one marketplace' — and enumerates the readiness, connection, and count dimensions it returns. It also differentiates this tool from siblings by explicitly routing progress checks here versus configuration with get_marketplace and detailed errors with get_marketplace_report.
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 explicit when-to-use guidance: poll after exports, repair_marketplace, or submits until both productsRefreshing and productsSubmitting are false. It also names the alternative tools for other concerns ('Use marketplace_status for run progress and get_marketplace for configuration/mapping') and prescribes handoff to refresh_marketplace_category_attributes on terminal failure.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_adAIdempotentInspect
Pause an ad — synchronization to the channel stops until it is resumed with resume_ad. Ads are ads-based channels (advertising / price-comparison / classifieds), not marketplaces: they publish products to the ad platform and have no order sync. Returns {integrationId, action:'pause', status:'paused', kind:'ads'}. ad_id is from list_ads. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by explaining the actual behavioral effect (synchronization stops until resumed), clarifying that ads have no order sync, and disclosing the exact return shape. The idempotentHint is consistent with the described paused state.
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?
Every sentence earns its place: effect, domain clarification, return value, and parameter provenance are all packed into a compact, front-loaded description 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?
For a two-parameter tool with no output schema, the description covers behavior, domain context, return value, parameter sourcing, and conditional project handling. Nothing needed to call 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 0%, but the description fully compensates: it states that ad_id comes from list_ads and explains the optional/conditional behavior of project_id, including the single-project inference and when to call list_projects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Pause an ad') and precisely defines the effect: synchronization to the channel stops until resumed. It also differentiates ads-based channels from marketplaces, distinguishing this from sibling tools like pause_feed and pause_marketplace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when the tool applies ('ads are ads-based channels... not marketplaces'), names the corresponding resume action, and clarifies the conditional project_id requirement with a fallback instruction to call list_projects. This gives the agent clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_feedAIdempotentInspect
Pause (disable) a feed — it stops being exported/submitted on schedule. Returns {feedId, action:'pause', status:'disabled', feedStatus, enabled:false}. feed_id from list_feeds / create_feed; project_id OPTIONAL.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint, readOnlyHint=false, and destructiveHint=false. The description adds the real side effect (scheduled exports/submissions stop) and the exact return shape with status:'disabled' and enabled:false. This gives the agent a clear model of what happens when the tool is invoked, with no hidden surprises and 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?
The description is two compact sentences with the main effect front-loaded. The return shape and parameter sourcing are packed into the second sentence without filler or redundant restatement of the tool name.
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 state-changing tool, the description covers the effect, the response shape, and the source of the required parameter, while annotations cover safety and idempotence. It is slightly incomplete because project_id's role is undefined and there is no pointer to resume_feed for reversing the pause, but these are not blocking for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds useful provenance for feed_id (from list_feeds / create_feed), but project_id is only described as 'OPTIONAL', which merely restates the schema's required list. The purpose of project_id and when to include it are not explained, so the description only partially compensates for the missing 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 and resource: 'Pause (disable) a feed'. It clearly states the behavioral consequence — it stops being exported/submitted on schedule — which distinguishes this from resume_feed, submit_feed, delete_feed, and restore_feed. This is unambiguous and selection-relevant.
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 via its defined effect and tells the agent where feed_id comes from (list_feeds / create_feed). However, it never names alternatives such as resume_feed or delete_feed, and it gives no explicit when-not-to-use guidance. Usage is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_marketplaceAIdempotentInspect
Pause a marketplace — synchronization to the channel stops until it is resumed with resume_marketplace. Returns {integrationId, action:'pause', status:'paused', kind}. marketplace_id is from list_marketplaces. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| marketplace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the description only needs to add what pausing actually does. It provides that: synchronization stops until resumed, and the operation returns {integrationId, action:'pause', status:'paused', kind}. No statement contradicts 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?
All four sentences are information-bearing: effect, return shape, marketplace_id source, and project_id rule. The most important behavior is front-loaded before the return and parameter 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?
The tool is simple, the annotations cover safety and idempotence, and the description fills in the missing return shape and parameter provenance. Given no output schema, including the exact return object is valuable; nothing needed for correct invocation appears to be 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 0% schema description coverage, the description carries the full burden and largely succeeds: marketplace_id is sourced from list_marketplaces, and project_id is explained as optional when inferred, otherwise requiring list_projects. It stops short of describing validation edge cases, but the semantics of both parameters are clear.
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 the precise action ('Pause a marketplace') and the concrete behavioral effect ('synchronization to the channel stops'), while naming the inverse operation resume_marketplace. This clearly distinguishes it from siblings like pause_ad and pause_feed.
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 says pausing persists 'until it is resumed with resume_marketplace', establishing when that related alternative is needed. It also gives acquisition guidance: marketplace_id is from list_marketplaces, and project_id handling depends on whether the customer is single-project, with list_projects as the fallback. It does not explicitly list exclusions for pause_ad/pause_feed, but the context is otherwise strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_productsARead-onlyInspect
Get a page of the project's imported products with their real source-attribute values, so you can inspect the data and advise on feed mapping (e.g. see that brand holds "Nike" or color holds hex codes). Returns {products:[{id, type, attributes:{:}}], returned, requested, total, offset, hasMore, nextOffset}. attributes keys are source attribute codes (as in list_source_attributes); only catalogued, non-sensitive attributes are included — cost/margin and internal fields are never returned, and empty values are omitted. sample_size is the page window (default 5, max 100); page through the whole catalog with offset — when hasMore is true, re-call with offset=nextOffset until hasMore is false. project_id is OPTIONAL (inferred for a single-project customer). Data must be imported first (see get_import_status). This tool returns real product data values only after you set acknowledge_sensitive:true. The first call (flag absent/false) returns {sensitiveGate:{confirmationRequired:true, itemCount, fields, kind}} with an EMPTY products array — present that gate to the USER, get their approval, then re-call with acknowledge_sensitive:true to receive the actual values. To review the full generated feed output for every product (not just source attributes), use export_feed instead of paging this preview — that is the intended bulk path. Next: pick a template (list_feed_templates) and map attributes (map_feed_attribute).
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Number of products to skip (paging); pass the response's nextOffset to get the next page. | |
| project_id | No | ||
| sample_size | No | Page window: how many products to return per call (default 5, max 100). | |
| acknowledge_sensitive | No | Set true only AFTER the user approves seeing real data. When absent/false the tool returns a sensitiveGate with an empty products array; with true it returns the actual attribute values. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and non-destructive, and the description adds substantial behavioral detail: the sensitive-data gate and acknowledge_sensitive flow, exclusion of cost/margin/internal fields, omission of empty values, and the paging contract via hasMore/nextOffset. No contradiction 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 dense and front-loaded with its main purpose, and every sentence adds operational value. However, it is a single long paragraph that intermixes response shape, security gating, paging, prerequisites, and sibling routing; tighter structuring would improve scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of explaining return values, and it does so completely: the products array shape, sensitiveGate behavior, paging loop, excluded fields, prerequisite import status, and routing to export_feed and mapping tools. An agent can invoke this tool correctly without needing external 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?
Although the schema already documents 3 of 4 parameters, the description goes beyond it by explaining project_id optionality/inference, sample_size default and max, offset/nextOffset paging behavior, and the exact semantics of acknowledge_sensitive with the sensitiveGate response flow. This fully compensates for the undocumented project_id parameter.
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, resource, and purpose: 'Get a page of the project's imported products with their real source-attribute values' for inspecting data and advising on feed mapping. It also differentiates itself from export_feed by noting that export_feed is the intended bulk path for reviewing full generated feed output.
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 explicitly says when to use this tool vs alternatives: use this for inspecting source attributes, use export_feed for full generated feed output. It also states prerequisites and next steps: data must be imported first (see get_import_status), then pick a template and map attributes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_ad_category_attributesAInspect
Fetch the channel's CATEGORY attributes for the ad's currently mapped categories and refresh its rewrite rules — the same 'Update Category Attributes' action the wizard runs. Some ad channels expose extra, category-specific required attributes that only appear AFTER a category is mapped; run this after configuring the category-mapping step so those attributes show up in get_ad_attributes. Calls the channel (a live read) and rebuilds the integration. After this the category attributes appear in get_ad_attributes and you map them with map_ad_attribute like any other attribute. Returns {integrationId, action:'refresh_category_attributes', status:'updated', kind, editUrl, message}. Re-export/submit afterwards to reach the channel. ad_id is from list_ads. project_id is OPTIONAL (project_id_required otherwise — then call list_projects). ON CHANNELS THAT PRE-CACHE, THIS DOES NOT CALL THE CHANNEL SYNCHRONOUSLY: if the attributes for the current categories are not downloaded yet it returns status:'warming' with a categoryAttributeWarmup block and does the work in the background — that is a SUCCESS, not an error. Then poll ad_status until the block is absent or state is 'ready'; the attributes are pulled in automatically, so you do NOT have to call this again. Only call it a second time if ad_status reports state 'failed'.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, it discloses that this is a live channel call that rebuilds the integration, describes the non-synchronous pre-cache behavior where status 'warming' is a success, and explains background fetching and polling expectations. This directly informs the agent's decision-making and error interpretation.
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 definition is long but front-loads the core purpose and then organizes the operational details (inputs, return shape, warm-up flow, retry policy) in a logical, dense structure. Every sentence adds non-obvious information an agent would need, especially around the asynchronous pre-cache case.
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 no output schema, it provides the return object shape, success/failure signals, the polling follow-up via ad_status, and the relationship to get_ad_attributes and map_ad_attribute. This is a complete operational picture for selecting and invoking the 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?
With 0% schema coverage, the description compensates by explaining that ad_id comes from list_ads and that project_id is optional unless project_id_required is set, in which case list_projects should be used. It doesn't elaborate further on parameter semantics, but gives enough provenance for correct invocation.
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 opening sentence names a concrete action ('Fetch the channel's CATEGORY attributes... and refresh its rewrite rules') tied to the ad's currently mapped categories, and relates it to the 'Update Category Attributes' wizard action. This is specific enough to distinguish it from sibling tools like refresh_marketplace_category_attributes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states exactly when to run it ('after configuring the category-mapping step'), what to do afterward ('Re-export/submit afterwards'), how to obtain ad_id and project_id, and when NOT to call it again (warm-up success vs. failed state). It also routes to list_projects and ad_status explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_marketplace_category_attributesAInspect
Fetch the channel's CATEGORY attributes for the marketplace's currently mapped categories and refresh its rewrite rules — the same 'Update Category Attributes' action the wizard runs. Many channels expose extra, category-specific required attributes (e.g. Amazon per product type) that only appear AFTER a category is mapped; run this after configuring the category-mapping step so those attributes show up in get_marketplace_attributes. Calls the channel (a live read) and rebuilds the integration. After this the category attributes appear in get_marketplace_attributes and you map them with map_marketplace_attribute like any other attribute. Returns {integrationId, action:'refresh_category_attributes', status:'updated', kind, editUrl, message}. Re-export/submit afterwards to reach the channel. marketplace_id is from list_marketplaces. project_id is OPTIONAL (project_id_required otherwise — then call list_projects). ON CHANNELS THAT PRE-CACHE, THIS DOES NOT CALL THE CHANNEL SYNCHRONOUSLY: if the attributes for the current categories are not downloaded yet it returns status:'warming' with a categoryAttributeWarmup block and does the work in the background — that is a SUCCESS, not an error. Then poll marketplace_status until the block is absent or state is 'ready'; the attributes are pulled in automatically, so you do NOT have to call this again. Only call it a second time if marketplace_status reports state 'failed'.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| marketplace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses that this calls the channel, rebuilds the integration, may return status 'warming' on pre-cache channels, performs work in the background, and requires polling marketplace_status. It also clarifies that 'warming' is a success, not an error, and that re-export/submit is needed afterward. This is rich behavioral context well beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded with the core purpose, then the when-to-run guidance, then the asynchronous warning. Every sentence adds necessary operational detail, though the ALL-CAPS warning section adds some visual noise and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description includes the return shape, explains the async warming flow, identifies when to poll, and gives post-conditions like re-export/submit. It also covers parameter sourcing and the second-call condition. For a tool with this complexity, the description is remarkably 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 0%, so the description carries full weight for parameters. It explains marketplace_id comes from list_marketplaces and that project_id is optional unless project_id_required, in which case list_projects should be called. This provides actionable semantics beyond the raw integer types 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 verb and resource: fetching the channel's category attributes and refreshing rewrite rules for currently mapped marketplace categories. It clearly distinguishes this from related tools by explaining that it surfaces category-specific attributes after category mapping, which appear in get_marketplace_attributes.
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 explicit timing guidance: run after configuring the category-mapping step, and call again only if marketplace_status reports state 'failed'. It also instructs polling marketplace_status for 'warming'. It does not explicitly name refresh_ad_category_attributes as the alternative for ad channels, but the marketplace-specific naming and context make the usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repair_adAInspect
Repair an ad — rebuild its internal profiles, clear its cache and re-export. Ads are ads-based channels (advertising / price-comparison / classifieds), not marketplaces: they publish products to the ad platform and have no order sync. Use this when an ad is in a broken or inconsistent state. Returns {integrationId, action:'repair', status:'repaired', kind:'ads', message}. ad_id is from list_ads. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, so the agent knows it mutates. The description adds specifics of what the repair does (rebuild profiles, clear cache, re-export) and the exact return shape. It does not discuss potential side-effects like reversibility or failure modes, but the destructiveHint=false annotation mitigates that. Overall, it adds value beyond 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?
The description is a single compact paragraph, front-loaded with the action and then the use-case, output format, and parameter notes. Every sentence earns its place; no filler. It is well-structured and easy to scan.
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 no output schema, the description explicitly states the return value ({integrationId, action:'repair', status:'repaired', kind:'ads', message}). Both parameters are fully documented, the use case is clear, and the ad-vs-marketplace distinction is covered. Nothing essential is missing for an agent to correctly invoke this 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 0%, so the description must compensate. It fully explains ad_id ('from list_ads') and project_id (optional vs. required, with inference rule and fallback to list_projects). This is far more than the schema provides, giving the agent precise parameter semantics.
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 ('repair') and resource ('an ad'), then explains what the repair entails: rebuild profiles, clear cache, and re-export. It explicitly differentiates ads from marketplaces, which is important given sibling tools like repair_marketplace. The use case ('broken or inconsistent state') further clarifies 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?
It explicitly says 'Use this when an ad is in a broken or inconsistent state,' which gives a clear trigger. It also contrasts vs. marketplaces (not order sync) and provides conditions for project_id: optional for single-project customers, required otherwise (then call list_projects). This is actionable guidance beyond any schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repair_marketplaceAInspect
Repair a marketplace — rebuild its internal profiles, clear its cache and re-export. Use this when a marketplace is in a broken or inconsistent state. Returns {integrationId, action:'repair', status:'repaired', kind, message}. marketplace_id is from list_marketplaces. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| marketplace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false and destructiveHint=false. The description adds meaningful behavioral context by disclosing what the repair involves (rebuild profiles, clear cache, re-export) and by documenting the synchronous return payload. It does not discuss failure modes or side effects beyond the re-export, but it is reasonably transparent.
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 dense sentences with no filler: action + what it does, when to use, return shape, then parameter guidance. The most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only 2 parameters, no enums, and no output schema, the description covers return values, parameter sources, conditional requirements, and invocation trigger. Nothing critical is missing for an agent to select and call the 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?
Schema coverage is 0%, yet the description compensates fully: it explains marketplace_id comes from list_marketplaces and clarifies exactly when project_id is optional vs required, including pointing to list_projects as the way to obtain it. This is rich semantic context beyond the raw schema types.
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 ('Repair') and resource ('marketplace'), then names concrete actions: rebuild internal profiles, clear cache, re-export. This distinguishes it from sibling tools like repair_ad and other marketplace operations without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use this tool when a marketplace is in a broken or inconsistent state. It does not provide when-not-to-use guidance or compare with repair_ad, but the stated trigger condition gives an agent clear direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_mcp_issueAInspect
Report a problem, gap, or workaround with THIS MCP toolset back to the Koongo team so it can be fixed or extended. Use it when: a tool returned an error you could not resolve after a legitimate attempt (ESPECIALLY a 500 / unexpected server error or an unreachable-facade error), a capability you needed is missing, a tool's result was wrong or confusing versus what its docs implied, or you and the user AGREED on a manual workaround because MCP could not do something — or whenever the user says 'report this'. This is BACKGROUND product feedback, not a user-facing action and not something the user's task depends on: briefly ask the user's OK first ('want me to report this?'), file ONE report per scenario, then continue — do NOT loop or re-file the same thing. Provide category + a short title + a detailed description (what the user wanted, what actually happened, and any agreement/workaround). Strongly include steps[] — the CALL STACK: the sequence of tools you called with their key arguments and each one's outcome/error — plus the specific error, and expected vs actual where relevant, so an engineer can reproduce from the report alone. NEVER put credentials, tokens, API keys or personal data in a report (the server redacts known-sensitive keys defensively, but you must not include them). Returns {status:'recorded', reportId, ts}.
| Name | Required | Description | Default |
|---|---|---|---|
| error | No | The specific error message/payload, if any. | |
| steps | No | The call stack: the ordered tools you called with their key arguments and each one's outcome/error that led to this report. | |
| title | Yes | A short one-line summary of the issue. | |
| actual | No | What actually happened. | |
| detail | Yes | Full description: what the user wanted, what actually happened, and any workaround/agreement made with the user. | |
| context | No | Optional ids that help reproduce (project/marketplace/ad/feed/rule/attribute). | |
| category | Yes | What kind of report: error | missing_capability | wrong_result | confusing | workaround | suggestion. | |
| expected | No | What you expected to happen. | |
| severity | No | How badly it blocks the user: low | medium | high. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false and destructiveHint=false; the description adds substantial behavioral context beyond that: it is background product feedback, requires asking the user's OK first, must not interrupt the main task, should avoid duplicate reports, must never include credentials, and returns {status:'recorded', reportId, ts}. This gives the agent a clear behavioral contract far 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 long but dense and purposeful; nearly every clause earns its place by specifying a trigger condition, behavioral constraint, or composition guideline. It is front-loaded with the primary purpose. It loses a point for some redundancy (e.g., 'what the user wanted' appears in both the detail guidance and the steps guidance) and for being written as one sprawling paragraph rather than structured bullets.
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 complex meta-tool with 9 parameters, nested objects, security implications, and no output schema, the description is complete: it covers triggers, prerequisites, body-content guidance, the steps[] structure, security constraints, and even the return shape. An agent has everything it needs to decide when to invoke the tool and how to populate it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful guidance on top: it explains that steps[] should be the call stack of tools called with key arguments and outcomes, that detail should contain what the user wanted/what happened/workaround, and that expected vs actual should be included where relevant. This gives the agent editorial guidance beyond the schema's per-field labels.
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: 'Report a problem, gap, or workaround with THIS MCP toolset back to the Koongo team so it can be fixed or extended.' This clearly distinguishes it from sibling data-report tools like get_ad_item_report or get_marketplace_report by framing it as product feedback about the toolset itself, not a domain data report.
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 explicit when-to-use conditions: unresolvable errors, 500/unreachable-facade errors, missing capabilities, wrong or confusing results, agreed workarounds, and user request to 'report this'. It also gives when-not-to-use guidance: this is background feedback, not user-facing, ask OK first, file one report per scenario, and do not loop or re-file.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_feedAIdempotentInspect
Restore a soft-deleted feed and re-export it. Use this when a feed was deleted (delete_feed) — get_feed (and other feed actions) report a deleted feed as error 'feed_deleted', which is recoverable; list_feeds simply omits it while deleted — or when the user asks to bring a feed back. The feed id stays valid after deletion; this reverses it. Returns {feedId, action:'restore', status:'restored'}. feed_id from the feed_deleted error or an earlier list_feeds; project_id OPTIONAL.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals meaningful behavior beyond the annotations: the feed id stays valid after deletion, the operation reverses the deletion, and the tool re-exports the feed. It also provides the exact return payload, which is important because there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and every sentence earns its place: routing guidance, recovery semantics, return shape, and parameter sourcing are all packed in without fluff. The dense punctuation is acceptable because the content is high-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?
For a simple two-parameter tool with no output schema, the description provides the operation, recovery semantics, return value, and parameter sourcing. The only material gap is the missing semantic explanation for the optional project_id parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It tells the agent where to get feed_id (from the feed_deleted error or an earlier list_feeds) and marks project_id as optional, but it never explains what project_id means or when it should be supplied, leaving a partial gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Restore a soft-deleted feed and re-export it.' It clearly differentiates the tool from siblings like delete_feed by explaining the soft-deletion lifecycle and how other feed actions treat a deleted feed.
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 explicitly states when to use this tool: when a feed was deleted, when get_feed returns the recoverable 'feed_deleted' error, when list_feeds omits the feed, or when the user asks to bring a feed back. This gives an agent concrete routing signals and explains the behavior of related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_adAIdempotentInspect
Resume a paused ad — synchronization to the channel starts again. Ads are ads-based channels (advertising / price-comparison / classifieds), not marketplaces: they publish products to the ad platform and have no order sync. Returns {integrationId, action:'resume', status:'resumed', kind:'ads'}. ad_id is from list_ads. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool is not read-only and is idempotent; the description adds that synchronization restarts, that ads have no order sync, and the exact response shape. This goes beyond annotations, though it could say more about side effects; there is no contradiction.
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 dense but every sentence adds value: action, scope and exclusions, return payload, and parameter sourcing. The phrase 'Ads are ads-based channels' is slightly tautological, but overall the structure is efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description includes the return payload. With a sparse schema, it covers both parameters and even handles the project_id edge case. With sibling tools like resume_marketplace and resume_feed, it clarifies the ads-specific context, making selection and invocation unambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains that ad_id comes from list_ads and clarifies project_id's optionality with the single-project inference rule and the project_id_required case referring to list_projects. Both parameters are meaningfully documented.
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?
Opens with a specific action and resource ('Resume a paused ad') and immediately distinguishes ads from marketplaces by defining what an ad is and what it does not do ('no order sync'). This makes it easy to tell resume_ad apart from sibling tools like resume_marketplace and pause_ad.
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?
States the condition for use (ad is paused, synchronization should restart) and explicitly narrows applicability to ads-based channels, not marketplaces. It also gives concrete routing guidance for the optional project_id: inferred for a single-project customer, otherwise call list_projects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_feedAIdempotentInspect
Resume (re-enable) a paused feed. Returns {feedId, action:'resume', status:'enabled', feedStatus, enabled:true}. feed_id from list_feeds / create_feed; project_id OPTIONAL.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false. The description adds useful context beyond annotations by specifying the exact return object, the action/status values, and the enabled flag. This is meaningful extra behavioral disclosure without contradiction.
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 wasted words. It front-loads the core action, then provides response shape and parameter guidance in a compact, scannable format.
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 only 2 parameters, no output schema, and annotations covering idempotency/safety, the description is quite complete. It covers the action, return payload, and identifier provenance. The only notable gap is the missing semantic meaning of project_id, but this is optional and 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?
Schema description coverage is 0%, so the description must compensate. It does clarify that feed_id comes from list_feeds/create_feed and that project_id is OPTIONAL, but it does not explain the purpose or effect of project_id. This is partial compensation but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Resume'), resource ('feed'), and semantics ('re-enable a paused feed'), making it distinct from siblings like pause_feed or restore_feed. It also fully specifies the expected effect and return shape.
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 when to use the tool — when a feed is paused and needs to be re-enabled. It also gives practical guidance on where feed_id comes from (list_feeds / create_feed), though it does not explicitly rule out alternatives like restore_feed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_marketplaceAIdempotentInspect
Resume a paused marketplace — synchronization to the channel starts again. Returns {integrationId, action:'resume', status:'resumed', kind}. marketplace_id is from list_marketplaces. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| marketplace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly=false, idempotentHint=true, destructiveHint=false), the description adds the actual return shape and the conditional project_id behavior. It explains what resuming does functionally. It does not cover edge cases like already-resumed marketplaces, but the idempotent hint partially covers that.
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 wasted words. The purpose is front-loaded, the return value is given compactly, and the parameter guidance is packed into the final sentence without 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?
Even without an output schema, the description provides the return shape, parameter provenance, and the conditional project_id logic. For a simple resume operation with idempotent and non-destructive annotations, nothing essential is missing 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 description coverage is 0%, so the description carries the full burden, and it succeeds. It tells the agent that marketplace_id comes from list_marketplaces, and explains exactly when project_id is required versus inferred, including the fallback call to list_projects.
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 ('Resume a paused marketplace') and states the concrete outcome: 'synchronization to the channel starts again.' It is clearly distinguished from sibling tools like resume_ad and pause_marketplace by naming the marketplace resource.
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 context is clear: use it for a paused marketplace that needs synchronization resumed. It also gives workflow guidance for the optional project_id ('inferred for a single-project customer; project_id_required otherwise — then call list_projects'). However, it does not explicitly contrast this with alternative resume tools or state 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.
run_ad_item_actionADestructiveInspect
Run a listing action on one, several, or all items of an ad integration. DESTRUCTIVE: these actions PUSH TO THE LIVE AD CHANNEL — they submit, relist, remove or otherwise change what appears on the channel. Confirm with the user first, then call with confirm:true. Without confirm:true the call returns error 'confirm_required' (HTTP 400) and nothing runs. action is one of: 'submit' (send items to the channel — works even in MANUAL product mode: it forces the targeted item(s) through, so submitting a single item_id is the safe way to test-publish one item and watch the result before doing the rest), 'clean_resubmit' (clear the channel listing and submit again), 'clean' (clear the channel listing), 'remove' (remove/end the listing on the channel), 'force_insert' (force a fresh insert), 'lock' / 'unlock' (lock/unlock items from automatic changes), 'pause' (pause the items), 'repricer_enable' (where supported). An action the channel does not support returns status:'not_allowed'. Target items with item_ids (an array of itemId from list_ad_items) OR all_items:true for every item; provide exactly one. Returns {integrationId, action, status ('queued'|'done'|'not_allowed'), itemCount, async, message}. ad_id is the integrationId from list_ads. project_id is OPTIONAL (project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | integrationId of the ad (from list_ads). | |
| action | Yes | The listing action to run against the live ad channel. | |
| confirm | No | ||
| item_ids | No | itemId values (from list_ad_items) to act on. Use this OR all_items. | |
| all_items | No | Apply to every item of the integration. Use this OR item_ids. | |
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It goes well beyond the destructiveHint annotation by explaining the real-world impact ('PUSH TO THE LIVE AD CHANNEL'), the mandatory confirm behavior and the confirm_required HTTP 400 error, the not_allowed response for unsupported actions, and the return shape. This gives the agent an accurate model of consequences and failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and long but every sentence carries operational value — confirmation handling, action semantics, targeting rules, and response fields. It is front-loaded with the destructive warning and confirm requirement. Minor deduction for a wall-of-text structure that could benefit from bullets.
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 having no output schema, the description states the exact return fields ({integrationId, action, status, itemCount, async, message}), covers required and optional parameters, specifies error behavior, and explains how to resolve IDs from sibling tools. For a destructive, multi-action tool with 6 parameters and 9 enums, this is remarkably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 67%, but the description compensates fully: it explains confirm's necessity, project_id's optionality and when it becomes required, the item_ids/all_items exclusivity, and the semantic differences among action enum values, including the special safe-test behavior of submit. This adds meaning well beyond the raw parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Run a listing action on ... items of an ad integration') and enumerates all valid actions with concrete effects (submit, clean_resubmit, remove, etc.). It clearly distinguishes this from sibling tools by anchoring it to 'ad integration' items and referencing list_ad_items/list_ads for IDs.
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 strong usage guidance: confirm must be set to true, exactly one of item_ids or all_items must be provided, and submit in MANUAL mode is suggested as the safe way to test-publish one item. However, it does not explicitly state when to prefer this tool over closely related siblings like run_ad_operation or run_marketplace_item_action, leaving some differentiation to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_ad_operationADestructiveInspect
Run a WHOLE-INTEGRATION control-panel operation on an ad integration (acts on every item, not a chosen subset — for specific items use run_ad_item_action). operation is one of: 'submit_all' (submit every item to the channel — ONLY works in manual product mode; in Auto-Pilot mode submission is automatic and this returns status:'not_allowed'), 'clean_resubmit_all' (clear every item record and re-submit — allowed once every ~5 minutes; refused if the connection is down), 'pre_pair' (attempt to pre-pair existing channel items with your Koongo items — non-destructive), 'remove_all' (remove every item from the channel and lock them — PERMANENT). DESTRUCTIVE + pushes to the LIVE ad channel: submit_all / clean_resubmit_all / remove_all require confirm:true after you confirm with the user (pre_pair does not). Returns {integrationId, action, status ('queued'|'done'|'not_allowed'), itemCount, async, message}. ad_id is the integrationId from list_ads. project_id is OPTIONAL (project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | integrationId of the ad (from list_ads). | |
| confirm | No | ||
| operation | Yes | The whole-integration operation to run. | |
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only carry destructiveHint=true, readOnlyHint=false, and openWorldHint=true; the description adds substantial behavioral context well beyond these. It discloses that operations push to the live ad channel, that remove_all is permanent, that clean_resubmit_all is refused when the connection is down, and that pre_pair is non-destructive. It also explains the returned status values such as 'not_allowed' under Auto-Pilot mode.
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 dense but every sentence adds operational value: scope, alternatives, per-operation behavior, hazards, confirmation requirements, return shape, and prerequisite context. The most critical scoping constraint is front-loaded before the operation details and no information is redundant with the annotations or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, destructive whole-integration operation with 4 parameters and no output schema, the description covers all essential decision points: when to use it, what each operation does, hazards, confirmation rules, mode-specific behavior, return fields, and how to resolve the optional project_id. An agent has enough context to select and invoke the tool correctly without additional lookups.
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 only documents ad_id and operation, leaving confirm and project_id at 50% coverage. The description compensates fully: confirm is tied to destructive operations requiring user confirmation, project_id is optional unless the project requires it, and every operation enum value is semantically explained. This exceeds what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly identifies a specific verb ('run'), a resource ('ad integration'), and a defining scope: it acts on the whole integration, not a subset. It explicitly contrasts itself with run_ad_item_action, so an agent can distinguish sibling tools without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States exactly when to use this tool versus run_ad_item_action, and gives conditional usage guidance: submit_all only works in manual product mode, clean_resubmit_all has a ~5 minute cooldown, and destructive operations require confirm:true after user confirmation. It also tells the agent to call list_projects when project_id is required, routing to the right prerequisite tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_importAInspect
(Re)run an ENRICHMENT import to materialize previously-written source values onto products, WITHOUT re-sending them. Use it to retry after an import failed or is stuck, or to apply values you wrote with apply:false (set_api_source / set_ai_source). source picks which import: "api_source" (the set_api_source values, land as api_source.) or "additional_source" (the set_ai_source CSV values, land as custom_). This does NOT change the stored values — it only dispatches the same import the apply:true flag fires. Returns {status:'dispatched'|'skipped', type}; 'skipped' means the project's store data is not connected (apiStatus not GRANTED) so nothing ran. The import is asynchronous — after dispatch, poll get_import_status until the newest run of this type in recentRuns has running:false and status 'ok', then the attribute is available in list_source_attributes. project_id is OPTIONAL (inferred for a single-project customer). Requires the additional-sources addon: without it the call is refused with error 'addon_required' (HTTP 403) + addonCode + upsellUrl — show the user the upsellUrl so they can unlock it, and do not retry.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses asynchronous behavior with a specific polling workflow, the exact return shape {status:'dispatched'|'skipped', type}, the skipped condition (apiStatus not GRANTED), and the addon_required 403 error with addonCode and upsellUrl. It also clarifies that it does not alter stored values, giving a complete picture of side effects and failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries operational value — purpose, conditions, parameter mapping, non-effects, return values, async polling, and error handling are all packed in without redundancy. The core purpose is front-loaded in the first sentence, and the supporting details are logically ordered.
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 no output schema, the description covers the return shape, skipped semantics, asynchronous polling procedure (get_import_status, recentRuns, running:false, status 'ok'), and the required addon with a user-facing upsellUrl. It leaves no critical call-time decision unexplained.
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 0% schema description coverage, the description fully compensates by explaining the 'source' enum values ('api_source' lands as api_source.<code>, 'additional_source' lands as custom_<code>) and the semantics of project_id (optional, inferred for single-project customers). This goes well beyond the bare enum and type 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 opens with a specific verb-resource pair — '(Re)run an ENRICHMENT import' — and immediately clarifies the core action: materialize previously-written source values onto products without re-sending them. This distinguishes it from sibling tools like set_api_source/set_ai_source (which write values) and get_import_status (which reads 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?
It explicitly states when to use: 'retry after an import failed or is stuck, or to apply values you wrote with apply:false', and identifies the related tools by name. It also sets a clear exclusion — 'This does NOT change the stored values' — and describes the optional project_id inference, so an agent knows exactly when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_marketplace_item_actionADestructiveInspect
Run a listing action on one, several, or all items of a marketplace. DESTRUCTIVE: these actions PUSH TO THE LIVE MARKETPLACE — they submit, relist, remove or otherwise change what buyers see on the channel. Confirm with the user first, then call with confirm:true. Without confirm:true the call returns error 'confirm_required' (HTTP 400) and nothing runs. action is one of: 'submit' (send items to the channel — works even in MANUAL product mode: it forces the targeted item(s) through, so submitting a single item_id is the safe way to test-publish one item and watch the result before doing the rest), 'clean_resubmit' (clear the channel listing and submit again), 'clean' (clear the channel listing), 'remove' (remove/end the listing on the channel), 'force_insert' (force a fresh insert), 'lock' / 'unlock' (lock/unlock items from automatic changes), 'pause' (pause the items), 'repricer_enable' (enable the repricer for the items). Target items with item_ids (an array of itemId from list_marketplace_items) OR all_items:true for every item; provide exactly one. Returns {integrationId, action, status, itemCount, async, message}. status is 'queued' (async — running in the background), 'done' (applied synchronously) or 'not_allowed' (the action is not available for this marketplace; message explains). marketplace_id is from list_marketplaces. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | The listing action to run against the live channel. | |
| confirm | No | ||
| item_ids | No | itemId values (from list_marketplace_items) to act on. Use this OR all_items. | |
| all_items | No | Apply to every item of the marketplace. Use this OR item_ids. | |
| project_id | No | ||
| marketplace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the destructiveHint annotation by explaining that actions push to the LIVE marketplace and change what buyers see. It discloses the confirmation requirement, the HTTP 400 'confirm_required' failure mode, possible statuses (queued, done, not_allowed), and the async vs sync behavior. This fully prepares the agent for side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense and well-structured, with the most important warnings front-loaded ('DESTRUCTIVE... Confirm with the user first'). Each action and parameter is explained with enough context, and no sentence is 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 there is no output schema, the description supplies the return shape, status values, and async semantics. It also covers required and optional parameters, the confirmation gate, and edge cases like 'not_allowed' and MANUAL product mode. Nothing an agent needs to invoke this 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?
Although schema description coverage is only 50%, the description compensates thoroughly: it explains the confirm flag, the exclusive relationship between item_ids and all_items, the origin and optionality of project_id, the meaning of marketplace_id, and the effect of every action enum value. This adds substantial meaning beyond the raw 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 begins with a specific verb and resource: 'Run a listing action on one, several, or all items of a marketplace.' It lists the exact action values and clearly distinguishes this tool from sibling tools by focusing on item-level listing actions rather than marketplace operations or ad item actions.
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 explicitly instructs the agent to confirm with the user before calling and to pass confirm:true, and documents the error returned without it. It also explains how to target items (item_ids vs all_items), where to source IDs (list_marketplace_items, list_marketplaces), and when to consult list_projects for project_id, plus when using a single item_id is the safe testing approach.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_marketplace_operationADestructiveInspect
Run a WHOLE-INTEGRATION control-panel operation on a marketplace (acts on every item, not a chosen subset — for specific items use run_marketplace_item_action). operation is one of: 'submit_all' (submit every item to the channel — ONLY works in manual product mode; in Auto-Pilot mode submission is automatic and this returns status:'not_allowed'), 'clean_resubmit_all' (clear every item record from the Koongo wizard and re-submit — allowed once every ~5 minutes; refused if the connection is down), 'pre_pair' (attempt to pre-pair existing channel items with your Koongo items — non-destructive, no removal or full resync), 'remove_all' (remove every item from the channel and lock them — PERMANENT). DESTRUCTIVE + pushes to the LIVE marketplace: submit_all / clean_resubmit_all / remove_all require confirm:true after you confirm with the user (pre_pair does not). Returns {integrationId, action, status ('queued'|'done'|'not_allowed'), itemCount, async, message}. marketplace_id is the integrationId from list_marketplaces. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| operation | Yes | The whole-integration operation to run. | |
| project_id | No | ||
| marketplace_id | Yes | integrationId of the marketplace (from list_marketplaces). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already flag destructiveHint=true and readOnlyHint=false, but the description goes much further: it warns that submit_all/clean_resubmit_all/remove_all are DESTRUCTIVE and push to the LIVE marketplace, explicitly marks remove_all as PERMANENT, and identifies pre_pair as non-destructive. It also discloses the return shape including status values, which is critical for agents deciding whether an operation succeeded or was refused.
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 long but every clause delivers high-density operational knowledge: scope, alternatives, per-operation semantics, destructive warnings, confirmation requirements, return fields, and parameter resolution. It is front-loaded with the core scope sentence and uses the sibling tool name early to prevent misuse. No filler or redundant restatement of the tool name.
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 there is no output schema, the description fully compensates by specifying the exact return object: {integrationId, action, status ('queued'|'done'|'not_allowed'), itemCount, async, message}. It also covers the edge cases an agent must handle, such as not_allowed in Auto-Pilot mode, cooldown refusals, and required confirmation. An agent has enough information to invoke this tool correctly and interpret the result.
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 schema description coverage at only 50%, the description carries substantial param-documentation weight, and it succeeds. It explains confirm:true for destructive operations, elaborates each operation enum value's behavior, clarifies that project_id is optional only for single-project customers, and maps marketplace_id to the integrationId from list_marketplaces. This far exceeds the sparse schema 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 verb and resource: 'Run a WHOLE-INTEGRATION control-panel operation on a marketplace (acts on every item, not a chosen subset)'. It explicitly distinguishes itself from run_marketplace_item_action, making the tool's scope unmistakable. It also enumerates the exact operations supported, so an agent knows precisely what this tool initiates.
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 explicit when-to-use guidance: use this for whole-integration operations, and use run_marketplace_item_action for specific items. It also details per-operation conditions such as requiring manual product mode for submit_all, the ~5-minute cooldown for clean_resubmit_all, and the need for confirm:true on destructive operations. This level of operational guidance leaves little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_target_categoriesARead-onlyInspect
Search a feed's target taxonomy tree (marketplace categories) by a substring of the category path. Address the taxonomy by feed_id (its taxonomy is used) OR explicitly by taxonomy_code (+ optional taxonomy_locale). Returns {categories:[{hash, name, path}], returned, total, taxonomyCode, taxonomyLocale}; pass a returned hash as target_hash to set_category_mapping. query matches the full path (e.g. 'laptop', 'shoes'); limit bounds the results (default 50). project_id is OPTIONAL (inferred for a single-project customer).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max categories to return (default 50). | |
| query | Yes | ||
| feed_id | No | ||
| project_id | No | ||
| taxonomy_code | No | Target taxonomy id (e.g. 'google'); alternative to feed_id for addressing the taxonomy. | |
| taxonomy_locale | No | Locale of the taxonomy tree, e.g. 'en_GB' — defaults to the taxonomy's own default when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the `readOnlyHint` annotation, the description discloses substring matching on the full path, default `limit` of 50, the exact return shape (`categories` with `hash`, `name`, `path`, plus `returned`, `total`, `taxonomyCode`, `taxonomyLocale`), and optional `project_id` inference. This provides substantial behavioral context that the annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense, front-loaded sentences cover purpose, addressing modes, return format, parameter behavior, and downstream usage. There is no filler or redundant restatement of the annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete enough to invoke correctly: it gives return fields, parameter semantics, and the link to `set_category_mapping`. Minor gaps include not stating what happens when neither `feed_id` nor `taxonomy_code` is provided, and not explaining `returned`/`total` semantics beyond their existence.
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?
Despite only 50% schema description coverage, the description compensates strongly: `query` matches the full path with examples, `feed_id` selects the taxonomy, `taxonomy_code` is an alternative, `taxonomy_locale` has a default behavior, `limit` bounds results, and `project_id` is optional with inference rules. Every parameter gains practical meaning beyond its bare type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Search') and resource ('feed's target taxonomy tree'), with the matching mode ('substring of the category path'). It also distinguishes itself from related tools by noting that the returned `hash` feeds into `set_category_mapping`. The purpose is unambiguous and not a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the two addressing modes—`feed_id` vs `taxonomy_code`—and notes `project_id` is optional and inferred for single-project customers. It also clarifies the downstream use case by telling the caller to pass a returned `hash` to `set_category_mapping`. It does not explicitly list exclusions or alternatives, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_ad_nameAIdempotentInspect
Set or clear the human-readable name of an ad so you (and the user) can identify it later. Names are free-text and NOT unique — use this to give an unnamed ad a memorable label, or to rename one. Pass name:"" (empty) to clear the name back to none. Returns {integrationId, action:'set_name', status:'updated', kind, editUrl, message}. ad_id is from list_ads. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | New name; pass an empty string to clear the name. | |
| ad_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (idempotent, non-destructive), it discloses the empty-string clearing behavior, the exact response shape, and the conditional project_id inference rule. This is especially valuable because there is no output schema, and the response format is fully documented in prose.
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 front-loaded with the core action and includes nearly all necessary details in a compact paragraph. It is slightly dense with the return-shape list, but each sentence carries information an agent needs, so no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter, no-output-schema tool, this description covers purpose, parameter sourcing, edge case (clearing), return shape, and conditional project handling. An agent has enough information to invoke it correctly without opening schemas or guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, but the description fully compensates: name semantics including empty-string behavior, ad_id provenance via list_ads, and the optional/inferred-else-required rule for project_id with a pointer to list_projects. This leaves no parameter ambiguity.
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?
Begins with a specific verb and object: 'Set or clear the human-readable name of an ad', which identifies the exact resource and action. It further distinguishes the tool by noting names are free-text and not unique, making it clear this is a labeling operation rather than a status or mode change.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear use cases: label an unnamed ad or rename one, and gives the empty-string clearing case. It also gives prerequisites (ad_id from list_ads; call list_projects when project_id is required), but does not explicitly name sibling alternatives or state 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.
set_ad_product_modeAIdempotentInspect
Set how an ad synchronizes products to its channel. Ads are ads-based channels (advertising / price-comparison / classifieds), not marketplaces: they publish products to the ad platform and have no order sync. mode is 'auto' (products are synced automatically — publishes every matching product), 'manual' (NOTHING is auto-published; products go to the channel only when you trigger them, so this is the safe way to activate for a test) or 'pause' (product sync is paused). In MANUAL mode you push items yourself: run_ad_item_action (submit) forces a single item through, and run_ad_operation (submit_all / clean_resubmit_all) forces the whole set — even though auto-publish is off. Returns {integrationId, action:'set_product_mode', status, kind:'ads', editUrl, message} — status is 'updated' for auto/manual and 'paused' for pause; read ad_status or get_ad afterwards to confirm the applied mode. ad_id is from list_ads. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Product sync mode: 'auto', 'manual' or 'pause'. | |
| ad_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already covering idempotency and non-destructiveness, the description adds substantial behavioral context: what auto/manual/pause actually do, that ads have no order sync, that manual mode suppresses auto-publishing, and what status values and return fields to expect. It also tells the agent to confirm the applied mode afterward. 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?
The description is dense but every sentence earns its place: purpose, channel-type qualification, mode semantics, manual-mode push alternatives, return shape, confirmation step, and parameter provenance. It is front-loaded with the core purpose and keeps related details grouped.
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 no output schema, the description provides the return shape, status values, confirmation guidance, parameter provenance, and mode behavior. Given the tool's complexity and low schema coverage, nothing an agent needs to select and invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, but the description compensates fully: it explains the meaning of each mode, states that ad_id comes from list_ads, and clarifies when project_id is optional versus required and what to call when it is required. This adds real meaning beyond the bare 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 verb and resource ('Set how an ad synchronizes products to its channel') and immediately distinguishes ads-based channels from marketplaces, so an agent can tell this tool apart from marketplace-mode siblings 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?
It explains when each mode is appropriate, calls out 'manual' as the safe test activation path, and explicitly names the alternatives to use afterward (run_ad_item_action, run_ad_operation, ad_status, get_ad, list_projects). This gives the agent clear routing guidance rather than leaving usage implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_ai_sourceAInspect
Store per-product values that YOU (the client's own model) extracted, as a new 'AI source' attribute — so a feed rule can read the attribute directly instead of matching free text with contains/conditions. Typical flow: call preview_products to read products, derive ONE value per product with your own reasoning (e.g. the color, gender, or material from the title/description), then call this with values as a JSON OBJECT (not an array) mapping each product's id (the id field from preview_products) to the extracted value. code is the new attribute name (e.g. "ai_color"); once applied it becomes the source attribute custom_ (visible in list_source_attributes). Send large catalogs in BATCHES: first batch mode:"replace", following batches mode:"append"; set apply:true on the LAST batch only, to materialize (this re-imports the additional sources so the values land on products — an ASYNCHRONOUS import). VERIFY before using it: poll get_import_status until the newest additional_source run in recentRuns has running:false and status 'ok', and the code appears in list_source_attributes; only THEN attach the attribute to a feed with map_feed_attribute. If that run errors, run_import retries without re-sending the values. handle overrides the product key to join on (default header.id, which matches the preview_products id). project_id is OPTIONAL (inferred for a single-project customer). Requires the additional-sources addon: without it the call is refused with error 'addon_required' (HTTP 403) + addonCode + upsellUrl — show the user the upsellUrl so they can unlock it, and do not retry. Returns {status:'written'|'applied', code, url, valueCount, applied}.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| mode | No | ||
| apply | No | ||
| handle | No | ||
| values | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnly=false and idempotent=false, so the description carries full burden. It thoroughly discloses: asynchronous re-import on apply, status values ('written'|'applied'), HTTP 403 with addonCode/upsellUrl on missing addon, retry behavior via run_import, and the materialization side effect. 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?
The description is long and uses dense run-on sentences, but every clause carries operational necessity. It is front-loaded with purpose and flows logically through batching, verification, and error handling. Slightly more structure would earn a 5, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with async imports, batching, and addon requirements, the description covers all critical aspects: precondition flow, verification steps, failure recovery, return shape, and error handling. Even without an output schema, an agent has everything needed to invoke 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?
With 0% schema description coverage, the description must explain every parameter, and it does: values as JSON object keyed by preview_products id, code becoming custom_<code>, mode replace/append, apply only on last batch, handle overriding the join key, project_id optional. This is far beyond what the bare JSON schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource statement: 'Store per-product values... as a new AI source attribute' and clearly states the purpose (allowing feed rules to read the attribute directly instead of free-text matching). This clearly differentiates it from siblings like delete_ai_source, list_ai_sources, and set_api_source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a complete workflow: preview_products → derive values → call with replace/append batching → verify via get_import_status and list_source_attributes → then map_feed_attribute. It also gives explicit when-not-to-use (addon_required error means don't retry, show upsellUrl). No ambiguity about when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_api_sourceAInspect
Store per-product values that YOU (the client's own model) computed, as a new 'API source' attribute — written straight into the project's data store (no CSV, no join handle) — so a feed rule can read the attribute directly instead of matching free text with contains/conditions. PREFER this whenever a rule would otherwise need a long or complex condition tree. Typical flow: call preview_products to read products, derive ONE value per product with your own reasoning (e.g. the color, gender, or material from the title/description), then call this with values as a JSON OBJECT (not an array) mapping each product's id (the id field from preview_products) to the computed value. Values keep their JSON type — send a NUMBER for a numeric attribute (so numeric rule operators work), a boolean, or a string; a null clears that product. code is the new attribute name (e.g. "ai_color"); once applied it becomes the source attribute api_source. (visible in list_source_attributes). Send large catalogs in BATCHES: first batch mode:"replace", following batches mode:"append"; set apply:true on the LAST batch only, to materialize (this re-imports so the values land on products — an ASYNCHRONOUS import). VERIFY before using it: poll get_import_status until the newest api_source run in recentRuns has running:false and status 'ok', and the code appears in list_source_attributes; only THEN attach the attribute to a feed with map_feed_attribute or reference api_source. in a rule (create_rule / update_rule). If that run errors, run_import retries without re-sending the values. code must not collide with an existing source attribute of another class. project_id is OPTIONAL (inferred for a single-project customer). Requires the additional-sources addon: without it the call is refused with error 'addon_required' (HTTP 403) + addonCode + upsellUrl — show the user the upsellUrl so they can unlock it, and do not retry. Returns {status:'written'|'applied', code, valueCount, applied}.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| mode | No | ||
| apply | No | ||
| values | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the minimal annotations, disclosing that this is a write that re-imports asynchronously, that apply:true materializes values, that verification via get_import_status is required, that an errored import can be retried with run_import without resending values, and that the addon_required error returns upsellUrl with HTTP 403. No contradiction with the 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?
The description is long but densely packed and well structured: purpose, preference, workflow, value format, batching, verification, prerequisites, error handling, and return shape follow in logical order. Each sentence carries operational weight, and the main purpose and preference are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, minimal annotations, and a nontrivial multi-step batching lifecycle, the description is remarkably complete: it covers the full call sequence, verification steps, asynchronous behavior, error/upsell handling, addon requirement, return object shape, and post-condition usage with related tools. 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?
Schema description coverage is 0%, so the description carries the full burden, and it succeeds: `values` is explained as a JSON object keyed by preview_products id with JSON-type preservation and null-clearing; `code` is the attribute name and must not collide; `mode` is tied to batching; `apply` is tied to the last batch; `project_id` is optional and inferred. Every parameter receives operational meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: 'Store per-product values ... as a new API source attribute'. It also clarifies the purpose by contrasting with condition-tree matching and naming the resulting attribute namespace api_source.<code>, which distinguishes it conceptually from the AI-source 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?
It explicitly says 'PREFER this whenever a rule would otherwise need a long or complex condition tree' and gives a complete usage flow: preview_products, derive values, batch with replace/append, apply on the last batch, verify with get_import_status, then use map_feed_attribute or create_rule/update_rule. It also states when not to retry, covering the addon_required failure case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_category_mappingADestructiveIdempotentInspect
Map store categories to marketplace/taxonomy categories. Address the taxonomy by feed_id OR explicitly by taxonomy_code (+ optional taxonomy_locale). rules is a list of {store_category_ids:[...], target_hash} — each maps those store categories (ids from list_store_categories / list_unmapped_categories) to one target (hash from search_target_categories); a store category already mapped is re-pointed to the new target. The rule set is SHARED per project+taxonomy+locale, so if OTHER feeds use this taxonomy the call returns status=mapping_exists_requires_confirm (HTTP 409) with affectedFeedIds — re-call with confirm:true to apply. SAVE-ONLY: persists but does NOT regenerate — call export_feed afterwards. Returns {taxonomyCode, taxonomyLocale, status, rulesWritten, reason, affectedFeedIds}; status is 'updated' | 'no_changes' | 'mapping_exists_requires_confirm' | 'rejected' (reason: no_taxonomy | unknown_target | unknown_store_category | empty_rules). project_id is OPTIONAL (inferred for a single-project customer).
| Name | Required | Description | Default |
|---|---|---|---|
| rules | Yes | ||
| confirm | No | Set true to apply when other feeds share this taxonomy (status=mapping_exists_requires_confirm); default false. | |
| feed_id | No | ||
| project_id | No | ||
| taxonomy_code | No | Target taxonomy id (e.g. 'google'); alternative to feed_id for addressing the taxonomy. | |
| taxonomy_locale | No | Locale of the taxonomy tree, e.g. 'en_GB' — defaults to the taxonomy's own default when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond the annotations: the shared rule set per project+taxonomy+locale, the HTTP 409 conflict requiring confirm:true, re-pointing of already mapped categories, save-only persistence without regeneration, and the full status/reason vocabulary. This is exactly the kind of context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries essential operational information: addressing, rule structure, sharing/conflict behavior, save-only caveat, and return statuses. It is front-loaded with the core purpose and structured logically, so the length is justified by 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?
The description is complete for a tool of this complexity. It covers all parameter semantics, the conflict/confirm flow, post-call requirements (export_feed), and the exact return status values despite the absence of an output schema. An agent has everything needed to invoke 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?
With only 50% schema description coverage, the description compensates fully: it explains the rules structure (store_category_ids and target_hash), the origin of IDs, feed_id vs taxonomy_code addressing, the optional project_id inference, and confirm semantics. Even for parameters that have schema descriptions (confirm, taxonomy_code, taxonomy_locale), the description integrates them into a coherent workflow.
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 operation: 'Map store categories to marketplace/taxonomy categories.' It distinguishes itself from siblings by referencing helper tools (list_store_categories, search_target_categories) and export_feed, and by explaining the two addressing modes (feed_id vs taxonomy_code). This leaves 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 gives rich usage context: it tells the agent where to source store_category_ids and target_hash, how to address the taxonomy, and that export_feed must be called afterwards. It does not explicitly say 'use get_category_mapping to read existing mappings' or provide any when-not-to-use exclusions, but the workflow is clearly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_feed_attribute_filterAIdempotentInspect
Set (or clear) a feed's ATTRIBUTE filter: conditions on source attributes that decide which products export, joined by combination 'and' | 'or' (default 'and'). Each condition is {attribute, operator, value}: attribute is a source attribute code (from list_source_attributes); operator is one of equals, not_equals, contains, not_contains, starts, not_starts, ends, not_ends, empty, not_empty, greater, greater_or_equal, less, less_or_equal, regex, not_regex, is_true, is_false; value is the comparison string (omit for empty / not_empty). Pass conditions:[] to CLEAR the attribute filter. This is separate from the category filter (set_feed_filter). To include or exclude out-of-stock products use export_out_of_stock on set_feed_filter — NEVER build a qty/stock condition here. SAVE-ONLY: persists and bumps the revision but does NOT regenerate — call export_feed afterwards. Returns {feedId, status, changed, reason, revisionBefore, revisionAfter}; status is 'updated' | 'no_changes' | 'rejected' (reason: invalid_value | unknown_source_attribute | invalid_condition). project_id is OPTIONAL (inferred for a single-project customer).
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | ||
| conditions | Yes | ||
| project_id | No | ||
| combination | No | How the conditions are joined: 'and' = a product must match all (default), 'or' = match any. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses critical behavior: clearing via conditions:[], save-only semantics (persists and bumps revision but does not regenerate), and the exact response statuses and rejection reasons. This adds substantial behavioral context not present in the annotations or 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?
The description is long but every sentence earns its place; there is no filler. It front-loads the core purpose and then systematically covers condition grammar, clearing behavior, distinctions from siblings, post-call requirements, and return semantics.
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 schema coverage and no output schema, the description is remarkably complete. It covers input semantics, operational behavior, return shape, status/reason values, sibling differentiation, and optional parameter behavior — nothing critical is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, so the description carries most of the parameter semantics. It fully explains conditions structure, the complete operator list, value omission for empty/not_empty, combination default, and project_id optionality — all beyond the sparse 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 ('Set (or clear)') and resource ('a feed's ATTRIBUTE filter'), and explicitly distinguishes it from the category filter set_feed_filter. This makes the tool's purpose unambiguous and separates it from its 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?
The description gives clear when-to-use guidance: use this for attribute conditions, use set_feed_filter for category filters, and NEVER use this for stock/qty conditions (use export_out_of_stock instead). It also explains the post-call requirement to invoke export_feed after this save-only operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_feed_filterAIdempotentInspect
Set a feed's product filter — which products reach the output. Common flags: export_out_of_stock (include items with zero stock), export_variants_as_single (export child variants instead of the parent), export_removed_products (no = only active | yes = all incl. removed | only = removed only). Category filter: category_ids (store category ids from list_store_categories) with category_operator include|exclude (default include); category_ids:[] clears the category filter (export all categories). Provide at least one field; a field you omit is left unchanged. SAVE-ONLY: persists and bumps the revision but does NOT regenerate the feed — call export_feed afterwards. Returns {feedId, status, changed:[...], reason, revisionBefore, revisionAfter}; status is 'updated' | 'no_changes' | 'rejected' (reason: invalid_value | unknown_store_category). project_id is OPTIONAL (inferred for a single-project customer).
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | ||
| project_id | No | ||
| category_ids | No | ||
| category_operator | No | Whether category_ids are an allow-list ('include', default) or a block-list ('exclude'). | |
| export_out_of_stock | No | ||
| export_removed_products | No | Which products to export by removal state: 'no' = only active (default), 'yes' = all incl. removed, 'only' = removed only. | |
| export_variants_as_single | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses important side effects beyond the annotations: the call persists and bumps the revision but does not regenerate the feed, and it explains the meaning of statuses ('updated', 'no_changes', 'rejected') and reasons. It also documents special behavior for category_ids:[] clearing the filter and the optional project_id inference, which annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded with the core purpose and then organized into flags, category filtering, caveats, and return values. Every sentence carries information, though the clustered formatting and multiple uses of vertical bars make it slightly harder to scan quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with no output schema, the description covers invocation rules, defaults, side effects, follow-up action, return shape, statuses, and error reasons. An agent has enough to select and call the tool correctly without needing to infer hidden 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 description coverage is only 29%, but the description compensates by explaining export_out_of_stock, export_variants_as_single, the three export_removed_products modes, category_ids with category_operator defaults, and clearing behavior. It also clarifies project_id is optional and inferred, adding meaning beyond the bare schema properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Set a feed's product filter' with an explanatory clause 'which products reach the output.' It differentiates from the sibling set_feed_attribute_filter by focusing on product-level export filters rather than attribute mappings, and from set_feed_settings by scoping to filter 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?
Provides clear operational guidance: at least one field must be provided, omitted fields are unchanged, and the SAVE-ONLY behavior explicitly instructs to call export_feed afterwards. It does not name direct alternative tools for when to use another filter/settings tool, so it stops short of a full when/when-not comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_feed_settingsAIdempotentInspect
Set a feed's general output settings: SHIPPING cost and STOCK. Send shipping and/or stock; within each object only the keys you include change (omitted keys are left as-is). shipping: {dependent_attribute (a source attribute code from list_source_attributes the cost depends on, e.g. weight/price — '' clears it), method_name (free text), intervals (the cost table — REPLACES the whole set; each row {from, to, cost} numeric with 0 <= from <= to <= 1000000 and cost >= 0; intervals:[] clears all rows)}. stock: {in_value (the value exported when a product is In stock), out_value (the value when Out of stock), availability_attribute (a source attribute code exported as availability when out of stock — '' clears it)}. Provide at least one of shipping / stock. To rename the feed use update_feed (the feed name is not set here). SAVE-ONLY: persists and bumps the revision but does NOT regenerate the feed — call export_feed afterwards. Read the current values from get_feed (settings). Returns {feedId, status, changed:[...], reason, revisionBefore, revisionAfter}; status is 'updated' | 'no_changes' | 'rejected' (reason: invalid_value | unknown_source_attribute | invalid_interval). project_id is OPTIONAL (inferred for a single-project customer).
| Name | Required | Description | Default |
|---|---|---|---|
| stock | No | Stock settings; only the keys you send change. | |
| feed_id | Yes | ||
| shipping | No | Shipping cost settings; only the keys you send change. | |
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description reveals SAVE-ONLY behavior, revision bumping, non-regeneration of the feed, and the need to call export_feed. It also names the return statuses and rejection reasons, adding meaningful runtime behavior that the annotations do not cover. No contradiction with readOnlyHint=false or idempotentHint=true is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose is front-loaded, then partial semantics, object-level details, alternatives, save-only caveat, and return shape. There is no filler for a tool with two nested objects and a non-obvious side-effect profile.
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?
Because there is no output schema, the description correctly supplies the return shape and status/reason enums. It also covers the revision side effects, follow-up export_feed call, and where to read current settings and rename the feed, making the tool self-contained enough to invoke 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 50%, and the description compensates fully: it explains partial object updates, intervals replacement and clearing, '' clearing semantics for dependent_attribute/availability_attribute, numeric interval constraints, and the optional project_id. It adds value beyond the schema's field 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 opens with 'Set a feed's general output settings: SHIPPING cost and STOCK', a specific verb plus resource and scope. It explicitly distinguishes itself from update_feed ('To rename the feed use update_feed') and export_feed, so an agent can separate it from nearby 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?
It gives explicit when/how guidance: 'Provide at least one of shipping / stock', states the partial-update behavior, and names alternatives ('To rename the feed use update_feed', 'call export_feed afterwards', 'Read the current values from get_feed'). This is clear routing and prerequisite context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_marketplace_nameAIdempotentInspect
Set or clear the human-readable name of a marketplace so you (and the user) can identify it later. Names are free-text and NOT unique — use this to give an unnamed marketplace a memorable label, or to rename one. Pass name:"" (empty) to clear the name back to none. Returns {integrationId, action:'set_name', status:'updated', kind, editUrl, message}. marketplace_id is from list_marketplaces. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | New name; pass an empty string to clear the name. | |
| project_id | No | ||
| marketplace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already supply idempotentHint=true and readOnlyHint=false, and the description adds meaningful context beyond them: the exact return payload, the empty-string clear behavior, and the conditional meaning of project_id. This gives the agent a solid model of the tool's effects without contradicting any annotation.
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?
Every sentence earns its place: purpose, naming constraints, clearing behavior, return shape, parameter sourcing, and conditional logic. It is dense but not bloated, and front-loads the core purpose before moving to operational 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?
Despite having no output schema, the description supplies the return object shape, the handling of the optional project_id, and the empty-string edge case. Combined with the annotations, an agent has everything needed to call this tool correctly across both single-project and multi-project customers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, and the description compensates well for all three parameters. It explains name's special empty-string semantics, gives the source for marketplace_id (list_marketplaces), and clarifies the two modes for project_id (inferred vs. required, with a follow-up tool call). This is far more useful than the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "Set or clear the human-readable name of a marketplace." It clearly differentiates from sibling tools like set_ad_name or set_marketplace_product_mode by scoping to the marketplace's display name. The clarification that names are free-text and NOT unique adds precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit usage context: use it to "give an unnamed marketplace a memorable label, or to rename one," and explains how to clear the name with an empty string. It also tells the agent where marketplace_id comes from and when project_id is needed, including a fallback instruction to call list_projects. It stops short of naming alternative tool exclusions, but the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_marketplace_order_modeAIdempotentInspect
Start or stop ACTIVE order synchronization for a marketplace that ALREADY has order sync. enabled:true starts syncing, enabled:false stops it. This is the on/off switch, NOT the capability: if the marketplace does not have order sync yet (get_marketplace orderSync:false / canEnableOrderSync:true), this returns status 'prerequisite_not_met' (HTTP 409) — call enable_marketplace_order_sync first (and configure its order-settings step), then come back here to start it. Returns {integrationId, action:'set_order_mode', status, kind, editUrl, message}: status is 'updated' on success, 'prerequisite_not_met' when order sync is not enabled yet, or 'rejected' (HTTP 409) when the plan does not allow it (message explains — e.g. an upgrade is needed). marketplace_id is from list_marketplaces. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | true to enable order synchronization, false to disable it. | |
| project_id | No | ||
| marketplace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the mutation semantics (starting/stopping), the prerequisite failure mode with HTTP 409, the 'rejected' status for plan restrictions, and the full return shape. This goes well beyond the annotations, which only state readOnlyHint=false, idempotentHint=true, and destructiveHint=false. No annotation contradiction is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: core action, prerequisite distinction, status/error semantics, return payload, and parameter provenance. It is front-loaded with the most important distinction and avoids 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 no output schema, the description carries the full burden of explaining return values and does so completely: integrationId, action, status, kind, editUrl, message, and each status condition. It also covers the prerequisite workflow and parameter sourcing, making the tool safely callable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% (only enabled has a description), so the description compensates by clarifying enabled's effect, sourcing marketplace_id from list_marketplaces, and explaining when project_id is optional vs required. It adds practical semantics beyond the raw schema types.
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: 'Start or stop ACTIVE order synchronization for a marketplace that ALREADY has order sync.' It precisely distinguishes this tool from the capability-enabling sibling by calling it 'the on/off switch, NOT the capability' and explicitly names enable_marketplace_order_sync as the prerequisite alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is explicit: use this only after order sync is already enabled; if not, 'call enable_marketplace_order_sync first, then come back here.' It also directs the user to list_marketplaces for marketplace_id and to list_projects when project_id is required, giving clear when-to-use and alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_marketplace_product_modeAIdempotentInspect
Set how a marketplace synchronizes products to its channel. mode is 'auto' (products are synced automatically — publishes every matching product), 'manual' (NOTHING is auto-published; products go to the channel only when you trigger them, so this is the safe way to activate for a test) or 'pause' (product sync is paused). In MANUAL mode you push items yourself: run_marketplace_item_action (submit) forces a single item through, and run_marketplace_operation (submit_all / clean_resubmit_all) forces the whole set — even though auto-publish is off. Returns {integrationId, action:'set_product_mode', status, kind, editUrl, message} — status is 'updated' for auto/manual and 'paused' for pause; read marketplace_status or get_marketplace afterwards to confirm the applied mode. marketplace_id is from list_marketplaces. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Product sync mode: 'auto', 'manual' or 'pause'. | |
| project_id | No | ||
| marketplace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as idempotent and non-destructive, so the description's job is to add behavioral depth. It does so thoroughly: manual mode means nothing is auto-published, pause stops product sync, status differs per mode ('updated' vs 'paused'), and confirmation should be done via marketplace_status or get_marketplace. This goes well beyond the structured 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 dense but every sentence earns its place. It front-loads the purpose, then moves logically through mode definitions, manual trigger alternatives, return values, and parameter provenance. No filler or repetition exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return shape and status semantics. It also covers the manual-mode flow, confirmation step, and the conditional project_id requirement. Given the tool's complexity and the low schema coverage, the description leaves nothing an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (just the mode enum), yet the description adds rich semantics for all three parameters. It explains each mode's behavior, says marketplace_id comes from list_marketplaces, and clarifies that project_id is optional but may become required depending on the customer context. This fully compensates for the sparse 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 verb and resource: 'Set how a marketplace synchronizes products to its channel.' This clearly identifies the tool's focus—product sync mode—and differentiates it from siblings like set_marketplace_order_mode and set_marketplace_name. The three modes are explicitly defined, leaving no ambiguity about scope.
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 each mode, including the note that 'manual' is the safe way to activate for a test. It also names alternatives for pushing items manually (run_marketplace_item_action and run_marketplace_operation) and suggests reading marketplace_status or get_marketplace to confirm the applied mode. It does not explicitly exclude other tools like pause_marketplace, but the guidance is still strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_feedAInspect
Submit a generated feed to its sales channel (only meaningful for API channels with a connection; file feeds that the channel pulls are not submitted). The feed must be generated first (status='generated' from get_feed_status) — otherwise returns error 'feed_not_generated'. Returns {feedId, action:'submit', status, feedStatus, message}. status is 'submitted' (ok), 'not_submittable' (channel doesn't accept submissions), or 'failed' (with message). feed_id from list_feeds / create_feed; project_id OPTIONAL. Recommended: run verify_feed_attributes before submitting.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already indicate this is a non-readonly, non-idempotent operation, the description adds meaningful behavioral detail: the exact error for an ungenerated feed, the return object shape, and the possible statuses ('submitted', 'not_submittable', 'failed'). It goes beyond the annotations, though it doesn't elaborate on side effects or authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: scope, precondition/error, return format, status meanings, parameter provenance, and a recommendation. It front-loads the core purpose and keeps technical details in compact inline code.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameter descriptions, the definition still documents the return object, statuses, failure condition, and prerequisites. It is mostly complete for a 2-parameter tool, though it could say more about what project_id scopes and how to determine whether a channel accepts submissions before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the parameter burden. It explains that feed_id comes from list_feeds / create_feed and marks project_id as OPTIONAL. This compensates for the empty schema descriptions, though project_id's actual role is left vague beyond being optional.
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 — 'Submit a generated feed to its sales channel' — and clearly distinguishes the tool's scope by noting it is only meaningful for API channels with a connection and that file feeds are not submitted. This makes it easy to tell apart from other feed-related sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit preconditions: the feed must be generated first via get_feed_status, otherwise error 'feed_not_generated', and it recommends running verify_feed_attributes before submitting. It also explicitly excludes file feeds. However, it doesn't name a specific alternative tool for cases where submission is not appropriate, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_marketplace_ordersAInspect
Pull orders from the channel NOW — a manual, one-off order import (in addition to the automatic sync that runs on its own when order sync is enabled). Use it when the user wants to fetch fresh orders immediately. The import runs asynchronously; watch the counts in marketplace_status.orderStats. Requires the marketplace's connection to be active for orders — otherwise returns status 'prerequisite_not_met' (HTTP 409). Returns {integrationId, action:'sync_orders', status, kind, editUrl, message}; status is 'updated' when the import was started. marketplace_id is from list_marketplaces. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects). Marketplaces only — ads have no order sync.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| marketplace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations. It discloses that the import runs asynchronously and directs the agent to 'watch the counts in marketplace_status.orderStats'. It also explains the exact return object shape and the meaning of status 'updated'. It details the error handling (HTTP 409 with prerequisite_not_met). All of this enriches behavioral understanding beyond the annotation flags.
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 compact paragraph that front-loads the core purpose, then progressively adds usage, behavior, error handling, and parameter sourcing. Every sentence earns its place; there is no filler. It is information-dense yet well-ordered, making it easy to parse.
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 no output schema, the description fully covers what the tool does, when to use it, how it runs, what it returns (including status semantics), error conditions, parameter sourcing, and scope. It even directs the agent to a dependent tool (marketplace_status) for monitoring results. 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?
Schema coverage is 0%, so the description must carry the semantic burden, and it does. For marketplace_id it says 'is from list_marketplaces' (source of the value). For project_id it explains it's optional, inferred for single-project customers, but required otherwise, with a pointer to list_projects. This fully clarifies the parameters beyond their raw types.
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 clear verb and resource: 'Pull orders from the channel NOW' and explicitly distinguishes this manual one-off import from the automatic sync. It also states the scope ('Marketplaces only — ads have no order sync') which further differentiates it from sibling tools. This is a specific, unambiguous 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?
It explicitly says 'Use it when the user wants to fetch fresh orders immediately' and contrasts with the automatic sync. It also provides a prerequisite ('Requires the marketplace's connection to be active for orders') and explains the failure mode ('returns status prerequisite_not_met'). It further clarifies when project_id is needed and where to get it (list_projects). This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_project_ordersAInspect
Start an order synchronization for the whole project now — ONE background process that pulls orders across ALL of the project's order connections at once (the same run as the Koongo 'Sync Now' button; it also overlaps with any marketplace order sync, since order sync runs once per project). Returns {action:'sync', status:'done', message}; if a sync is already running that run continues (status stays 'done'). This is heavy and project-wide: to check a SINGLE connection use test_order_connection instead. Order counts then move in get_order_overview. project_id is OPTIONAL (project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it launches one background process, returns a specific shape, and continues an already-running sync without changing status. It also notes overlap with marketplace order sync and warns that the operation is heavy, all beyond what the annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but every clause earns its place: scope, background execution, return value, concurrency behavior, alternative tool, and conditional parameter guidance are all covered without fluff. Key operational details are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description explains the exact return shape and status behavior when a sync is already running. It also connects to related follow-up surfaces like get_order_overview and gives enough context for an agent to invoke it correctly in the project-wide vs single-connection decision.
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 one optional project_id with no description, so the description must compensate. It adds that project_id is OPTIONAL and explains the fallback to list_projects when project_id_required applies, though it could have more explicitly defined project_id as the project whose orders are synced.
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: 'Start an order synchronization for the whole project now' and clarifies it pulls orders across ALL order connections at once. It distinguishes itself from test_order_connection and notes overlap with marketplace order sync, making sibling differentiation strong.
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 explicitly says when this tool is appropriate: project-wide sync is 'heavy and project-wide,' while 'to check a SINGLE connection use test_order_connection instead.' It also gives conditional guidance for project_id, telling the agent to call list_projects if project_id is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_ad_connectionAIdempotentInspect
Verify that an ad integration's saved connection still works — runs a live connectivity/auth check against the ad channel right now. Each ad owns exactly ONE connection (never shared), so no separate handle is needed: the ad_id IS the connection. Use this when an ad looks connected but items fail, or after credentials/OAuth may have expired. Returns {integrationId, status ('ok' | 'error' | 'not_connected'), message}. 'not_connected' means the connection step was never completed; to move a connection to a different channel there is no transfer — clone the ad with clone_ad. Never returns secrets. This does not change any settings. Fixing or (re)establishing a connection (credentials / OAuth) is done by the USER in the browser / Koongo UI, NEVER via MCP: on 'error' / 'not_connected' route the user there, do not retry configure_ad_step to set credentials. ad_id is from list_ads. project_id is OPTIONAL (project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | integrationId of the ad (from list_ads). | |
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotent and non-destructive, but the description adds valuable behavioral details: this does not change settings, never returns secrets, reports a 'not_connected' status, and clarifies that credential/OAuth fixes happen only via the user in the UI. The readOnlyHint=false annotation is not contradicted because a live auth/connectivity check may still have side effects beyond settings.
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 dense but purposeful, front-loading the core purpose before covering return shape, edge cases, and user-only repair flows. While lengthy, nearly every sentence carries operational guidance, so the length is justified rather than redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides a full return contract including status values and their meaning. It also covers the not_connected edge case, the no-transfer constraint, the user-only credential repair path, and optional parameter handling—leaving no required decision ambiguous 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 only 50%, but the description compensates by explaining that ad_id is both the integration ID and the connection handle, sourced from list_ads. For project_id, it clarifies that it is optional, when it becomes required, and how to discover it via list_projects—though it could have described the parameter's purpose more explicitly.
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 opening sentence uses 'Verify' with a specific resource and action: checking whether an ad integration's saved connection still works via a live connectivity/auth check. It clearly ties the tool to ads specifically and explains that the ad_id is the connection, distinguishing it from related connection-testing tools for marketplaces and orders.
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 explicitly states when to use the tool ('when an ad looks connected but items fail, or after credentials/OAuth may have expired') and when not to: do not retry configure_ad_step for credential fixes, route the user to the browser/UI instead, and clone the ad if a connection needs to move to another channel. It also provides fallback guidance for project_id with list_projects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_marketplace_connectionAIdempotentInspect
Verify that a marketplace's saved connection still works — runs a live connectivity/auth check against the channel right now. Each marketplace owns exactly ONE connection (never shared), so no separate handle is needed: the marketplace_id IS the connection. Use this when a marketplace looks connected but items fail, or after credentials/OAuth may have expired. Returns {integrationId, status ('ok' | 'error' | 'not_connected'), message}. 'not_connected' means the connection step was never completed; to move a connection to a different channel there is no transfer — clone the marketplace with clone_marketplace. Never returns secrets. This does not change any settings. Fixing or (re)establishing a connection (credentials / OAuth) is done by the USER in the browser / Koongo UI, NEVER via MCP: on 'error' / 'not_connected' route the user there, do not retry configure_marketplace_step to set credentials. marketplace_id is from list_marketplaces. project_id is OPTIONAL (project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| marketplace_id | Yes | integrationId of the marketplace (from list_marketplaces). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses key behaviors: the live check changes no settings, never returns secrets, and the 'not_connected' status means setup was never completed. It also explains the one-connection-per-marketplace model and that credential repair is always done by the user, not through MCP. This is substantial behavioral context that annotations alone do not 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 front-loaded with the core purpose and then packs only high-value operational details: return shape, status semantics, negative guidance, and parameter sourcing. It is longer than average but each clause addresses a real decision an agent would otherwise get wrong.
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 no output schema, the description fully covers the return contract ({integrationId, status, message}), the statuses, and the action to take for error/not_connected. It also covers the connection model, non-destructiveness, secret handling, and parameter sourcing, leaving no critical gap 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?
With schema coverage only at 50%, the description compensates by giving marketplace_id's source (list_marketplaces) and clarifying that project_id is optional with a fallback to list_projects when a project is required. It could specify project_id's role more explicitly, but the added guidance meaningfully exceeds 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 verb ('Verify') and resource ('a marketplace's saved connection'), and explains exactly what the tool does: run a live connectivity/auth check against the channel. It also distinguishes this tool from related connection-test siblings by scoping it to marketplaces and explicitly noting the marketplace_id is the connection.
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 explicit when-to-use conditions ('looks connected but items fail' or 'after credentials/OAuth may have expired') and clear when-not-to-use guidance: do not retry configure_marketplace_step, route the user to the browser/UI for fixing credentials. It also points to clone_marketplace for transferring a connection and list_projects for the optional project_id case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_order_connectionAIdempotentInspect
Verify that a standalone order connection's saved credentials still work — a live connectivity/auth check right now. Returns {connectionId, status ('ok'|'error'|'not_connected'), message} — the message is masked and never contains secrets. 'not_connected' means authentication was never completed: route the USER to finish it in the Koongo UI (never via MCP), do not try to set credentials. Use this to confirm a connection is healthy before enabling it with configure_order_connection order_status:'active'. This is the right way to check a SINGLE connection — do not run sync_project_orders for that. connection_id is from get_order_overview. project_id is OPTIONAL (project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| connection_id | Yes | connectionId of the order connection (from get_order_overview). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include idempotentHint=true and destructiveHint=false, and the description adds meaningful behavioral detail: it is a live check, returns a masked message that 'never contains secrets,' and precisely interprets 'not_connected' as never-completed authentication with the instruction not to try setting credentials. 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 dense but every sentence earns its place: purpose first, then return shape, edge-case behavior, usage timing, exclusions, and parameter sourcing. There is no filler 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?
With no output schema, the description fully covers the return structure ({connectionId, status, message}), status vocabulary, user routing for unauthenticated connections, and the relationship to sibling operations. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% (connection_id documented, project_id not), but the description compensates fully. It states connection_id comes from get_order_overview and explains that project_id is optional unless project_id_required, in which case the agent should call list_projects. This is actionable meaning beyond the bare 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 'Verify that a standalone order connection's saved credentials still work — a live connectivity/auth check right now,' which names a specific verb, resource, and immediate intent. It is clearly distinguished from sibling tools like test_ad_connection and test_marketplace_connection by the 'order connection' scope.
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 explicit when-to-use guidance ('before enabling it with configure_order_connection order_status:"active"') and when-not-to-use guidance ('do not run sync_project_orders for that'). It also defines the 'not_connected' edge case and directs the user to the Koongo UI instead of attempting credential setup via MCP, plus names list_projects as the fallback when project_id is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_feedAIdempotentInspect
Edit a feed's basic settings: rename (name) and/or enable/disable (enabled). Provide at least one. Returns {feedId, status, changed:[...], name, enabled, revisionBefore, revisionAfter}. status is 'updated' or 'no_changes'. feed_id from list_feeds / create_feed; project_id OPTIONAL. NOTE: attribute mapping and product-filter editing are NOT supported here yet — only name/enabled. For enable/disable only, pause_feed/resume_feed are equivalent; use update_feed when also renaming.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| enabled | No | ||
| feed_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a non-read-only, idempotent, non-destructive operation. The description adds meaningful behavioral detail beyond that: the exact response shape, status values ('updated' vs 'no_changes'), revision tracking fields, and the 'provide at least one' input constraint.
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 core operation is front-loaded, and every subsequent sentence adds necessary information: return format, parameter sourcing, non-goals, and alternatives. There is no filler or redundant restating of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter write tool with no output schema, this description is nearly complete: response shape, status semantics, parameter provenance, exclusions, and alternatives are covered. The only notable gaps are the purpose of optional project_id and the lack of an explicit pointer to set_feed_settings for other feed-settings changes.
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 0% schema description coverage, the description must compensate, and it does for most parameters: name/enabled semantics are explained, feed_id provenance is given, and project_id is marked optional. However, project_id's actual purpose is never clarified, leaving one parameter minimally specified.
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 edits a feed's basic settings (renaming and/or toggling enabled). It explicitly distinguishes itself from pause_feed/resume_feed and declares that attribute mapping and product-filter editing are out of scope.
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 explicit when/when-not guidance: use pause_feed/resume_feed for enable/disable-only changes, use update_feed when also renaming, and do not use this tool for attribute mapping or product-filter editing. This routes the agent to the correct tool without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ruleAIdempotentInspect
Update an EXISTING product rule (Attribute Rule). ALWAYS validate_rule the new document first and fix every error. Identify the rule by rule_id (from list_rules / get_rule) and pass the full rule document as rule — {name, description, category, icon, rules:[{sortId, enabled, type, conditions, operationGroups: [{mode, parentMode, attributes, operations:[{name, arguments:{key:value}}]}]}]}. The safe pattern is: get_rule, edit the returned document, validate_rule, then update_rule with it. Only name, description, category, icon and rules are editable; usage/bookkeeping fields are preserved server-side. A get_rule document already carries map_attribute_value search/replace in the correct {value:''}-objects form (paired by index) — edit those entries verbatim, never flatten them to plain strings (plain strings save but map nothing). update_rule keeps ruleId + every attachment, so the edit updates all attributes using this rule; the value/options mapping is not run by validate_rule's dry-run — verify after a real export/build. scope selects the library: 'project' (default) or 'shared_template' (a template_read_only error means your access cannot write there). Returns {ruleId, scope, status, changed, reason, validation}; status 'updated' / 'no_changes' on success, or 'rejected' with the validation errors when invalid (HTTP 200, nothing written). SAVE-ONLY: the edit reaches a feed's output only after export_feed on the feeds that use this rule. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects).
| Name | Required | Description | Default |
|---|---|---|---|
| rule | Yes | ||
| scope | No | Which library the rule lives in: 'project' (default) = the project's own library; 'shared_template' = the reusable shared template library. | |
| rule_id | Yes | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state readOnlyHint=false, idempotentHint=true, destructiveHint=false. The description adds substantial behavioral context: server-side preservation of bookkeeping fields, ruleId and attachments are kept, map_attribute_value objects must remain verbatim, validate_rule's dry-run does not execute value/options mapping, and updates only reach feed output after export_feed. It also discloses HTTP 200 behavior on rejected validation with nothing written.
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 long but every sentence carries necessary operational detail for a complex mutation with no output schema. It front-loads the core purpose and critical validation rule, then systematically covers identification, document structure, editable fields, return statuses, and post-update export requirements. 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 the complex nested rule parameter, no output schema, and the nuanced relationship with validate_rule and export_feed, the description is complete. It covers required inputs, optional inputs, scoping, validation behavior, return contract, authentication-relevant scope errors, and downstream effects. An agent has enough information to call 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?
Schema description coverage is only 25% (only scope has a description). The description compensates fully: it explains rule_id identification, provides the complete nested rule document shape, clarifies scope values and the template_read_only failure mode, and explains project_id optionality with single-project inference versus project_id_required.
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 'Update an EXISTING product rule (Attribute Rule)', which states a specific verb, resource, and scope. It clearly differentiates from sibling tools like create_rule and delete_rule by emphasizing 'EXISTING' and describing the full update workflow.
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 explicitly prescribes the safe pattern: get_rule, edit the returned document, validate_rule, then update_rule. It also names where to get rule_id (list_rules / get_rule) and explains when scope selects 'project' vs 'shared_template'. It also addresses edge conditions like template_read_only errors and project_id_required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_ruleARead-onlyInspect
Validate a product rule (Attribute Rule) WITHOUT saving it. ALWAYS call this before create_rule / update_rule and fix every error first. Pass the full rule document as rule — {name, description, category, icon, rules:[{sortId, enabled, type, conditions, operationGroups:[{mode, parentMode, attributes, operations: [{name, arguments:{key:value}}]}]}]} (see discover_rule_operations for the operation/condition/argument vocabulary). Returns {valid, errors:[{path, code, message}], warnings:[{path, code, message}], dryRun}. Errors are blocking — the rule will be rejected on save; warnings are advisory. If you also pass a sample_product (a flat {attributeCode:value} record, e.g. from preview_products) and the rule is structurally valid, the server dry-runs it and returns dryRun:{matchedRuleSortId, computedValue, usedAttributes} so you can confirm the output before saving. This tool NEVER writes. project_id is OPTIONAL (inferred for a single-project customer; project_id_required otherwise — then call list_projects). When you do NOT pass sample_product, the server auto-samples a real product to compute dryRun, so the computedValue is real data returned only after you set acknowledge_sensitive:true: the first such call (flag absent/false) returns {sensitiveGate:{confirmationRequired:true, itemCount, fields, kind}} with the computedValue EMPTY — present that gate to the USER, get their approval, then re-call with acknowledge_sensitive:true. (If you passed your own sample_product you already hold that data, so no gate applies and the computedValue is returned directly.) DRY-RUN LIMITATION: AI-group operations — notably map_attribute_value (value/options mapping) — are NOT executed by the dry-run. It returns valid:true with computedValue = the input UNCHANGED (passthrough) even when the mapping is correct; this is expected, not a bug, so do NOT treat the unchanged value as a failure. Verify a value/options mapping only AFTER a real build/export: feed → export_feed then verify_feed_attributes; marketplace/ad → repair_marketplace / run_marketplace_operation (or the ad equivalents) then get_*_report.
| Name | Required | Description | Default |
|---|---|---|---|
| rule | Yes | ||
| project_id | No | ||
| sample_product | No | A flat {attributeCode:value} record (e.g. from preview_products) to dry-run the rule against; when omitted the server auto-samples a real product. | |
| acknowledge_sensitive | No | Set true only AFTER the user approves seeing real data. Only relevant when the server auto-samples (no sample_product given): absent/false returns a sensitiveGate with computedValue empty; true returns it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description reinforces this with 'This tool NEVER writes.' It goes well beyond annotations by disclosing the auto-sampling behavior, the sensitiveGate flow with acknowledge_sensitive, and the critical dry-run limitation where AI-group operations pass through unchanged — even explaining this is expected and not a bug.
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 long but every sentence carries essential operational detail, and the primary purpose is front-loaded in the first sentence. It is organized into distinct paragraphs for purpose, return structure, project_id handling, sensitive data gating, and dry-run limitations, making it dense but navigable with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description fully documents return shapes: {valid, errors, warnings, dryRun}, the sensitiveGate object, and dryRun's {matchedRuleSortId, computedValue, usedAttributes}. It also covers error versus warning semantics, edge cases around sample_product absence, and points to discover_rule_operations for vocabulary — leaving no gap for an agent to call it correctly in the stated scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, and the rule parameter is an opaque object with additionalProperties:true while project_id has no description. The description compensates by providing the full rule document shape inline, explaining project_id's conditional requirement (inferred vs. required via list_projects), and clarifying how sample_product and acknowledge_sensitive interact with the sensitive gate — adding substantial meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific, action-oriented statement: 'Validate a product rule (Attribute Rule) WITHOUT saving it,' making the primary purpose immediately clear. It also distinguishes the tool from its siblings by explicitly naming create_rule and update_rule as the operations it precedes, so an agent can tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says exactly when to use the tool: 'ALWAYS call this before create_rule / update_rule and fix every error first.' It also covers when to call alternatives (list_projects when project_id is required) and explicitly warns against using the dry-run to verify value/options mappings, routing instead to export_feed/verify_feed_attributes and repair_marketplace/run_marketplace_operation alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_feed_attributesARead-onlyInspect
File-level check of a feed's attribute mapping (reads the generated feed file). Inputs: feed_id (the feed's id from list_feeds / create_feed), project_id (OPTIONAL — inferred for a single-project customer; project_id_required if they have several, then call list_projects), sample_size (default 20, max 20), offset (default 0 — skip this many items to verify a deeper page of the feed; page by increasing offset in steps of sample_size). Returns deterministic findings against the generated feed file: missingSource (required attributes with no source in the config), emptyInOutput (required attributes empty in the sampled items), specViolations (values outside the channel's allowed set), plus the feed spec (required + allowedValues per attribute) and a sample of items {field: value}. After reading the deterministic findings, YOU do the semantic pass: over sample vs spec, judge whether open-ended values (titles, descriptions, urls, prices, categories) look correct/plausible for the channel, then summarise the problems and suggest concrete config fixes in the feed. status is ok | issues_found | file_missing (file_missing = the feed hasn't been generated yet). The sampled feed rows and violation values are real data returned only after you set acknowledge_sensitive:true. The first call (flag absent/false) returns {sensitiveGate:{confirmationRequired:true, itemCount, fields, kind}} with the sample rows / violation values EMPTY — present that gate to the USER, get their approval, then re-call with acknowledge_sensitive:true to receive the actual values. To fix findings: map_feed_attribute for each, then export_feed, then re-run this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Skip this many items to verify a deeper page of the feed; page by increasing offset in steps of sample_size (default 0). | |
| feed_id | Yes | ||
| project_id | No | ||
| sample_size | No | How many feed items to sample and verify (default 20, max 20). | |
| response_format | No | Verbosity of the result. 'full' (default) includes the sampled rows and the full spec; 'compact' asks for the findings + status only (omit sample and spec) to save context. | |
| acknowledge_sensitive | No | Set true only AFTER the user approves seeing real data. When absent/false the tool returns a sensitiveGate with empty sample rows / violation values; with true it returns the actual values. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals behavior well beyond the readOnlyHint/destructiveHint annotations: it explains that the tool reads a generated file, returns deterministic findings, gates real sample data behind a user-approval flow (acknowledge_sensitive), returns an empty sensitiveGate on first call, and exposes a file_missing status. It also describes paging by offset. This is rich behavioral context with no annotation contradiction.
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 long, but every sentence carries operational value: purpose, input semantics, output shape, sensitive-data gate, paging, and next-step fixes. It is front-loaded with the core purpose before parameter details. It could be tightened slightly (e.g., the sensitive-gate flow is repeated twice), but given the complexity of 6 parameters and a multi-step approval workflow, the length is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by specifying return fields (missingSource, emptyInOutput, specViolations), the spec and sample structure, the status enum values, and the sensitiveGate shape. It also covers the full call sequence (first call, user approval, re-call with acknowledge_sensitive) and the post-processing responsibilities of the agent. Nothing an agent needs to call and interpret 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?
The schema covers 67% of parameters, but the description adds meaning for the two undocumented ones: feed_id (sourced from list_feeds / create_feed) and project_id (optional vs required based on multi-project customers, with a pointer to list_projects). It also enriches acknowledge_sensitive (first-call gate vs actual values) and offset (page by increasing offset in steps of sample_size), going beyond the schema text. A small deduction because response_format is not explained in the description, though the schema covers 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 opening sentence is explicit: 'File-level check of a feed's attribute mapping (reads the generated feed file).' It names a specific verb (verify), a specific resource (feed attribute mapping), and the mechanism (reads the generated feed file), which distinguishes it from sibling tools like get_feed or get_feed_status that 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 provides clear usage context: it must be run against a generated feed file, and it tells the agent when to call list_projects ('project_id_required if they have several, then call list_projects'). It also gives a follow-up workflow ('To fix findings: map_feed_attribute for each, then export_feed, then re-run this tool'), which implies when this tool is the right verification step. It does not explicitly state when to prefer an alternative like get_feed, so it loses a point.
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. Dates show when Glama detected each change.
105 tool updates
- First observed
ad_status - First observed
clone_ad - First observed
clone_marketplace - First observed
configure_ad_step - First observed
configure_marketplace_step - First observed
configure_order_connection - First observed
create_ad - First observed
create_feed - First observed
create_marketplace - First observed
create_order_connection - First observed
create_rule - First observed
delete_ad - First observed
delete_ai_source - First observed
delete_api_source - First observed
delete_feed - First observed
delete_marketplace - First observed
delete_rule - First observed
discover_rule_operations - First observed
enable_marketplace_order_sync - First observed
export_feed - First observed
get_ad - First observed
get_ad_attributes - First observed
get_ad_channel - First observed
get_ad_item_history - First observed
get_ad_item_report - First observed
get_ad_report - First observed
get_attribute_options - First observed
get_category_mapping - First observed
get_feed - First observed
get_feed_output - First observed
get_feed_status - First observed
get_import_status - First observed
get_marketplace - First observed
get_marketplace_attributes - First observed
get_marketplace_channel - First observed
get_marketplace_item_history - First observed
get_marketplace_item_report - First observed
get_marketplace_report - First observed
get_order_connection - First observed
get_order_overview - First observed
get_project_profile - First observed
get_rule - First observed
get_value_mapping_inputs - First observed
koongo_knowledge - First observed
list_ad_channels - First observed
list_ad_items - First observed
list_ads - First observed
list_ai_sources - First observed
list_api_sources - First observed
list_feed_templates - First observed
list_feeds - First observed
list_marketplace_channels - First observed
list_marketplace_items - First observed
list_marketplaces - First observed
list_order_channels - First observed
list_orders - First observed
list_projects - First observed
list_rules - First observed
list_source_attributes - First observed
list_store_categories - First observed
list_unmapped_categories - First observed
map_ad_attribute - First observed
map_feed_attribute - First observed
map_marketplace_attribute - First observed
marketplace_status - First observed
pause_ad - First observed
pause_feed - First observed
pause_marketplace - First observed
preview_products - First observed
refresh_ad_category_attributes - First observed
refresh_marketplace_category_attributes - First observed
repair_ad - First observed
repair_marketplace - First observed
report_mcp_issue - First observed
restore_feed - First observed
resume_ad - First observed
resume_feed - First observed
resume_marketplace - First observed
run_ad_item_action - First observed
run_ad_operation - First observed
run_import - First observed
run_marketplace_item_action - First observed
run_marketplace_operation - First observed
search_target_categories - First observed
set_ad_name - First observed
set_ad_product_mode - First observed
set_ai_source - First observed
set_api_source - First observed
set_category_mapping - First observed
set_feed_attribute_filter - First observed
set_feed_filter - First observed
set_feed_settings - First observed
set_marketplace_name - First observed
set_marketplace_order_mode - First observed
set_marketplace_product_mode - First observed
submit_feed - First observed
sync_marketplace_orders - First observed
sync_project_orders - First observed
test_ad_connection - First observed
test_marketplace_connection - First observed
test_order_connection - First observed
update_feed - First observed
update_rule - First observed
validate_rule - First observed
verify_feed_attributes
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Run storefronts, listings, orders, content, fulfillment, and analytics through AI.
Manage your Jumpseller store with AI. Products, orders, customers, and more.
Run an eBay seller account from your AI assistant: orders, listings, stock, fees and payouts.
- skulayerOAuthcom.skulayer
Preview-first feed optimization for retailers and agencies: audit, fix and serve product feeds.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceConnects AI assistants to Wildberries and Ozon seller accounts for real-time access to sales, stocks, prices, finances, and reviews through official APIs.MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to search products and generate affiliate links across European and global affiliate networks, automating product discovery and link creation for monetization.25MIT
- FlicenseAqualityDmaintenanceEnables AI assistants to browse Admitad affiliate programs, discover product feeds, and search products directly from chat.82-
- FlicenseNot gradedqualityCmaintenanceEnables AI to view and manage e-commerce data such as products, orders, and coupons, and perform actions like updating prices, stock, and generating sales reports.-
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Tools are organized around distinct resources (ads, marketplaces, feeds, orders, rules, sources) with clear action verbs, and descriptions explicitly disambiguate near-pairs like get_feed_status vs ad_status or set_feed_filter vs set_feed_attribute_filter. A few similarly named status/action pairs (e.g. ad_status vs get_ad, run_ad_item_action vs run_ad_operation) require careful reading, but overall the purposes are separable.
The overwhelming majority follow a consistent verb_noun snake_case pattern (list_*, get_*, create_*, set_*, run_*, test_*). Minor deviations like ad_status and marketplace_status (noun-based status tools) and koongo_knowledge break the pattern slightly, but the convention is clearly recognizable and predictable.
At 105 tools, the surface is extreme and far beyond the 50+ threshold, even for a complex e-commerce integration domain. Much of the bloat comes from systematic triplication across ads, marketplaces, and feeds (e.g. three nearly identical map_*_attribute tools, three list_*_items, three get_*_report) that a generic resource parameter could have consolidated.
The toolset covers the full lifecycle of feeds, ads, marketplaces, order connections, rules, and imports, including create/read/update/delete, status monitoring, item-level actions, validation, repair, and restore. Minor gaps exist, such as no delete for standalone order connections and limited update capabilities for some entities, but these are workable and do not create dead ends for the core workflows.