Skip to main content
Glama

Server Details

Operate Obriym CRM from your AI assistant: leads, deals, orders, catalog, stock, marketplaces.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 51 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.8/5.0

Scored across 102 tools

Disambiguation4/5

Tool purposes are mostly distinct, with descriptions carefully delineating boundaries around CRM entities, catalog operations, orders, content, and eBay workflows. However, with 102 tools there are close clusters (eBay drafts vs. variations vs. fulfillment policies, product price vs. channel price vs. tiers) that could still invite occasional misselection.

Naming Consistency4/5

Names are almost uniformly snake_case verb_noun (create_lead, get_order, set_product_channel_price, withdraw_ebay_listings), with predictable verb choices across CRUD, search/list, and eBay operations. Minor deviations like add vs. create, upsert vs. update, and long compound eBay names are readable and consistent enough for an agent.

Tool Count1/5

At 102 tools, the server is far beyond the practical 3–15 range and represents an extreme surface for an agent to navigate. Even with grouping by domain, this count creates substantial cognitive load and significantly increases misselection risk.

Completeness3/5

The surface covers many CRM and commerce workflows, including leads, contacts, deals, orders, catalog products, content posts, and eBay publishing. But lifecycle coverage is uneven: there is no delete/archive for core CRM entities such as leads, contacts, companies, deals, and activities, and suppliers/warehouses are only listable.

Available Tools

102 tools
add_order_itemAdd order itemAInspect

Add a line item to an existing order by its externalId. Recomputes the order total. Only allowed while the order is pending or confirmed; on any other status (processing and later, cancelled, refunded) it fails with 409 CONFLICT "Order lines can only be changed while the order is pending or confirmed". Use list_orders or create_order for the order externalId, and search_products to quote a real product. The result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
skuNoProduct SKU snapshot (from search_products). Optional.
discountNoPercentage discount on this line (0-100). Default 0.
quantityYesQuantity ordered (integer, at least 1).
unitPriceYesPrice per unit in the order currency, as a decimal (e.g. 199.99). Snapshotted onto the line.
externalIdYesThe order externalId returned by list_orders or create_order.
productNameYesLine item name, snapshotted onto the order. Use search_products to quote a real catalog product's name. Required.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare the safety profile (readOnly=false, idempotent=false, destructive=false). The description adds non-obvious behavior the annotations cannot: the order total is recomputed as a side effect, the exact 409 CONFLICT message for disallowed statuses, and that the response echoes the operating workspace.

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

Conciseness5/5

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

Front-loaded with the core action and constraint, then alternatives and the return hint. No filler sentences; every clause carries information the agent needs before calling.

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

Completeness5/5

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

For a 6-param mutation with no output schema, the description supplies the mutation side effect, the state precondition with its exact failure mode, the sourcing path for identifiers, and a note on the response payload. Nothing needed 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds sourcing guidance beyond the schema by telling the agent where externalId comes from (list_orders/create_order) and that productName should be quoted from search_products. It adds meaning for the two most error-prone fields.

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

Purpose5/5

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

States a specific verb+resource ('Add a line item to an existing order') and scopes it by externalId, which cleanly separates it from create_order, update_order_item, and remove_order_item in the sibling set.

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

Usage Guidelines5/5

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

Explicitly names the states in which it is allowed (pending/confirmed) and the states that produce a 409, and routes the agent to list_orders/create_order for the externalId and search_products to source a real product. When-to-use and when-not-to-use are both covered.

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

add_product_imagesAdd product imagesAInspect

Add photos to ONE product, after the photos it already has: public https image links (images, each with an optional caption), files the person attached in ChatGPT (files — ChatGPT fills it), or links returned by create_image_upload for files on the agent's own machine. Obriym downloads every image and stores its OWN COPY in the workspace's storage — the link may be temporary and nothing hotlinks to it. Limits: JPEG, PNG or WebP, at most 2 MB each (a bigger file is refused — there is no resize), at most 10 photos per product. All or nothing: if any link fails, or the total would exceed 10, nothing is stored and the reason is returned. Saves through the product form's own operation (version check, audit, channel updates). Not idempotent: repeating the call adds the photos again. Returns the product's full photo list { url, alt } — the first is the main photo. Use get_product first to see the current photos and update_product_images to reorder, caption or remove them. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
filesNoImage files the person attached in ChatGPT. ChatGPT fills this field itself; any other client leaves it out and passes image links instead (or uploads files with create_image_upload).
imagesNoPhotos to ADD after the product's current ones, in order. The product may hold at most 10 photos in total; a request that would exceed it is refused and nothing is stored.
productIdYesThe product id from search_products or get_product.

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare non-readOnly, non-idempotent, openWorld, non-destructive. The description restates 'Not idempotent: repeating the call adds the photos again' (matching idempotentHint=false), and its true added value is the operational detail: it downloads and stores its own copy, format/2MB/10-photo limits, and all-or-nothing refusal semantics. Useful context beyond annotations, though the safety profile is mostly carried by 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.

Conciseness4/5

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

Front-loaded with the core action and scope, then limits, then atomicity and return. Dense but every sentence carries distinct information (limits, atomicity, non-idempotency, version check). It is long for a 3-param tool, which keeps it from a 5.

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

Completeness5/5

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

No output schema exists, and the description explicitly documents the return (full photo list {url, alt}, first is the main photo). It covers limits, atomicity, side effects through the product form operation, and routing context — nothing material is left out.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real meaning the schema doesn't: the files field is filled by ChatGPT itself while other clients pass images or use create_image_upload, and the relationship/composition of the two arrays. It goes beyond restating field docs.

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

Purpose5/5

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

States a specific verb+resource+scope: 'Add photos to ONE product, after the photos it already has.' It explicitly differentiates itself from the sibling update_product_images (reorder/caption/remove) and get_product, so an agent can select it 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.

Usage Guidelines5/5

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

Names the three input routes (public https links via images, ChatGPT-attached files via files, or create_image_upload for local files) and the routing alternative: use get_product first to inspect, update_product_images to modify existing photos. Explicit when-to-use and when-not-to-use.

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

adjust_stockAdjust stockA
Destructive
Inspect

Move a product stock by a relative delta (negative to write off, positive to add) with a reason, and record it in the stock history. This is the correct tool for a correction, a write-off or damage — it never sets an absolute number, so an order committing at the same moment is not overwritten. The reason decides the direction: write_off, damage and return_to_supplier must carry a negative delta, opening_balance a positive one, while correction and other accept either; a delta that contradicts its reason is rejected. Any other word is your own vocabulary and is accepted in either direction. The product must already track inventory; a product that does not returns a conflict rather than having tracking switched on for it. A bundle also returns a conflict: its stock is derived from its components, so adjust each component instead. Pass a stable externalId to make a retry idempotent. The new stock is pushed to every connected sales channel. The result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
deltaYes
reasonYes
metadataNo
productIdYes
externalIdNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds substantial context: stock history is recorded, reason/delta contradictions are rejected, non-tracked products and bundles return conflicts, externalId makes retries idempotent, and new stock is pushed to connected sales channels. These are meaningful behavioral traits beyond the annotations.

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

Conciseness5/5

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

The description is long but front-loaded and well structured: it starts with the core operation, then covers usage, reason constraints, conflict cases, idempotency, and side effects. Every sentence carries operational value, and the ordering follows what an agent needs to decide whether and how to call the tool.

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

Completeness4/5

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

Given a six-parameter mutation tool with no output schema and annotations that only cover safety hints, the description is nearly complete: it covers behavior, validation, conflicts, idempotency, and side effects. The main gaps are the unexplained optional parameters (note, metadata) and only a minimal statement about the return value.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the burden. It adds important semantics for delta (relative, negative/positive), reason (direction rules and vocabulary), and externalId (idempotency), but it does not explain note or metadata at all, leaving two of six parameters undocumented.

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

Purpose5/5

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

The description states a specific verb and resource ('Move a product stock by a relative delta') and immediately distinguishes the operation from an absolute stock set. It also names the precise scenarios it serves (correction, write-off, damage) and contrasts its behavior with an order commit that might otherwise overwrite stock.

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

Usage Guidelines5/5

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

It explicitly says this is the correct tool for correction, write-off, or damage, and that it never sets an absolute number. It also gives clear when-not guidance for bundles ('adjust each component instead') and explains how reason constrains the allowed delta direction.

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

apply_bulk_price_changeApply bulk price changeA
Destructive
Inspect

Apply a bulk price change — step 2 of 2, after preview_bulk_price_change. Send the SAME rule, scope and target and the digest the preview returned, copied verbatim and never invented. The plan is recomputed from live prices and refused with CONFLICT if it no longer matches the digest (prices moved, or the rule would compound on a retry) — preview again and show the person the new numbers. Changes real prices: a selling price reaches connected channels where the owner armed price writes; a purchase cost is never published. Returns { affected, skipped }. Needs the owner's "AI may change prices in bulk" switch (Settings → Integrations → Connect AI); without it the call is refused and you should tell the person to ask the owner. Not idempotent for percent rules — never repeat a successful apply. Confirm with the person unless they asked for the change outright. Echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
ruleYesHOW prices move. The target 'cost' accepts only op 'percent'. Pick the one that matches the request: a percent change, a fixed price, a markup over cost, a discount (and its end), or the old price.
scopeYesWHICH products. Prefer a named container (category, brand, supplier, warehouse) when the person says 'all products of …' — it is read back by name in the preview. There is no free filter: a request like 'everything cheaper than 100' is not a scope; find the products first and send their ids.
digestYesThe digest returned by preview_bulk_price_change for THIS rule, scope and target — copied verbatim, never invented. If prices moved since, the apply returns CONFLICT and you must preview again.
targetNoWHICH number moves. Omit it to change the product's own selling price. Use {field:'price', currency:'EUR'} for the euro price list, {field:'cost'} for the purchase cost.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover destructive/non-idempotent/openWorld, yet the description adds material behavior: which numbers reach connected channels versus the never-published purchase cost, the CONFLICT-on-drift mechanism, the required owner switch in Settings, and the return shape { affected, skipped }. This is well beyond what the structured fields disclose.

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

Conciseness4/5

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

Front-loaded with purpose and the step-2 relationship, then dense but non-redundant detail. It is long, but nearly every clause (conflict handling, switch requirement, non-idempotency, confirmation) earns its place; minor tightening would help.

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

Completeness5/5

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

For a destructive, non-idempotent bulk mutation with no output schema, the description supplies the return shape, the safety gate, the failure mode, and the confirmation expectation. An agent has everything needed to call it correctly and to explain the outcome to a person.

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

Parameters3/5

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

Schema description coverage is 100%, so rule/scope/target/digest are already richly documented in the schema, and the digest field itself already says 'copied verbatim, never invented.' The description reinforces the 'send the SAME ...' contract but adds little parameter meaning the schema lacks, so baseline 3 applies.

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

Purpose5/5

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

Opens with a specific verb+resource and immediately positions the tool as 'step 2 of 2, after preview_bulk_price_change', so the agent can distinguish it from the sibling preview tool without opening either schema. It also states the concrete effect (changes real prices).

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

Usage Guidelines5/5

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

Gives explicit when-to-use (only after a preview, sending the SAME rule/scope/target/digest), when-not (never repeat a successful apply), refusal conditions (CONFLICT on digest mismatch, missing owner switch), and the confirmation policy ('confirm with the person unless they asked for the change outright'). Rarely does a definition cover this much routing and gating.

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

archive_productsArchive productsA
DestructiveIdempotent
Inspect

Archive up to 100 products — this is how an AI client removes a product. It leaves sale and every sales channel's feed, and nothing is erased: update_product with status active or draft restores it. Hard deletion is not available over MCP. A product that a non-archived bundle is made of is NOT archived: it is listed in heldByBundle with the bundles that contain it — archive or change those bundles first. Archiving also asks Prom to take the product's listings down; notAttempted counts takedowns not reached in time. To end a live eBay listing use withdraw_ebay_listings. Returns { affected, skipped, notAttempted, heldByBundle } — skipped products were already archived. Idempotent. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdsYesThe products to archive, at most 100 ids from search_products.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only say destructive/idempotent/openWorld=false; the description goes well beyond by disclosing that nothing is erased and how to reverse it, the heldByBundle partial-failure mode, the notAttempted takedown semantics via Prom, the meaning of skipped (already archived), and the exact return fields. That is exactly the mutation/partial-success context an agent needs before calling 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.

Conciseness4/5

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

Front-loaded with the action and its role, and nearly every clause carries required behavioral detail (restoration, bundle blocking, takedowns, return fields). It is dense to the point of being slightly clause-heavy, and the trailing 'The result echoes the workspace' is cryptic, but there is little outright waste.

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

Completeness5/5

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

With no output schema, the description takes on the burden of explaining the return shape ({ affected, skipped, notAttempted, heldByBundle }) and the meaning of each field, plus partial-failure and reversibility semantics. For a destructive batch tool, nothing material is missing.

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

Parameters3/5

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

Schema coverage is 100% and there is only one parameter, whose schema already documents the 100-id maximum and that ids come from search_products. The description restates 'up to 100 products' but adds no new syntax or format detail beyond the schema. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Archive up to 100 products') and immediately scopes it as the removal path ('this is how an AI client removes a product'). It distinguishes itself from update_product (restore path), withdraw_ebay_listings (live eBay listings), and rules out hard deletion over MCP, so an agent can route correctly without reading siblings' schemas.

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

Usage Guidelines5/5

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

Explicit when-to-use (removing a product), explicit when-not/alternative paths (update_product with status active or draft to restore; withdraw_ebay_listings to end a live eBay listing), and an explicit blocker condition (products held by a non-archived bundle are not archived — handle bundles first). Nothing is left to inference.

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

assign_leadAssign leadA
Destructive
Inspect

Assign a lead to a workspace member by user id, or pass assignedTo=null to unassign. Use search_leads to find the lead id and get_workspace_info to confirm the operating workspace. The result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe lead id returned by search_leads.
assignedToYesUser id of the workspace member to assign the lead to. Pass null to unassign.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds further context by explaining the unassign behavior ('pass assignedTo=null to unassign') and the return echo ('The result echoes the operating workspace'), which goes beyond the structured 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.

Conciseness5/5

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

The description is three concise sentences: first states the core action, second provides usage guidance, third notes the return behavior. It is front-loaded and every sentence provides useful information without repetition.

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

Completeness4/5

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

Given the tool's simplicity, the annotations, and the absence of an output schema, the description covers the purpose, parameters, prerequisites, and a return detail. It could mention overwriting existing assignments or side effects of unassigning, but it is largely complete for a straightforward mutation tool.

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

Parameters3/5

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

Schema coverage is 100% and both parameters already have clear descriptions ('The lead id returned by search_leads' and 'User id of the workspace member... Pass null to unassign'). The tool description mostly reinforces these without adding new semantic detail, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific action: 'Assign a lead to a workspace member by user id,' and also covers the null case for unassignment. This clearly distinguishes it from sibling tools like update_lead or convert_lead by focusing on the assignment/reassignment act.

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

Usage Guidelines4/5

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

The description provides explicit workflow guidance: 'Use search_leads to find the lead id and get_workspace_info to confirm the operating workspace.' It explains the prerequisite steps but does not explicitly mention when not to use this tool or name alternatives, so it misses the highest bar.

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

bulk_set_ebay_fulfillment_policySet eBay shipping policy for productsA
DestructiveIdempotent
Inspect

Choose one eBay shipping (fulfillment) policy — or null for the connection default — for up to 25 products on one eBay site, with the same per-product rules as set_product_ebay_fulfillment_policy: no listing stores the choice; a draft or live listing has its offer updated in place and read back. The policy is checked against eBay once before any product is touched, and a product whose listing lives on another eBay site fails with marketplaceMismatch instead of being moved. Returns results per product (status updated, unchanged, saved, unverified or failed with the eBay error), counts and notAttempted (not reached in the time budget — call again with those ids). Refused until the workspace owner switches on AI publishing. Idempotent. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdsYesThe products to change, at most 25 ids from search_products.
marketplaceIdNoThe eBay MARKETPLACE id the policy belongs to, such as EBAY_IT. Omit it when the eBay connection sells on one site. A product whose eBay offer lives on another site is reported as failed, never moved.
fulfillmentPolicyIdYesA fulfillmentPolicyId from list_ebay_fulfillment_policies, for the same marketplace. null removes the product's own choice so the connection default (then eBay's first policy) applies.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the destructive/idempotent/open-world profile, but the description adds real context beyond them: the policy is validated against eBay once before any write, cross-marketplace listings fail with marketplaceMismatch rather than being moved, and writes are refused until the workspace owner enables AI publishing. It also documents partial-failure and time-budget semantics (notAttempted). 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.

Conciseness4/5

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

A single dense paragraph that front-loads the core action and scope before the edge cases. Almost every clause earns its place (validation order, failure mode, auth gate, retry rule), though the density makes it slightly heavy for a 3-parameter tool.

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

Completeness5/5

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

With no output schema, the description supplies the return contract (per-product status of updated/unchanged/saved/unverified/failed plus counts and notAttempted) and the required auth prerequisite. Combined with the 100% schema coverage, an agent has everything needed to call and interpret this tool.

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

Parameters3/5

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

Schema description coverage is 100%, so fulfillmentPolicyId, marketplaceId and productIds are already documented in the schema, including the null-means-default semantics and the 25-id cap. The description restates the maximum and the null behavior rather than adding new meaning, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource with scope: set one eBay fulfillment policy on up to 25 products on one site. It explicitly names the sibling it mirrors (set_product_ebay_fulfillment_policy) and differentiates itself as the bulk variant, so an agent can route between them without opening either schema.

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

Usage Guidelines4/5

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

Gives clear operating conditions: one policy for many products, null reverts to the connection default, and notAttempted ids should be re-submitted. It does not explicitly state when to prefer this over the single-product sibling, leaving that inference to the agent, so it falls 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.

check_channel_readinessCheck channel readinessA
Read-only
Inspect

Check locally which products a marketplace will refuse and why — missing price, unusable price, blank name, unmapped category — grouped by what fixes them, without calling the marketplace. The response separates blocked (these products do NOT go out) from warnings (these DO go out, but probably will not be published as the merchant expects: a price in a currency the platform does not name, no words of their own in a language the channel reads, a placeholder description, characteristics the marketplace does not recognise). Local checks exist for prom, rozetka, google_merchant and olx; other platforms report their connection state through get_marketplace instead. If the channel is not connected the call fails with NOT_FOUND (" is not connected in this workspace") instead of reporting an empty channel — use list_marketplaces to see which are connected. This never publishes anything: it reports what would happen.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformYesThe marketplace slug returned by list_marketplaces (prom, rozetka, olx, amazon, ebay, shopify, woocommerce).

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the read-only, non-destructive, closed-world profile, and the description adds substantial behavioral context beyond them: the blocked-vs-warnings semantics, the meaning of each warning class, the NOT_FOUND failure mode when a channel is not connected, and a firm guarantee that 'this never publishes anything.'

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

Conciseness4/5

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

Dense but front-loaded — the core purpose leads, followed by output semantics, platform coverage, and error behavior. Every sentence carries information (fixes grouping, blocked/warnings, error mode), though the parenthetical warning examples run long and could be tightened.

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

Completeness5/5

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

With no output schema, the description carries the full burden and delivers: it explains the returned structure (blocked vs warnings, grouped by fix), the failure mode, and platform coverage. Nothing an agent needs to invoke or interpret the result is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the platform slug is documented in the schema. The description adds value beyond it by clarifying that only some platforms (prom, rozetka, google_merchant, olx) support local checks and that the slug comes from list_marketplaces, giving per-platform behavioral meaning the schema alone does not convey.

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

Purpose5/5

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

Specific verb and scope: 'Check locally which products a marketplace will refuse and why' names the exact resource (products per marketplace) and the failure categories (missing price, blank name, unmapped category). It clearly distinguishes itself from siblings like get_marketplace and list_marketplaces, so an agent can pick it without opening a schema.

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

Usage Guidelines5/5

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

Explicit when-to-use and when-not: 'without calling the marketplace' establishes the local-check use case, and it names the platforms with local checks (prom, rozetka, google_merchant, olx) versus others that 'report their connection state through get_marketplace instead.' It also routes the agent to list_marketplaces for connection status.

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

complete_activityComplete activityA
Destructive
Inspect

Mark an activity (task, call, or meeting) as completed by its id. Use list_activities first to find the activity id. The result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe activity id returned by list_activities.

TDQS

A4.3/5.0
Behavior4/5

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

The description discloses that the result echoes the operating workspace, adding behavioral context beyond the destructiveHint annotation. It doesn't describe other side effects, but the annotation already signals a state-changing operation.

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

Conciseness5/5

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

Two sentences, each with a distinct purpose: the first states the action and allowed activity types, the second gives the workflow and result. No wasted words.

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

Completeness5/5

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

For a single-parameter mutation tool with no output schema, the description fully covers what the tool does, how to use it, and what to expect in the response. It is complete.

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

Parameters3/5

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

The schema already documents the id parameter with the same source (list_activities), so the description adds no new semantic information beyond reinforcing the prerequisite identified in the schema.

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

Purpose5/5

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

The description uses the specific verb 'mark as completed' and specifies the resource 'activity (task, call, or meeting) by its id', clearly distinguishing it from sibling tools like create_activity and list_activities.

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

Usage Guidelines4/5

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

It explicitly instructs users to call list_activities first to obtain the id, providing clear usage workflow. However, it doesn't explicitly contrast alternatives or state when not to use this tool.

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

configure_pipelineConfigure pipeline stageA
Destructive
Inspect

Update an existing pipeline stage's name, default probability, or WIP limit. Provide the stage id (from list_pipeline_stages) and ONLY the fields to change — omitted fields keep their current value; wipLimit null removes the limit. A name cannot be blank and must be unique among stages (409 CONFLICT otherwise). Stages cannot be created here, and stage order and terminal behavior are fixed. The result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe pipeline stage id returned by list_pipeline_stages.
patchYesPipeline stage fields to change: name, defaultProbability and/or wipLimit. Provide at least one; omitted fields are left as they are.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, so the safety profile is covered, yet the description still adds real behavioral detail beyond them: partial-update merge semantics, that wipLimit null removes the limit, that a blank or duplicate name yields 409 CONFLICT, that stage order/terminal behavior are immutable, and that the response echoes the operating workspace.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the action and the field list before the patch contract and edge cases. Every clause carries load: field scope, id provenance, merge behavior, null semantics, conflict condition, and immutability.

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

Completeness5/5

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

For a mutation tool with no output schema and a nested patch object, the description covers everything needed to call it correctly: required inputs, partial-update behavior, the null-removal case, the conflict failure mode, immutability boundaries, and what the response echoes.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents id, name, wipLimit and defaultProbability, making 3 the baseline. The description earns above that by supplying the cross-field patch rule and the name-uniqueness/409 constraint, which the schema does not express (its minLength only rules out blank names, not duplicates).

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

Purpose5/5

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

States a specific verb (Update) plus the exact resource (an existing pipeline stage) and enumerates the three mutable fields (name, default probability, WIP limit). It also fences off what the tool is not ("Stages cannot be created here"), which cleanly separates it from creation tools and from list_pipeline_stages, which it names as the id source.

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

Usage Guidelines5/5

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

Explicitly tells the agent where to get the id (from list_pipeline_stages), the patch contract ("ONLY the fields to change — omitted fields keep their current value"), and the when-not conditions (stages cannot be created here; order and terminal behavior are fixed). No inference is required to pick this tool over a sibling.

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

convert_leadConvert leadA
Destructive
Inspect

Convert a lead into a contact, company, and/or deal (select at least one via the input flags). Sets the lead status to converted. Use search_leads first to find the lead id. The result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe lead id returned by search_leads.
inputYesConversion options that decide whether to create/link contact, company and deal records.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already flag this as destructive and not read-only. The description adds value by specifying the behavioral side effect: 'Sets the lead status to converted,' and by noting that 'The result echoes the operating workspace.' 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.

Conciseness5/5

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

The description is only three sentences, and every sentence earns its place: the first defines the operation and constraint, the second states the status side effect, and the third gives the prerequisite and result behavior. There is no redundant or filler content.

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

Completeness4/5

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

For a mutation tool with no output schema, the description covers the key prerequisites, the at-least-one constraint, and the side effect on lead status. The nested input object is fully documented by the schema. The only minor gap is not describing the exact result shape beyond echoing the workspace, but the schema and annotations carry enough for correct invocation.

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

Parameters4/5

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

The input schema covers 100% of parameters, which provides a strong baseline. The description adds important cross-parameter guidance not encoded in the schema: 'select at least one via the input flags.' It also reinforces that the id comes from search_leads, which helps the agent wire the required id parameter correctly.

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

Purpose5/5

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

The description states a clear, specific action: converting a lead into a contact, company, and/or deal, and sets the lead status to converted. This clearly distinguishes it from sibling tools like create_contact, create_company, create_deal, and update_lead because it describes a compound conversion operation with a status side effect.

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

Usage Guidelines4/5

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

The description gives a concrete prerequisite: 'Use search_leads first to find the lead id.' It also communicates the core usage context (converting an existing lead into one or more record types). It does not explicitly name alternatives or say when not to use this tool, but the context is clear enough for an agent to choose it correctly.

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

create_activityCreate activityAInspect

Create an activity (task, call, meeting, email, or note). Must link to at least one lead, contact, company, or deal — use search_leads/search_contacts/search_companies/search_deals to get the entity id. The result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesActivity type. One of: task, call, meeting, email, note.
titleYesShort title of the activity. Required.
dealIdNoDeal id to link the activity to (from search_deals). Link at least one entity.
leadIdNoLead id to link the activity to (from search_leads). Link at least one entity.
dueDateNoDue date/time, ISO 8601. Optional.
priorityNoPriority. Optional. One of: low, medium, high.
companyIdNoCompany id to link the activity to (from search_companies). Link at least one entity.
contactIdNoContact id to link the activity to (from search_contacts). Link at least one entity.
assignedToNoUser id of the workspace member to assign the activity to; null/omit for unassigned.
descriptionNoDetailed description or notes. Optional.
recurrenceRuleNoRecurrence rule: daily, weekly, or monthly. Optional (one-off if omitted).
recurrenceEndsAtNoWhen recurrence stops, ISO 8601. Optional; only meaningful with recurrenceRule.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already flag this as non-read-only and non-destructive; the description adds a non-obvious business constraint (must link at least one entity) and notes that the result echoes the operating workspace. This goes beyond the structured flags and contains 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.

Conciseness5/5

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

Two sentences, front-loaded with the primary action, and every clause adds information: activity types, the linking requirement, and the source for entity IDs. No filler or repetition of the title.

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

Completeness3/5

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

With 12 parameters and no output schema, the description covers the central workflow and linking requirement but leaves the return value ambiguous ('echoes the operating workspace') and doesn't describe the creation result. It's adequate for invoking the tool but not fully complete.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented. The description reinforces the 'link at least one entity' rule and points to search tools, but these details are largely already present in the schema's per-parameter descriptions, providing only marginal extra meaning.

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

Purpose5/5

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

The description opens with a specific verb and resource, enumerates the five allowed activity types, and names the entity types that must be linked. This clearly distinguishes create_activity from sibling read/update/complete activity tools and from other create_* tools.

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

Usage Guidelines4/5

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

It states the core use case and gives a concrete prerequisite: at least one linked entity, with search_leads/search_contacts/search_companies/search_deals explicitly named for obtaining IDs. It doesn't explicitly contrast with complete_activity/get_activity/list_activities, but the context is clear enough.

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

create_brandCreate brandAInspect

Create a catalog brand with optional description, website and per-language description translations. The brand NAME is never translated: marketplaces match the vendor name verbatim, so send it exactly as the vendor is known. The slug is normalized to Latin. A name already used in this workspace is rejected, so call list_brands first to avoid duplicates. Translate only the brand's own description — add no facts the user did not give. The result is the created brand with its id (use it as brandId for create_product/update_product) and echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe brand name exactly as marketplaces know the vendor, up to 120 characters; unique in the workspace. Never translated.
slugNoURL segment for the brand. Normalized to lowercase Latin letters, digits and hyphens whatever is sent; derived from the name when omitted.
websiteNoThe brand's website as a full https:// URL. Send null to clear it.
descriptionNoBrand description in the workspace's base language (up to 4000 characters). Send null to clear it.
translationsNoBrand description per locale (the brand NAME is never translated). Omit to leave existing translations untouched; when sent it REPLACES the whole set, so an empty array removes them all.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare it is not read-only and not destructive, but non-idempotent. The description adds genuinely useful behavior: duplicate names are rejected, the slug is normalized to Latin, and translations REPLACE the whole set rather than merging. It also explains the return payload and how the id feeds create_product/update_product.

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

Conciseness4/5

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

Front-loaded with the core action, then the critical name-verbatim constraint, duplicate check, and translation discipline. Every sentence carries weight, though the translation-fidelity sentence slightly overlaps the schema's own wording.

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

Completeness5/5

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

No output schema exists, yet the description explains the result (created brand with id, operating workspace echoed). Combined with full schema coverage and the duplicate/translation constraints, an agent has everything needed to invoke this correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds semantics beyond the schema: the name must be sent verbatim as the marketplace knows the vendor, translations must not invent facts, and the returned id is the brandId for product tools. This is meaningful guidance even if some overlaps with per-field descriptions.

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

Purpose5/5

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

States a specific verb and resource (create a catalog brand) plus the scope of optional fields (description, website, per-language translations). It contrasts cleanly with siblings list_brands and update_brand, so the agent can distinguish creation from listing/editing without opening a schema.

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

Usage Guidelines4/5

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

Names an explicit prerequisite: call list_brands first because a duplicate name is rejected. That is a real usage instruction, but it does not say when to prefer update_brand over create, nor when creation is inappropriate.

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

create_categoryCreate categoryAInspect

Create a catalog category, optionally nested under an existing one, with optional description and per-language translations. The slug is normalized to Latin whatever is sent. The parent must exist in this workspace, and a name already used under the same parent is rejected, so call list_categories first to avoid duplicates. Translate only the category's own name and description into each locale — add no facts the user did not give. The result is the created category with its id (use it as categoryId for create_product/update_product) and echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe category name in the workspace's base language, up to 120 characters. Must be unique among categories with the same parent.
slugNoURL segment for the category. Normalized to lowercase Latin letters, digits and hyphens whatever is sent (Cyrillic is transliterated); derived from the name when omitted.
parentIdNoId of the parent category from list_categories, to nest this one under it; it must exist in this workspace. Omit or send null for a top-level category.
descriptionNoProse a storefront shows at the top of the category shelf, in the workspace's base language (up to 4000 characters). Send null to clear it.
translationsNoCategory name (and optional description) per locale. Omit to leave existing translations untouched; when sent it REPLACES the whole set, so an empty array removes them all.
googleProductCategoryNoGoogle Product Taxonomy id or full path for this category (for Google Shopping). Separate from the name; send null to clear it.

TDQS

A4.7/5.0
Behavior5/5

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

Adds real behavior beyond the annotations: slug is force-normalized to Latin regardless of input, the parent must already exist in the workspace, a duplicate name under the same parent is rejected, and the response echoes the operating workspace. The translation instruction ('add no facts the user did not give') is a behavioral constraint the agent would otherwise have to guess, and none of this contradicts the readOnly=false / destructive=false / idempotent=false hints.

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

Conciseness5/5

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

Four sentences, front-loaded with the core action, then constraints, then the return value. Every sentence carries distinct information (normalization, prerequisites, translation rule, output contract) with no repetition of the schema.

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

Completeness5/5

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

There is no output schema, so the description correctly fills that gap by describing the created object, its id and the workspace echo. Combined with the prerequisites and uniqueness rule, an agent has everything needed to call a 6-parameter mutation tool correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3 and the schema already documents each field. The description still adds meaning by tying the returned id to categoryId on create_product/update_product and by constraining what translations may contain, which the schema does not express.

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

Purpose5/5

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

States a specific verb+resource ('Create a catalog category') and immediately scopes it with nesting, description and per-language translations, which cleanly separates it from update_category, list_categories and create_product in the sibling list. An agent can identify the operation without opening the schema.

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

Usage Guidelines4/5

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

Gives an explicit precondition ('call list_categories first to avoid duplicates') and downstream routing ('use it as categoryId for create_product/update_product'). It stops short of naming when NOT to use it (e.g. use update_category for an existing category), so it is clear context rather than full when/when-not coverage.

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

create_companyCreate companyAInspect

Create a company (B2B account). The company name must be unique in the workspace. Enforces the workspace plan limit; the result echoes the operating workspace. Use search_companies first to avoid creating a duplicate.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe company name. Required and unique within the workspace.
sizeNoCompany size band. Optional. One of: solo, small, medium, large, enterprise.
statusNoRelationship status. Optional. One of: prospect, active, inactive.
ownerIdNoUser id of the workspace member who owns this company. Optional.
websiteNoThe company website URL. Optional.
industryNoThe company's industry. Optional.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations cover basic safety traits (readOnlyHint false, destructiveHint false), and the description adds valuable behavioral context: uniqueness enforcement within the workspace, workspace plan limit enforcement, and that the result echoes the operating workspace. This goes beyond what annotations provide, though it could be slightly clearer about failure behavior or response format.

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

Conciseness5/5

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

The description is three sentences long, front-loaded with the core action, and every sentence earns its place: the resource, the uniqueness constraint, the plan limit, the result echo, and the search-first guidance. No fluff or redundancy.

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

Completeness5/5

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

For a simple create operation with 6 parameters and no output schema, this description is complete enough for an agent to invoke it correctly. It covers prerequisites (search first), constraints (unique name, plan limit), and operational context (workspace echo). The absent return value documentation is not a significant gap for this tool type.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining that the name must be unique in the workspace and that the workspace plan limit is enforced, both of which affect the 'name' parameter and the operation as a whole. This added context justifies a score above the baseline.

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

Purpose5/5

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

The description clearly states 'Create a company (B2B account)' with a specific verb and resource. It distinguishes from sibling create_* tools (create_contact, create_deal, etc.) by targeting companies specifically, and adds unique constraints (name uniqueness) that further define its scope.

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

Usage Guidelines5/5

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

Explicit guidance is provided: 'Use search_companies first to avoid creating a duplicate.' This tells the agent when to use this tool (after checking for existing companies) and implicitly when not to (when a matching company already exists). It also implies a prerequisite step.

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

create_contactCreate contactAInspect

Create a contact (person). Use search_companies for the companyId to link an employer. Enforces the workspace plan limit and validates the company/owner links; the result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoTags for segmentation. Optional.
emailNoThe contact's email address. Optional.
phoneNoThe contact's phone number. Optional.
ownerIdNoUser id of the workspace member who owns this contact. Optional.
jobTitleNoThe contact's job title. Optional.
lastNameNoThe contact's last name. Optional.
companyIdNoCompany id to link this contact to (from search_companies). Optional.
firstNameYesThe contact's first name. Required.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly=false, destructive=false, idempotent=false), and the description adds real context beyond them: the workspace plan limit is enforced, company/owner links are validated, and the result echoes the operating workspace. Non-idempotency is left implicit, but the added behavioral constraints are substantive.

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

Conciseness5/5

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

Two tight sentences with the core action front-loaded, followed by the linking guidance and behavioral constraints. No filler or redundancy.

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

Completeness4/5

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

For an 8-parameter create tool with no output schema, the description usefully covers validation, plan limits, and the workspace echo in the result. It is nearly complete, though it could note the non-idempotent duplicate-creation risk that the annotations imply.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 8 parameters. The description adds only the search_companies sourcing for companyId, which the schema itself already notes, so it provides little incremental value over the structured fields.

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

Purpose5/5

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

States a specific verb+resource ("Create a contact") and disambiguates the domain object with "(person)", which separates it from create_company and other create_* siblings. An agent can immediately tell what entity is being created.

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

Usage Guidelines4/5

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

Gives concrete routing guidance: "Use search_companies for the companyId to link an employer", which tells the agent how to source a dependent parameter. It does not, however, distinguish create from update_contact or state when-not-to-use conditions, so it falls short of full alternative coverage.

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

create_content_postCreate post (draft)AInspect

Create a social post as a DRAFT — nothing is published. Give it a working title, the main text, optional hashtags, the channels (each may carry its own text), and images: public https image links (Obriym stores its own copy), files the person attached in ChatGPT (the files field, filled by ChatGPT), links returned by create_image_upload for local files, and/or a catalog product whose photos are attached and whose sell-out later marks the live Telegram and Threads post as sold. Each channel's text, with hashtags, must fit that channel's limit (list_content_channels). Returns the post id and warnings — a channel that is not ready, Instagram without an image — to relay to the person. Not idempotent: each call creates a new draft. Then use schedule_content_post or publish_content_post. Echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoThe post's main text, in the language the audience reads. Plain text: no markdown, links are written out in full. Never invent a price, discount, stock level or date — state only facts the user or the CRM gave you.
filesNoImage files the person attached in ChatGPT. ChatGPT fills this field itself; any other client leaves it out and passes image links instead (or uploads files with create_image_upload).
titleYesAn internal working title shown in Obriym's Publications list, e.g. "Monday — new arrivals". Never published.
formatNopost = a regular feed post; story = an Instagram/Facebook story, which needs an image. Defaults to post.post
channelsYesWhere the post goes — one entry per channel, each at most once. Every channel publishes the main text unless its entry carries its own text.
hashtagsNoHashtags without the "#" sign, at most 30. They are appended to every channel's text as their own line.
imageUrlsNoImages to attach, as public https links to JPEG, PNG or WebP files of at most 2 MB each. Obriym downloads and keeps its own copy, so the link only has to work now. Threads accepts JPEG and PNG only.
productIdNoA catalog product this post advertises (id from search_products). Links the post to the product, so when it sells out Obriym marks the live Telegram and Threads post as sold, and lets productPhotos attach the product's photos.
productPhotosNoWith productId: attach the product's own photos after any imageUrls, up to 10 images in total. Set false to post without them.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare not-read-only, non-idempotent and non-destructive, and the description confirms the draft/no-publish semantics plus the product sell-out side effect on live Telegram/Threads posts. It also discloses the return payload (post id + warnings) and workspace echo. No contradiction, though it does not cover rate limits or attachment failure handling.

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

Conciseness4/5

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

Front-loads the most important fact (draft, nothing published) and every sentence carries information. It is a single dense run-on paragraph, however, with no structural separation between inputs, constraints, and returns.

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

Completeness5/5

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

For a 9-parameter mutation tool with no output schema, the description supplies the missing return contract (post id and warnings to relay, e.g. unready channel or Instagram without image) and the follow-up action, leaving nothing an agent needs to call it correctly unstated.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every parameter including the files/hashtags/channel-text interplay and image sources. The description restates these relationships (images via links, ChatGPT-attached files, create_image_upload links, catalog product) but adds little syntax or formato beyond what structured fields provide, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Create a social post') plus a critical scope qualifier: 'as a DRAFT — nothing is published.' This immediately distinguishes it from publish_content_post, schedule_content_post, and update_content_post without opening a schema.

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

Usage Guidelines5/5

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

Gives clear routing: 'Then use schedule_content_post or publish_content_post' for the next step, points to list_content_channels for per-channel limits, and to create_image_upload for local files. It also names the not-idempotent condition that governs repeated calls.

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

create_dealCreate dealAInspect

Create a pipeline deal. Requires a stageId, title, and next-action note. Use list_pipeline_stages for the stageId, and search_companies/search_contacts to link a company or contact. Enforces the workspace plan limit; the result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoFree-text notes on the deal. Optional.
titleYesDeal title. Required.
amountNoDeal value as a decimal string, e.g. 1500.00. Optional.
ownerIdNoUser id of the workspace member to own the deal; null/omit for none.
stageIdYesPipeline stage id for the deal (from list_pipeline_stages). Required.
companyIdNoCompany id to link the deal to (from search_companies); null/omit for none.
contactIdNoContact id to link the deal to (from search_contacts); null/omit for none.
lostReasonNoReason the deal was lost. Optional (required only for Closed-lost stages).
probabilityNoWin probability percent, 0-100. Optional (defaults from the stage).
nextActionDateYesNext-action date, ISO 8601. Required.
nextActionNoteYesWhat the next action on this deal is. Required.
expectedCloseDateNoExpected close date, ISO 8601. Optional.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate a write operation (readOnlyHint=false, idempotentHint=false), and the description adds meaningful behavior beyond that: it enforces the workspace plan limit and its result echoes the operating workspace. These are concrete operational details an agent would not otherwise know.

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

Conciseness5/5

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

Three sentences with no filler: the action, the required inputs, the source tools for IDs, and the workspace-specific behavioral notes. Every sentence earns its place and 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.

Completeness4/5

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

For a 12-parameter create operation with no output schema, the description covers the critical decisions: required fields, where to get stage/company/contact IDs, plan-limit enforcement, and what the response echoes. The remaining parameter details are already well-documented in the 100%-covered schema, so nothing essential is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds value by telling the agent where to obtain valid values for stageId and company/contact IDs. This cross-tool guidance is beyond what the schema provides and materially helps construct a correct call.

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

Purpose5/5

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

Description opens with a specific verb and resource ('Create a pipeline deal'), immediately distinguishing it from sibling tools like create_lead, create_company, or transition_deal. It also names the core required inputs, tightening the scope further.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool — creating a deal — and explicitly points to list_pipeline_stages for the stageId and search_companies/search_contacts for linking. It does not explicitly state exclusions like 'use update_deal to modify an existing deal,' but the prerequisite guidance is strong enough to route an agent correctly.

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

create_ebay_draftsCreate eBay draftsA
Destructive
Inspect

Create eBay DRAFT offers for up to 25 products — real writes to the seller's eBay account, but nothing is buyer-visible until publish_ebay_drafts. Run inspect_ebay_listings first and pass only products whose nextAction is create_draft and ready is true. Each product is attempted on its own: returns created, failed (each with a reason to look up in remediation.ebayPlaybook) and notAttempted (not reached in the time budget — call again with those ids). Refused until the owner switches on AI publishing, and while draft creation is not armed on the eBay connection. Not idempotent: a product that already has a draft fails with alreadyListed. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdsYesThe exact products to create eBay draft offers for, at most 25 ids fetched with search_products. This creates drafts only and never makes them live.
marketplaceIdNoOmit this when the eBay connection sells on exactly one marketplace — the server fills it in automatically. Pass one of the audit's armed ebayDraftSetup.marketplaceIds only when several marketplaces are armed. This is a MARKETPLACE id (e.g. EBAY_DE, EBAY_IT) — never the eBay CONNECTION/adapter id.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare destructive=true, idempotent=false and openWorld=true, and the description builds on that rather than repeating it: it clarifies the write is real but not buyer-visible, that per-product failures must be looked up in remediation.ebayPlaybook, that it is non-idempotent ('a product that already has a draft fails with alreadyListed'), and that it can time out mid-run. This is unusually rich behavioral disclosure for a mutation tool.

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

Conciseness4/5

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

Front-loaded with purpose and tightly packed — every clause carries operational information (preconditions, failure modes, idempotency, refusals) and none is filler. It is dense enough that a reader must parse several semicolon-joined clauses, which costs a little scannability versus a clean multi-sentence split.

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

Completeness5/5

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

With no output schema, the description carries the return contract itself: created / failed (with a playbook lookup key) / notAttempted and the retry instruction, plus the workspace echo. Combined with the refusal and idempotency notes, an agent has everything needed to call this correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the marketplaceId semantics (omit for single-marketplace connections, use only armed ebayDraftSetup.marketplaceIds, never the connection id) largely duplicate the schema text. The description does add non-schema meaning for productIds provenance and gating (must come from search_products and pass inspect_ebay_listings checks), which lifts it above the baseline 3.

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

Purpose5/5

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

States a specific verb and resource with scope: 'Create eBay DRAFT offers for up to 25 products.' It immediately distinguishes itself from publish_ebay_drafts (nothing buyer-visible until then) and implicitly from delete/recreate_ebay_drafts, so an agent can separate it from siblings without opening a schema.

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

Usage Guidelines5/5

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

Gives an explicit prerequisite ('Run inspect_ebay_listings first and pass only products whose nextAction is create_draft and ready is true'), names the downstream alternative (publish_ebay_drafts), and states when it will be refused (AI publishing off, draft creation unarmed). It also tells the agent what to do on partial failure (call again with the notAttempted ids).

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

create_image_uploadCreate image upload linksAInspect

Get one-time links for uploading image FILES from the agent's own machine — for clients that can read local files and send HTTP requests (Claude Code, Cursor, scripts). A chat client passes image links instead, and ChatGPT passes attached files itself through the files field. For each link, send the raw file bytes with HTTP PUT within 15 minutes — for example: curl -X PUT --data-binary @photo.jpg "". One file per link; JPEG, PNG or WebP, at most 2 MB each (a bigger file is refused — there is no resize). The PUT answers JSON with url: pass that url to add_product_images (images[].url), create_content_post (imageUrls), set_category_image or set_brand_image (url), which store their own copy. Creating links changes nothing in the CRM. Returns { uploads: [{ uploadUrl, expiresAt }], maxBytes, allowedTypes }. Needs products:write or content:write.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoHow many upload links to create — one per file, at most 10.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare non-read-only, non-destructive, non-idempotent, but the description adds real context beyond them: link expiry in 15 minutes, a 2 MB per-file ceiling with no resize fallback, refusal behavior for oversized files, the HTTP PUT mechanism, and required scopes (products:write or content:write). It stops short of describing what happens to links if unused, keeping it just under a 5.

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

Conciseness4/5

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

Front-loaded with the purpose and audience, then the mechanics, then the return shape and scopes. Dense but nearly every clause carries operational information; the only slight bloat is the enumerated downstream tool list, which could be trimmed.

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

Completeness5/5

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

With no output schema, the description supplies the return envelope ({ uploads: [{ uploadUrl, expiresAt }], maxBytes, allowedTypes }), the required permissions, and the upload constraints — everything an agent needs to call and then use this tool without guessing.

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

Parameters3/5

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

Schema coverage is 100% and the single `count` parameter is fully documented with its 1-10 bounds in the schema itself. The description reinforces 'one file per link' but adds no syntax or format detail beyond what the schema supplies, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource: creating one-time upload links for image files. It explicitly distinguishes itself from sibling storage tools (add_product_images, set_brand_image, create_content_post), which take the resulting URL rather than the file itself, so an agent can route correctly.

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

Usage Guidelines5/5

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

Explicitly scopes the audience (clients that can read local files and send HTTP requests) and excludes others (chat clients pass links, ChatGPT passes files via the files field). It also names the downstream tools that consume the returned url, giving the full when-to-use chain.

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

create_leadCreate leadA
Idempotent
Inspect

Create a lead. Idempotent by externalId (re-sending the same externalId returns the existing lead). Requires an email or phone. Enforces the workspace plan limit; the result echoes the workspace it landed in. Use update_lead to change it afterward.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe lead's full name or label. Required.
emailNoThe lead's email. Provide email or phone (at least one).
notesNoFree-text notes about the lead. Optional.
phoneNoThe lead's phone number. Provide email or phone (at least one).
sourceNoLead source; fixed to "website" for MCP-created leads.website
externalIdYesA stable unique id for this lead in your system — the idempotency key. Re-sending the same externalId returns the existing lead instead of creating a duplicate (e.g. 'mcp-<uuid>').
companyNameNoThe lead's company name, if known. Optional.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=false, but the description adds real substance beyond them: it names the idempotency key (externalId) and the exact re-send behavior, states the email-or-phone requirement, and discloses the workspace plan-limit enforcement and the workspace echo in the result. It does not describe failure behavior when the plan limit is hit, keeping it out of the top band.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the core action and the idempotency behavior before the constraints and the sibling pointer. No filler — each clause conveys a distinct operational fact.

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

Completeness4/5

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

For a mutation tool with no output schema, the description covers the essentials: idempotency semantics, minimum required contact info, plan-limit enforcement, and what the result indicates (landed workspace). It stops short of describing error responses when the plan limit is exceeded, which is the main remaining gap.

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

Parameters3/5

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

Schema description coverage is 100%, so all seven parameters are already documented, including the email-or-phone constraint and externalId idempotency. The description mainly restates those constraints rather than adding new syntax or format meaning, which is the baseline 3 when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb and resource ('Create a lead') and distinguishes the create path from the update path by naming update_lead as the follow-up for changes. It does not explicitly differentiate from other creation siblings (create_contact, create_deal), but 'lead' is an unambiguous resource and the idempotency/requirement clauses sharpen the scope.

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

Usage Guidelines3/5

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

Provides one clear routing hint ('Use update_lead to change it afterward') and implicitly defines when this tool applies. However, it offers no guidance on when not to use it — e.g. checking for an existing lead via search_leads, or relationship to convert_lead — so usage context is only partially covered.

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

create_orderCreate orderA
Idempotent
Inspect

Create an order with line items. Idempotent by externalId — use a stable unique id such as 'mcp-' (re-sending returns the existing order). Enforces the workspace plan limit; the result echoes the operating workspace. Items snapshot productName/sku/unitPrice; use search_products first to quote real products.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesOrder line items (1-100). Each snapshots productName/sku/unitPrice.
notesNoInternal note stored on the order. For a delivery instruction from the buyer use delivery.comment instead.
currencyNoISO 4217 currency code for the order (uppercase, e.g. UAH). Default UAH.UAH
customerNoOptional buyer snapshot (name/email/phone, or a storefront customer externalId). Omit for an anonymous order.
deliveryNoHow the buyer asked to receive the order: carrier, branch/courier/pickup, branch text, recipient, cash-on-delivery and a delivery note. This is the buyer's choice at checkout — it does not dispatch anything. Record what actually ships with POST /orders/{externalId}/shipments.
promoCodeNoThe promo code the storefront applied to this order, recorded as-is. The CRM never validates or computes it — the cart owns that — but storing it is what makes 'did that campaign pay for itself?' answerable later.
externalIdYesA stable unique id for this order in your system — the idempotency key. Re-sending the same externalId returns the existing order instead of creating a duplicate (e.g. 'mcp-<uuid>').
discountAmountNoMoney taken off by the promo code, in the order currency. A sum, not a percent: a percent at order level is ambiguous (before or after line discounts, with shipping or without). Does NOT change total — send the total the buyer actually paid.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=false. The description goes beyond annotations by detailing the idempotency key behavior, workspace plan limit enforcement, workspace echo, and snapshot semantics for product fields. It adds meaningful operational context 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.

Conciseness5/5

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

Three sentences, no filler, and the core purpose is front-loaded. Each clause carries distinct value: creation intent, idempotency, workspace plan behavior, and the product-search prerequisite.

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

Completeness4/5

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

Given a complex nested schema and no output schema, the description covers the critical behaviors: idempotency, plan limits, snapshots, and the search_products prerequisite. It omits return-value shape and failure behavior, but the provided guidance is sufficient for correct invocation in most cases.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already documents externalId idempotency and productName/sku/unitPrice snapshots in detail. The description reinforces those points but adds little new parameter-level meaning, so the baseline of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the action and resource: 'Create an order with line items.' It also adds distinguishing semantics around idempotency and item snapshots. However, it does not explicitly name sibling alternatives like add_order_item or update_order_status, so it stops short of full sibling differentiation.

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

Usage Guidelines4/5

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

The description gives strong contextual guidance: use a stable externalId, send a unique id like 'mcp-<uuid>', and use search_products first to quote real products. It does not explicitly state when not to use this tool or point to sibling tools as alternatives, which keeps it just below a 5.

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

create_productCreate productAInspect

Create a catalog product. Defaults to draft status — publish it by sending status 'active' once it is complete. Use list_categories, list_brands and list_warehouses for the ids; SKU is generated when omitted and must be unique in the workspace. Set trackInventory with an opening stock to start counting units, which is recorded as the first movement in the product stock history. A bundle (type bundle with bundleItems) holds no stock of its own: its stock, tracking and cost are derived from its components, so a stock sent for it is refused and trackInventory/costPrice are ignored. If the target warehouse is set to list new products on the marketplaces, this product joins those channels. When productGroupId names an existing product model, the product joins that model as a new article and takes the model's shared content (name, description, category, brand, characteristics, translations) instead of the values sent. Enforces the workspace plan limit; the result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
eanNoGTIN/EAN-8/12/13/14 barcode. Presence-and-shape validation only, no checksum.
mpnNoManufacturer part number — the maker's own code for the item, not the shop SKU. eBay requires it beside the brand in many categories.
skuNo
nameYes
sizeNo
tagsNo
typeNosimple, or bundle — one sellable item made of bundleItems, holding no stock of its own. Fixed at creation: an update that changes it is refused.simple
unitNo
colorNo
depthNo
priceNo
stockNoUnits on hand, for a product that tracks inventory; a change on update is recorded as a relative movement in the stock history. Refused for a bundle — its stock is derived from its components.
widthNo
genderNo
heightNo
imagesNoThe product's photos as { url, alt }, at most 10; the first is the main photo. On an update the list you send replaces the whole set. An entry whose url equals a photo the product already has keeps that stored file and takes only the caption (alt) you send, so sending back what you read never downgrades a stored photo.
statusNodraft
videosNoVideo links for the product page (YouTube, Vimeo or a direct file), https only, at most 5. Links, not uploads. On update, sending the field replaces the whole list.
weightNo
brandIdNo
patternNo
ageGroupNo
materialNo
sizeTypeNo
conditionNo
costPriceNoPurchase price per unit, in costCurrency. Ignored for a bundle: its cost is the sum of its components' costs when all are known and in one currency.
categoryIdNo
sizeSystemNo
supplierIdNo
weightUnitNo
bundleItemsNoComponents of a bundle (type bundle only): simple, non-archived products of the bundle's warehouse, each listed once. Selling the bundle deducts these components; the bundle's stock is how many whole bundles they make. On update, sending it replaces the whole composition.
descriptionNo
warehouseIdNo
costCurrencyNo
dimensionUnitNo
compareAtPriceNo
productGroupIdNo
trackInventoryNoWhether the product counts units. Ignored for a bundle: it tracks stock exactly when one of its components does.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations declare only mutability/safety flags; the description then adds substantial non-obvious behavior: draft default, bundle stock being refused with trackInventory/costPrice ignored, productGroupId content inheritance, marketplace-channel joining from the warehouse, and workspace plan-limit enforcement. This is exactly the kind of context annotations cannot carry.

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

Conciseness4/5

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

A single dense paragraph that front-loads the core action and default status before the conditional edge cases (bundle, productGroupId, plan limit). Every clause carries real information, though the run-on length makes some rules harder to scan than a segmented format would.

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

Completeness4/5

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

No output schema exists, and the description compensates by noting the result echoes the operating workspace. It covers the high-risk behavioral cases raised by the schema (bundle refusals, inheritance, plan limit), leaving only minor uncovered fields for a 38-parameter tool.

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

Parameters4/5

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

With only 24% schema description coverage across 38 parameters, the description must compensate, and it does so for the hazardous/ambiguous ones: sku generation and uniqueness, status default, trackInventory/stock interaction, costPrice and stock being ignored for bundles, and productGroupId semantics. Many low-risk params (name, size, tags, dimensions) remain unexplained, keeping this below 5.

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

Purpose5/5

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

Opens with a specific verb+resource ('Create a catalog product') and immediately distinguishes scope by contrasting creation-time defaults with the update path ('publish it by sending status active once it is complete'). An agent can tell this apart from update_product without opening either schema.

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

Usage Guidelines4/5

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

Explicitly routes the agent to siblings for prerequisites ('Use list_categories, list_brands and list_warehouses for the ids') and explains the draft-then-publish workflow. It does not name when-not-to-use or contrast against update_product directly, 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.

delete_content_postDelete postA
Destructive
Inspect

Delete a post that has not been published — a draft, a scheduled post (its schedule goes with it) or one whose every channel failed. Its own stored images are deleted too; a linked product's photos are never touched. Refused for a post that went out on any channel: that record stays. This cannot be undone. Echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe publication id returned by create_content_post or list_content_posts.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover destructive/non-idempotent/non-readonly, but the description adds substantial context: schedule deletion, that its own stored images go with it while linked product photos are preserved, the refusal behavior for published posts, and irreversibility. It also discloses the return ('echoes the workspace'), which no annotation supplies.

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

Conciseness4/5

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

The most decision-relevant constraint (deletable states) is front-loaded, and the cascade/refusal/irreversibility clauses each carry distinct information. It is dense and runs several sentences, but nearly every clause earns its place; slight trimming is possible.

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

Completeness5/5

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

Covers scope, cascade side-effects, refusal conditions, irreversibility, and even the return value, which compensates for the absent output schema. Nothing material for a correct invocation is missing.

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

Parameters3/5

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

Schema coverage is 100% and the single 'id' parameter is fully documented as the publication id from create/list. The description adds no syntax or format detail beyond that, so the baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb (delete) and resource (content post) plus the exact scope of deletable states: draft, scheduled, or fully-failed. An agent can distinguish it from siblings like archive_products or withdraw_ebay_listings without opening any schema.

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

Usage Guidelines5/5

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

Explicitly states when-not: a post published on any channel is refused and its record stays. This gives the agent a clear precondition for calling the tool and clarifies the boundary against publish/schedule siblings.

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

delete_ebay_draftsDelete eBay draftsA
Destructive
Inspect

Delete the eBay DRAFT offer of up to 25 products; a live listing is refused — end it with withdraw_ebay_listings first. The CRM product itself is untouched. Works even while draft creation is disarmed on the connection, but still needs the owner's AI publishing switch. Returns done, failed and notAttempted. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdsYesDelete the eBay DRAFT offer for each of these products, at most 25 ids fetched with search_products. Only a product whose offer is still a draft is affected — a LIVE listing is refused; end it with withdraw_ebay_listings first if it must go.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations (destructive/idempotent/openWorld) by disclosing that the CRM product is untouched, that it functions even when draft creation is disarmed but still needs the owner's AI publishing switch, and that the outcome buckets are done/failed/notAttempted. This is genuine side-effect and auth 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.

Conciseness4/5

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

Front-loaded with the core action and scope, and each clause carries distinct information (scope, refusal rule, CRM safety, arming caveat, return shape). Slightly dense with caveats, but nothing is wasted.

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

Completeness5/5

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

With no output schema, the description compensates by naming the done/failed/notAttempted result buckets and the workspace echo, and it covers the preconditions (draft-only, publishing switch). An agent has enough to call it correctly and interpret the result.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter's schema already documents the 25-item cap, the draft-only effect, and the withdraw alternative. The description largely restates those constraints, adding little beyond what the schema provides, so the baseline of 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource: deletes the eBay DRAFT offer for products, with a hard scope limit of 25. It clearly distinguishes itself from the live-listing sibling by stating a live listing is refused and pointing to withdraw_ebay_listings.

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

Usage Guidelines5/5

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

Explicitly names the alternative (withdraw_ebay_listings) and the condition that requires it: a live listing must be ended first. It also scopes usage to drafts and notes it works even while draft creation is disarmed, so the agent knows when the tool is and isn't applicable.

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

delete_ebay_variation_draftDelete a model's eBay variation draftA
Destructive
Inspect

Delete a model's UNPUBLISHED eBay multi-variation draft: every variation's offer and the inventory item group are removed from eBay; the articles stay on the channel, ready for a new listing (together or one by one). A live listing is refused — end it with withdraw_ebay_variation_listing first. Refused until the workspace owner switches on AI publishing. Returns deleted. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesThe product model: its code — the productGroupId get_product and search_products return for every article of it — or its id. Its active articles on the eBay channel become the listing's variations.

TDQS

A4.6/5.0
Behavior5/5

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

The annotations already flag destructive/non-idempotent/open-world, but the description adds genuinely new behavior: precisely what is destroyed on eBay, what survives on the channel, the refusal conditions, and the post-condition ('articles stay on the channel, ready for a new listing'). This is exactly the extra context annotations cannot carry.

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

Conciseness4/5

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

Front-loaded with the definitive action and effect, and nearly every clause carries operational weight. The trailing fragments ('Returns deleted. The result echoes the workspace.') are terse and slightly cryptic, costing a little clarity for the space they save.

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

Completeness5/5

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

For a one-parameter destructive tool with no output schema, the description covers scope, destruction semantics, surviving state, refusal conditions, prerequisites, and return behavior. Nothing an agent needs to invoke it safely is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter is already thoroughly documented (code/productGroupId or id, and how articles become variations). The description adds no syntax, format, or constraint beyond the schema, so the baseline 3 is appropriate.

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

Purpose5/5

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

Specific verb (delete) plus a precisely bounded resource: an UNPUBLISHED eBay multi-variation draft, with the exact objects removed (variation offers and the inventory item group). It also carves a clear line against the sibling withdraw_ebay_variation_listing, so an agent can distinguish the two operations without opening either schema.

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

Usage Guidelines5/5

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

Explicit when-not plus routing: 'A live listing is refused — end it with withdraw_ebay_variation_listing first.' It also names a second precondition (workspace owner must enable AI publishing), giving the agent both the exclusion and the alternative tool.

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

get_activityGet activityA
Read-only
Inspect

Fetch one CRM activity in the selected workspace by activity id, including type, due date, completion state, assignee and linked entity. Use list_activities first when you only know the related lead/deal/contact.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe activity id returned by list_activities.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's 'Fetch' aligns with those. The description adds useful behavioral context by listing the fields returned (type, due date, completion state, assignee, linked entity), which is especially valuable given 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.

Conciseness5/5

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

Two sentences, each earning its place. The first sentence defines the tool's function and output scope; the second provides actionable usage guidance. No filler or redundancy.

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

Completeness5/5

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

For a simple read-by-id tool with one parameter and good annotations, the description covers the key aspects: what it fetches, the source of the id, and the alternative when the id isn't known. The listed fields mitigate the lack of an output schema.

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

Parameters4/5

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

Schema has one parameter with 100% description coverage, and the description reinforces the meaning by saying 'by activity id' and that it is 'returned by list_activities.' This adds a concrete source for the id, going beyond the schema's bare description.

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

Purpose5/5

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

The description clearly states 'Fetch one CRM activity... by activity id' with a specific verb, resource, and scope. It also distinguishes itself from the sibling tool 'list_activities' by emphasizing single-activity retrieval, and the example note reinforces differentiation.

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

Usage Guidelines5/5

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

Provides explicit guidance: 'Use list_activities first when you only know the related lead/deal/contact.' This tells the agent when to use this tool vs. the alternative, and implies this tool is for when the activity id is already known.

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

get_companyGet companyA
Read-only
Inspect

Fetch one CRM company in the selected workspace by company id, including status, industry, owner and contact links when present. Use search_companies first when you only know the company name.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe company id returned by search_companies.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's job is lighter. It adds context by specifying return fields ('status, industry, owner and contact links') and the 'when present' nuance, which goes beyond the annotations and helps set expectations.

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

Conciseness5/5

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

Two concise sentences with key information front-loaded. The first sentence states the action and return content; the second provides a use-case alternative. No filler or repetition.

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

Completeness4/5

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

Given the simple 1-parameter schema and annotations indicating a safe read operation, the description is largely complete: it explains scope (workspace, by id), return fields, and when to use search_companies first. It does not mention error behavior (e.g., if id not found), but this is minor for a fetch-by-id tool without an output schema.

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

Parameters3/5

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

Schema description coverage is 100%, with the id parameter already described as 'The company id returned by search_companies.' The description reinforces this but adds no new syntactic or format details beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific action: 'Fetch one CRM company in the selected workspace by company id,' which clearly distinguishes it from search_companies and other get_* tools. It also enumerates included attributes (status, industry, owner, contact links), making the purpose unambiguous.

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

Usage Guidelines5/5

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

Explicitly directs when to use an alternative: 'Use search_companies first when you only know the company name.' This implies get_company is for when you have the id, and the phrase 'in the selected workspace' sets context for workspace-dependent usage.

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

get_contactGet contactA
Read-only
Inspect

Fetch one CRM contact in the selected workspace by contact id, including company, owner, tags and communication fields when present. Use search_contacts first when you only know a name, email or phone.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe contact id returned by search_contacts.

TDQS

A4.4/5.0
Behavior4/5

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

Given readOnlyHint=true and destructiveHint=false in annotations, the description adds useful context by listing included fields and noting they appear 'when present'. It doesn't cover error behavior or response format, but for a simple read-only fetch, the annotations and description together provide adequate transparency.

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

Conciseness5/5

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

Two sentences, no fluff. The first sentence states purpose and result details, the second gives usage guidance. Every word earns its place.

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

Completeness4/5

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

This is a low-complexity tool with a single parameter and no output schema. The description covers what it returns, when to use it, and how to obtain the ID. Some might expect a note on what happens if the contact is not found, but overall it's complete enough for selection and invocation.

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

Parameters3/5

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

Parameter id has 100% schema description coverage ('The contact id returned by search_contacts'). The tool description reinforces this by saying 'by contact id' and mentioning search_contacts, but adds no significant new meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the tool fetches one CRM contact by ID, with specific fields (company, owner, tags, communication) and scope (selected workspace). It differentiates from sibling tools like search_contacts and other get_* tools.

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

Usage Guidelines5/5

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

It explicitly instructs to use search_contacts first when only a name, email, or phone is known, implying get_contact is for when the contact ID is available. This provides clear when-to-use guidance and directs to the alternative.

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

get_content_postGet postA
Read-only
Inspect

Read one social post: its main text, hashtags, images, linked product, status and schedule, and per channel the text that channel gets (ownText or the main text), its length against the channel limit, whether the channel is ready, and what publishing returned there — status, link to the live post (permalink) or the network's error. Read-only. Use list_content_posts to find the id; call it after publish_content_post to report the links.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe publication id returned by create_content_post or list_content_posts.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and the description's 'Read-only' statement is consistent with them, so safety is already covered. Beyond that, the description discloses rich return behavior — per-channel text selection (ownText vs main text), length-vs-limit checks, readiness, and either a permalink or the network's error — which is genuinely useful since no output schema exists.

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

Conciseness4/5

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

The purpose and the read-only nature are front-loaded, and the routing guidance is compact. The middle sentence is a dense enumeration of return fields, but every clause maps to something the agent needs to interpret the response.

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

Completeness5/5

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

With no output schema and only one parameter, the description carries the return-value burden and does so thoroughly, covering post-level fields, per-channel fields, readiness, and success/error outcomes. An agent has everything needed to call it and interpret the result.

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

Parameters3/5

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

Schema coverage is 100% and the single id parameter is fully documented in the schema, including its origin from create_content_post or list_content_posts. The description repeats that provenance without adding syntax or format detail, so baseline 3 applies.

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

Purpose5/5

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

The description opens with a specific verb+resource ('Read one social post') and enumerates exactly what is returned, so an agent can distinguish it from list_content_posts and create/update_content_post without opening a schema.

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

Usage Guidelines5/5

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

It explicitly routes the agent: use list_content_posts to find the id, and call this after publish_content_post to report links. Both the precondition and the alternative tool are named, leaving nothing to inference.

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

get_customerGet customerA
Read-only
Inspect

Fetch one CRM customer summary in the selected workspace by company id, including health, lifetime value and won-deal metrics. Use list_customers first when you only know the company name.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesThe company/customer id returned by list_customers.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds context about operating in the selected workspace and the specific metrics included, which is useful behavioral information beyond the annotation. 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.

Conciseness5/5

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

Two sentences with the primary action and key details in the first sentence, and a helpful usage tip in the second. Every sentence earns its place with no redundancy or filler.

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

Completeness5/5

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

For a single-read tool with full schema coverage and clear annotations, the description is complete: it states what the summary includes and provides a prerequisite relationship with list_customers. Although there is no output schema, the listed metrics give sufficient expectation of the return value.

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

Parameters3/5

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

Schema coverage is 100%, with the parameter description already stating that companyId is returned by list_customers. The tool description does not add further semantics; it simply repeats the 'by company id' detail. Baseline 3 applies because the schema does the heavy lifting and the description adds little extra meaning.

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

Purpose5/5

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

The description uses 'Fetch' as a specific verb, identifies the resource as 'one CRM customer summary', and details the included metrics (health, lifetime value, won-deal). It clearly distinguishes from sibling tools like list_customers or get_company by specifying the exact scope and content.

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

Usage Guidelines5/5

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

The description explicitly tells the agent to use list_customers first when only the company name is known, implying this tool requires a company ID. This contrast with the sibling list tool provides actionable guidance on when to choose which tool.

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

get_dashboard_overviewGet dashboard overviewA
Read-only
Inspect

Return the operational 'what needs attention today' snapshot for this workspace: active/qualified/stale lead counts, pipeline value, weighted forecast and overdue activities. Takes no arguments. Use get_report for period trend analytics instead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

The annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds that this is an operational snapshot for the current workspace and lists the specific data elements returned. No contradiction; the added context is useful but not extensive.

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

Conciseness5/5

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

The description is two concise sentences. The first sentence packs the purpose, scope, and contents; the second provides the alternative tool. There is no filler or redundancy.

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

Completeness5/5

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

Given the tool's simplicity (zero parameters, no output schema, read-only), the description covers the key behavioral aspects: what it returns, the workspace scope, and how it differs from get_report. It is complete for a dashboard overview tool.

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

Parameters4/5

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

The input schema has zero parameters, and the description confirms 'Takes no arguments.' Since there are no parameters to document, the baseline of 4 applies. The description's mention of 'this workspace' clarifies the implicit context but does not relate to parameter semantics.

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

Purpose5/5

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

The description clearly states the tool returns a dashboard overview snapshot with specific metrics (lead counts, pipeline value, weighted forecast, overdue activities). It distinguishes itself from the sibling get_report by explicitly directing users to use that tool for trend analytics.

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

Usage Guidelines5/5

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

It provides an explicit use case ('what needs attention today' snapshot) and an explicit alternative: 'Use get_report for period trend analytics instead.' This tells the agent both when to use this tool and when to use a different one.

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

get_dealGet dealA
Read-only
Inspect

Fetch one pipeline deal in the selected workspace by deal id, including stage, value, probability and linked company/contact data when present. Use search_deals first when you only know the title or related customer.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe deal id returned by search_deals.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds context about the selected workspace and optional linked data ('when present'), but does not disclose error behavior or other operational traits. This is adequate but not rich.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the action and result, and the second sentence provides a clear alternative. No redundant words or filler.

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

Completeness4/5

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

For a simple get-by-id tool with one parameter and no output schema, the description adequately covers what is returned (fields and conditional linked data) and usage context. It does not specify not-found behavior, but given annotations and simplicity, this is a minor gap.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already says 'The deal id returned by search_deals.' The description reinforces this by mentioning 'by deal id' and directing to search_deals, but adds no new semantic detail beyond the schema.

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

Purpose5/5

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

The description clearly states the tool's function: 'Fetch one pipeline deal in the selected workspace by deal id', and lists the returned fields (stage, value, probability, linked company/contact data). It also distinguishes itself from the sibling search_deals by noting when to use that alternative.

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

Usage Guidelines5/5

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

The description explicitly tells the agent to use search_deals when only the title or related customer is known, implying this tool is for when the deal id is available. This is a clear, explicit usage guideline with an alternative.

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

get_ebay_offer_policiesGet eBay offer policiesA
Read-only
Inspect

Read the eBay offers of up to 25 products live and return, per offer, the fulfillment, payment and return policy ids it carries now, the shipping policy name, its eBay site and status (PUBLISHED = live, UNPUBLISHED = draft), and matchesAssignment — whether it carries the product's own choice in the CRM (null when the product has none). Products with no draft or live listing are listed in withoutOffer; notAttempted were not reached in the time budget — call again with those ids. Reads only. Use get_product_ebay_fulfillment_policy for one product's full picture.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdsYesThe products whose eBay offers to read, at most 25 ids from search_products.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark it read-only/non-destructive, and the description reinforces that ('Reads only') while adding behavior the annotations cannot convey: the meaning of PUBLISHED vs UNPUBLISHED, matchesAssignment null semantics, the withoutOffer bucket, and partial results bounded by a time budget with a retry instruction. This is genuine disclosure beyond the safety profile.

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

Conciseness4/5

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

A single dense paragraph that is front-loaded with the core action and result shape, with no filler sentences. It is slightly overloaded by stacking status semantics, matchesAssignment, withoutOffer, and notAttempted into one run-on flow, but every clause still carries meaning.

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

Completeness5/5

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

With no output schema, the description carries the return-value burden and does so by describing the per-offer payload and both result buckets. For a one-parameter read tool, an agent has everything needed to call it and interpret partial results.

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

Parameters3/5

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

Schema description coverage is 100% for the single productIds parameter, so the schema already documents the array source, min/max items, and id origin. The description only restates the 25 cap and the search_products origin, adding no syntax or format detail. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource (read the eBay offers of up to 25 products live) and enumerates exactly what comes back per offer: fulfillment/payment/return policy ids, shipping policy name, site, status, and matchesAssignment. It also explicitly contrasts with the sibling get_product_ebay_fulfillment_policy, so an agent can distinguish the two 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.

Usage Guidelines5/5

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

Names the alternative tool (get_product_ebay_fulfillment_policy) for a single product's full picture, and gives an explicit recovery path for unresolved products (call again with the notAttempted ids). Both the 'when' and the 'what next' are spelled out.

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

get_ebay_variation_listingGet a model's eBay variation listingA
Read-only
Inspect

Show a product MODEL as one eBay multi-variation listing: state (none, draft, live), marketplaceId, listingId and listingUrl, the stable groupKey, and every article of the model with its sku, colour, size, channelState on eBay and inclusion — included, not_active, not_on_channel (put it on the channel with set_channel_membership) or single_listing (it has its own eBay draft or listing, which must be deleted or ended first). Also says whether eBay is connected and whether the owner armed listing creation. Reads the CRM only. Use inspect_ebay_variation_listing for eBay's own checks before saving.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesThe product model: its code — the productGroupId get_product and search_products return for every article of it — or its id. Its active articles on the eBay channel become the listing's variations.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations (readOnly, non-destructive, closed-world), it discloses that this reads the CRM only (unlike eBay-side inspection), enumerates the returned fields, and explains the four inclusion states and their remedial actions. That is rich behavioral context the annotations cannot convey.

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

Conciseness4/5

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

The purpose is front-loaded and the content is dense but purposeful; every clause carries meaning. It is a long single paragraph though, so some index/list structure would improve scanability.

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

Completeness5/5

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

With no output schema, the description carries the return-value burden and does so thoroughly, covering listing state, identifiers, per-article detail, connection/arming flags, and the CRM-only scope. Nothing an agent needs to call or interpret it is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single 'model' parameter is fully documented in the schema (code/productGroupId or id, and how articles become variations). The description's mention of the model adds no new syntax or constraints, so baseline 3 applies.

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

Purpose5/5

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

The description states a specific verb (show/read) and resource (a product model as one eBay multi-variation listing) and enumerates what it returns (state, marketplaceId, listingId/Url, groupKey, per-article fields). It is clearly distinguished from sibling read tools like inspect_ebay_variation_listing.

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

Usage Guidelines4/5

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

It names the alternative explicitly ('Use inspect_ebay_variation_listing for eBay's own checks before saving') and explains how to act on each inclusion value (set_channel_membership, delete/end single_listing). It gives clear context but no explicit when-not-to-use condition.

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

get_leadGet leadA
Read-only
Inspect

Fetch one CRM lead in the selected workspace by lead id, including status, source, assignee, tags, custom fields, score, notes and next action. Use search_leads first when you only know a name, email, phone or company.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe lead id returned by search_leads.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is covered. The description adds value by disclosing the scoping constraint ('in the selected workspace') and detailing the fields included in the response. It does not contradict any annotation, and while it doesn't mention error behavior, the added field context is useful for a get-one-tool.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the key action and resource, and the second sentence provides an important usage alternative. Every word earns its place with no redundancy or filler.

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

Completeness4/5

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

For a simple one-parameter get tool, the description is nearly complete: it specifies the resource, the lookup key, the response fields, and the alternative tool. It slightly lacks explicit statements about response shape or not-found behavior, but the output schema is not provided, and the description's field list partially compensates. Overall it is well-rounded given the tool's simplicity.

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

Parameters4/5

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

The input schema has 100% coverage with a single 'id' parameter described as 'The lead id returned by search_leads.' The tool description reinforces this by saying 'by lead id' and directing users to search_leads when they lack the id. This adds practical context for how to obtain the parameter value, going slightly beyond the schema's description.

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

Purpose5/5

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

The description clearly states 'Fetch one CRM lead in the selected workspace by lead id', which specifies the verb (fetch), resource (CRM lead), and scope (by lead id in selected workspace). The list of included fields (status, source, assignee, tags, etc.) further clarifies what the tool returns. It also distinguishes from siblings like get_deal or get_contact by explicitly naming the resource type.

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

Usage Guidelines5/5

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

The description provides explicit guidance: 'Use search_leads first when you only know a name, email, phone or company.' This tells the agent exactly when to use an alternative tool, and implies that get_lead is appropriate when the lead id is already known. This is a clear when-to-use vs alternative distinction.

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

get_marketplaceGet marketplaceA
Read-only
Inspect

Fetch one connected marketplace in detail: every adapter on it with its setup state, last poll, last poll error, last catalog-sync outcome and last product import, plus the channel sales, leads and product counts. Use list_marketplaces first to see which platforms are connected. Use list_channel_products for the products on the channel and check_channel_readiness for what would be refused.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformYesThe marketplace slug returned by list_marketplaces (prom, rozetka, olx, amazon, ebay, shopify, woocommerce).

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description doesn't need to reassert safety. It adds value by detailing exactly what the read operation returns (adapter states, counts, etc.), which goes beyond the annotations. It doesn't mention performance or pagination, but for a single-resource fetch that's acceptable.

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

Conciseness5/5

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

Two sentences: the first densely packs the tool's core output, the second gives usage guidance. No wasted words, and the most important information (what it returns) is front-loaded. Excellent conciseness for a tool that fetches a single entity.

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

Completeness5/5

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

With no output schema, the description compensates by listing every type of field returned (adapter setup state, last poll, last poll error, catalog-sync outcome, product import, counts). It also covers the prerequisite (list_marketplaces) and related tools, making it fully self-sufficient for an agent to invoke correctly.

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

Parameters4/5

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

The schema covers the parameter with a description listing valid slugs and pointing to list_marketplaces as the source. The description reinforces this by telling the agent to use list_marketplaces first, adding context on how to obtain the platform value. Since schema coverage is 100%, the baseline is 3, but the explicit workflow hint elevates it to 4.

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

Purpose5/5

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

The description states a specific verb ('Fetch') and resource ('one connected marketplace') and enumerates the exact data returned (setup state, last poll, last poll error, etc.). It clearly distinguishes itself from siblings by naming list_marketplaces, list_channel_products, and check_channel_readiness, so an agent can immediately identify this as the detailed single-marketplace fetch tool.

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

Usage Guidelines5/5

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

The description explicitly instructs to use list_marketplaces first to see connected platforms, and directs to list_channel_products and check_channel_readiness for complementary data. This gives clear when-to-use and when-not-to-use guidance, leaving no ambiguity about the workflow.

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

get_orderGet orderA
Read-only
Inspect

Fetch full order detail in the selected workspace by externalId, including line items, payments, shipments and returns. Use list_orders first when you only know the customer or date.

ParametersJSON Schema
NameRequiredDescriptionDefault
externalIdYesThe order externalId returned by list_orders.

TDQS

A4.5/5.0
Behavior4/5

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 by listing what the order detail includes (line items, payments, shipments, returns) and scoping to the 'selected workspace'. This is useful beyond the annotations, though it doesn't describe response formatting or pagination.

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

Conciseness5/5

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

Two sentences, front-loaded with the primary action and scope, followed by complementary inclusion details and usage note. Every word earns its place with zero redundancy.

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

Completeness5/5

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

For a simple single-parameter read tool with no output schema, the description fully equips the agent: what it does, what's included, when to use an alternative, and how to obtain the parameter. No missing context.

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

Parameters3/5

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

Schema description covers the only parameter (externalId) completely with 'The order externalId returned by list_orders.' The tool description repeats 'by externalId' without adding new meaning, so baseline 3 for high schema coverage is appropriate.

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

Purpose5/5

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

The description clearly states 'Fetch full order detail in the selected workspace by externalId' with a specific verb (fetch), resource (order detail), and scope (workspace + externalId). It also enumerates included components (line items, payments, shipments, returns), making it distinct from sibling list/get tools.

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

Usage Guidelines5/5

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

Explicit guidance is given: 'Use list_orders first when you only know the customer or date.' This directly contrasts with alternatives and informs when to use this tool versus list_orders. The schema description reinforces that externalId comes from list_orders, creating a clear workflow.

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

get_productGet productA
Read-only
Inspect

Fetch one catalog product in the selected workspace by product id or SKU — returned in any status (draft, active, or archived; check the status field), including price, stock, category and brand fields — a bundle's stock and cost are derived from its components. Provide exactly one known identifier; use search_products first when unsure (search covers active products only).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoThe product id returned by search_products.
skuNoThe product SKU returned by search_products.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description still adds real domain behavior: results can be in any status including draft/archived, and a bundle's stock and cost are derived from components rather than stored directly.

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

Conciseness4/5

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

A single dense sentence with the core purpose front-loaded, followed by status/field details and the alternative-tool routing. Slightly heavy on parenthetical detail, but every clause carries information.

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

Completeness5/5

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

With no output schema, the description compensates by naming the returned fields (price, stock, category, brand) and the status field, plus the bundle-derivation caveat. An agent has enough to call and interpret the result.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds a constraint the schema does not express: exactly one of id or SKU must be supplied (both are optional in the schema with no oneOf), which meaningfully guides invocation.

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

Purpose5/5

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

States a specific verb (fetch) and resource (one catalog product in the selected workspace) plus the accepted identifiers (id or SKU). It also distinguishes itself from the sibling search_products by noting the differing scope (all statuses vs. active only).

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

Usage Guidelines5/5

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

Explicitly tells the agent to provide exactly one known identifier and to use search_products first when unsure, with the reason (search covers active products only). This is clear when-to-use and when-to-use-something-else guidance.

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

get_product_ebay_fulfillment_policyGet a product's eBay shipping policyA
Read-only
Inspect

Show ONE product's eBay shipping policy. Per eBay site: assignedPolicyId (the product's own choice, null when it has none), defaultPolicyId (the connection default) and effectivePolicyId with effectiveSource — product, connection_default or first_available — the policy a new draft or a go-live would carry, plus that site's policies. For a product with a draft or live listing it also reads the eBay offer live: offer.fulfillmentPolicyId is what buyers see now. Reads only. Use list_ebay_fulfillment_policies for the costs of every policy and get_ebay_offer_policies to read several products' offers at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdYesA product id returned by search_products.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/destructiveHint, but the description goes well beyond them by disclosing the live eBay read (offer.fulfillmentPolicyId is what buyers see now) and the semantics of effectiveSource values (product, connection_default, first_available). This is meaningful behavioral context an agent could not infer from 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.

Conciseness4/5

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

Front-loaded with what the tool returns and the sibling alternatives at the end. The middle clause enumerating assignedPolicyId/defaultPolicyId/effectivePolicyId is dense, but each item earns its place by clarifying return semantics absent an output schema.

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

Completeness5/5

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

With no output schema, the description carries the return-value burden and does so: it enumerates the policy ids, the effective source enum, and the live offer field. Combined with the 100%-covered single parameter, nothing an agent needs before calling is missing.

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

Parameters3/5

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

Schema description coverage is 100% with a single required productId already documented as 'A product id returned by search_products.' The description adds no format, sourcing, or constraint detail for the parameter, so the baseline 3 applies.

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

Purpose5/5

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

States a precise verb and resource with scope: 'Show ONE product's eBay shipping policy.' It is immediately distinguishable from its siblings list_ebay_fulfillment_policies and get_ebay_offer_policies, which are named directly in the text.

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

Usage Guidelines5/5

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

Explicit routing to alternatives with the condition that selects each: use list_ebay_fulfillment_policies for costs of every policy, and get_ebay_offer_policies to read several products' offers at once. It also marks the operation as 'Reads only,' removing ambiguity about side effects.

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

get_product_pricingGet product pricingA
Read-only
Inspect

Everything about ONE product's prices in one call: its own price, old price and currency; the price-list rows (other currencies); per-channel price overrides (platform, currency, price); wholesale quantity breaks per currency; the purchase cost with its currency (a bundle's cost is derived from its components and cannot be set on it); and the markup over cost per sale currency (marginPercent = price ÷ cost − 1, in percent; not a margin on the price) — the cost crossed at the workspace's stated rate, null with missingRate true when no rate is stated. Read-only. Use search_products for the id; call it before set_product_channel_price, set_product_price_tiers or upsert_product_prices so you change the right row, and after a change to confirm it. For a whole group of products use preview_bulk_price_change.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe product id returned by search_products or get_product — never a SKU or a name.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/destructiveHint, yet the description adds substantive behavior: the marginPercent formula (price ÷ cost − 1, explicitly 'not a margin on the price'), the missingRate-true null case when no rate is stated, and the rule that a bundle's cost is derived and cannot be set. These are non-obvious edge cases beyond structured data.

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

Conciseness4/5

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

Front-loads the core purpose and the enumeration earns its place given the tool returns many distinct price structures with no output schema. The long semicolon-chained mega-sentence is dense and slightly harder to parse than a short bulleted breakdown, costing one point.

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

Completeness5/5

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

With no output schema, the description fully compensates by enumerating every returned data group, the derived-cost rule, the marginPercent definition and its rate-missing null behavior. An agent has everything needed to call it and interpret results.

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

Parameters3/5

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

With a single parameter at 100% schema description coverage, the schema already documents that id is the product id and never a SKU or name. The description's 'Use search_products for the id' reinforces provenance but adds little beyond the schema, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb+resource ('Everything about ONE product's prices in one call') and enumerates the exact contents returned: own/old price, currency, price-list rows, channel overrides, wholesale breaks, purchase cost, and markup over cost. This clearly distinguishes it from get_product and list_channel_products.

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

Usage Guidelines5/5

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

Explicitly names the id source ('Use search_products for the id'), the sequencing before set_product_channel_price, set_product_price_tiers or upsert_product_prices, the confirmation-after-change use, and the alternative for groups (preview_bulk_price_change). When-to-use, prerequisites and alternatives are all present.

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

get_reportGet reportA
Read-only
Inspect

Return one aggregated analytics report over a period for this workspace, selected by the report parameter: lead_source_conversion, pipeline_velocity, team_performance, revenue_trend, product_sales (units, revenue and gross margin per brand/category/SKU) or stock_valuation (units on hand and their value per warehouse, per cost currency). Each returns aggregated rows (no per-record data); days tunes the look-back for lead_source_conversion, team_performance and product_sales, months the span for revenue_trend; pipeline_velocity and stock_valuation take no period. Use get_dashboard_overview for today's operational snapshot instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLook-back window for conversion/team reports (default 90/30).
monthsNoNumber of months for the revenue-trend report (default 6).
reportYesWhich analytics report to return. lead_source_conversion: leads and conversion rate per source (uses days). pipeline_velocity: average time deals spend in each stage. team_performance: revenue and activity per member (uses days). revenue_trend: won revenue by month (uses months). product_sales: units, revenue and gross margin per brand, category and SKU, plus a trend (uses days). stock_valuation: units on hand and their value at weighted-average cost, per warehouse and per cost currency — currencies are reported separately and never added together (takes no period).

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare the safe, read-only, closed-world profile, so the description's job is supplementary. It adds genuine behavioral context beyond the annotations: 'Each returns aggregated rows (no per-record data)' and the currency-handling rule ('currencies are reported separately and never added together'). It stops short of describing the row/column shape, but that is a minor residual given the annotation coverage.

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

Conciseness4/5

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

A single dense paragraph that front-loads the core purpose and the report taxonomy before the period mapping and the alternative-tool pointer. It is appropriately sized for a six-way enum, though the per-report recap partially duplicates the schema's enum description.

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

Completeness4/5

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

With no output schema, the description carries the return-value burden and does so at a useful level of abstraction ('aggregated rows, no per-record data') while mapping each report to its period parameter and pointing to the sibling for a different use case. It leaves the exact output fields unspecified, but the essentials for correct invocation are present.

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

Parameters3/5

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

Schema coverage is 100% and the report enum's schema description is already exhaustive, so the baseline is 3. The description restates which report uses days/months but adds little syntax or default detail (e.g., the 90/30 and 6-month defaults) beyond what the schema property descriptions already carry.

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

Purpose5/5

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

States a specific verb and resource ('Return one aggregated analytics report over a period for this workspace') and enumerates all six report types with their contents. An agent can distinguish this from get_dashboard_overview and from every list/search sibling without opening a schema.

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

Usage Guidelines5/5

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

Explicitly routes the agent: 'Use get_dashboard_overview for today's operational snapshot instead,' and specifies which report consumes which period parameter (days for lead_source_conversion/team_performance/product_sales, months for revenue_trend, none for pipeline_velocity/stock_valuation). Nothing about selection is left to inference.

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

get_workspace_infoGet workspace infoA
Read-only
Inspect

Show which account and workspace this connection operates: signed-in name/email (OAuth only), workspace name, plan, connection type and granted scopes — and the server itself: its version and every tool it has now (server.tools), with how to refresh an AI app whose tool list is older (server.refreshHint). Call this when the user asks 'which account or workspace am I connected to?', and when the user asks for something your tool list has no tool for: if server.tools has it, your list is outdated — relay server.refreshHint instead of saying Obriym cannot do it. Sign-in connections can use list_workspaces and select_workspace to see or change the bound workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real operational context beyond that: connection-type distinctions (OAuth vs sign-in), the fact that the server's live tool list may be newer than the caller's, and the prescribed recovery path via server.refreshHint.

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

Conciseness4/5

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

Front-loaded with what the tool returns, then the when-to-call guidance. Dense but every sentence carries weight; the parentheticals and the final sibling reference add length without much trimming opportunity, keeping it just short of ideal.

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

Completeness5/5

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

No output schema exists, so the description must carry the return-value burden itself, and it does so thoroughly by enumerating every response field. It also covers the edge case (stale tool list) and the follow-up tools, leaving nothing 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.

Parameters4/5

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

The tool takes zero parameters, so there is no parameter semantics to convey; the baseline for a no-arg tool is 4. The description correctly implies a no-argument read of current connection/workspace state.

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

Purpose5/5

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

States a specific verb+resource (show which account/workspace this connection operates as) and enumerates exactly what is returned: signed-in name/email, workspace name, plan, connection type, granted scopes, plus server version, server.tools and server.refreshHint. It clearly distinguishes itself from list_workspaces and select_workspace, which it names explicitly.

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

Usage Guidelines5/5

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

Gives explicit triggers ('which account or workspace am I connected to?') and a second non-obvious trigger: when no tool in the list matches the user's request, consult server.tools and relay server.refreshHint rather than refusing. It also names the alternatives (list_workspaces, select_workspace) for viewing or changing the bound workspace.

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

inspect_ebay_listingsInspect eBay listingsA
Read-only
Inspect

Check up to 25 products against eBay before any write, with the same live preflight the CRM's eBay channel page and the real draft and publish calls run. Per product it returns the eBay state (off, member, draft, live, ended), nextAction (create_draft, publish_draft or none), whether that step is ready and, when not, the blocking reason with details. ebayDraftSetup lists the armed eBay sites and their currencies; remediation.ebayPlaybook maps every reason to the tool that fixes it; publishingEnabled says whether the owner allows AI to publish in this workspace. Reads eBay, never writes. Use search_products first for the ids; after a fix with update_product, upsert_product_prices, upsert_product_attributes or upsert_product_translation, call it again — a reason can change or clear.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdsYesThe products to check, at most 25 ids from search_products.
marketplaceIdNoOmit it when the eBay connection sells on one site — the server fills it in. Pass one of ebayDraftSetup.marketplaceIds only when several are armed. A MARKETPLACE id such as EBAY_IT, never the eBay connection id.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, and the description reinforces this with 'Reads eBay, never writes'. Crucially it goes beyond the annotations by specifying the per-product payload (eBay state enum, nextAction values, readiness, blocking reason with details) and the supporting fields ebayDraftSetup, remediation.ebayPlaybook and publishingEnabled — none of which appear in any structured field.

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

Conciseness4/5

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

It leads with the purpose and the pre-write constraint, then enumerates the return shape, then closes with the call sequence — a logical front-loaded order. It is dense and long relative to a two-parameter tool, though nearly every clause carries information an agent needs.

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

Completeness5/5

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

There is no output schema, and the description compensates by naming the key return fields and their meanings, the effect of owner publish settings, and the remediation mapping. Combined with the 100%-covered input schema and safety annotations, an agent has everything needed to call and interpret this tool.

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

Parameters3/5

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

Schema description coverage is 100%: productIds and marketplaceId both carry detailed descriptions, including the enum and the 'omit it when the eBay connection sells on one site' guidance. The description adds only the 'up to 25' cap (already in the schema) and nothing else about parameter semantics, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Check up to 25 products against eBay') plus the scope ('before any write, with the same live preflight ... the real draft and publish calls run'). This clearly distinguishes it from siblings like check_channel_readiness, create_ebay_drafts and publish_ebay_drafts.

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

Usage Guidelines5/5

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

Gives explicit sequencing: 'Use search_products first for the ids', and 'after a fix with update_product, upsert_product_prices, upsert_product_attributes or upsert_product_translation, call it again'. It also frames the tool as a pre-write gate, so the when-not (anything after a successful publish path) is implied and the required predecessor tools are named.

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

inspect_ebay_variation_listingCheck a model's eBay variation listingA
Read-only
Inspect

Run every check saving a model's eBay multi-variation listing would run, writing nothing: each article's required fields and price in the marketplace currency, the variation axes (colour and/or size, named as the eBay site names them), duplicate or missing variation values, the category (suggested from the title, or the saved listing's), whether it allows variations, item condition, required item specifics, one shipping policy for all articles, business policies and inventory location. Returns ready, marketplaceId, categoryId, axes, variationCount and issues (reason, message, skus). Needs a marketplace but not the owner's arming. Reads eBay. Use save_ebay_variation_listing once ready is true.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesThe product model: its code — the productGroupId get_product and search_products return for every article of it — or its id. Its active articles on the eBay channel become the listing's variations.
marketplaceIdNoeBay marketplace id (EBAY_IT, EBAY_DE…) for a FIRST save, when the connection sells on several. A saved listing keeps its marketplace; omit it then.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true; the description reinforces this with 'writing nothing' and 'Reads eBay,' and adds substantive context by enumerating exactly what is validated (prices, axes, duplicates, category, condition, item specifics, shipping/policies, inventory location) and the prerequisite about arming. It does not discuss latency or cost of the open-world calls, which keeps it from a 5.

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

Conciseness4/5

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

Front-loaded with the core action and the 'writing nothing' guarantee, then the check list, then return shape and prerequisites. The middle checklist sentence is very dense, but every clause carries distinct signal and nothing is padded.

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

Completeness5/5

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

With no output schema, the description compensates by naming the returned fields (ready, marketplaceId, categoryId, axes, variationCount, issues with reason/message/skus) and the precondition quirks (marketplace for first save, no arming). An agent has everything needed to call and interpret it.

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

Parameters3/5

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

Schema description coverage is 100%, so both params are already documented in the schema (model as code/productGroupId, marketplaceId for a first save on multi-marketplace connections). The description adds only the note that a marketplace is needed but arming is not; it adds no format or value semantics beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a precise verb and scope: runs the full pre-save validation of a model's eBay multi-variation listing without writing anything, and enumerates the exact checks. This cleanly distinguishes it from siblings like save_ebay_variation_listing, get_ebay_variation_listing, and inspect_ebay_listings without needing to open any schema.

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

Usage Guidelines4/5

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

Explicitly routes the agent: 'Use save_ebay_variation_listing once ready is true,' and states the marketplace prerequisite ('needs a marketplace but not the owner's arming'). It stops short of contrasting with the read-side sibling get_ebay_variation_listing, so the when-to-use guidance is clear but not exhaustive.

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

list_activitiesList activitiesA
Read-only
Inspect

List this workspace's activities (tasks, calls, meetings, emails, notes), filtered by type/assignee/overdue/completion/linked-entity and paginated. Returns summary rows (id, type, title, priority, dueDate, completed, assignee, linked lead/contact/company/deal, isOverdue) plus pagination { page, perPage, total }. Use get_activity to fetch one activity's full detail by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFree-text search over the activity title. Omit for no text filter.
pageNo1-based page number of results to return. Default 1.
typeNoFilter by activity type. Omit for any. Allowed: task, call, meeting, email, note.
dealIdNoFilter to activities linked to this deal id (from search_deals).
leadIdNoFilter to activities linked to this lead id (from search_leads).
overdueNoSet "true" to return only overdue activities (past due date, not completed).
perPageNoNumber of activities per page (1-100). Default 20.
companyIdNoFilter to activities linked to this company id (from search_companies).
completedNoFilter by completion: "true" only completed, "false" only open. Omit for both.
contactIdNoFilter to activities linked to this contact id (from search_contacts).
assignedToNoFilter to activities assigned to this workspace member's user id.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only behavior is established. The description adds useful context beyond annotations: it states the return format (summary rows with specific fields) and pagination structure, and implicitly warns that these are not full details by pointing to get_activity. No contradictions exist.

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

Conciseness5/5

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

Three sentences, front-loaded with the core action and resource, followed by return info and an alternative. Every sentence earns its place; zero waste. It is structured for quick scanning by an agent.

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

Completeness5/5

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

Despite having no output schema, the description specifies exactly what fields are returned (id, type, title, priority, dueDate, completed, assignee, linked lead/contact/company/deal, isOverdue) and the pagination shape. It also covers the main filter categories and points to the detail-fetching sibling tool, so an agent has enough context to invoke and interpret results correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents each parameter. The description merely groups the filters ('type/assignee/overdue/completion/linked-entity') without adding new details about parameter values, formatting, or relationships. This matches the baseline for high schema coverage.

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

Purpose5/5

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

The description uses a specific verb ('List') with a clearly defined resource ('this workspace's activities'), enumerates the activity types, and lists filtering dimensions. It also distinguishes itself from get_activity by noting that the latter returns full detail, so the purpose is unambiguous and differentiated from siblings.

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

Usage Guidelines5/5

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

The tool's usage context is explicit: it's for listing/filtering activities with pagination. It provides a clear alternative directive: 'Use get_activity to fetch one activity's full detail by id,' which tells the agent when a different tool is more appropriate. This counts as explicit when/when-not guidance.

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

list_brandsList brandsA
Read-only
Inspect

List this workspace catalog brands with id, name, description and website. Use a brand id here as the brandId for create_product/update_product, or as the search_products brand filter.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description's 'List' operation is consistent with that. The description adds the specific fields returned (id, name, description, website), which is useful behavioral context beyond the annotation. It does not disclose any edge cases like pagination or sorting, but for a zero-parameter catalog list the added field information is sufficient. No contradiction with annotations.

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

Conciseness5/5

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

The description is a single, dense sentence stating the action, scope, and return fields, followed by a second sentence on how to use the output. Both sentences are purposeful, with no filler or redundancy. The most important information (what it lists) is front-loaded.

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

Completeness5/5

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

For a tool with no parameters and a read-only list operation, the description provides the essential context: what it returns and how the results are meant to be used downstream. Given the annotations already convey safety, and the schema is empty, nothing critical is missing. The only minor gap is the absence of pagination or ordering information, but that's expected for a simple list tool.

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

Parameters4/5

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

The tool has zero parameters and the schema is empty, so there is nothing for the description to explain. Per the rubric, a zero-parameter tool receives a baseline of 4, and the description doesn't under-explain anything. It doesn't need to elaborate on semantics that don't exist.

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

Purpose5/5

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

The description opens with a specific verb ('List'), the resource ('this workspace catalog brands'), and enumerates the returned fields (id, name, description, website), making the tool's purpose unmistakable. It also ties the output to concrete downstream uses (brandId for create_product/update_product and as a search_products filter), which further clarifies what this tool is for. No sibling list tool appears to overlap, so distinction is clear.

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

Usage Guidelines4/5

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

The description explains a primary use case—obtaining brand ids to populate brandId fields in other tools—which is practical and concrete. It does not, however, explicitly state when not to use this tool or compare it with alternatives like list_categories or list_products. The context given is enough for an agent to infer that this is the go-to for brand listing, but without exclusions 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.

list_categoriesList categoriesA
Read-only
Inspect

List this workspace catalog categories as a flat array, each with id, name, slug and parentId (null for a root category). Categories are workspace-global, not per warehouse. Use a category id here as the categoryId for create_product/update_product, or as the search_products category filter.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds valuable behavioral context: it returns a flat array with specific fields, clarifies workspace-global scoping, and links to related operations. This goes beyond the annotations by explaining output shape and how the tool's results feed into other actions.

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

Conciseness5/5

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

Two sentences, each contributes essential information. The first defines the action and output format; the second explains how to use the output. There is no filler, no repetition of the name or title, and the most important scoping detail is placed early. Exemplary conciseness.

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

Completeness5/5

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

Given the tool has no parameters and no output schema, the description fully specifies what the agent receives (flat array of categories with id, name, slug, parentId) and how to leverage it for downstream operations. Nothing an agent needs to call this tool correctly or interpret its result is missing.

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

Parameters4/5

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

The tool has zero parameters, so the schema coverage is trivially 100%. The description correctly does not pretend to explain parameters. Per the calibration guideline, a baseline of 4 applies for tools with no parameters, and there is nothing more expected here.

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

Purpose5/5

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

The description states a specific verb ('List'), a concrete resource ('this workspace catalog categories'), and the exact output fields (id, name, slug, parentId). It also clarifies scope ('workspace-global, not per warehouse'), which distinguishes it from warehouse-related tools. This makes the tool's purpose unambiguous and easily differentiable from siblings.

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

Usage Guidelines4/5

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

The description gives clear guidance on how to use the output: a category id can be used as categoryId for create_product/update_product or as a search_products filter. It does not explicitly compare with alternative list tools, but the usage context implies when it would be relevant. It lacks explicit 'use this when...' or 'do not use when...' phrasing, but the guidance is actionable and specific.

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

list_channel_productsList channel productsA
Read-only
Inspect

List the products that are on one marketplace, with each listing external id, what the marketplace last reported about it (presence, valid only when observedAt is set — null observedAt means the marketplace has never been asked about that listing, not that it is absent; Prom is reconciled every 15 minutes, other channels only when a sync or publish runs), whether the workspace paused syncing it, its price and stock. Also returns the honest totals over the whole channel and the ACTIVE products that have no listing there at all (the 'did not match by SKU' list), which is usually the answer when a push updated fewer products than expected. Use check_channel_readiness for why a product would be refused.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformYesThe marketplace slug returned by list_marketplaces (prom, rozetka, olx, amazon, ebay, shopify, woocommerce).

TDQS

A4.5/5.0
Behavior5/5

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

The description adds rich behavioral nuance beyond the readOnlyHint annotation: the semantics of null observedAt, the meaning of presence, reconciliation cadence for Prom versus other channels, and the inclusion of unmatched ACTIVE products. This is exactly the kind of interpretation an agent needs to avoid misreading results.

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

Conciseness5/5

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

The description is dense but every clause earns its place: output fields, a subtle null-value caveat, refresh behavior, the unmatched-products report, and an explicit pointer to a sibling tool. The key purpose is front-loaded before adding necessary caveats.

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

Completeness5/5

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

For a one-parameter tool with no output schema, this description is remarkably complete. It explains what is returned, critical edge cases around observedAt and presence, refresh cadence, the unmatched-by-SKU list, and where to go for refusal explanations. An agent can invoke this correctly with minimal ambiguity.

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

Parameters3/5

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

The single platform parameter is already fully documented in the schema with an enum-like list of marketplace slugs and a pointer to list_marketplaces. The description reinforces that the tool is per-marketplace but adds no new parameter-level meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('List') and a specific resource ('products that are on one marketplace'), and it enumerates the exact fields returned. It distinguishes itself from generic product-listing tools by emphasizing channel-specific listing data and the 'did not match by SKU' list.

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

Usage Guidelines4/5

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

It gives a clear use case: 'usually the answer when a push updated fewer products than expected,' and explicitly routes to check_channel_readiness for refusal reasons. It could more explicitly contrast with list_products or other listing tools, but the marketplace-specific framing and cross-reference provide solid guidance.

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

list_content_channelsList social channelsA
Read-only
Inspect

List the social channels this workspace can publish posts to — Telegram channel, Instagram, Facebook page, LinkedIn, Threads — with, per channel, whether it is ready, where it posts (destination), its text limit (maxTextLength) and, when not ready, the setup step the person must do in Obriym. Also returns now (the current time on the workspace's clock) and the workspace time zone — build schedule_content_post times from them — the image rules, and publishingEnabled: whether the workspace owner allows AI clients to publish or schedule. Read-only. Call it before create_content_post and only target ready channels.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, non-destructive, non-open-world), and the description adds substantial context beyond them: per-channel readiness, destination, maxTextLength, the setup step needed when not ready, image rules, the workspace clock/timezone, and crucially publishingEnabled (whether the owner permits AI clients to publish or schedule). This is rich behavioral disclosure.

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

Conciseness4/5

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

Front-loads the core purpose and channel list before diving into return fields and the usage directive. The first sentence is very dense and long, which slightly hurts scanability, but nearly every clause carries distinct information.

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

Completeness5/5

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

With no parameters, no output schema and annotations covering safety, the description fully compensates by enumerating what the call returns and how to use it. An agent has everything needed to call it and consume the result correctly.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline of 4 applies. The description instead describes the shape of returned fields (ready, destination, maxTextLength), which adds helpful semantics though it is not parameter documentation.

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

Purpose5/5

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

States a specific verb+resource ('List the social channels this workspace can publish posts to') and enumerates the exact channel types (Telegram, Instagram, Facebook, LinkedIn, Threads). An agent can distinguish it from list_content_posts or get_workspace_info without opening any schema.

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

Usage Guidelines4/5

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

Gives clear sequencing guidance ('Call it before create_content_post') and a constraint ('only target ready channels'), plus mentions building schedule_content_post times from the returned clock. It lacks an explicit contrast with the overlapping sibling check_channel_readiness, so routing among read tools is left partly implicit.

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

list_content_localesList content languagesA
Read-only
Inspect

List the languages this workspace writes product content in: the base language (the text stored on products, categories and brands themselves), the extra languages the owner added, and the offered set — every language the CRM shows as a translation tab. Each entry is an ISO 639-1 code with its English name. Read-only. Call it BEFORE writing any translation (upsert_product_translation, upsert_category_translation, upsert_brand_translation) and write only offered languages; never write the base language as a translation.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true). The description adds real value beyond them by defining the three language sets and explaining the ISO 639-1 entry format, plus a behavioral constraint on downstream writes. It restates 'Read-only' rather than adding new safety context, so not a 5.

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

Conciseness4/5

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

Dense but front-loaded with the core purpose in the first clause; the operational warning about translation writes is placed last where it belongs. Slightly long overall but every sentence carries distinct information.

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

Completeness5/5

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

With no parameters and no output schema, the description fully covers what an agent needs: what the sets mean, the entry format, and the constraint on how results are consumed by downstream translation tools. Nothing material is missing.

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

Parameters4/5

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

Zero parameters, so the baseline is 4. The description goes further by characterizing the returned entries (ISO 639-1 code with English name), which is output-shape detail rather than parameter semantics.

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

Purpose5/5

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

States a specific verb (List) and resource (languages this workspace writes product content in) and disambiguates three sub-categories: base language, extra languages, and the offered set. An agent can distinguish it from sibling list_* tools without opening any schema.

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

Usage Guidelines5/5

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

Explicitly states when to call it (BEFORE any translation write), names the three dependent tools (upsert_product_translation, upsert_category_translation, upsert_brand_translation), and gives a hard exclusion rule: write only offered languages, never the base language as a translation.

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

list_content_postsList postsA
Read-only
Inspect

List the workspace's social posts, newest first, 20 per page: id, working title, status (draft, scheduled, publishing, published, partial, failed), channels, scheduled and published times. Filter by status or by part of the title. Read-only. Use get_content_post for one post's texts and per-channel results; use it to check what is already scheduled before planning more posts.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 20 publications per page, newest first.
queryNoPart of a publication's working title.
statusNoOnly publications in this state: draft, scheduled, publishing, published, partial (some channels failed) or failed.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description's 'Read-only' merely restates that. However, it adds behavioral detail outside the annotations: strict newest-first ordering and a fixed 20-per-page window, which materially affect how an agent pages through results. 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.

Conciseness5/5

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

Three dense sentences, front-loaded with scope and ordering, then filters, then routing to the sibling tool. Every clause carries load and there is no padding.

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

Completeness5/5

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

With no output schema, the description compensates by enumerating the returned fields and the status vocabulary, and it covers both filtering and the natural follow-up tool. An agent has everything needed to call and use it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents page, query, and status (including the enum meanings). The description restates the same information at roughly the same level of detail, adding no format or syntax guidance beyond the schema. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('List the workspace's social posts'), plus ordering, page size, and the exact fields returned (id, working title, status, channels, times). It is clearly separable from get_content_post, which it names explicitly.

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

Usage Guidelines5/5

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

Explicit routing: use get_content_post for a single post's texts and per-channel results, and use this list to check what is already scheduled before planning more posts. It also names the two filter axes (status, partial title) that select this tool.

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

list_customersList customersA
Read-only
Inspect

List CRM customers (companies with a won deal or delivered order), filtered by health/lifetime-value/won-deal count, sorted and paginated. Returns summary rows (companyId, name, health, lifetimeValue, wonDeals, lastActivity, owner) plus pagination { page, perPage, total }. Use get_customer to fetch one customer's detail by company id.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFree-text search over the customer company name. Omit for no text filter.
ltvNoFilter by lifetime-value bucket. Omit for any. Allowed: lt10k, 10k50k, gt50k.
pageNo1-based page number of results to return. Default 1.
healthNoFilter by customer health. Omit for any. Allowed: healthy, at_risk, churned.
ownerIdNoFilter to customers owned by this workspace member's user id.
perPageNoNumber of customers per page (1-100). Default 25.
sortDirNoSort direction by lifetime value. Default desc (highest first).desc
wonDealsMinNoOnly customers with at least this many won deals.

TDQS

A4.3/5.0
Behavior4/5

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 known. The description adds useful behavioral context by explaining the exact customer scope (won deal or delivered order) and the return format (summary rows plus pagination object), which goes beyond the annotations.

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

Conciseness5/5

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

Three sentences: first states the action and scope, second lists return fields and pagination structure, third directs to get_customer for detail. Every sentence adds value, no filler, and 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.

Completeness5/5

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

Given the tool has 8 optional parameters but no output schema, the description fills the output gap by listing exact fields returned and pagination shape. It also communicates the customer definition and the alternative for detail-only use. This is complete for an agent to select and invoke the tool confidently.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter already has detailed documentation. The description adds a high-level grouping ('filtered by health/lifetime-value/won-deal count') that maps to health, ltv, and wonDealsMin, but doesn't add new per-parameter meaning beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'List CRM customers' with a precise definition ('companies with a won deal or delivered order'), and specifies filtering, sorting, and pagination. It distinguishes itself from the sibling get_customer by explicitly pointing to that tool for detail retrieval.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool (listing/filtering/sorting/paginating CRM customers) and explicitly names get_customer as the alternative for fetching a single customer's detail. It doesn't mention other alternatives like search_companies, but the guidance is sufficient.

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

list_ebay_fulfillment_policiesList eBay shipping policiesA
Read-only
Inspect

List the eBay shipping (fulfillment) business policies the seller has on each eBay site the connection sells on: fulfillmentPolicyId, name, freeShipping, shippingCost of the first domestic service (null for CALCULATED shipping), costType, handlingTime, domestic and international services, ship-to regions, and isDefault — the connection default. productCount is how many products chose the policy themselves; staleAssignments are product choices pointing at a policy eBay no longer has. Reads the stored copy; a site never read before is read from eBay, and refresh true reads eBay now. Reads only. Use a fulfillmentPolicyId from here with set_product_ebay_fulfillment_policy, bulk_set_ebay_fulfillment_policy or set_ebay_default_fulfillment_policy; for one product's policy use get_product_ebay_fulfillment_policy.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNotrue reads the policies from eBay now instead of the stored copy. A marketplace never read before is read from eBay either way.
marketplaceIdNoAn eBay MARKETPLACE id such as EBAY_IT. Omit it to list every marketplace the eBay connection sells on.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint/destructiveHint/openWorldHint annotations, it discloses the caching model ('Reads the stored copy; a site never read before is read from eBay, and refresh true reads eBay now') and clarifies the semantics of derived fields like productCount and staleAssignments. This is meaningful behavioral context an agent would otherwise have to guess.

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

Conciseness4/5

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

Purpose and scope are front-loaded, and the sentence describing return fields earns its place given there is no output schema. It is dense and reads as one long run-on paragraph, but there is little outright waste.

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

Completeness5/5

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

With no output schema, the description correctly carries the burden of describing return values (listed fields, productCount, staleAssignments), plus usage routing and caching behavior. 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.

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented in the schema, and the description largely restates them (refresh hitting eBay, omitting marketplaceId listing all sites). It adds no format or syntax detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (List) and resource (eBay shipping/fulfillment business policies) scoped to 'each eBay site the connection sells on', and enumerates the returned fields. It clearly distinguishes itself from the point-read sibling get_product_ebay_fulfillment_policy. An agent can tell exactly what this returns without opening any schema.

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

Usage Guidelines5/5

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

Explicitly routes the agent: 'Use a fulfillmentPolicyId from here with set_product_ebay_fulfillment_policy, bulk_set_ebay_fulfillment_policy or set_ebay_default_fulfillment_policy; for one product's policy use get_product_ebay_fulfillment_policy.' It names both the follow-on writes this feeds and the alternative for the single-product case, plus the refresh/stored-copy condition.

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

list_lead_sourcesList lead sourcesA
Read-only
Inspect

List this workspace's lead sources (built-in plus custom), with each source's key, label and active state. Pass includeInactive to also return archived sources. Use set_lead_sources to add or archive a source; use a source key here as the source filter for search_leads.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeInactiveNoSet true to include archived/inactive lead sources.

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already declare read-only and non-destructive behavior, and the description complements this by detailing what the output contains (built-in plus custom, key/label/active state) and the effect of includeInactive on returned data. This adds meaningful behavioral context beyond the annotations.

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

Conciseness5/5

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

Three sentences, each packed with relevant information and no redundancy. The main purpose is front-loaded, and the related-tool guidance is efficiently included without extra verbiage.

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

Completeness5/5

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

For a simple read-only list operation with one optional parameter and no output schema, the description fully covers purpose, parameter behavior, relation to sibling tools, and expected return contents. No gaps remain.

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

Parameters3/5

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

Schema coverage is 100% and the only parameter (includeInactive) is already described in the schema. The description reiterates the parameter's purpose ('Pass includeInactive to also return archived sources') but adds only the nuance that archived sources are excluded by default, which is a minor enhancement. Baseline 3 applies.

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

Purpose5/5

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

The description specifies the exact action ('List this workspace's lead sources') and the data returned (key, label, active state). It also distinguishes itself from sibling tools by referencing set_lead_sources and search_leads, making its purpose unmistakable.

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

Usage Guidelines5/5

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

It explicitly tells when to use this tool vs alternatives: 'Use set_lead_sources to add or archive a source; use a source key here as the source filter for search_leads.' It also explains the conditional use of includeInactive for archived sources.

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

list_marketplacesList marketplacesA
Read-only
Inspect

List every marketplace connected to this workspace with its setup state, health, last activity, any current sync error, orders revenue per currency, leads, product counts on the channel and how many imported products are waiting to be reviewed. Answers 'which channels do I sell on and is anything broken'. Takes no arguments. Use get_marketplace for one channel in detail, list_channel_products for what is on it, and check_channel_readiness for what it will refuse.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable context by clarifying that it lists every marketplace in the workspace, includes sync errors and health indicators, and requires no arguments. No hidden side effects are suggested, and the description is consistent 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.

Conciseness5/5

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

The description is information-dense but efficient: the first sentence front-loads the resource and returned fields, the second states the use-case question, and the final sentence gives sibling routing. No filler or redundant restatement of the title.

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

Completeness5/5

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 content and does so thoroughly: setup state, health, last activity, sync errors, revenue per currency, leads, product counts, and pending reviews. It also covers scope, arguments, and alternatives, making it complete for an agent selecting and invoking this tool.

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

Parameters4/5

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

There are zero parameters and the schema is empty (100% coverage). The description adds the explicit statement 'Takes no arguments', which is sufficient. Baseline 4 is appropriate for a parameterless tool.

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

Purpose5/5

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

The description states a specific verb and resource: list every marketplace connected to the workspace. It enumerates the returned categories (setup state, health, sync errors, revenue, leads, product counts) and explicitly differentiates itself from get_marketplace, list_channel_products, and check_channel_readiness.

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

Usage Guidelines5/5

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

The description explicitly answers when to use this tool ('which channels do I sell on and is anything broken') and routes to alternatives for detail, products, and readiness checks. This gives an agent direct decision criteria without needing to inspect sibling schemas.

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

list_ordersList ordersA
Read-only
Inspect

List this workspace's orders, filtered by status/customer/created-date and paginated. Returns summary rows (externalId, status, currency, totalAmount, itemCount, timestamps) plus pagination { page, perPage, total }, newest first. Use get_order to fetch one order's full detail (line items, payments, shipments, returns) by externalId.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoOnly orders created at or before this ISO 8601 timestamp (e.g. 2026-02-28T23:59:59Z).
fromNoOnly orders created at or after this ISO 8601 timestamp (e.g. 2026-01-31T00:00:00Z).
pageNo1-based page number of results to return. Default 1.
statusNoFilter by order status. Omit to return every status. Allowed: pending, confirmed, processing, shipped, delivered, cancelled, refunded.
perPageNoNumber of results per page (1-100). Default 20.
customerExternalIdNoFilter to one storefront customer by their externalId (the id from the source system). Omit to list all customers' orders.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint and destructiveHint annotations, the description adds meaningful behavioral context: it returns summary rows rather than full objects, includes a pagination object, and orders results newest first. These are non-obvious behaviors the agent cannot infer from the schema alone.

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

Conciseness5/5

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

The description is exactly two sentences, front-loads the primary purpose and scope, and devotes the second sentence to sibling routing. Every sentence earns its place with 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.

Completeness5/5

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

With no output schema present, the description compensates by specifying the return shape (summary rows and pagination object) and ordering. It covers the tool's scope, filtering capabilities, pagination, and the alternative for deeper detail, leaving no critical gap for an agent deciding to call this tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all six parameters thoroughly. The description adds minimal extra parameter meaning beyond mapping 'status/customer/created-date' to the filter parameters, which is not a significant enhancement over the schema. The baseline of 3 is appropriate here.

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

Purpose5/5

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

The description states a specific verb ('List'), a specific resource ('this workspace's orders'), and the key scoping constraints (status/customer/created-date, paginated). It also explicitly differentiates itself from get_order by noting that list_orders returns only summary rows while get_order returns full detail, making the distinction clear.

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

Usage Guidelines5/5

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

The description names the exact alternative, get_order, and states the condition under which it should be used ('to fetch one order's full detail'). This gives the agent explicit routing guidance and implicitly tells it not to use list_orders when full detail is needed.

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

list_pipeline_stagesList pipeline stagesA
Read-only
Inspect

List this workspace's pipeline stages in order, with each stage's id, name, kind, default probability, WIP limit and position. Use configure_pipeline to change a stage, and the stage id here as the stageId for create_deal / transition_deal.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds that stages are returned 'in order' and lists specific fields, which is useful but not extensive. It does not discuss permissions, rate limits, or pagination, but for a simple read-only list tool with good annotation coverage, a 3 is appropriate.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the primary action and target, and every clause adds useful information. It lists output fields and gives explicit cross-tool references without fluff.

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

Completeness5/5

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

The tool is simple with no parameters and no output schema, so the description carries the burden of explaining return values. It fully specifies the fields and ordering, and also provides context on how the stage id is used elsewhere. This is complete for the tool's complexity.

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

Parameters4/5

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

The tool has zero parameters, so schema coverage is trivially 100%. The description does not need to clarify parameters, and the baseline for no parameters is 4. It adds value by describing output fields, though that is more about return semantics than parameters.

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

Purpose5/5

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

The description uses the specific verb 'List' with the resource 'pipeline stages' and scopes it to 'this workspace'. It enumerates the exact fields returned (id, name, kind, default probability, WIP limit, position), making the tool's purpose crystal clear and distinguishing it from sibling tools like configure_pipeline.

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

Usage Guidelines4/5

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

The description explicitly names alternatives: use configure_pipeline to change a stage, and use the stage id here for create_deal / transition_deal. This gives clear context for when to use this tool. It does not explicitly state when not to use it, but the cross-references provide strong usage guidance.

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

list_suppliersList suppliersA
Read-only
Inspect

List the workspace's suppliers: id, name, status (active or archived), the currency they invoice in and how many products each covers (productCount). Read-only. Use it as the id source for a {kind:'supplier'} scope of preview_bulk_price_change and apply_bulk_price_change — 'raise every Sipec product by 5%'. Categories, brands and warehouses come from list_categories, list_brands and list_warehouses.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/destructiveHint=false, and the description's 'Read-only' merely restates that. However it adds genuine behavioral value by defining what 'status' means (active or archived) and what productCount counts, plus the cross-tool workflow role. No contradictions with annotations.

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

Conciseness5/5

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

Three tightly packed sentences: fields first, then the read-only signal and primary use case, then sibling routing. The illustrative quote ('raise every Sipec product by 5%') earns its place by showing the id-consumption pattern, and there is no filler.

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

Completeness5/5

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

With no output schema, the description must document return values, and it does so completely for this tool. Zero-parameter input means there is nothing further an agent needs before calling it.

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

Parameters4/5

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

The tool takes zero parameters, so the schema carries no semantic weight and the baseline is 4. The description appropriately spends its text on output field semantics instead, which is the right trade-off here.

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

Purpose5/5

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

States a specific verb+resource ('List the workspace's suppliers') and immediately enumerates the returned fields (id, name, status, currency, productCount), so the agent knows exactly what this returns. It also explicitly distinguishes itself from the entity-list siblings list_categories, list_brands and list_warehouses.

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

Usage Guidelines5/5

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

Goes beyond context to prescribe the exact use case: it is 'the id source for a {kind:'supplier'} scope of preview_bulk_price_change and apply_bulk_price_change', with a concrete example. It also routes the agent to the correct sibling for categories, brands and warehouses.

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

list_warehousesList warehousesA
Read-only
Inspect

List this workspace warehouses with id, name, description, phone, address (the street line), country (ISO code), city, postalCode, workingHours (free text) and pickupEnabled (whether the warehouse is offered as a self-pickup point). A product lives in at most one warehouse, and the warehouse decides the inventory-tracking default and which sales channels new products are listed on. Use a warehouse id here as the warehouseId for create_product.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuine value beyond that by disclosing the returned field set (substituting for the missing output schema) and domain constraints like the inventory-tracking default and channel-listing behavior.

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

Conciseness4/5

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

Front-loaded with what the tool returns, followed by domain meaning and then the downstream usage link. The long field enumeration is dense but justified because no output schema exists; nothing is clearly wasted, though it reads as a single run-on list.

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

Completeness4/5

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

For a no-param, no-output-schema list tool, the description carries the return-value burden well by naming every field, and annotations cover safety. Domain context and the create_product linkage round it out; only the absence of any pagination/volume note keeps it from being fully complete.

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

Parameters4/5

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

There are zero input parameters, so there is nothing for the description to clarify; the baseline for a 0-parameter tool is 4. No parameter-level meaning is expected or missing.

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

Purpose5/5

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

States a specific verb (list) and resource (this workspace's warehouses), and enumerates the exact fields returned, so an agent knows precisely what it gets. It also anchors the concept in the domain ('a product lives in at most one warehouse'), which distinguishes it from generic listing tools.

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

Usage Guidelines4/5

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

Explicitly ties the output to a downstream action: 'Use a warehouse id here as the warehouseId for create_product,' which tells the agent when this tool is the right entry point. It lacks explicit when-not guidance or comparison to alternative lookups, 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.

list_workspacesList workspacesA
Read-only
Inspect

List every workspace the connected user belongs to (id, name, role) and mark which one this connection currently operates. OAuth sign-in connections only. Use select_workspace to switch.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and destructiveHint, providing safety context. The description adds meaningful behavioral detail beyond these: it marks the currently operated workspace and restricts usage to OAuth connections. It does not contradict any annotations.

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

Conciseness5/5

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

The description is two sentences long, front-loaded with the core action, and every clause adds value: output fields, current-workspace marking, OAuth constraint, and the alternative tool. No filler or repetition of schema/annotations.

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

Completeness5/5

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

For a simple, parameterless list tool, the description is complete: it specifies the output fields, the unique marking behavior, the auth requirement, and the sibling tool for switching. Despite lacking an output schema, the description covers return semantics sufficiently.

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

Parameters4/5

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

The tool has zero parameters, so the description need not add parameter meanings. Baseline of 4 applies because schema coverage is 100% and no parameters exist. The description effectively explains the output, which is sufficient.

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

Purpose5/5

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

The description clearly states the tool lists every workspace the connected user belongs to, including specific output fields (id, name, role) and a behavioral detail (marking the current workspace). It distinguishes itself from select_workspace, which is a sibling, by explicitly saying to use that tool for switching.

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

Usage Guidelines5/5

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

The description states a key usage constraint ('OAuth sign-in connections only') and provides an explicit alternative for switching workspaces ('Use select_workspace to switch'). This clearly guides the agent on when to use this tool versus the relevant sibling.

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

preview_bulk_price_changePreview bulk price changeA
Read-only
Inspect

Dry run of a bulk price change — step 1 of 2; nothing is written. Give a rule (percent, fixed, fromCost, discount, endDiscount, compareAtMarkup, compareAtClear), a scope (a named category, brand, supplier, warehouse or model, or up to 100 explicit product ids) and optionally a target (the product's price, a price-list currency, or the purchase cost). Returns totalItems (how many products would change), a sample of up to 10 with from/to, old price and cost, belowCost (how many would sell below their cost), skipped grouped by reason (no price, no cost, no rate, unchanged, …), the currency, and a digest. Always show the person the counts, the sample, the skipped reasons and any belowCost warning BEFORE applying. Then call apply_bulk_price_change with the SAME rule, scope and target and this digest. Ids come from list_categories, list_brands, list_suppliers, list_warehouses (a category includes its sub-categories only with includeSubcategories) and search_products. Read-only and repeatable.

ParametersJSON Schema
NameRequiredDescriptionDefault
ruleYesHOW prices move. The target 'cost' accepts only op 'percent'. Pick the one that matches the request: a percent change, a fixed price, a markup over cost, a discount (and its end), or the old price.
scopeYesWHICH products. Prefer a named container (category, brand, supplier, warehouse) when the person says 'all products of …' — it is read back by name in the preview. There is no free filter: a request like 'everything cheaper than 100' is not a scope; find the products first and send their ids.
targetNoWHICH number moves. Omit it to change the product's own selling price. Use {field:'price', currency:'EUR'} for the euro price list, {field:'cost'} for the purchase cost.

TDQS

A4.8/5.0
Behavior5/5

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 with 'Read-only and repeatable' and 'nothing is written'. It goes well beyond annotations by disclosing the digest-coupling contract, the sample of 10, belowCost counting, and skipped-reason grouping, which an agent needs to sequence the two-step workflow.

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

Conciseness4/5

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

The dry-run constraint and the before-applying requirement are front-loaded, and each sentence carries distinct operational information (rule/scope/target inputs, return contents, digest hand-off, id sources). It is long, but the density is justified rather than padded.

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

Completeness5/5

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

With no output schema, the description compensates by enumerating the return fields (totalItems, sample, belowCost, skipped reasons, currency, digest). Combined with full schema coverage on the three parameters, an agent has everything needed to call this safely as step 1 of the workflow.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real value by consolidating the seven rule branches into named operations (percent, fixed, fromCost, discount, endDiscount, compareAtMarkup, compareAtClear) and the six scope kinds into one sentence. It also flags the cross-field constraint that target 'cost' accepts only op 'percent'.

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

Purpose5/5

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

States a specific verb and resource ('Dry run of a bulk price change') and immediately labels itself 'step 1 of 2; nothing is written', which cleanly separates it from the sibling apply_bulk_price_change. An agent can identify the tool's role 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.

Usage Guidelines5/5

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

Explicitly says when to use it ('Always show the person the counts, the sample, the skipped reasons and any belowCost warning BEFORE applying') and names the exact follow-up call plus the required digest hand-off. It also routes the agent to list_categories, list_brands, list_suppliers, list_warehouses and search_products for sourcing ids.

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

publish_content_postPublish post nowA
Destructive
Inspect

Publish a post NOW to every ready channel of it — a real, public post in the business's name that followers see at once and that cannot be taken back from Obriym. A channel already published is never sent twice, so calling it again only retries the channels that failed or were not ready. Returns, per channel, the outcome (published, failed, already_published, skipped_not_configured with the setup step, skipped_empty, skipped_unsupported), the link to the live post and the network's error. Needs the owner's "AI may publish to social channels" switch (publishingEnabled in list_content_channels). Confirm with the person before calling it unless they asked for the publication outright. Echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe publication id returned by create_content_post or list_content_posts.

TDQS

A4.6/5.0
Behavior5/5

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

Discloses traits well beyond the annotations: irreversibility from Obriym, no double-publishing of already-live channels, the per-channel outcome vocabulary, the required 'AI may publish to social channels' switch, and workspace echoing. The destructive/openWorld hints are corroborated rather than merely restated, and the idempotentHint=false is consistent with a call that can still push previously-failed channels.

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

Conciseness4/5

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

Front-loads the action and its irreversibility, then the retry rule, return shape, permission requirement and confirmation advice. Dense and mostly earn-your-place, though the outcome enum listing is a long run-on that could be trimmed.

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

Completeness5/5

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

With no output schema, the description steps in and enumerates the per-channel return statuses, the live link and the network error. Combined with the permission and confirmation notes, an agent has everything needed to call and interpret this tool correctly.

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

Parameters3/5

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

One parameter at 100% schema coverage, so the baseline is 3. The description does not add syntax or format meaning beyond the schema's own note that the id comes from create_content_post or list_content_posts, though it does reinforce that the id identifies a publication.

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

Purpose5/5

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

States a specific verb and resource ('Publish a post NOW to every ready channel of it') and immediately characterizes the effect as a real public post in the business's name. An agent can distinguish it from create_content_post (draft creation) and schedule_content_post without opening a schema.

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

Usage Guidelines5/5

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

Explicitly covers re-invocation semantics ('calling it again only retries the channels that failed or were not ready') and adds a confirmation precondition ('Confirm with the person before calling it unless they asked for the publication outright'). This tells the agent both when to call and when to pause.

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

publish_ebay_draftsPublish eBay draftsA
Destructive
Inspect

Make the eBay DRAFT offers of up to 25 products LIVE and buyer-visible — a real publication on the seller's account. The item and offer are refreshed from the current product first, so a price, title, photo or characteristic fixed after the draft was made is published too. Pass only products whose nextAction from inspect_ebay_listings is publish_draft. Returns done, failed (with reasons) and notAttempted. Never tell the user a listing is live unless it is counted in done. Refused until the owner switches on AI publishing. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdsYesMake each product's eBay DRAFT offer LIVE and buyer-visible, at most 25 ids fetched with search_products. The item and offer are refreshed from current product data first, then published — this is a real, consequential publication, not a preview. Report every named per-product failure.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already carry destructive=true and non-idempotent, and the description adds real behavior beyond them: the item and offer are refreshed from current product data before publishing, the batch is capped at 25, partial failure is expected and must be reported per product, and the tool refuses until an account setting is enabled. The warning 'never tell the user a listing is live unless it is counted in done' captures a critical side-effect nuance.

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

Conciseness5/5

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

Four dense sentences, front-loaded with the consequential action and capped by the precondition and the failure-reporting rule. No sentence is filler; each adds an operational constraint.

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

Completeness5/5

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

No output schema exists, but the description describes the return shape (done, failed with reasons, notAttempted) and the workspace echo, so the agent knows what it will receive. For a destructive, non-idempotent batch publish, nothing material is missing.

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

Parameters4/5

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

Schema coverage is 100% and the single parameter is fully documented in-schema, so the baseline would be 3. The description adds useful framing the schema does not: that ids must be fetched with search_products, that this is a real consequential publication rather than a preview, and that per-product failures must be reported by name.

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

Purpose5/5

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

Specific verb+resource+scope: makes eBay DRAFT offers LIVE and buyer-visible, with the consequential nature stated. It is plainly distinguishable from create_ebay_drafts, recreate_ebay_drafts and withdraw_ebay_listings, which occupy adjacent slots in the sibling list.

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

Usage Guidelines5/5

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

Explicit precondition routing: 'Pass only products whose nextAction from inspect_ebay_listings is publish_draft' names the deciding sibling and the exact field that selects it. It also states a blocking condition ('refused until the owner switches on AI publishing'), which is a genuine when-not.

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

publish_ebay_variation_listingPublish a model's eBay variation listingA
Destructive
Inspect

Publish a product model on eBay as ONE live listing with variations: saves it first exactly like save_ebay_variation_listing (so eBay gets the articles as they are now), then publishes the whole group — a real listing buyers can purchase. Returns status: blocked (with issues — reason, message, skus — and nothing written), saved (a draft on eBay) or published, plus marketplaceId, listingId, variationCount, failed (variations eBay refused, by sku — nothing is published while any) and removedSkus (articles that left the listing). Needs listing creation armed on the eBay connection, and is refused until the workspace owner switches on AI publishing. Confirm with the user before calling. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesThe product model: its code — the productGroupId get_product and search_products return for every article of it — or its id. Its active articles on the eBay channel become the listing's variations.
marketplaceIdNoeBay marketplace id (EBAY_IT, EBAY_DE…) for a FIRST save, when the connection sells on several. A saved listing keeps its marketplace; omit it then.

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses that the save happens exactly as save_ebay_variation_listing, that nothing is written on a blocked result, that nothing is published while any variation fails, and it enumerates the return statuses. It also surfaces two authorization gates and a confirmation requirement, which the annotations (destructive/openWorld/idempotent) 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.

Conciseness4/5

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

Dense but front-loaded: purpose first, then save/publish behavior, then return statuses and preconditions. Nearly every clause carries information, though the long return-status enumeration makes it heavier than a tighter two-sentence form would be.

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

Completeness5/5

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

With no output schema, the description carries the full return contract (blocked/saved/published plus marketplaceId, listingId, variationCount, failed by sku, removedSkus) and the preconditions, so an agent has everything needed to call it and interpret the result.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters including their examples and length bounds. The description reinforces the meaning of 'model' (articles become variations) but adds little syntax or semantics beyond what the schema states, making the baseline 3 appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Publish a product model on eBay as ONE live listing with variations') and distinguishes the operation from siblings by explicitly comparing it to save_ebay_variation_listing. An agent can tell it apart from save_ and publish_ebay_drafts without opening either schema.

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

Usage Guidelines4/5

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

Explains the relationship to save_ebay_variation_listing (saves first, then publishes) and gives preconditions ('listing creation armed', 'refused until the workspace owner switches on AI publishing') plus an instruction to confirm with the user. It stops short of explicitly naming the save-only alternative as the path when the user does not want to publish live.

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

recreate_ebay_draftsRecreate eBay draftsA
Destructive
Inspect

Delete each product's eBay draft and create a fresh one from its current data, for up to 25 products. Needed only when a draft must move to another category or eBay site, or the reason is ebayDraftOfferMissing or ebayNoOfferId — ordinary edits are picked up by publish_ebay_drafts. A live listing is refused. If the delete succeeds but the new draft fails, that product is left with no draft and its failure says so. Refused until the owner switches on AI publishing. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdsYesDelete each product's existing eBay draft offer and create a fresh one from its CURRENT data, at most 25 ids fetched with search_products. Use this when a draft must move to a different category or marketplace, or eBay rejected its offer and a plain retry will not fix it. A LIVE listing is refused. If the delete succeeds but the new create fails, the failure says so explicitly — that product is then on the channel with NO draft.
marketplaceIdNoOmit this when the eBay connection sells on exactly one marketplace — the server fills it in automatically. Pass one of the audit's armed ebayDraftSetup.marketplaceIds only when several are armed. This is a MARKETPLACE id (e.g. EBAY_DE) — never the eBay CONNECTION/adapter id.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations (destructiveHint=true, idempotentHint=false, openWorldHint=true) by disclosing a partial-failure mode: if the delete succeeds but the create fails, the product is left with NO draft and the failure says so. It also states that a LIVE listing is refused and that the tool is gated until the owner enables AI publishing — auth/prerequisite context the annotations do not carry.

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

Conciseness4/5

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

Front-loads the core destructive action, then layers conditions and failure behavior. Dense but every clause carries information the agent needs; only mild packing of multiple conditions into single sentences keeps it from a 5.

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

Completeness5/5

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

For a destructive, non-idempotent tool with no output schema, the description covers the prerequisite (AI publishing enabled), refusal case (live listing), partial-failure consequence, and return hint ('the result echoes the workspace'). Nothing an agent needs to call it safely is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the parameter descriptions are themselves highly detailed (marketplaceId omission rules, enum, connection-vs-marketplace warning). The tool description only restates the 25-product cap and the category/site-move trigger, adding little meaning beyond the schema, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific compound action (delete the existing eBay draft and create a fresh one from current data) with an explicit scope of up to 25 products. It clearly distinguishes itself from siblings like publish_ebay_drafts, create_ebay_drafts, and delete_ebay_drafts by being a delete-then-recreate operation used only for specific remediation cases.

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

Usage Guidelines5/5

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

Explicitly names when to use it ('only when a draft must move to another category or eBay site, or the reason is ebayDraftOfferMissing/ebayNoOfferId'), names the alternative that handles the common case ('ordinary edits are picked up by publish_ebay_drafts'), and states refusal conditions. This is exactly the when/when-not/alternative guidance the dimension rewards.

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

remove_order_itemRemove order itemA
Destructive
Inspect

Remove a line item from an order. Recomputes the order total. Only allowed while the order is pending or confirmed; otherwise it fails with 409 CONFLICT "Order lines can only be changed while the order is pending or confirmed". Use get_order to find the order's externalId and the item's itemId. The result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesThe order item id returned by get_order.
externalIdYesThe order externalId returned by list_orders or create_order.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true, non-idempotent and non-readOnly. Beyond that, the description discloses a side effect (the order total is recomputed), the state restriction with a verbatim 409 CONFLICT message, and what the result echoes. This is substantive context the annotations do not carry.

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

Conciseness4/5

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

The critical constraint is front-loaded immediately after the purpose statement, and each sentence carries information. The verbatim error-string quotation is slightly verbose but justified as it tells the agent exactly what a 409 means here.

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

Completeness4/5

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

For a destructive mutation with no output schema, the description covers the mutation effect, the guard condition, parameter sourcing, and the return behavior ('echoes the operating workspace'). An agent has what it needs to call it correctly; only the absence of sibling cross-references leaves a small gap.

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

Parameters3/5

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

Schema coverage is 100% and the schema already documents both parameters, including their provenance ('returned by get_order', 'returned by list_orders or create_order'). The description largely repeats that sourcing hint via get_order, adding little beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

The description opens with a precise verb+resource ('Remove a line item from an order'), which is inherently distinguishable from sibling tools add_order_item, update_order_item, and update_order_status. An agent can identify the operation without opening any schema.

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

Usage Guidelines4/5

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

It states an explicit precondition ('Only allowed while the order is pending or confirmed') with the exact failure mode, and directs the agent to get_order to source the parameters. It stops short of naming sibling alternatives (e.g., update_order_item) for other line-item changes, so it is strong but not fully comparative.

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

save_ebay_variation_listingSave a model's eBay variation listingA
DestructiveIdempotent
Inspect

Save a product model on eBay as ONE listing with variations — every active article of the model on the eBay channel is a variation (its own SKU, price and stock; buyers choose colour and size). Writes the inventory items, the inventory item group and each variation's offer; a draft stays unpublished. When the listing is already LIVE this updates it in place: new variations, prices and texts reach buyers at once, and articles that no longer qualify leave it. Returns status: blocked (with issues — reason, message, skus — and nothing written), saved (a draft on eBay) or published, plus marketplaceId, listingId, variationCount, failed (variations eBay refused, by sku — nothing is published while any) and removedSkus (articles that left the listing). Needs listing creation armed on the eBay connection, and is refused until the workspace owner switches on AI publishing. Idempotent. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesThe product model: its code — the productGroupId get_product and search_products return for every article of it — or its id. Its active articles on the eBay channel become the listing's variations.
marketplaceIdNoeBay marketplace id (EBAY_IT, EBAY_DE…) for a FIRST save, when the connection sells on several. A saved listing keeps its marketplace; omit it then.

TDQS

A4.2/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly=false, destructive=true, idempotent=true), yet the description adds substantial behavior beyond them: exactly what gets written (inventory items, item group, offers), that articles no longer qualifying are removed, the full status enum with failure semantics, and two hard prerequisites (listing creation armed, owner-enabled AI publishing). This is unusually rich disclosure.

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

Conciseness4/5

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

Front-loaded with the core purpose and every sentence carries information (mapping, live-update behavior, return shape, prerequisites). It is a dense block rather than scannable bullets, but for a tool of this complexity little is wasteful.

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

Completeness5/5

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

With no output schema, the description fully carries the burden, enumerating the return fields (status, marketplaceId, listingId, variationCount, failed, removedSkus) and their meanings, plus prerequisites and idempotency. An agent has everything needed to call and interpret it.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already documents both parameters in detail (model as code-or-id, marketplaceId only for a first save). The description restates the model's role without adding new syntax or constraints, so baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Save a product model on eBay as ONE listing with variations') and immediately clarifies the model-to-variation mapping. An agent can distinguish it from siblings like publish_ebay_variation_listing and create_ebay_drafts by the 'all variations in one listing' semantics.

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

Usage Guidelines3/5

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

Provides strong situational context (a draft stays unpublished; a LIVE listing is updated in place; blocked/saved/published outcomes), which implies when it applies. However it never explicitly names the alternative tools (e.g. publish_ebay_variation_listing, construct_ebay_drafts) or states when NOT to use this one, so routing is left partly to inference.

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

schedule_content_postSchedule postA
Destructive
Inspect

Schedule a post to be published at a time, or cancel its schedule. Obriym itself publishes it to every ready channel of the post within about 15 minutes after that time — the AI client does not need to be running then. This is how regular publishing is set up: create several drafts, then schedule each. Needs the owner's "AI may publish to social channels" switch to schedule (see publishingEnabled in list_content_channels); cancelling (scheduledAt: null) does not. A post that is published or being published cannot be scheduled. Returns a warning when no channel of the post is ready yet. Echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe publication id returned by create_content_post or list_content_posts.
scheduledAtYesWhen to publish, as an ISO 8601 date-time WITH its time-zone offset, e.g. "2026-10-12T10:00:00+03:00". At least one minute and at most one year ahead; list_content_channels returns the workspace time zone. Obriym publishes it itself at that time — no AI client needs to be running. null cancels the schedule and returns the post to a draft.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations (which only mark it non-read-only, non-idempotent, destructive, open-world): it discloses that Obriym itself publishes ~15 minutes after the target time with no AI client running, that the owner's publishing switch gates scheduling but not cancellation, that published posts cannot be rescheduled, and that a warning is returned when no channel is ready.

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

Conciseness4/5

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

Front-loads the action, then prerequisites, then limits, which is the right order. It is dense but each sentence carries a constraint; the only mild waste is restating the publish-timing behavior that the scheduledAt schema description already covers.

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

Completeness5/5

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

With no output schema, the description compensates by stating what comes back (a warning when no channel is ready) and that the workspace is echoed, and it covers prerequisites, failure modes and reversibility. Nothing material for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already documents the ISO 8601-with-offset format, the one-minute/one-year window, the workspace time-zone pointer and the null-cancels semantics. The description largely restates these, adding only that null returns the post to a draft, so the baseline 3 applies.

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

Purpose5/5

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

States a precise verb+resource ('Schedule a post to be published at a time') plus the inverse operation ('cancel its schedule'), which immediately separates it from publish_content_post (publish now) and create_content_post (draft). An agent can place it in the content lifecycle 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.

Usage Guidelines5/5

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

Gives explicit when-to-use workflow ('create several drafts, then schedule each'), an explicit prerequisite (owner's 'AI may publish to social channels' switch, with a pointer to publishingEnabled in list_content_channels), an explicit carve-out for cancelling, and an explicit cannot-use condition ('A post that is published or being published cannot be scheduled').

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

search_companiesSearch companiesA
Read-only
Inspect

List and search this workspace's companies, filtered by industry/status/owner, sorted and paginated. Returns summary rows (id, name, industry, size, status, owner, contactCount) plus pagination { page, perPage, total }. Use get_company to fetch one company's full detail by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFree-text search over the company name. Omit for no text filter.
pageNo1-based page number of results to return. Default 1.
statusNoFilter by relationship status. Omit for any. Allowed: prospect, active, inactive.
ownerIdNoFilter to companies owned by this workspace member's user id.
perPageNoNumber of companies per page (1-100). Default 25.
sortDirNoSort direction by name. Default asc.asc
industryNoFilter to companies in this industry. Omit for any industry.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable context: it returns summary rows with specific fields, includes pagination info, and scopes to the current workspace. This goes beyond the annotations by clarifying the return shape and scope, though it doesn't address auth or rate limits, which annotations partially cover.

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

Conciseness5/5

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

Two sentences that front-load the core function, then provide return format and a pointer to the sibling tool. Every word serves a purpose; 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.

Completeness5/5

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

Despite having 7 parameters and no output schema, the description explains the return format (summary rows + pagination) and the tool's scope. It also mentions how to get full details, covering the typical use cases. The description is complete enough for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds meaning by grouping parameters into 'filtered by industry/status/owner' and 'sorted and paginated', giving context that the schema alone doesn't provide. It also mentions the pagination response object, tying together perPage/page.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List and search this workspace's companies' with specific filters, sorting, and pagination. It also distinguishes itself from get_company by noting that full detail is retrieved there, making the purpose and scope evident.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly directs the user to 'Use get_company to fetch one company's full detail by id,' providing a clear alternative. It also describes the tool's capabilities (filtering, sorting, pagination), implicitly indicating when to use it for summary lists.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_contactsSearch contactsA
Read-only
Inspect

List and search this workspace's contacts, filtered by company/owner/tag, sorted and paginated. Returns summary rows (id, firstName, lastName, email, phone, jobTitle, company, owner, tags) plus pagination { page, perPage, total }. Use get_contact to fetch one contact's full detail by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFree-text search over name, email and company. Omit for no text filter.
tagNoFilter to contacts carrying this tag. Omit for any tag.
pageNo1-based page number of results to return. Default 1.
sortByNoField to sort by. Default name. Allowed: name, email, createdAt.name
ownerIdNoFilter to contacts owned by this workspace member's user id.
perPageNoNumber of contacts per page (1-100). Default 25.
sortDirNoSort direction. Default asc.asc
companyIdNoFilter to contacts at this company id (from search_companies).

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true and destructiveHint=false, so the agent knows it is a safe read operation. The description adds the exact summary row fields (id, firstName, lastName, etc.) and pagination structure, which is useful behavioral context beyond the annotations. However, it does not disclose potential performance characteristics or search semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose, then return format, then sibling guidance. No redundant information and every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the schema already covers parameters, the description adequately explains the return format (summary rows + pagination) and provides an alternative for full details. It is complete for a read-only list/search tool with no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameter semantics are fully documented in the schema. The description adds a high-level grouping (filter by company/owner/tag, sorted/paginated) which maps to parameters but does not explain individual parameter syntax or constraints. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists/searches workspace contacts with filtering by company/owner/tag, sorting, and pagination. It distinguishes from get_contact by noting 'Use get_contact to fetch one contact's full detail by id.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly directs the agent to use get_contact when full detail is needed, providing an explicit alternative. This gives clear when-to-use and when-not-to-use guidance for at least one relevant sibling tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_dealsSearch dealsA
Read-only
Inspect

List and search pipeline deals, filtered by stage/owner/company/contact/stale and paginated. Returns summary rows (id, title, stage, amount, probability, owner, company, contact, next-action, isStale) plus pagination { page, perPage, total }. Use get_deal to fetch one deal's full detail by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFree-text search over the deal title. Omit for no text filter.
pageNo1-based page number of results to return. Default 1.
staleNoSet "true" to return only stale deals (past their next-action date or long untouched).
ownerIdNoFilter to deals owned by this workspace member's user id.
perPageNoNumber of deals per page (1-100). Default 25.
stageIdNoFilter to deals in this pipeline stage id (from list_pipeline_stages).
companyIdNoFilter to deals linked to this company id (from search_companies).
contactIdNoFilter to deals linked to this contact id (from search_contacts).

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and destructiveHint annotations, the description discloses the exact return format: 'summary rows (id, title, stage, amount, probability, owner, company, contact, next-action, isStale) plus pagination { page, perPage, total }.' This adds meaningful behavioral context about what results look like and pagination, which 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each serving a distinct purpose: stating the action/filters, describing the return format, and pointing to the sibling tool for full detail. The description is front-loaded with the core purpose and contains no filler or redundant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and 8 optional parameters, the description still covers the essentials: the tool's purpose, filter options, pagination behavior, return fields, and how to obtain full detail. This is sufficient for an agent to invoke the tool correctly without additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides full descriptions for all 8 parameters (100% coverage), so the description adds little extra meaning. It merely lists filter categories (stage/owner/company/contact/stale) without detailing syntax or whether filters combine with AND/OR, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'List and search pipeline deals' – a specific verb+resource combination – and enumerates the filter dimensions (stage/owner/company/contact/stale) and pagination. It also explicitly distinguishes from get_deal by noting 'Use get_deal to fetch one deal's full detail by id,' so an agent can clearly separate list/search from detail retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance: use this tool for list/search with filters and pagination, and use get_deal for full detail. This provides a clear when-to-use vs. alternative, which is exactly what an agent needs to select between the two deal-focused tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_leadsSearch leadsA
Read-only
Inspect

List and search this workspace's leads, filtered by text/status/source/created-date/stale and paginated. Returns summary rows (id, name, contact, company, status, source, assignee, tags, next-action, isStale, timestamps) plus pagination { page, perPage, total }, newest first. Use get_lead to fetch notes, position and score for one lead by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFree-text search over lead name, email, phone, or company. Omit for no text filter.
toNoOnly leads created at or before this ISO 8601 timestamp (e.g. 2026-02-28T23:59:59Z).
fromNoOnly leads created at or after this ISO 8601 timestamp (e.g. 2026-01-31T00:00:00Z).
pageNo1-based page number of results to return. Default 1.
staleNoSet true to return only stale leads: not unqualified/converted and either past their next-action date or untouched for more than 7 days.
sourceNoFilter by lead source key (e.g. website, referral, telegram). Use list_lead_sources to see the workspace's keys. Omit for all sources.
statusNoFilter by lead status. Omit to return every status. Allowed: new, contacted, qualified, unqualified, converted.
perPageNoNumber of results per page (1-100). Default 20.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), so the bar is lower. The description adds genuinely useful behavioral context beyond annotations: it returns summary rows rather than full lead detail, orders results newest-first, and discloses the pagination object shape. This is especially valuable given there is no output schema. Minor gaps like auth or rate limits are not disclosed, but they are low-stakes for a read-only list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, all load-bearing: the first states operation and filter scope, the second defines the return contract (fields, pagination, ordering), and the third points to the sibling for deeper detail. The content is front-loaded and there is zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 fully documented parameters, zero required fields, read-only annotations, and the missing output schema compensated by an explicit field list plus pagination shape, an agent has everything needed to call this tool correctly. The only minor gaps are empty-result and error behavior, which are low-stakes for a read-only list operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with every one of the 8 parameters having its own description — stale's exact logic, source's pointer to list_lead_sources, from/to ISO examples, perPage bounds, status enum. This meets the high-coverage baseline of 3. The description adds only aggregate filtering context and ties filters to the response shape, but does not add per-parameter meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'List and search this workspace's leads', then enumerates exact filter dimensions (text/status/source/created-date/stale) and pagination. It specifies the output contract ('summary rows... plus pagination { page, perPage, total }'), default ordering ('newest first'), and explicitly differentiates from get_lead. This is unambiguous and clearly separates the tool from its 48 siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool (workspace-wide lead list/search with filters) and explicitly routes single-lead detail retrieval to the sibling: 'Use get_lead to fetch notes, position and score for one lead by id.' It does not enumerate exclusions against the other search_* siblings, though resource-name differences (contacts, companies, deals, products) make those alternatives self-evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_productsSearch productsA
Read-only
Inspect

List and search active catalog products, filtered by category/brand/collection/model (productGroupId — the other colours and sizes of one model)/size/color/price/stock/tag/type, sorted by name, price, newest or popularity (units sold in the last 90 days), and paginated. Returns summary rows (id, name, sku, type, price, currency, unit, stock, category, brand) plus pagination { page, perPage, total }. Use get_product to fetch one product's full detail by id or SKU.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFree-text search over product name and SKU. Empty for no text filter.
tagNoFilter to products carrying this tag. Empty means any tag.
pageNo1-based page number of results to return. Default 1.
sizeNoFilter to products whose size equals this value, ignoring letter case (the product's own size field). Empty means any size.
sortNoSort order. Empty sorts by name. Allowed: name_asc, name_desc, price_asc, price_desc, newest, popular — popular ranks by units sold in confirmed, processing, shipped or delivered orders over the last 90 days. Ties break by name.
typeNoFilter by product type. Empty for any; "simple" or "bundle".
colorNoFilter to products whose color equals this value, ignoring letter case (the product's own color field, not a free-form attribute). Empty means any color.
statusNoFilter by catalog status. Empty keeps the storefront default of active only. Use "draft" to find products waiting to be reviewed (marketplace imports and unknown SKUs from orders land there), or "any" for every status.
brandIdNoFilter to one brand by its id. Empty string means any brand.
inStockNoSet "true" to return only products with stock available. Empty means include out-of-stock.
perPageNoNumber of products per page (1-100). Default 20.
maxPriceNoOnly products priced at or below this amount (workspace currency).
minPriceNoOnly products priced at or above this amount (workspace currency).
categoryIdNoFilter to one category by its id. Empty string means any category.
collectionNoFilter to the products of one collection, by its slug from GET /collections. Only a collection that is visible and in season matches — an unknown, hidden or out-of-season slug is reported as not found, exactly like GET /collections/{slug}. Empty means no collection filter.
stockStateNoFilter by stock state, for products that track inventory. "low" returns products at or under their reorder threshold; "out" returns products with nothing left. Empty applies no stock-state filter.
warehouseIdNoFilter to products in one warehouse by its id, from the warehouse list. Use "none" for products assigned to no warehouse — they match no id, so nothing else surfaces them. Empty means any warehouse. An id absent from this workspace is reported as an error, never as an empty result.
productGroupIdNoFilter to the variants of one model: products whose productGroupId equals this value exactly. It is the merchant's (or supplier's) own model code, so letter case is part of it. Use it to render the other colours and sizes of the product a buyer is looking at. Empty means any model.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds valuable behavioral context: popularity definition (90-day orders), case-sensitivity of productGroupId, warehouse error behavior, collection visibility/seasonality, and status semantics for draft/any. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every clause earns its place given 18 parameters. It front-loads the core purpose, lists filters compactly, and concludes with the alternative tool. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers return format (summary rows + pagination), sorting, all filter semantics, error behaviors, and the fallback tool. Given the annotations and 100% schema coverage, nothing an agent needs to invoke correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds meaning beyond the schema: clarifies productGroupId as model variants, explains 'popular' sorting, defines stockState thresholds, and clarifies that warehouseId 'none' matches no id and unknown ids error. This significantly augments the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List and search active catalog products') and enumerates the filter dimensions and sort options. It explicitly contrasts with get_product ('Use get_product to fetch one product's full detail'), making it distinguishable from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly describes when to use this tool (searching/listings) and directs to get_product for full detail. It also explains default behaviors (active-only status, empty collection matching) and error conditions (warehouse not found, hidden collection).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

select_workspaceSelect workspaceA
DestructiveIdempotent
Inspect

Re-bind this OAuth connection to the workspace selected by the user. Takes effect on the next tool call. Use the organizationId returned by list_workspaces or by WORKSPACE_SELECTION_REQUIRED; never invent or guess it.

ParametersJSON Schema
NameRequiredDescriptionDefault
organizationIdYesThe workspace organizationId chosen by the user from list_workspaces or WORKSPACE_SELECTION_REQUIRED.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already indicating destructive and non-read-only behavior, the description adds valuable context: 'Takes effect on the next tool call' and the warning not to guess the ID. This goes beyond the annotations, though it could elaborate on the exact consequences of re-binding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the primary action and immediately followed by the key behavioral note and required source for the parameter. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with clear annotations and no output schema, the description covers purpose, effect, and parameter source completely. An agent can understand and invoke the tool correctly without further information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema description already contains the same guidance about using the ID from list_workspaces or WORKSPACE_SELECTION_REQUIRED. The description repeats this and adds only a caution, but does not introduce new parameter-level semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Re-bind') and resource ('OAuth connection') and explains it connects to a user-selected workspace. It distinguishes itself from sibling tools like list_workspaces and get_workspace_info by focusing on the re-binding action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use the tool (when workspace selection is required) and how to obtain the correct parameter value (from list_workspaces or WORKSPACE_SELECTION_REQUIRED). It also explicitly says 'never invent or guess it', covering a when-not case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_brand_imageSet brand imageA
DestructiveIdempotent
Inspect

Set or remove the picture (logo) of ONE brand. Pass a public https image link in url (JPEG, PNG or WebP, at most 2 MB; a bigger file is refused, there is no resize) — Obriym stores its own copy and the previous picture is deleted only after the new one is in place. Pass url: null to remove the current picture. Idempotent in effect: repeating it leaves the same picture. Use list_brands to find the brand id. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesA public https image link (JPEG, PNG or WebP, at most 2 MB) to use as the brand picture, or null to remove the current picture.
brandIdYesThe brand id from list_brands.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (destructiveHint, idempotentHint, openWorldHint) by disclosing format and 2 MB size limits with no resize, that a copy is stored, and crucially that the prior picture is deleted only after the new one lands (atomic replacement). This is exactly the mutation-risk context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the set/remove action, and the em-dash clause packs useful constraint detail. Slightly repetitive since the format/size constraints are also in the schema, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter mutation with no output schema, the description covers the action, removal path, id lookup, constraints, and return behavior ('echoes the workspace'), leaving no material gap for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents url (public https, JPEG/PNG/WebP, max 2 MB, null to remove) and brandId. The description largely restates these, adding no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (set/remove) and a precise resource ('the picture (logo) of ONE brand'), and the 'ONE brand' scoping plus verb distinguishes it from set_category_image and add_product_images. An agent can identify the 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear entry context: use list_brands to obtain the id, and pass url: null to remove instead of setting. It does not explicitly contrast 'when not to use' against the sibling image tools, but the resource scope makes the routing clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_category_imageSet category imageA
DestructiveIdempotent
Inspect

Set or remove the picture of ONE category. Pass a public https image link in url (JPEG, PNG or WebP, at most 2 MB; a bigger file is refused, there is no resize) — Obriym stores its own copy and the previous picture is deleted only after the new one is in place. Pass url: null to remove the current picture. Idempotent in effect: repeating it leaves the same picture. Use list_categories to find the category id. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesA public https image link (JPEG, PNG or WebP, at most 2 MB) to use as the category picture, or null to remove the current picture.
categoryIdYesThe category id from list_categories.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing hard operational limits (2 MB cap, no resize, formats accepted), the storage model (Obriym keeps its own copy, so the source link may be temporary), and atomicity ('the previous picture is deleted only after the new one is in place'). These are exactly the facts an agent needs before invoking a destructive, open-world mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then the input rules, then the removal path, then idempotency and id lookup in descending priority. No filler sentences; the parenthetical limits are dense but all load-bearing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter destructive mutation with no output schema, the description covers inputs, size/format constraints, deletion ordering, idempotency, and points to the tool that supplies the id. Nothing needed 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it clarifies that the link may be temporary because the image is re-hosted, and spells out the null semantics for removal. That is more than restating the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (set/remove) plus the exact resource ('the picture of ONE category'), and the emphasis on ONE distinguishes it from bulk image operations in the sibling list. An agent can immediately tell this apart from set_brand_image and update_product_images.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to list_categories to obtain the id and states the trigger for removal (url: null). It does not, however, distinguish when to use this versus update_category or the other set_*_image siblings, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_channel_membershipSet channel membershipA
DestructiveIdempotent
Inspect

Mark or unmark up to 100 products for one connected sales channel (prom, rozetka, ebay, olx, …). It changes what the CRM intends to send: on Prom and Rozetka the next feed pull adds or drops the product; on eBay it only makes the product a channel member — a listing exists only after create_ebay_drafts and publish_ebay_drafts. It never arms a sync. Adding picks up active products only. Returns { affected, skipped } — skipped were already in that state. Refused until the workspace owner switches on AI publishing. Idempotent. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
listedYestrue marks the products for this channel; false unmarks them. This only changes what the CRM intends to send — it never arms a sync and never creates a listing by itself. Unmarking a product on Prom drops it from the next feed pull.
platformYesThe connected sales channel to change membership on (e.g. prom, rozetka, ebay, olx).
productIdsYesThe exact products to change, at most 100 ids fetched with search_products.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover idempotency, destructiveness, and closed-world scope, and the description adds substantial extra context: unmarking drops the product from the next feed pull, adding only picks up active products, and the operation is refused until the workspace owner enables AI publishing. It also explains the { affected, skipped } return, alerting the agent to auth gating and partial no-ops.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then layers platform behavior, return shape, auth gate, and idempotency. Nearly every sentence earns its place, with only minor overlap against the schema's listed-flag note about never arming a sync.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description documents the return shape ({ affected, skipped } and skipped semantics), the idempotency guarantee, the auth precondition, and the platform-specific effects. An agent has everything needed to invoke and interpret the call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description goes beyond by explaining per-platform meaning of the listed flag (eBay membership vs Prom/Rozetka feed impact) and the 100-item cap. It adds nuance the schema's field descriptions don't fully convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (mark/unmark) and resource (products for one connected sales channel), and enumerates the affected platforms. It clearly distinguishes itself from sibling flows like create_ebay_drafts/publish_ebay_drafts, so an agent can tell it apart without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives strong context: it changes CRM intent, never arms a sync, and on eBay only makes the product a member (a listing requires create_ebay_drafts then publish_ebay_drafts). This routes the agent toward the listing tools, though it doesn't state an explicit 'use X instead when' condition for every case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_ebay_default_fulfillment_policySet the default eBay shipping policyA
DestructiveIdempotent
Inspect

Set the eBay connection's default shipping (fulfillment) policy for one eBay site, or null to remove it. Products without their own choice carry it in every new draft and when a draft goes live; LIVE listings keep the policy they have — change those with bulk_set_ebay_fulfillment_policy. The policy is checked against eBay's live list first; with no default, listings use the first policy eBay returns. Returns marketplaceId, previousFulfillmentPolicyId, fulfillmentPolicyId and the policy. Refused until the workspace owner switches on AI publishing. Idempotent. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
marketplaceIdNoAn eBay MARKETPLACE id such as EBAY_IT. Omit it when the eBay connection sells on one site.
fulfillmentPolicyIdYesA fulfillmentPolicyId from list_ebay_fulfillment_policies, for the same marketplace. null removes the default: listings without their own choice then use the first policy eBay returns.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotency, open-world reach and destructiveness; the description reinforces idempotency and adds real context — validation against eBay's live policy list, the fallback to eBay's first-returned policy when no default exists, and the auth gate. It does not, however, explain in what sense the operation is 'destructive' beyond the implicit removal via null, leaving some ambiguity against destructiveHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose, then behavior, sibling routing, prerequisite, idempotency and return shape in tight semicolon-joined clauses with no filler. It is dense and slightly packed, but every sentence carries information relevant to invoking the tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates the returned fields (marketplaceId, previousFulfillmentPolicyId, fulfillmentPolicyId, policy), and it covers prerequisites, side effects on drafts vs. live listings, and the alternative tool. 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the null-removal semantics, the marketplaceId omission rule and the enum. The description restates that null strips the default and that a missing default falls back to eBay's first policy, adding only marginal meaning over the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (set) and resource (the eBay connection's default shipping/fulfillment policy) scoped to one eBay site, and explicitly covers the null-removal case. It names the sibling that handles the adjacent job (bulk_set_ebay_fulfillment_policy for LIVE listings), so an agent can distinguish it 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains exactly when the setting takes effect (products without their own choice in new drafts and on go-live) and when it does not (LIVE listings keep their current policy), routing that case to bulk_set_ebay_fulfillment_policy. It also states a hard precondition: refused until the workspace owner enables AI publishing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_lead_sourcesSet lead sourceA
DestructiveIdempotent
Inspect

Create or update a workspace lead source: set its label and active state by key (built-in or custom, lowercase_with_underscores). Idempotent — re-sending the same key updates it. Archiving the fallback 'other' source is not allowed. Use list_lead_sources to see current sources. The result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesStable source key, lowercase_with_underscores (built-in or custom).
labelYesHuman-readable label shown for this source in the UI.
isActiveYesWhether the source is selectable for new leads. Set false to archive it (the fallback 'other' source cannot be archived).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the annotations: idempotency semantics, the restriction on archiving the 'other' source, and the result echoing the workspace. Since the annotations only declare idempotent and destructive hints, the description elaborates on what these mean in practice. No contradiction detected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is composed of five short, purposeful sentences, each conveying a distinct piece of information: purpose, idempotency, constraint, alternative, and result. It is front-loaded with the main action and contains no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is relatively simple with only three parameters, and the description covers the essential behavior, constraints, and result. Since there is no output schema, the note that the result echoes the operating workspace is valuable, though it could be slightly more explicit about the response format. Overall, it is sufficient 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the baseline is 3. The description adds value by framing key as the identifier and label/isActive as mutable state, and by noting that re-sending the same key updates the source. This goes slightly beyond the schema, which already documents each field individually.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool creates or updates a workspace lead source, specifying the label and active state by key. It also explicitly points to list_lead_sources for seeing current sources, distinguishing it from sibling tools. The mention of built-in/custom keys and the fallback 'other' source further clarifies its purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool (create/update) and points to the alternative list_lead_sources for viewing sources. It also includes important usage constraints, such as the inability to archive the fallback 'other' source. The idempotency note tells the agent that re-sending the same key is safe.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_product_channel_priceSet product channel priceA
DestructiveIdempotent
Inspect

Set — or clear — the price ONE sales channel gets for ONE product, instead of the product's ordinary price in that currency. Send price as a decimal string to set it (with an optional compareAtPrice, the old price, higher than price) or price null to remove the override so the channel gets the ordinary price again. Per platform and currency: Prom, Rozetka, eBay, Amazon, Shopify, WooCommerce, OLX or Google Merchant. Send only an amount the person stated. The new price reaches the channel the same way a price edit does — only where the owner armed price writes. This is not the price-list row for a currency (upsert_product_prices). Idempotent; clearing a missing override is not an error. Returns { changed }. Read get_product_pricing first. Echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe product id returned by search_products or get_product — never a SKU or a name.
priceYesThe price this ONE channel gets, instead of the product's ordinary price in that currency, as a decimal string above zero. null removes the override — the channel then gets the ordinary price again. Send only an amount the person stated; never a converted or guessed value.
currencyYesThe currency the channel sells in (uppercase 3-letter ISO code). get_product_pricing and the channel's readiness show which currency a channel uses.
platformYesThe sales channel this price is for: prom, rozetka, woocommerce, shopify, olx, amazon, ebay or google_merchant.
compareAtPriceNoThe old (struck-through) price on this channel, higher than price; omit or null for none. Ignored when price is null.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: confirms idempotency, explains that clearing a missing override is not an error, discloses the return shape ({ changed }), notes it echoes the workspace, and states the write reaches the channel 'only where the owner armed price writes' — an authorization gating condition not present in 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and dense with useful constraints, but it enumerates all eight platform names in prose, duplicating the schema enum, and packs several clauses into long sentences. Slightly redundant rather than wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter mutation tool with no output schema, the description covers the return value, idempotency, error semantics, prerequisites, and the alternative tool. 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds cross-parameter meaning the schema encodes only thinly: compareAtPrice is the old struck-through price and must be higher than price, and is ignored when price is null. It also reinforces that price null removes the override rather than setting zero.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (set/clear a channel-specific price override) with scope qualifiers (ONE channel, ONE product). It explicitly distinguishes itself from the sibling upsert_product_prices, so an agent can route correctly without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear when-to-use routing: 'Read get_product_pricing first' and 'This is not the price-list row for a currency (upsert_product_prices)'. It also states a data-integrity rule ('Send only an amount the person stated') that constrains invocation behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_product_ebay_fulfillment_policySet a product's eBay shipping policyA
DestructiveIdempotent
Inspect

Choose the eBay shipping (fulfillment) policy of ONE product, or with fulfillmentPolicyId null return it to the connection default. A product with no eBay listing stores the choice for its next draft. A draft or LIVE listing has its eBay offer updated in place — no relisting — when listing writes are armed on the eBay connection, and the offer is then read back to confirm; with listing writes off a live listing is refused and a draft stores the choice for go-live. Per-service shipping cost overrides tied to the old policy are removed (droppedShippingCostOverrides). Returns productId, sku, offerId, marketplaceId, previousFulfillmentPolicyId, newFulfillmentPolicyId, status (updated, unchanged, saved, unverified, failed), verified and error — tell the user a listing changed only when status is updated. Refused until the workspace owner switches on AI publishing. Idempotent. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdYesA product id returned by search_products.
marketplaceIdNoAn eBay MARKETPLACE id such as EBAY_IT — never the eBay connection id. Omit it when the eBay connection sells on one site; the server uses that one. Required when the connection sells on several, unless the product already has an eBay offer (its own site is then used).
fulfillmentPolicyIdYesA fulfillmentPolicyId from list_ebay_fulfillment_policies, for the same marketplace. null removes the product's own choice so the connection default (then eBay's first policy) applies.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds rich behavioral context beyond the annotations: it explains in-place offer updates without relisting, read-back verification, removal of per-service shipping cost overrides, and refusal until AI publishing is enabled. This complements annotations that already declare destructiveHint=true and idempotentHint=true, with 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loads the core action and then layers necessary operational detail about listing states, preconditions, and result statuses. Every sentence carries substantive information, though the return-field list and status enumeration make it dense; it is appropriately sized for a mutating tool with conditional effects.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, lack of output schema, and destructive/open-world annotations, the description covers prerequisites (AI publishing switch), effects on different listing states, side effects (dropped overrides), verification behavior, and return status semantics. An agent has enough context to invoke and interpret results correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters thoroughly, including the marketplaceId enum and fulfillmentPolicyId pattern/meaning. The description restates that fulfillmentPolicyId null returns to the connection default, which is already in the schema, and adds little parameter-specific syntax or format detail beyond that baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: choosing the eBay shipping (fulfillment) policy of ONE product. It distinguishes the operation from siblings by scoping to a single product and noting the null value returns to the connection default, implicitly contrasting with bulk and default-policy tools. An agent can identify what the tool does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear conditions: a product with no listing stores the choice for its next draft; a draft or LIVE listing is updated in place when listing writes are armed, otherwise refused or saved for go-live. However, it does not explicitly name alternative tools like bulk_set_ebay_fulfillment_policy or set_ebay_default_fulfillment_policy, leaving sibling routing implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_product_price_tiersSet product wholesale pricesA
DestructiveIdempotent
Inspect

Replace ONE product's wholesale quantity breaks in ONE currency — 'from 12 units, 12.40 each'. The list you send becomes the whole set for that currency (at most 10; each quantity at least 2 and once; a bigger quantity must cost less per unit); an empty list removes all its breaks. The product must already be priced in that currency. Breaks apply to buyers outside the team (the customer portal and connected partners), never to the website or marketplaces, and the buyer gets the better of a break or their own discount. Idempotent. Returns { count }. Read get_product_pricing first. Echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe product id returned by search_products or get_product — never a SKU or a name.
tiersYesThe wholesale breaks for that currency, at most 10. This list REPLACES the product's breaks in that currency; an empty list removes them all. Each quantity once, and a bigger quantity always costs less per unit.
currencyYesThe currency of these breaks (uppercase 3-letter ISO code). The product must already be priced in it — its own currency or a price-list row.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (which already flag destructive/idempotent) by disclosing the replace-all semantics, that an empty list deletes every break, the ordering/validation rules, the currency precondition, the discount-interaction behavior, and the return payload ('{ count }'). The workspace echo is also noted, which matters for a mutation whose effect is scoped.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded, with the replacement semantics and the example leading. Every clause carries constraint or scope information; the only mild cost is that several rules echo the schema, making it slightly longer than strictly necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the 'Returns { count }' note and the workspace echo are essential and supplied. Prerequisites, destructive semantics, idempotency, scope limits, and validation rules are all covered for a 3-parameter mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real business meaning on top of the field docs: the list REPLACES rather than appends, and the product must already be priced in the given currency. It reinforces constraints already in the schema rather than adding new syntax, hence not a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource+scope: replacing wholesale quantity breaks for exactly one product in one currency, with an inline example ('from 12 units, 12.40 each'). This is distinguishable from the sibling pricing tools (set_product_channel_price, upsert_product_prices, apply_bulk_price_change) which target different pricing surfaces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names a prerequisite ('Read get_product_pricing first') and delimits who the breaks apply to (outside buyers via the customer portal and connected partners, never the website or marketplaces). It stops short of explicitly contrasting itself against siblings like set_product_channel_price, so it loses the top mark.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sync_ebay_fulfillment_policiesSync eBay shipping policiesA
Read-only
Inspect

Re-read the eBay shipping (fulfillment) policies from eBay for every site the connection sells on, or one marketplaceId, and refresh the copy the CRM keeps — after the seller created, renamed or deleted a policy in Seller Hub. Returns the same shape as list_ebay_fulfillment_policies; check staleAssignments: products whose chosen policy eBay no longer has will be refused at their next draft or go-live until another policy is chosen. Changes no listing and no choice. Use list_ebay_fulfillment_policies for an ordinary read.

ParametersJSON Schema
NameRequiredDescriptionDefault
marketplaceIdNoAn eBay MARKETPLACE id such as EBAY_IT. Omit it to refresh every marketplace the eBay connection sells on.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses the returned shape, the staleAssignments warning field and its downstream consequence (products refused at next draft or go-live), and explicitly bounds the mutation ('Changes no listing and no choice'), which reconciles the refresh-the-CRM-copy behavior with readOnlyHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and scope, and every sentence carries information. The staleAssignments sentence is dense and slightly convoluted, but nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description supplies the return-shape contract by reference to list_ebay_fulfillment_policies plus the one extra field that matters (staleAssignments). Given one optional param and a clear safety profile, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single marketplaceId enum is fully documented in the schema, including the omit-to-refresh-all semantics. The description echoes this ('or one marketplaceId') without adding new syntax or format detail, so it sits at the high-coverage baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource ('Re-read the eBay shipping (fulfillment) policies ... and refresh the copy the CRM keeps') with scope (every site the connection sells on, or one marketplaceId). It explicitly distinguishes itself from the sibling list_ebay_fulfillment_policies, which is a plain read.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the triggering condition ('after the seller created, renamed or deleted a policy in Seller Hub') and names the alternative and when to prefer it ('Use list_ebay_fulfillment_policies for an ordinary read'). An agent can route without guessing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transition_dealTransition dealA
Destructive
Inspect

Move a deal to a pipeline stage by its id. Closed-lost stages require a lostReason. Use search_deals for the deal id and list_pipeline_stages for the target stageId. The result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe deal id returned by search_deals.
stageIdYesThe target pipeline stage id to move the deal to (from list_pipeline_stages).
lostReasonNoReason the deal was lost. Required when the target stage is a Closed-lost stage; otherwise omit.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnly=false, which the description aligns with by describing a 'move' operation. The description adds valuable behavioral context: the lostReason requirement for closed-lost stages and 'The result echoes the operating workspace,' which is not present in the annotations or schema. It stops short of explaining reversibility or side effects, but the annotations cover the core risk profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, all informative and non-redundant. The action verb is first, followed by a special condition and parameter sourcing, then a note on the result. No filler or repetition of structured data.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple parameter-driven mutation with no output schema, the description covers the core action, required input provenance, a special condition, and the return behavior. The annotations and schema fill in the remaining technical details. This is complete 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of parameters, so the baseline is 3. The description adds semantic value by explaining where to get the id and stageId values (search_deals, list_pipeline_stages) and clarifies the conditional nature of lostReason. This goes beyond the schema's field-level descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Move a deal to a pipeline stage by its id,' using a specific verb and resource pair. It clearly distinguishes this as a stage-transition action, distinct from other deal operations like create, update, or search. The explicit reference to obtaining parameters via sibling tools reinforces its unique purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on how to obtain the required parameters: 'Use search_deals for the deal id and list_pipeline_stages for the target stageId.' It also specifies a conditional requirement ('Closed-lost stages require a lostReason'), giving clear usage context. This is more than sufficient for a tool with no overlapping alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_brandUpdate brandA
Destructive
Inspect

Update fields on an existing catalog brand by id: name, slug, description, website and description translations. Provide a patch with at least one field; use list_brands first to find the id and current values. Renaming a brand changes the vendor name sent to marketplaces, so rename only on the user's explicit request; the name is never translated. Translations REPLACE the whole set when sent (an empty array removes them all) and are left untouched when omitted — translate only the brand's own description, add no facts. The result is the updated brand and echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe brand id returned by list_brands.
patchYesThe brand fields to update; include at least one changed field.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (destructiveHint, idempotentHint=false) by disclosing that renaming changes the vendor name sent to marketplaces, that the name is never translated, and critically that translations REPLACE the whole set when sent while an empty array removes them all and omission leaves them untouched.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then constraints in descending priority; dense but every sentence carries operational weight (id lookup, rename caution, translation replacement rule).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nested-object mutation with no output schema, the description still states the return ("the updated brand and echoes the operating workspace") and covers the risky semantics an agent needs before calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents id, patch, and the translations replacement semantics. The description reinforces rather than adds new field-level meaning, which is the baseline 3 case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb + resource ("Update fields on an existing catalog brand by id") with the exact field list enumerated, which cleanly separates it from create_brand and list_brands in the sibling set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real routing guidance ("use list_brands first to find the id and current values") and a constraint on renaming ("rename only on the user's explicit request"). It stops short of naming when a different update tool (update_product/update_category) would be preferable, but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_categoryUpdate categoryA
Destructive
Inspect

Update fields on an existing catalog category by id: name, parent, slug, description, Google category and translations. Provide a patch with at least one field; use list_categories first to find the id and current values. The slug is normalized to Latin. The parent must exist in this workspace and cannot create a loop. Translations REPLACE the whole set when sent (an empty array removes them all) and are left untouched when omitted — translate only the category's own name and description, add no facts. The result is the updated category and echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe category id returned by list_categories.
patchYesThe category fields to update; include at least one changed field.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: translations REPLACE the entire set and an empty array wipes them, slug is normalized to Latin, the parent must exist and cannot introduce a cycle, and the response echoes the workspace. This clarifies the destructiveHint=true annotation with concrete consequences.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then guidance, then per-field behavioral caveats. Each sentence carries a distinct, actionable fact with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description covers the return value (updated category plus workspace echo). With a nested patch object, destructive semantics, and translation replacement behavior all addressed, nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real semantics the schema lacks: the replace-vs-omit semantics of translations, the rule to translate only the category's own name/description with no invented facts, and the parent-loop constraint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Update) and resource (catalog category) plus scope (by id) and enumerates the mutable fields. An agent can distinguish this immediately from create_category and update_brand/update_product siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent to send a patch with at least one field and to call list_categories first to find the id and current values. It does not name sibling alternatives (e.g. create_category) or say when NOT to use this tool, 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.

update_companyUpdate companyA
Destructive
Inspect

Update fields on a company by id. Provide a patch with at least one field. Use search_companies first to find the company id. The result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe company id returned by search_companies.
patchYesThe company fields to update; include at least one changed field.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true, so the description adds value by stating the patch must contain at least one field and that the result echoes the operating workspace. This goes beyond the safety profile, though it does not detail reversal or permission implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each with a distinct purpose: what it does, the patch constraint, and a prerequisite. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description's note about the result echoing the operating workspace provides some return-value context. It also covers the critical prerequisite (find id first). Missing details like error cases are not essential given the simple update operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for both parameters, so the baseline is 3. The description adds context by explaining the id comes from search_companies and that the patch requires at least one field, reinforcing but not contradicting the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates fields on a company by id, using a specific verb ('Update') and resource ('company'). It distinguishes itself from create/get/search company tools by the patch semantics, which is exactly the operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs to use search_companies first to find the company id, providing a clear prerequisite. It does not mention when not to use it, but the context is straightforward for an update tool among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_contactUpdate contactA
Destructive
Inspect

Update fields on a contact by id. Provide a patch with at least one field. Use search_contacts first to find the contact id. The result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe contact id returned by search_contacts.
patchYesThe contact fields to update; include at least one changed field.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is covered externally. The description adds only 'the result echoes the operating workspace,' which is an obscure return note, and never explains the destructive angle (e.g. that null-valued optional fields clear existing data) that the destructiveHint implies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the action front-loaded and no filler. The closing 'result echoes the operating workspace' line is the weakest, being vague relative to the two operational sentences before it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with full schema coverage and no output schema, the description covers action, precondition and payload requirement. It omits partial-update semantics (unset fields untouched vs. null clearing) and anything about error/permission behavior, but nothing critical to making the call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every patch field is documented inline, so the description's 'at least one field' restates the schema's own patch description. The baseline 3 is appropriate since the schema does the heavy lifting and the description adds no syntax or null-clearing semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb+resource ('Update fields on a contact by id') and scopes it to partial-field patching, which separates it from create_contact and get_contact. It never explicitly contrasts with the nearby update_company/update_lead siblings, so sibling differentiation is only implied.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a real precondition ('Use search_contacts first to find the contact id') and a constraint on the payload ('Provide a patch with at least one field'). It stops short of the when-not case, e.g. what to do instead when no fields actually change, but the usage context 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.

update_content_postUpdate postA
DestructiveIdempotent
Inspect

Change a draft or scheduled post: working title, main text, hashtags, format, or its channels and their own texts (sending channels replaces the whole set). Fields you omit stay as they are; images cannot be changed here. Refused for a published post — a post already live on a network cannot be changed from Obriym; create a new one instead. Refused while the post is being published. Repeating the same call changes nothing further. Echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe publication id returned by create_content_post or list_content_posts.
textNoReplaces the main text.
titleNoAn internal working title shown in Obriym's Publications list, e.g. "Monday — new arrivals". Never published.
formatNopost = a regular feed post; story = an Instagram/Facebook story, which needs an image. Defaults to post.
channelsNoReplaces the post's channels and their texts. Omit to keep them as they are.
hashtagsNoReplaces the hashtags, without the "#" sign. Omit to keep them; [] removes them.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: sending channels 'replaces the whole set', omitted fields are preserved, images cannot be changed, and both refusal conditions are stated. These are exactly the pitfalls an agent needs, and none of them are visible in 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the mutable fields, then the partial-update rule, then the refusal cases in a tight run of sentences with no filler. It is dense but every clause earns its place; only the trailing 'Echoes the workspace' reads as slightly terse for the weight it is meant to carry.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter mutation tool with no output schema, the description covers the update contract, the replacement-vs-merge behavior, refusal conditions, and idempotency, and even gestures at the return ('echoes the workspace'). 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already carries per-parameter meaning (baseline 3). The description adds genuine semantics the schema lacks: that 'channels' replaces rather than merges the existing set and that omitted fields are left untouched, which disambiguates the partial-update contract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (change) plus every mutable field (title, text, hashtags, format, channels and their texts) and names the resource unambiguously. An agent can distinguish it from create_content_post or publish_content_post 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly scopes when-not to use it: refused for a published post and while publishing, with an explicit alternative ('create a new one instead'). It also rules out images. It stops short of naming the sibling tool (e.g. create_content_post) or telling the agent which tool to reach for to inspect a post first, so it is not fully explicit routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_leadUpdate leadA
Destructive
Inspect

Update fields on an existing lead by id. Provide a patch with at least one field. Use search_leads first to find the lead id. The result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe lead id returned by search_leads.
patchYesThe lead fields to update; include at least one changed field.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=true, idempotentHint=false), so the description only needs to add context. It adds the partial-update requirement and notes the result echoes the operating workspace, but never warns about the destructive/irreversible nature the annotation implies or how replaced fields (e.g. tags) behave.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler, with the core operation and the id-acquisition prerequisite front-loaded. Every sentence carries needed information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nested-patch mutation tool with no output schema, the description covers the identifier source, the minimum patch requirement, and the response shape at a high level. It omits permission/validation behavior, which keeps it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the nested patch schema documents each field, including null-to-clear semantics and tag replacement. The description only restates that a patch is required, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update fields on an existing lead by id') and clarifies that a patch is the mechanism. It does not explicitly distinguish itself from adjacent lead mutators such as assign_lead or convert_lead, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear prerequisite workflow ('Use search_leads first to find the lead id') and a constraint ('patch with at least one field'), which tells the agent how to prepare and invoke the call. It stops short of 5 because it never says when to prefer assign_lead/convert_lead over a general field update.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_order_itemUpdate order itemA
Destructive
Inspect

Update a line item on an order (quantity, unit price, discount, name, or SKU). Recomputes the order total. Only allowed while the order is pending or confirmed; otherwise it fails with 409 CONFLICT "Order lines can only be changed while the order is pending or confirmed" (stock is committed from processing on). Use get_order to find the order's externalId and the item's itemId. The result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
patchYesThe order item fields to update; include at least one changed field.
itemIdYesThe order item id returned by get_order.
externalIdYesThe order externalId returned by list_orders or create_order.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and non-idempotent, and the description adds critical context beyond that: the order total is recomputed, stock is committed from processing onward (explaining the status window), the precise error contract, and the workspace echo in the response. This is exactly the kind of behavioral detail 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tightly packed sentences: capability, side effect, constraint+error, and prerequisite. No filler, and the mutability guard is front-loaded ahead of the fetch instructions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a nested-patch mutation tool: it covers what can change, the recomputation side effect, the status precondition and its failure mode, where to get IDs, and the response envelope. With no output schema, it still tells the agent what comes back (workspace echo).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are fully documented in the schema itself, setting the baseline at 3. The description adds real value by naming which fields are updatable and clipping the process to get_order for externalId/itemId, though it doesn't restate the field constraints already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (update) and resource (line item on an order) and enumerates the mutable fields (quantity, unit price, discount, name, SKU). An agent can distinguish it from siblings like add_order_item, remove_order_item, and update_order_status without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the guardrail: only allowed while the order is pending or confirmed, and provides the exact failure (409 CONFLICT with message). It also names get_order as the prerequisite source for both externalId and itemId, giving clear when-to-use and routing context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_order_statusUpdate order statusA
Destructive
Inspect

Move an order to a new status by externalId. Only valid transitions from the current status are allowed. Use list_orders to find the externalId and get_order to see the current status. The result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYesThe new order status. Only valid transitions from the current status are accepted. Allowed values: pending, confirmed, processing, shipped, delivered, cancelled, refunded.
externalIdYesThe order externalId returned by list_orders or create_order.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context by noting that only valid transitions from the current status are allowed and that the result echoes the operating workspace. It does not contradict the annotations; the destructiveHint is already disclosed, so the description complements rather than repeats.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three succinct sentences, front-loaded with the core operation, followed by the transition constraint and lookup workflow. Every sentence provides meaningful information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with no output schema, the description covers the operation, transition rule, prerequisite workflow, and response shape. Combined with the annotations and fully described schema, it gives the agent everything needed to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters are fully described in the schema (100% coverage), so the description does not need to add much. It reinforces that externalId comes from list_orders and that status must be a valid transition, but it does not provide new syntax or format details beyond what the schema already offers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Move an order to a new status' and identifies the key identifier 'externalId'. This is a specific verb+resource combination that distinguishes it from sibling tools like list_orders and get_order.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs the user to use list_orders to find the externalId and get_order to see the current status, providing clear prerequisites. The valid-transition constraint is also mentioned, though it does not enumerate alternative tools or explicit when-not-to-use scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_productUpdate productA
Destructive
Inspect

Update fields on an existing catalog product by id — including status, to publish a draft or archive a product. Provide a patch with at least one field; use get_product first to see the current values. A changed stock number is applied as a relative movement and recorded in the product stock history; prefer adjust_stock when the intent is a correction with a reason. A bundle's stock is derived from its components, so a stock sent for a bundle is refused; sending bundleItems replaces its composition. A product's type (simple or bundle) cannot change after creation — create a new product instead — and a product that is a component of a bundle that is not archived cannot be archived. A change to price, stock, tracking or status is pushed to every connected sales channel. For a product that belongs to a model, a changed shared field (name, description, category, brand, unit, keywords, videos, material, pattern, gender, age group, size type, condition) is applied to the whole model and every article of it; productGroupId null detaches the product from its model, and the code of another model moves it there. The result echoes the operating workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe product id returned by search_products.
patchYesThe product fields to update; include at least one changed field.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a destructive, non-idempotent write, and the description adds substantial beyond-annotation detail: stock changes are recorded as relative movements in stock history, bundle stock is refused, bundleItems replaces composition, price/stock/tracking/status changes propagate to sales channels, and model shared fields cascade. These are consequences an agent cannot infer from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose before the behavioral caveats, and nearly every sentence carries a distinct rule. It is nonetheless a single dense block; the many independent constraints would scan better as a list, which keeps it short of 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 30+ field destructive mutation with a nested patch object and no output schema, the description covers the mutation consequences, refusals, and cascade rules, and notes the result 'echoes the operating workspace'. Nothing an agent needs to invoke it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds cross-field semantics the schema states only per-field: productGroupId null detaches from the model, another model's code moves the product, and bundleItems/stock interact with type. It does not restate trivial per-field types, keeping this above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update fields on an existing catalog product by id') and immediately scopes the outcome ('including status, to publish a draft or archive a product'). It distinguishes itself from siblings by naming adjust_stock, create_product, and get_product as related routes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing is present: call get_product first to see current values, prefer adjust_stock when the intent is a correction with a reason, and create a new product when the type must change. This gives when-to-use, prerequisites, and named alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_product_imagesReorder, caption or remove product imagesA
DestructiveIdempotent
Inspect

Reorder, caption or REMOVE the photos a product already has. Send the photos as they should be afterwards: the order given is the display order (the first is the main photo), each alt replaces the stored caption (empty clears it), and a current photo you leave out is removed from the product (the stored file is kept, exactly as when a person removes a photo in the product form). Returns the new list and how many were removed. It never adds photos: every url must already belong to the product, otherwise the call is refused and nothing changes — use add_product_images to add. Idempotent: the same call twice leaves the same result. Saves through the product form's own operation. Call get_product first and copy the urls exactly. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
imagesYesThe product's photos as they should be AFTER the change: the order given becomes the display order (the first is the main photo) and each alt replaces the stored caption (empty clears it). A current photo you leave out is REMOVED from the product; the stored file is kept, as when a person removes it in the product form. Every url must already belong to the product — to add a photo use add_product_images.
productIdYesThe product id from search_products or get_product.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and idempotentHint=true, and the description adds real context beyond them: what exactly is lost (the photo is removed from the product but the stored file is kept, mirroring the product form), that a refused call changes nothing (atomicity), and that it saves through the product form's operation. This is rich behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the operation and the destructive behavior, then layers constraints, alternatives, and return info in a tight sequence. Despite its length every sentence carries a distinct, decision-relevant fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return shape ('the new list and how many were removed') and the result echo. For a destructive mutation tool, all constraints, prerequisites, and outcomes an agent needs are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description reinforces the array-level semantics: order given becomes display order (first is the main photo), omitted photos are removed, and every url must already belong to the product. This meaning largely also lives in the schema, so it adds incremental rather than novel value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb set (reorder, caption, remove) on a specific resource (the photos a product already has), and explicitly distinguishes itself from add_product_images. An agent can immediately tell what this does and what it does not do.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-not guidance ('It never adds photos... use add_product_images to add') and a prerequisite ('Call get_product first and copy the urls exactly'). The workflow and the alternative are both named, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upsert_brand_translationSet a brand translationA
DestructiveIdempotent
Inspect

Set a brand's DESCRIPTION in ONE language, leaving every other language as it is; null or an empty description removes that language. Translate the text yourself — Obriym does not translate for MCP clients. Never translate a brand NAME: marketplaces match it verbatim. Call list_content_locales first; the workspace's base language is refused (use update_brand for it). update_brand's translations field REPLACES the whole set, so use this tool to change a single language. Idempotent. Returns a warning when the CRM does not show that language yet. Echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
localeYesThe language to write, as an ISO 639-1 code. Call list_content_locales for the codes this workspace uses; never the workspace's base language.
brandIdYesThe brand id returned by list_brands.
descriptionYesThe brand description in this language. null or an empty string clears that language. The brand NAME is never translated.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and idempotentHint=true; the description adds concrete context beyond them — that null/empty deletes a language, that Obriym does not translate for MCP clients, that a warning is returned when the CRM lacks the language, and that the workspace is echoed back. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the core behavior (single-language write, null clears) leads, followed by prerequisites, the sibling contrast, and return behavior. Every sentence carries actionable information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Though there is no output schema, the description still discloses the meaningful return behavior (warning, echoed workspace) plus the translation and locale prerequisites. An agent has everything needed to invoke it correctly despite the mutation and cross-tool dependencies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so locale, brandId, and description are already documented in the schema (including the base-language exclusion and the NAME rule). The description reinforces these but adds little parameter syntax or format detail beyond what the schema states, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: writing a brand's description in ONE language while leaving others intact. It draws the key boundary against update_brand ('translations field REPLACES the whole set, so use this tool to change a single language'), which an agent could not infer from the name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use and when-not: call list_content_locales first, base language is refused and routed to update_brand, and the sibling update_brand is named as the whole-set alternative. It also states a hard rule ('never translate a brand NAME') and the client-side translation responsibility.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upsert_category_translationSet a category translationA
DestructiveIdempotent
Inspect

Set a category's name and/or description in ONE language, leaving every other language as it is. Translate the text yourself — Obriym does not translate for MCP clients. Call list_content_locales first; the workspace's base language is refused (use update_category for it). A language needs a translated name before it can hold a description; description null clears it. Idempotent: repeating the same call changes nothing. update_category's translations field REPLACES the whole set, so use this tool to change a single language. Returns a warning when the CRM does not show that language yet. Echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoThe category name in this language. Required the first time a language is written.
localeYesThe language to write, as an ISO 639-1 code. Call list_content_locales for the codes this workspace uses; never the workspace's base language.
categoryIdYesThe category id returned by list_categories.
descriptionNoThe category description in this language. null or an empty string clears it. Cannot be stored for a language that has no translated name.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true, destructiveHint=true and readOnlyHint=false, and the description reinforces idempotence ('repeating the same call changes nothing') and the destructive clearing of description. Beyond the annotations it adds genuinely new behavior: the caller must translate text themselves, a name must precede a description, a warning surfaces when the CRM does not show the language yet, and the workspace is echoed back.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The scoping behavior is front-loaded in the first sentence and each subsequent sentence carries distinct information (translation responsibility, prerequisite, base-language exclusion, ordering rule, idempotence, alternative tool). Dense but almost every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully states what comes back (a warning about CRM visibility, the echoed workspace). Combined with the routing guidance and write semantics, an agent has everything needed to invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameter contract is already documented, including the name-before-description rule and that null clears the description. The description largely restates these constraints rather than adding new syntax or format guidance, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource+scope: 'Set a category's name and/or description in ONE language, leaving every other language as it is.' It explicitly contrasts itself with update_category, so an agent can distinguish the two translation-writing paths without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('use this tool to change a single language'), when-not ('the workspace's base language is refused; use update_category for it'), and a prerequisite ('Call list_content_locales first'). The alternative-tool routing is fully spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upsert_product_attributesSet product characteristicsA
DestructiveIdempotent
Inspect

Add or update characteristics (name, value, unit) on ONE product without removing the ones not named. Names match case-insensitively; a new name is appended. For eBay, use the item-specific names exactly as inspect_ebay_listings reported them (details.aspects), in the eBay site's own language — 'Marca' on ebay.it, not 'Brand'. Never invent a value: ask the user. Saves through the same product-card operation as the CRM form, with a version check (on CONFLICT re-read and retry). On a product that belongs to a model: when it is the model's only article, the characteristics are the model's and change for the model; when the model has other articles, a value set here applies to this article only — a characteristic shared by every article is changed on the model card. Idempotent. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe product id returned by search_products or get_product.
attributesYesCharacteristics to add or update. Match is case-insensitive by name; every existing characteristic not named here is preserved. Use name/value/unit objects, for example {name:'Stile',value:'Casual',unit:null}.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=true, and the description adds substantial context beyond them: unnamed characteristics are preserved, names match case-insensitively, a new name is appended, saves run through the product-card operation with a version check (on CONFLICT re-read and retry), and the model-vs-article inheritance rules. This is exactly the behavioral payload annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and preservation rule, then layered with eBay guidance and the model/article edge case. Every sentence carries semantic weight, but the single dense paragraph mixes several distinct concerns (matching, eBay sourcing, conflict retry, inheritance) with no structural break, making it heavier than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers everything an agent needs: scope, preservation semantics, matching rules, conflict/retry behavior, external-system naming requirements, model-vs-article inheritance, and the fact that the result echoes the workspace. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the nested attribute object is already documented. The description still adds meaning the schema does not: case-insensitive name matching, append-on-new-name semantics, and the eBay naming/language constraint on the name field. It stops short of explaining unit semantics, so it does not earn a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource and scope: 'Add or update characteristics (name, value, unit) on ONE product without removing the ones not named.' The singular-product scope and non-destructive upsert behavior clearly separate it from update_product and from a price/translation upsert. An agent can identify the operation and its boundary without reading the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when/when-not and prerequisites: use eBay item-specific names exactly as inspect_ebay_listings reported them (details.aspects) in the site's own language ('Marca' on ebay.it), and never invent a value. It also routes the agent to the model card when a characteristic is shared by every article. This is unusually prescriptive and 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.

upsert_product_pricesSet product prices in other currenciesA
DestructiveIdempotent
Inspect

Add, update or REMOVE the price-list rows of ONE product — the price it sells at in another currency, for example EUR for an eBay site — keeping its other currencies and its own workspace-currency price. Send only an amount the user stated: never a converted or estimated price; to drop a currency send its code in remove. The product's own currency is refused; change that with update_product's price. A price for one channel only is set_product_channel_price; see all of a product's prices with get_product_pricing. Saves through the same product-card operation as the CRM form, with a version check (on CONFLICT re-read the product and retry), and the new price reaches connected channels like a manual edit. Idempotent. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe product id returned by search_products or get_product.
pricesNoPrice-list rows to add or update, one per currency (uppercase 3-letter ISO code, e.g. EUR), an amount greater than 0 — the price the product sells at in that currency on every channel that trades in it. Refused for the product's own workspace currency — use update_product's price field for that one. Never a converted or guessed value: send exactly the amount the user gave for that market. Not a per-channel price: a price for ONE channel only is set_product_channel_price. Omit it when you only remove currencies.
removeNoCurrencies whose price-list row to REMOVE (uppercase 3-letter ISO code). The product stops being sold in that currency on channels that trade in it. The product's own workspace currency cannot be removed here, and a currency named in prices cannot also be removed. A currency with no row is ignored.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint and destructiveHint, and the description reinforces and extends them: version check with re-read-and-retry on CONFLICT, propagation to connected channels like a manual edit, and the effect of removal on channel listings. This is exactly the extra behavioral context the annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the core operation leads, with the routing alternatives and behavioral notes following. Some phrasing overlaps the schema's own parameter documentation, keeping it just short of maximally tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema it covers conflict handling, idempotency, channel propagation, and removal semantics. The one thin spot is the return value, described only as 'echoes the workspace', which is vague for an agent checking results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema descriptions are thorough, so the baseline is 3. The description still adds semantic guidance beyond the schema: never a converted or estimated value, omit prices when only removing, and the refusal cases for the product's own currency.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb set (add/update/REMOVE) and resource (price-list rows of ONE product in another currency), including scope examples. It explicitly distinguishes itself from set_product_channel_price, update_product, and get_product_pricing, so an agent can route correctly 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative tools and the conditions that select them: per-channel pricing goes to set_product_channel_price, the workspace-currency price to update_product, and viewing prices to get_product_pricing. It also tells the agent to send only user-stated amounts and how to drop a currency via remove.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upsert_product_translationSet a product translationA
DestructiveIdempotent
Inspect

Write ONE language of ONE product's translation — title, description, keywords, colour, material, pattern and its characteristics (attributes: keyed by the characteristic's name exactly as get_product returns it, each with a translated name and/or value) in that language — keeping the other languages and every field not named. A characteristic name the product does not have is refused with the list of its names. Call list_content_locales first and write only an offered language, never the base one. Use it when a marketplace publishes in another language (ebay.it reads Italian, Prom and Rozetka read uk and ru) or inspect_ebay_listings reports a title over 80 characters in the site's language. Translate the product's OWN text from get_product and add no fact it does not state; show the user the text before writing. For a product that belongs to a model the translation is the model's, so every article of it changes. Saves through the CRM's own Переклади tab operation with its version check (on CONFLICT re-read the product and retry). Idempotent. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe product id returned by search_products or get_product.
nameNoThe product title in this language. eBay shows at most 80 characters. An empty string clears it, so the base name publishes.
colorNoColour name.
localeYesThe language to write, as an ISO 639-1 code — for a marketplace, the site's own language (it on ebay.it, de on ebay.de, uk or ru for Prom and Rozetka).
patternNoPattern.
keywordsNoSearch keywords in this language; replaces the list.
materialNoMaterial.
attributesNoTranslated characteristics, keyed by the characteristic's BASE name exactly as the product shows it (see get_product). Each key is merged into what is stored; other characteristics and languages stay. A name the product does not have is refused.
descriptionNoThe description in this language. An empty string clears it.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true and idempotent=true, but the description adds substantial extra context: what is preserved (other languages and every unnamed field), refusal behavior for an unknown characteristic name ('refused with the list of its names'), the underlying write path with its version check ('on CONFLICT re-read the product and retry'), model-level propagation, and the echoed result. This goes well beyond the structured 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and dense with useful constraints, but the single long paragraph packs several distinct concerns (write semantics, locale precondition, translation sourcing, conflict retry) into run-on sentences that could be split for scannability. Nearly every sentence earns its place, so waste is low.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-param nested mutation tool with no output schema, the description covers the critical gaps: conflict handling, idempotency, preservation of other fields, refusal paths, and the result shape. An agent has everything needed to call it correctly without opening the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real merge semantics not in the schema: attributes are keyed by the characteristic's BASE name 'exactly as get_product returns it', each with a translated name/value, and unnamed fields/languages are kept rather than replaced. It also adds the 'never the base' locale constraint, though per-field clearing behavior largely duplicates the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource with scope: 'Write ONE language of ONE product's translation — title, description, keywords, colour, material, pattern and its characteristics'. This clearly distinguishes it from the sibling upsert_brand_translation/upsert_category_translation by naming the exact target (product) and enumerable fields.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit preconditions and alternatives: 'Call list_content_locales first and write only an offered language, never the base one', plus two concrete triggering scenarios (marketplace reads another language; inspect_ebay_listings reports a title over 80 characters). It also gives the source-of-truth rule ('Translate the product's OWN text from get_product') and a human-in-the-loop step ('show the user the text before writing').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

withdraw_ebay_listingsWithdraw eBay listingsA
Destructive
Inspect

End the LIVE eBay listing of up to 25 products: they stop being buyer-visible and their offers return to drafts — nothing is deleted, and publish_ebay_drafts can put them back. Needs the owner's AI publishing switch. Returns done, failed and notAttempted. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdsYesEnd each product's LIVE eBay listing, at most 25 ids fetched with search_products. The listing stops being buyer-visible and its offer returns to a draft — it is NOT deleted.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint and openWorldHint annotations, the description discloses the key behavioral traits: up to 25 items, listings stop being buyer-visible, offers return to drafts, nothing is deleted, the action is reversible via publish_ebay_drafts, it requires the owner's AI publishing switch, and it returns done/failed/notAttempted with a workspace echo.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one compact paragraph that is front-loaded with the core action, followed by reversibility, prerequisite, and return shape. Every sentence adds useful information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still explains the return structure ('done, failed and notAttempted') and the workspace echo. It also covers the critical mutation/reversal behavior and prerequisite, making it complete for a 1-parameter destructive batch tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single productIds parameter is already fully documented in the schema, including the 25-item limit and the note that ids come from search_products. The description repeats the batch limit but adds little semantic detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'End the LIVE eBay listing of up to 25 products.' It immediately distinguishes the operation from deletion by clarifying 'nothing is deleted' and from permanent removal by naming publish_ebay_drafts as a reversal path.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this to end LIVE eBay listings, with the prerequisite that it 'Needs the owner's AI publishing switch.' It also names the alternative publish_ebay_drafts for reversing the action, but does not explicitly compare against delete_ebay_drafts or state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

withdraw_ebay_variation_listingEnd a model's eBay variation listingA
Destructive
Inspect

End a model's LIVE eBay multi-variation listing: every variation leaves sale at once. The group and its offers stay on eBay as a draft, so publish_ebay_variation_listing restores the same listing. Works while listing creation is disarmed (a way off eBay is never locked), but is refused until the workspace owner switches on AI publishing. Returns withdrawn. The result echoes the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesThe product model: its code — the productGroupId get_product and search_products return for every article of it — or its id. Its active articles on the eBay channel become the listing's variations.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing blast radius (all variations end together), reversibility (group and offers remain as a draft, restorable via publish_ebay_variation_listing), a permission precondition (must have AI publishing enabled), and the return signal (withdrawn). This is exactly the context destructiveHint alone 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and its blast radius, then consequences, precondition, and return. Four sentences all carry weight, though the terse 'Returns withdrawn. The result echoes the workspace.' is slightly compressed and could be clearer.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one required param, no output schema, and annotations present, the description supplies the missing behavioral and precondition detail an agent needs to invoke it safely. It stops short of clarifying re-enablement of AI publishing or distinguishing the plural sibling tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the 'model' parameter is already richly documented (code or productGroupId from get_product/search_products, active articles become variations). The description adds no parameter-level syntax or format beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (End/withdraw) plus specific resource (a model's LIVE eBay multi-variation listing), with scope spelled out: every variation leaves sale at once. It also names the inverse operation (publish_ebay_variation_listing), so an agent can place it within the variation-listing lifecycle without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly states the effect and routes to publish_ebay_variation_listing as the restoring alternative, and gives a real when-not condition (refused until the workspace owner switches on AI publishing). It does not, however, distinguish this variation-level withdraw from the sibling withdraw_ebay_listings (plural), which handles non-variation listings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updates
    • Addedbulk_set_ebay_fulfillment_policy
    • Addeddelete_ebay_variation_draft
    • Addedget_ebay_offer_policies
    • Addedget_ebay_variation_listing
    • Addedget_product_ebay_fulfillment_policy
    • Addedinspect_ebay_variation_listing
    • Addedlist_ebay_fulfillment_policies
    • Addedpublish_ebay_variation_listing
    • Addedsave_ebay_variation_listing
    • Addedset_ebay_default_fulfillment_policy
    • Addedset_product_ebay_fulfillment_policy
    • Addedsync_ebay_fulfillment_policies
    • Addedwithdraw_ebay_variation_listing
  2. 19 tool updates
    • Addedadd_product_images
    • Addedapply_bulk_price_change
    • Changedcreate_content_post1 field changed
      • addedInput schema / properties / files
        Added value: +{
        +  "description": "Image files the person attached in ChatGPT. ChatGPT fills this field itself; any other client leaves it out and passes image links instead (or uploads files with create_image_upload).",
        +  "items": {
        +    "properties": {
        +      "download_url": {
        +        "description": "Temporary link ChatGPT gives to the attached file.",
        +        "format": "uri",
        +        "type": "string"
        +      },
        +      "file_id": {
        +        "description": "ChatGPT's id of the attached file.",
        +        "type": "string"
        +      },
        +      "file_name": {
        +        "description": "The attached file's name.",
        +        "type": "string"
        +      },
        +      "mime_type": {
        +        "description": "The attached file's type.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "download_url",
        +      "file_id"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 10,
        +  "type": "array"
        +}
    • Addedcreate_image_upload
    • Changedcreate_product1 field changed
      • addedInput schema / properties / images / description
        Added value: +"The product's photos as { url, alt }, at most 10; the first is the main photo. On an update the list you send replaces the whole set. An entry whose url equals a photo the product already has keeps that stored file and takes only the caption (alt) you send, so sending back what you read never downgrades a stored photo."
    • Addedget_product_pricing
    • Addedlist_content_locales
    • Addedlist_suppliers
    • Addedpreview_bulk_price_change
    • Addedset_brand_image
    • Addedset_category_image
    • Addedset_product_channel_price
    • Addedset_product_price_tiers
    • Changedupdate_product1 field changed
      • addedInput schema / properties / patch / properties / images / description
        Added value: +"The product's photos as { url, alt }, at most 10; the first is the main photo. On an update the list you send replaces the whole set. An entry whose url equals a photo the product already has keeps that stored file and takes only the caption (alt) you send, so sending back what you read never downgrades a stored photo."
    • Addedupdate_product_images
    • Addedupsert_brand_translation
    • Addedupsert_category_translation
    • Changedupsert_product_prices4 fields changed
      • changedInput schema / properties / prices / description
        Previous value: -"Channel prices to add or update, one row per currency (uppercase 3-letter ISO code, e.g. EUR), an amount greater than 0. Refused for the product's own workspace currency — use update_product's price field for that one. Never a converted or guessed value: send exactly the amount the user gave for that market."New value: +"Price-list rows to add or update, one per currency (uppercase 3-letter ISO code, e.g. EUR), an amount greater than 0 — the price the product sells at in that currency on every channel that trades in it. Refused for the product's own workspace currency — use update_product's price field for that one. Never a converted or guessed value: send exactly the amount the user gave for that market. Not a per-channel price: a price for ONE channel only is set_product_channel_price. Omit it when you only remove currencies."
      • removedInput schema / properties / prices / minItems
        Removed value: -1
      • addedInput schema / properties / remove
        Added value: +{
        +  "description": "Currencies whose price-list row to REMOVE (uppercase 3-letter ISO code). The product stops being sold in that currency on channels that trade in it. The product's own workspace currency cannot be removed here, and a currency named in prices cannot also be removed. A currency with no row is ignored.",
        +  "items": {
        +    "pattern": "^[A-Z]{3}$",
        +    "type": "string"
        +  },
        +  "maxItems": 10,
        +  "type": "array"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "prices"
        -]New value: +[
        +  "id"
        +]
    • Changedupsert_product_translation1 field changed
      • addedInput schema / properties / attributes
        Added value: +{
        +  "additionalProperties": {
        +    "properties": {
        +      "name": {
        +        "description": "The characteristic's name in this language. An empty string clears it.",
        +        "maxLength": 160,
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "The characteristic's value in this language. An empty string clears it.",
        +        "maxLength": 500,
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "description": "Translated characteristics, keyed by the characteristic's BASE name exactly as the product shows it (see get_product). Each key is merged into what is stored; other characteristics and languages stay. A name the product does not have is refused.",
        +  "propertyNames": {
        +    "maxLength": 160,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
  3. 8 tool updates
    • Addedcreate_content_post
    • Addeddelete_content_post
    • Addedget_content_post
    • Addedlist_content_channels
    • Addedlist_content_posts
    • Addedpublish_content_post
    • Addedschedule_content_post
    • Addedupdate_content_post
  4. 1 tool update
    • Changedconfigure_pipeline2 fields changed
      • changedInput schema / properties / patch / description
        Previous value: -"Pipeline stage fields to update: name, default probability, WIP limit or position."New value: +"Pipeline stage fields to change: name, defaultProbability and/or wipLimit. Provide at least one; omitted fields are left as they are."
      • removedInput schema / properties / patch / required
        Removed value: -[
        -  "defaultProbability",
        -  "name"
        -]
  5. 8 tool updates
    • Addedcreate_brand
    • Addedcreate_category
    • Changedcreate_product7 fields changed
      • addedInput schema / properties / bundleItems / description
        Added value: +"Components of a bundle (type bundle only): simple, non-archived products of the bundle's warehouse, each listed once. Selling the bundle deducts these components; the bundle's stock is how many whole bundles they make. On update, sending it replaces the whole composition."
      • addedInput schema / properties / costPrice / description
        Added value: +"Purchase price per unit, in costCurrency. Ignored for a bundle: its cost is the sum of its components' costs when all are known and in one currency."
      • addedInput schema / properties / images / items / properties / alt
        Added value: +{
        +  "description": "Alternative text of the photo, up to 200 characters. Optional: when empty a storefront should use the product name.",
        +  "example": "White leather sneakers, side view",
        +  "maxLength": 200,
        +  "type": "string"
        +}
      • addedInput schema / properties / mpn
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 120,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Manufacturer part number — the maker's own code for the item, not the shop SKU. eBay requires it beside the brand in many categories.",
        +  "example": "TR-1"
        +}
      • addedInput schema / properties / stock / description
        Added value: +"Units on hand, for a product that tracks inventory; a change on update is recorded as a relative movement in the stock history. Refused for a bundle — its stock is derived from its components."
      • addedInput schema / properties / trackInventory / description
        Added value: +"Whether the product counts units. Ignored for a bundle: it tracks stock exactly when one of its components does."
      • addedInput schema / properties / type / description
        Added value: +"simple, or bundle — one sellable item made of bundleItems, holding no stock of its own. Fixed at creation: an update that changes it is refused."
    • Addedupdate_brand
    • Addedupdate_category
    • Changedupdate_order_item1 field changed
      • removedInput schema / properties / patch / properties / discount / default
        Removed value: -0
    • Changedupdate_product13 fields changed
      • removedInput schema / properties / patch / properties / bundleItems / default
        Removed value: -[]
      • addedInput schema / properties / patch / properties / bundleItems / description
        Added value: +"Components of a bundle (type bundle only): simple, non-archived products of the bundle's warehouse, each listed once. Selling the bundle deducts these components; the bundle's stock is how many whole bundles they make. On update, sending it replaces the whole composition."
      • addedInput schema / properties / patch / properties / costPrice / description
        Added value: +"Purchase price per unit, in costCurrency. Ignored for a bundle: its cost is the sum of its components' costs when all are known and in one currency."
      • addedInput schema / properties / patch / properties / images / items / properties / alt
        Added value: +{
        +  "description": "Alternative text of the photo, up to 200 characters. Optional: when empty a storefront should use the product name.",
        +  "example": "White leather sneakers, side view",
        +  "maxLength": 200,
        +  "type": "string"
        +}
      • addedInput schema / properties / patch / properties / mpn
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 120,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Manufacturer part number — the maker's own code for the item, not the shop SKU. eBay requires it beside the brand in many categories.",
        +  "example": "TR-1"
        +}
      • removedInput schema / properties / patch / properties / status / default
        Removed value: -"draft"
      • addedInput schema / properties / patch / properties / stock / description
        Added value: +"Units on hand, for a product that tracks inventory; a change on update is recorded as a relative movement in the stock history. Refused for a bundle — its stock is derived from its components."
      • removedInput schema / properties / patch / properties / tags / default
        Removed value: -[]
      • removedInput schema / properties / patch / properties / trackInventory / default
        Removed value: -false
      • addedInput schema / properties / patch / properties / trackInventory / description
        Added value: +"Whether the product counts units. Ignored for a bundle: it tracks stock exactly when one of its components does."
      • removedInput schema / properties / patch / properties / type / default
        Removed value: -"simple"
      • addedInput schema / properties / patch / properties / type / description
        Added value: +"simple, or bundle — one sellable item made of bundleItems, holding no stock of its own. Fixed at creation: an update that changes it is refused."
      • removedInput schema / properties / patch / properties / videos / default
        Removed value: -[]
    • Addedupsert_product_translation
  6. 10 tool updates
    • Addedarchive_products
    • Addedcreate_ebay_drafts
    • Addeddelete_ebay_drafts
    • Addedinspect_ebay_listings
    • Addedpublish_ebay_drafts
    • Addedrecreate_ebay_drafts
    • Addedset_channel_membership
    • Addedupsert_product_attributes
    • Addedupsert_product_prices
    • Addedwithdraw_ebay_listings
  7. 1 tool update
    • Changedcreate_order5 fields changed
      • addedInput schema / properties / delivery / properties / branchRef
        Added value: +{
        +  "description": "The carrier's own identifier for the branch or parcel locker, as returned by GET /api/v1/carriers/{carrier}/warehouses. The same value the shipment-label endpoint calls warehouseRef. Sent, this removes all guessing; omitted, the CRM falls back to matching `branch` as text.",
        +  "maxLength": 64,
        +  "type": "string"
        +}
      • addedInput schema / properties / delivery / properties / building
        Added value: +{
        +  "description": "House number for courier delivery, structured rather than inside the address line because carriers validate it on its own (Nova Poshta accepts up to 11 characters matching digits plus an optional Cyrillic letter or block, e.g. \"12Б\" or \"12/4\").",
        +  "maxLength": 35,
        +  "type": "string"
        +}
      • addedInput schema / properties / delivery / properties / cityRef
        Added value: +{
        +  "description": "The carrier's own identifier for the destination city, as returned by GET /api/v1/carriers/{carrier}/cities. Required alongside branchRef or streetRef for a waybill to be created from the order alone.",
        +  "maxLength": 64,
        +  "type": "string"
        +}
      • addedInput schema / properties / delivery / properties / flat
        Added value: +{
        +  "description": "Apartment or office number for courier delivery.",
        +  "maxLength": 35,
        +  "type": "string"
        +}
      • addedInput schema / properties / delivery / properties / streetRef
        Added value: +{
        +  "description": "The carrier's own identifier for the street, as returned by GET /api/v1/carriers/{carrier}/streets. Courier delivery only; pair it with `building`.",
        +  "maxLength": 64,
        +  "type": "string"
        +}
  8. 3 tool updates
    • Changedcreate_product1 field changed
      • addedInput schema / properties / costCurrency
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^[A-Z]{3}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_report1 field changed
      • changedInput schema / properties / report / description
        Previous value: -"Which analytics report to return. lead_source_conversion: leads and conversion rate per source (uses days). pipeline_velocity: average time deals spend in each stage. team_performance: revenue and activity per member (uses days). revenue_trend: won revenue by month (uses months). product_sales: units, revenue and gross margin per brand, category and SKU, plus a trend (uses days). stock_valuation: units on hand and their value at weighted-average cost, per warehouse (takes no period)."New value: +"Which analytics report to return. lead_source_conversion: leads and conversion rate per source (uses days). pipeline_velocity: average time deals spend in each stage. team_performance: revenue and activity per member (uses days). revenue_trend: won revenue by month (uses months). product_sales: units, revenue and gross margin per brand, category and SKU, plus a trend (uses days). stock_valuation: units on hand and their value at weighted-average cost, per warehouse and per cost currency — currencies are reported separately and never added together (takes no period)."
    • Changedupdate_product1 field changed
      • addedInput schema / properties / patch / properties / costCurrency
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^[A-Z]{3}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
  9. 1 tool update
    • Changedsearch_products1 field changed
      • addedInput schema / properties / productGroupId
        Added value: +{
        +  "default": "",
        +  "description": "Filter to the variants of one model: products whose productGroupId equals this value exactly. It is the merchant's (or supplier's) own model code, so letter case is part of it. Use it to render the other colours and sizes of the product a buyer is looking at. Empty means any model.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
  10. 3 tool updates
    • Changedcreate_product1 field changed
      • addedInput schema / properties / videos
        Added value: +{
        +  "default": [],
        +  "description": "Video links for the product page (YouTube, Vimeo or a direct file), https only, at most 5. Links, not uploads. On update, sending the field replaces the whole list.",
        +  "example": [
        +    {
        +      "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
        +    }
        +  ],
        +  "items": {
        +    "properties": {
        +      "url": {
        +        "format": "uri",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 5,
        +  "type": "array"
        +}
    • Changedsearch_products5 fields changed
      • addedInput schema / properties / collection
        Added value: +{
        +  "default": "",
        +  "description": "Filter to the products of one collection, by its slug from GET /collections. Only a collection that is visible and in season matches — an unknown, hidden or out-of-season slug is reported as not found, exactly like GET /collections/{slug}. Empty means no collection filter.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
      • addedInput schema / properties / color
        Added value: +{
        +  "default": "",
        +  "description": "Filter to products whose color equals this value, ignoring letter case (the product's own color field, not a free-form attribute). Empty means any color.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
      • addedInput schema / properties / size
        Added value: +{
        +  "default": "",
        +  "description": "Filter to products whose size equals this value, ignoring letter case (the product's own size field). Empty means any size.",
        +  "maxLength": 60,
        +  "type": "string"
        +}
      • changedInput schema / properties / sort / description
        Previous value: -"Sort order. Empty uses the default order. Allowed: name_asc, name_desc, price_asc, price_desc, newest."New value: +"Sort order. Empty sorts by name. Allowed: name_asc, name_desc, price_asc, price_desc, newest, popular — popular ranks by units sold in confirmed, processing, shipped or delivered orders over the last 90 days. Ties break by name."
      • changedInput schema / properties / sort / enum
        Previous value: -[
        -  "",
        -  "name_asc",
        -  "name_desc",
        -  "price_asc",
        -  "price_desc",
        -  "newest"
        -]New value: +[
        +  "",
        +  "name_asc",
        +  "name_desc",
        +  "price_asc",
        +  "price_desc",
        +  "newest",
        +  "popular"
        +]
    • Changedupdate_product1 field changed
      • addedInput schema / properties / patch / properties / videos
        Added value: +{
        +  "default": [],
        +  "description": "Video links for the product page (YouTube, Vimeo or a direct file), https only, at most 5. Links, not uploads. On update, sending the field replaces the whole list.",
        +  "example": [
        +    {
        +      "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
        +    }
        +  ],
        +  "items": {
        +    "properties": {
        +      "url": {
        +        "format": "uri",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 5,
        +  "type": "array"
        +}
  11. 1 tool update
    • Changedcreate_order2 fields changed
      • addedInput schema / properties / discountAmount
        Added value: +{
        +  "description": "Money taken off by the promo code, in the order currency. A sum, not a percent: a percent at order level is ambiguous (before or after line discounts, with shipping or without). Does NOT change total — send the total the buyer actually paid.",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / promoCode
        Added value: +{
        +  "description": "The promo code the storefront applied to this order, recorded as-is. The CRM never validates or computes it — the cart owns that — but storing it is what makes 'did that campaign pay for itself?' answerable later.",
        +  "maxLength": 64,
        +  "type": "string"
        +}
  12. 5 tool updates
    • Changedcreate_contact1 field changed
      • changedInput schema / properties / email / anyOf
        Previous value: -[
        -  {
        -    "description": "The contact's email address. Optional.",
        -    "format": "email",
        -    "maxLength": 255,
        -    "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "The contact's email address. Optional.",
        +    "format": "email",
        +    "maxLength": 255,
        +    "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcreate_lead1 field changed
      • changedInput schema / properties / email / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • Changedcreate_order1 field changed
      • changedInput schema / properties / customer / properties / email / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • Changedupdate_contact1 field changed
      • changedInput schema / properties / patch / properties / email / anyOf
        Previous value: -[
        -  {
        -    "description": "The contact's email address.",
        -    "format": "email",
        -    "maxLength": 255,
        -    "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "The contact's email address.",
        +    "format": "email",
        +    "maxLength": 255,
        +    "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedupdate_lead1 field changed
      • changedInput schema / properties / patch / properties / email / anyOf
        Previous value: -[
        -  {
        -    "format": "email",
        -    "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "email",
        +    "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  13. 2 tool updates
    • Changedcreate_product10 fields changed
      • addedInput schema / properties / ageGroup
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "newborn",
        +        "infant",
        +        "toddler",
        +        "kids",
        +        "adult"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedInput schema / properties / color
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 80,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedInput schema / properties / condition
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "new",
        +        "used",
        +        "refurbished"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedInput schema / properties / gender
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "male",
        +        "female",
        +        "unisex"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedInput schema / properties / material
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 120,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedInput schema / properties / pattern
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 80,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedInput schema / properties / productGroupId
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 120,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedInput schema / properties / size
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 60,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedInput schema / properties / sizeSystem
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "AU",
        +        "BR",
        +        "CN",
        +        "DE",
        +        "EU",
        +        "FR",
        +        "IT",
        +        "JP",
        +        "MEX",
        +        "UK",
        +        "US"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedInput schema / properties / sizeType
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 40,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedupdate_product10 fields changed
      • addedInput schema / properties / patch / properties / ageGroup
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "newborn",
        +        "infant",
        +        "toddler",
        +        "kids",
        +        "adult"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedInput schema / properties / patch / properties / color
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 80,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedInput schema / properties / patch / properties / condition
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "new",
        +        "used",
        +        "refurbished"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedInput schema / properties / patch / properties / gender
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "male",
        +        "female",
        +        "unisex"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedInput schema / properties / patch / properties / material
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 120,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedInput schema / properties / patch / properties / pattern
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 80,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedInput schema / properties / patch / properties / productGroupId
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 120,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedInput schema / properties / patch / properties / size
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 60,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedInput schema / properties / patch / properties / sizeSystem
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "AU",
        +        "BR",
        +        "CN",
        +        "DE",
        +        "EU",
        +        "FR",
        +        "IT",
        +        "JP",
        +        "MEX",
        +        "UK",
        +        "US"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedInput schema / properties / patch / properties / sizeType
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 40,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
  14. 8 tool updates
    • Changedconvert_lead1 field changed
      • changedInput schema / properties / input / properties / dealNextActionDate / pattern
        Previous value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    • Changedcreate_activity2 fields changed
      • changedInput schema / properties / dueDate / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / recurrenceEndsAt / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcreate_deal2 fields changed
      • changedInput schema / properties / expectedCloseDate / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / nextActionDate / pattern
        Previous value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    • Changedcreate_product1 field changed
      • changedInput schema / properties / images / items / properties / uploadedAt / pattern
        Previous value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
    • Changedlist_orders2 fields changed
      • changedInput schema / properties / from / pattern
        Previous value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
      • changedInput schema / properties / to / pattern
        Previous value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    • Changedsearch_leads2 fields changed
      • changedInput schema / properties / from / pattern
        Previous value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
      • changedInput schema / properties / to / pattern
        Previous value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    • Changedupdate_lead1 field changed
      • changedInput schema / properties / patch / properties / nextActionDate / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedupdate_product1 field changed
      • changedInput schema / properties / patch / properties / images / items / properties / uploadedAt / pattern
        Previous value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
  15. 2 tool updates
    • Changedcreate_order2 fields changed
      • addedInput schema / properties / delivery
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "How the buyer asked to receive the order: carrier, branch/courier/pickup, branch text, recipient, cash-on-delivery and a delivery note. This is the buyer's choice at checkout — it does not dispatch anything. Record what actually ships with POST /orders/{externalId}/shipments.",
        +  "properties": {
        +    "branch": {
        +      "description": "Branch or parcel locker as the buyer named it, e.g. \"відділення №5\" or \"поштомат 12345\". Free text: the CRM resolves it against the live branch list of the carrier when creating a waybill.",
        +      "maxLength": 200,
        +      "type": "string"
        +    },
        +    "carrier": {
        +      "description": "Carrier slug the buyer chose, from GET /capabilities (e.g. \"nova_poshta\", \"ukrposhta\", \"pickup\"). This is a preference, not a dispatch — the shipment endpoint still records what actually ships.",
        +      "maxLength": 120,
        +      "type": "string"
        +    },
        +    "cod": {
        +      "description": "True when the buyer pays on delivery (cash on delivery).",
        +      "type": "boolean"
        +    },
        +    "comment": {
        +      "description": "Delivery note from the buyer, e.g. \"дзвонити після 18:00\". Not the order notes.",
        +      "maxLength": 1000,
        +      "type": "string"
        +    },
        +    "method": {
        +      "description": "How the parcel reaches the buyer: \"branch\" (carrier office/locker), \"courier\" (to the address) or \"pickup\" (buyer collects from you).",
        +      "enum": [
        +        "branch",
        +        "courier",
        +        "pickup"
        +      ],
        +      "type": "string"
        +    },
        +    "phone": {
        +      "description": "Recipient phone, when it differs from the buyer's own contact phone.",
        +      "maxLength": 50,
        +      "type": "string"
        +    },
        +    "recipientName": {
        +      "description": "Who receives the parcel, when that is not the buyer (a gift, an office).",
        +      "maxLength": 200,
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / notes
        Added value: +{
        +  "description": "Internal note stored on the order. For a delivery instruction from the buyer use delivery.comment instead.",
        +  "maxLength": 5000,
        +  "type": "string"
        +}
    • Changedsearch_products1 field changed
      • changedInput schema / properties / warehouseId / description
        Previous value: -"Filter to products in one warehouse by its id. Empty means any warehouse."New value: +"Filter to products in one warehouse by its id, from the warehouse list. Use \"none\" for products assigned to no warehouse — they match no id, so nothing else surfaces them. Empty means any warehouse. An id absent from this workspace is reported as an error, never as an empty result."

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Integrates RetailCRM API with AI assistants, enabling access to orders, customers, and products from your CRM through natural language commands.
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Bitrix24 CRM for AI assistants: search and edit deals, leads, contacts, tasks and timeline comments, plus sales analytics — pipeline report with manager leaderboard, stale deals, overdue tasks. Connects via inbound webhook.
    13
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with SalesDrive CRM, allowing order management, product queries, and more through natural language.
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to manage omnichannel CRM data (WhatsApp, Instagram, Facebook) via the official API, including leads, deals, pipelines, activities, tags, products, conversations, lists, attachments, and notes.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources