Ozon MCP
This server is an MCP interface to one Ozon.ru buyer account, letting an agent read account and catalog data and, when enabled, modify the cart/lists and place/pay/cancel orders.
Session & money: check session status, start/finish login recovery, view Ozon Card balance, points by type and seller bonuses.
Orders & returns: list active/completed orders with statuses and items, get order products, purchase history, returns, and cancel orders line-by-line.
Catalog: search the storefront with filters and sorting, get available facets, product details with variants/characteristics/photos, reviews, descriptions, delivery estimates, and cheaper alternatives.
Cart: read the full cart, set item quantities, and select which cart items compose an order.
Favorites, wishlists, and selections: manage favorites, monitor favorite price drops, create/delete wishlists, add/remove products from lists, and manage «Подборки» including contents, visibility, and publication.
Checkout & payment: read and configure checkout options (payment method, pickup point, pay-on-delivery, points), place an order after confirming the total, and request payment while reporting what remains for the user to do.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Ozon MCPWhat's the status of my latest order?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
English · Русский
Ozon MCP
An MCP server for one ozon.ru buyer account. It reads orders, purchases, returns, the cart, favorites, wishlists, «Подборки», product cards, catalog search, the Ozon Card balance and points — and, when explicitly allowed, changes the cart and the lists and runs an order: forming a checkout, placing it, paying, cancelling it item by item.
None of this has a public API. The server talks to the same internal
composer-api / entrypoint-api endpoints the site's own frontend uses, under
your authenticated session.
Requirements
A Russian IP. Ozon blocks datacenter and VPN egress.
A real Chromium. Headless is detected; the image runs it under Xvfb.
One interactive login, performed once against the profile directory.
--shm-size=1g. Chromium crashes on Docker's default 64 MB.
Related MCP server: mcp-amazon
How it works
The Variti antibot blocks non-browser clients, but a browser only has to pass
the challenge once. A real Chromium starts, passes it, and hands over its
cookies and the exact client-hint header set; from then on every read and write
is a direct HTTP call through curl_cffi
with Chrome's TLS fingerprint. No tool renders a page, which is why a call takes
about 0.2 s instead of 15. The browser stays only to own the profile, refresh
the session, and serve as the fallback for one reading — the delivery estimate.
The session lives in a persistent Chromium profile, not a cookie snapshot.
OzonID, the auth realm guarding checkout, keeps its state outside cookies and
localStorage, so a Playwright storage_state snapshot silently loses it and
checkout falls back to a login prompt. A profile directory keeps everything, so
one login stays valid and the server runs unattended.
Playwright's sync API cannot run inside a live event loop, and its objects belong to the thread that created them, so tool calls are dispatched to a single worker thread. They are therefore serialised, and a slow one — a bootstrap, a login — makes the others wait.
Tools
Orders and returns
Tool | |
| Orders (active / archive / all), each with its |
| Items of one order: sku, title, price paid, variant, seller, and each item's parcel status |
| Everything ever ordered, as product tiles; with a query, Ozon's own search over the whole history |
| What was actually received: the purchase list matched against the orders, with the coverage of the scan |
| Returns: number, date, status, amount, the products going back |
Catalog
Tool | |
| Storefront search by text and/or category slug, with sort, facet filters and a depth |
| Facets available for a query, and the values |
| Card: price, variants (each with its own sku), characteristics, photos; description and reviews on request |
| Rating, review count, the breakdown per star, and reviews to any depth ( |
| Description text plus the images embedded in it |
| When a product would arrive, to which address, from which warehouse |
| The cheapest lots of the same thing: Ozon's own other-seller offers plus a price-sorted search |
Cart
Tool | |
| The whole cart: items, quantities, ticks, group headings, and the size Ozon declares |
| Set the quantity; 0 removes |
| Tick what makes up the order — |
Favorites and wishlists
Tool | |
| Favorites as product tiles |
| Add or remove |
| Wishlists with their ids and sizes; with a sku, whether each holds it |
| Make a wishlist, or delete one |
| Put a product in a wishlist or take it out |
| Price changes since the previous call |
«Подборки»
Tool | |
| Selections with size, status, ids and the share link |
| One selection in full, including description and visibility |
| What it holds: sku, title, price, card link |
| Create one around a product; private by default |
| Add products, keeping the ones already in it |
| Take products out, keeping the rest |
| Replace the whole list of products |
| Rename it, replace its description |
| Publish to the public profile, or unpublish |
| Delete it; the products stay |
Checkout
Tool | |
| The order being formed: payment methods, pay-on-delivery, destinations, pickup points, shipments, points, totals |
| Set payment, points, pay-on-delivery and pickup point in one call |
| Spends money. Submit, waiting until the order exists |
| Charge an order left unpaid, and report what is left to do |
| Reasons Ozon accepts for cancelling |
| Cancel an order, or named items of it, returning them to the cart |
Session and money
Tool | |
| Whether the session acts as the account, and which gates are open |
| Restore a dead session with a one-time code |
| Ozon Card balance and total points |
| Points by type, burning points, per-store seller bonuses |
Changing the account is off by default. OZON_ENABLE_WRITES=1 allows the cart,
favorites, lists and cancellations; OZON_ENABLE_ORDERS=1 allows place_order
and is separate because it spends money. session_status reports both, so a
caller can plan around them instead of finding out halfway through.
What a caller needs to know
Some of Ozon's behaviour does not follow from a tool's name.
The cart ticks are the order. get_checkout reports nothing orderable until
something is ticked, and it orders exactly what is ticked — so "buy these two"
is select_cart_items(skus, mode="only"), whatever else the cart holds. Ozon's
checkout is a snapshot of those ticks taken when checkout is entered, and only an
entry replaces it: unticking an item afterwards changes the cart and not the
order. get_checkout and place_order therefore enter checkout before reading,
which keeps the options already chosen.
Two money figures, never interchangeable. totals.total is what Ozon charges
today; totals.order_total is what the order costs. On a pay-on-delivery order
today's charge is 0 ₽, so order_total is the figure to quote to a person.
An order row has no total. Ozon prints none on the order list, so a row
carries amount_due_at_pickup («К оплате при получении») and, per item, that
item's price and paid. The sum owed on collection is not any item's price, and
paid is null when Ozon says nothing — which is not unpaid.
«Текущие заказы» is not a list of current orders. Ozon keeps the recently
received and cancelled ones on that page. scope="active" leaves them out;
state says which of the three a row is.
Pay-on-delivery is not all-or-nothing. Ozon defers payment per shipment, so
an order can be part deferred and part prepaid — an imported item usually has to
be paid up front. pay_after_receipt.scope is full, partial or none; on a
partial order pay_now_items and pay_on_receipt_items name the lines on each
side, as Ozon splits them.
«Купленные товары» is a list of products, not of outcomes. It holds
everything ever ordered — including what was refused at the pickup point — and
states no order, no date and no status; its price is today's catalogue price, not
what was paid. On the account this was built against, 17 of 29 items matching one
query had been ordered and never taken home. The outcome lives in the orders: an
order is delivered in parcels with separate fates, so order_products reports
shipment_status and received per item, and bought_items matches the
list against the orders to fill them in, and its answer states how far it looked:
each order costs a request, so a bounded scan is partial and says so —
unresolved is "never seen in the orders scanned", provisional is "seen only
as cancelled, an older order may have been received".
An order's dates are status dates. The archive prints only «Получен 11 августа» / «Отменён 12 февраля 2021», so a date range filters on when an order was received or cancelled — an order placed on 30 June and received on 2 July lands in July. The archive is a newest-first cursor, so a window is walked down to: the cost is the depth, not the width. A recent fortnight comes back in half a second; a month two years back takes tens of seconds.
A rating is a number Ozon states. product_details carries rating,
reviews_count and questions_count; get_reviews adds the per-star breakdown
and walks pages to the depth asked for, reporting count (the product's total)
beside fetched (what came back) — they are different numbers. Ozon offers no
filter by star, so the one-star reviews are reached with sort="worst" and
depth. A card's reviews cover its variants, so each review names the size or
colour it is about, and «Достоинства» / «Недостатки» stay apart from the comment.
Three prices, and only one of them is charged. A card states price («С
банками» — what the account pays), price_regular («С другими банками») and
price_old (struck through). Comparing lots on anything but the first calls a
lot cheaper than it is, so search(sort="cheap") and find_cheaper rank on it.
Ozon's text search is literal. A lot whose own title omits the brand is not
returned for a query that includes it — and when nothing matches exactly Ozon
fills the page with "you might also like", which is dropped rather than passed
off as results. So search the model, not brand-plus-model, and confirm what a lot
is with product_details: a tile's title is the seller's wording and may name no
model at all. limit is depth — pages are walked until it is met, because the
cheapest lot is regularly not on the first one.
Wishlists and «Подборки» are different things. A wishlist has a numeric id
and holds anything. A selection has a uuid, a cover, a description and a
visibility; its products come from favorites only, and publishing puts it on the
account owner's public profile after review. Its products are a separate read —
the list states a count — and Ozon has no "add" of its own: the form submits the
whole list, which is what add_to_selection / remove_from_selection do around
the current contents.
Cancelling works line by line. cancel_order(order, skus=[...]) drops those
items and leaves the rest of the order standing, in as many passes as it has
items.
A card charge finishes on Ozon's bank domain, which signs the account in to
the bank. pay_order drives the payment to that point and reports what remains:
the amount, how much to top the card up by, and the page to finish at.
Pay-on-delivery avoids the whole thing.
Errors carry a code as well as a sentence — [rate_limited],
[session_expired], [writes_disabled], [orders_disabled],
[total_mismatch], [upstream_unavailable]. Branch on the code; the sentence is
written to be relayed to a person. A failure never arrives as an empty result: a
502 or a timeout raises, because "no orders" and "Ozon did not answer" are
different answers.
Configuration
Variable | Default | |
|
| Persistent Chromium profile holding the session |
|
| Copy of a known-good profile, restored on a sign-out |
|
| Legacy cookie snapshot, imported once to seed a new profile |
|
| curl_cffi TLS-impersonation profile |
|
| Allow cart / favorites / list / cancellation changes |
|
| Allow |
|
| Favorites price-history file |
|
| Seconds for one HTTP call |
|
| Attempts before a call is reported as failed |
|
| Base wait between attempts, doubled and jittered |
|
| Longest wait, including a |
|
| Seconds for a browser navigation or a login step |
|
| Close the idle browser; the HTTP session stays |
|
|
|
|
| Bind for the HTTP transports; the same port serves |
|
|
|
See env.example.
Running
docker build -t ozon-mcp .
# stdio: the client attaches to the container's stdin/stdout
docker run -i --rm --shm-size=1g -v /opt/ozon-mcp:/data ozon-mcp
# http: long-lived service on :8084 (/mcp + /metrics)
docker run -d --name ozon-mcp --shm-size=1g -v /opt/ozon-mcp:/data \
-e OZON_TRANSPORT=http -p 8084:8084 ozon-mcp/data has to be a bind mount. It holds the profile, and Ozon rotates the
session constantly: cookies rotated over HTTP are pushed back into the profile so
the refresh chain survives a restart. On an ephemeral directory the login is lost
on every container recreation.
The profile is a credential. It grants full access to the account — orders, addresses, card balance, checkout. Never commit it; back it up encrypted.
Locally, with uv:
uv sync
uv run playwright install --with-deps chromium
uv run python -m ozon_mcp # needs a display or XvfbUnder http and sse the same port serves Prometheus metrics at /metrics: upstream
request outcomes and latency, antibot re-challenges, session bootstraps, browser
state.
Session lifetime
A signed-out session looks exactly like an empty account — no orders, no
balances, no explanation — so every tool raises instead of answering,
session_status reports the state, and start_login / submit_login_code
restore it with a one-time code that only the account owner receives.
A profile known to be signed in is copied, and a sign-out is recovered from that copy automatically, so in most cases nobody is asked for a code.
Several agents at once
Multiple clients can connect over the HTTP transports, and each gets its own MCP session. They share one Ozon account and one worker thread, which has two consequences.
Calls are serialised: a second agent waits out the first, including a 13-second browser bootstrap.
More importantly, the account state is shared. Cart ticks live on Ozon's
side, not in the MCP session, so two agents composing orders at once overwrite
each other's selection — and place_order buys whatever is ticked at that
moment, at a total the caller read a second earlier. Reads are safe for any
number of agents; writes are not. Keep one writer per account.
The endpoint has no authentication: whoever reaches the port has the account.
Limitations
Only saved addresses can be chosen.
configure_checkoutswitches between the points in the account's address book; adding one from the map is not implemented.A selection's cover cannot be uploaded; that is a multipart upload and is not covered.
Per-shipment destinations are handled but unverified against a live order Ozon actually split across addresses.
pay_ordercannot complete a card charge: that happens on Ozon's bank domain and needs banking credentials this server does not hold.Placing an order spends real money, and is gated separately from every other write.
Development
make check-all # ruff format --check, ruff check, ty, pytest with a coverage gatety runs with all = "error", ruff with select = ["ALL"] and a curated ignore
list. Tests mirror src/; the service layer is driven through a stand-in for
get_session() and the transport through a stand-in for the HTTP session, so
nothing in the suite touches the network.
Disclaimer
Scraping a personal account is against Ozon's Terms of Service. This project is for personal, low-volume use, and you are responsible for how you use it.
License
Available Tools
42 toolsadd_to_selectionA
[GATED by writes_enabled] Add products to a «Подборка», keeping what is
already in it. Products must be in favorites first — Ozon draws only from
there and drops the rest silently, so check the items count that comes back.
| Name | Required | Description | Default |
|---|---|---|---|
| skus | Yes | Products to add; the existing ones stay. | |
| uuid | Yes | The selection, from list_selections()[].uuid. |
Output Schema
| Name | Required | Description |
|---|---|---|
| link | No | The link Ozon's own «Скопировать ссылку» gives; it carries the owner id and needs it to work. |
| name | No | |
| uuid | Yes | |
| cover | No | |
| items | No | How many products it holds; selection_products() lists them. |
| public | No | |
| status | No | |
| owner_id | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: it reveals that Ozon only draws from favorites and silently drops invalid items, plus instructs checking the returned items count. This goes well beyond the schema and is critical for correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences: the first states the core function with an important nuance, the second provides a critical prerequisite and a practical check. No filler or redundancy; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the gating condition (writes_enabled), the prerequisite (favorites), the mutation semantics (keep existing items), the silent-drop risk, and the follow-up action (check items count). With an output schema present, no return format details are needed; 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (skus and uuid) are already documented clearly in the input schema, including the uuid's origin from list_selections()[].uuid. The description adds no further parameter-level detail, which is acceptable at baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Add products to a «Подборка»' with the specific nuance 'keeping what is already in it', which distinguishes it from sibling tools like set_selection_items or remove_from_selection. The resource and scope are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit conditional context: products must be in favorites first, and it warns about silent drops. It implies incremental addition (vs replacing) but does not name alternative tools or explicitly state when not to use it, so it lacks full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_orderA
[GATED by writes_enabled] Cancel an order, by default returning its items
to the cart.
skus cancels only those lines and leaves the rest of the order standing — an
order can be cancelled item by item, in as many passes as it has items. Omit
it to cancel the whole order. The selection is checked against what Ozon
reports back and refused on a mismatch, since cancelling the wrong line is
not undoable.
reason_id from list_cancel_reasons; "504" (изменить заказ и оформить заново)
is the neutral default, "508" needs a comment.
Check cancelled in the result — Ozon may answer with a retention offer
instead, and detail then carries what it asked.
| Name | Required | Description | Default |
|---|---|---|---|
| skus | No | Cancel only these lines (skus from order_products()) and leave the rest of the order standing. Omit to cancel the whole order. | |
| order | Yes | An order number ("44563249-0877") — the order_number field of a list_orders() entry. Its detail_link is accepted too, since the number is encoded in it. | |
| comment | No | Free-text explanation. Required by the catch-all reason (needs_comment=true). | |
| reason_id | No | A reason_id from list_cancel_reasons(); "504" (изменить заказ и оформить заново) is the neutral default and needs no comment. | 504 |
| return_to_cart | No | Put the cancelled items back in the cart, so the order can be recomposed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| skus | No | |
| detail | No | |
| cancelled | No | |
| reason_id | No | |
| order_number | Yes | |
| returned_to_cart | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: default return-to-cart behavior, item-by-item cancellation possible, mismatch refusal due to non-undoability, reason_id defaults, and the possibility of a retention offer requiring the agent to check the `cancelled` field. These are significant beyond any schema info.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet dense, with each sentence serving a purpose. It front-loads the core action and default behavior, then layers optional parameters and edge-case handling. No redundant words; the structure logically flows from what the tool does to how to use the parameters and what to check in the response.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of cancellation (partial vs whole, reason validation, non-undoable mismatch, retention offers), the description covers all critical aspects. The output schema exists, so return structure is not needed in the description, but the description still points out the `cancelled` and `detail` fields, which is essential for correct handling. Complete 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and parameters are well documented in the schema. The description adds practical semantics: explains the neutral default '504', that '508' requires a comment, and that skus selection is validated against Ozon reports. This goes beyond the schema's basic descriptions, providing extra decision guidance for the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool cancels an order and by default returns items to the cart. It differentiates from sibling tools by specifying partial cancellation via skus and the overall order-level action. The verb 'Cancel' and resource 'order' are explicit, and the behavior is distinct from cart/list management siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool (cancelling an order or specific lines) and references list_cancel_reasons as the source for reason_id. It implies the cancellation flow but does not explicitly state when not to use it or name alternative tools for order modifications. Still, the usage is well implied and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_favorite_price_dropsA
Record the current favorites prices and return the diff against the last run: {drops, rises, added, removed}. Call it periodically — the comparison is only as old as the previous call.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| added | No | |
| drops | No | |
| rises | No | |
| removed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the stateful side effect of recording prices and the fact that results depend on prior calls. It does not mention any further side effects (e.g., network calls or modifying favorites), but the disclosed behavior is clear and non-contradictory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no waste. The primary action and output format are front-loaded, followed by the essential usage caveat. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless tool with an output schema, the description provides everything needed: the action, the return structure, and the statefulness caveat. An agent can invoke it correctly without further clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds no parameter-specific detail because none exist; the schema already covers the empty property set.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Record' and resource 'favorites prices', and clearly states the output diff with fields {drops, rises, added, removed}. This distinguishes it from siblings like list_favorites (listing) and set_favorite (modifying), leaving no ambiguity about its function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly advises 'Call it periodically' and explains the consequence: 'the comparison is only as old as the previous call.' This gives clear when-to-use guidance, though it does not mention alternatives or when not to use it, which are not necessary given the unique role among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_checkoutA
Set checkout options and return the recomputed order — one call can set several. Omit an argument to leave that option alone. Every value comes from a get_checkout() answer, so read that first; passing something Ozon does not offer is refused with the list of what it does. Applied in the order Ozon recalculates them: destination, payment, pay-on-delivery, points. Turning points on can withdraw the pay-on-delivery offer, so check the result rather than assuming.
| Name | Required | Description | Default |
|---|---|---|---|
| points | No | How many Ozon points to spend; 0 spends none. Offered amounts are in points[]. | |
| payment | No | A payment method: a word ("СБП", "Ozon Карта", "новой картой"), a masked card ("**5898") or a payment_type id. Must be one get_checkout() offers. | |
| split_key | No | Which shipment to retarget, from deliveries[].split_keys. Only needed when the order has more than one destination — otherwise the choice is unambiguous. | |
| pickup_point | No | Where to deliver: the point number ("№1449460"), part of its address ("Данилова") or its address_book_id. Must be one of deliveries[].pickup_points with available=true. | |
| pay_after_receipt | No | Turn «Оплатить после получения» on or off. Only when pay_after_receipt.available. |
Output Schema
| Name | Required | Description |
|---|---|---|
| points | No | |
| reason | No | |
| totals | No | |
| available | No | |
| shipments | No | |
| deliveries | No | |
| installment | No | |
| payment_options | No | |
| pay_after_receipt | No | |
| place_order_action | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden, and it delivers: it discloses validation behavior (refusal with list), the order of application, and a side-effect (points can withdraw pay-on-delivery). This is rich behavioral context beyond what any annotation would provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but each sentence earns its place: purpose, prerequisite, error behavior, ordering, and a warning. It is front-loaded with the core purpose. Slightly longer than minimal, but no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 5 parameters, it covers prerequisites, error handling, application order, and a side-effect warning. An output schema exists, so return format is covered. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter dependency (points affecting pay-on-delivery) and the 'omit to leave unchanged' semantics, which are not captured in the individual schema descriptions. This adds meaningful value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Set'), a resource ('checkout options'), and the key behavior ('return the recomputed order'), and it distinguishes itself from siblings like get_checkout and place_order. It clearly communicates the scope in the first sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs the agent to read get_checkout() first and warns that invalid values are refused, which is a strong usage directive. It implies the alternative (use get_checkout for reading) but does not name it explicitly, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_listA
[GATED by writes_enabled] Create an empty wishlist and return it with its list_id, ready for set_list_membership(). An empty name is refused by Ozon. Wishlists are the only list this account can create — «Подборки» are not made this way.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the new wishlist, as the user would read it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | No | |
| name | No | |
| items | No | |
| saves | No | |
| list_id | No | |
| contains | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the gating condition, the empty-name refusal behavior, the account-level limitation to wishlists, and the return of a list_id. The presence of an output schema reduces the need to describe the full response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the gating condition and core purpose, then add only high-value constraints and routing context. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one required parameter, an output schema, and a clear action, the description covers the gating prerequisite, the error condition, the resource type restriction, and the natural next step. Nothing essential is missing for an agent to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already explains that name is the wishlist name as the user would read it. The description adds the Ozon empty-name rejection and ties the result to set_list_membership(), but it does not add substantial new parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Create an empty wishlist' and explicitly says it returns the list_id. It also distinguishes itself from related concepts by stating that «Подборки» are not made this way, which disambiguates it from selection-creation siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is gated by writes_enabled, creates only wishlists, and is a precursor to set_list_membership(). It also warns that selections are not created through this tool, though it does not explicitly name an alternative sibling like create_selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_selectionA
[GATED by writes_enabled] Create a «Подборка» around one product and
return it with its uuid. More products go in with add_to_selection().
public defaults to false on purpose: publishing puts it on the account
owner's public profile, so ask them before passing true.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | Yes | A product SKU ("3077454533"). For apparel use the variant SKU, not the base one. | |
| name | Yes | Name of the selection, as a person reads it. | |
| public | No | True publishes it to the account's public profile (goes through moderation). False keeps it visible only to whoever has the link. | |
| description | No | Optional text shown under the name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| link | No | The link Ozon's own «Скопировать ссылку» gives; it carries the owner id and needs it to work. |
| name | No | |
| uuid | Yes | |
| cover | No | |
| items | No | How many products it holds; selection_products() lists them. |
| public | No | |
| status | No | |
| owner_id | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the write gating (writes_enabled), the side effect of public publishing to the account owner's profile, and advises asking before setting public=true. It omits error conditions but covers key behavioral aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero fluff, front-loading the gating requirement and core action. The alternative tool is mentioned succinctly, and the public warning is placed at the end where it's most relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values, so the description needn't detail them. It explains the creation scope and how to extend a selection, which is sufficient for an agent to call it correctly. A minor gap is the lack of mention of naming constraints, but those are in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters already have detailed descriptions. The description adds context about sku being for a single product and public's default, but doesn't introduce new meaning beyond the schema's own documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Create), a clear resource («Подборка»/selection), and its scope (around one product, returns uuid). It also distinguishes from add_to_selection, which handles adding more products, making it easy for an agent to tell them apart without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly directs the agent to use add_to_selection for adding more products, and warns about the public default requiring user consent. While it doesn't enumerate all alternatives, the guidance is clear and actionable for the primary use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_listA
[GATED by writes_enabled] Delete a wishlist. The products in it are not deleted — they stay in favorites and in any other list. Not undoable: the list itself is gone, so confirm with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | Yes | The list to delete, from get_lists()[].list_id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| detail | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states the operation is gated by writes_enabled, explains that products are not deleted, and explicitly warns that deletion is irreversible. This is strong transparency for a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, starting with the gating condition and the primary action. Every sentence adds meaningful information: what is deleted, what is not deleted, irreversibility, and the need for user confirmation. No filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter destructive tool with an output schema, the description is complete. It covers the gating constraint, the exact scope of deletion, the non-undoable nature, and the required user confirmation. Nothing critical is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the list_id parameter already has a clear description: 'The list to delete, from get_lists()[].list_id.' The tool description adds no additional parameter semantics beyond naming the resource as a wishlist, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Delete a wishlist.' It also differentiates from the sibling delete_selection by naming the resource type (wishlist/list vs selection), so an agent can select the correct tool without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides practical guidance by warning that the operation is not undoable and that the user should confirm first, but it does not explicitly state when to prefer this tool over alternatives or mention any when-not-to-use conditions. Usage is implied rather than fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_selectionA
[GATED by writes_enabled] Delete a «Подборка». The products in it are not deleted. Ozon's own warning: «Восстановить её не получится» — so confirm with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | The selection to delete, from list_selections()[].uuid. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| detail | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it succeeds. It discloses that the operation deletes the selection, does not delete its products, is irreversible per Ozon, and requires user confirmation — strong transparency for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: the gating note, the action, the side effect, the irreversibility warning, and the confirmation requirement. It is front-loaded and compact without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with an output schema, the description covers the action, side effects, irreversibility, and confirmation step. The only real gap is the absence of explicit routing against sibling deletion tools, but the rest of the context is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the single uuid parameter 100% by explaining it comes from list_selections()[].uuid, so the baseline of 3 applies. The description itself adds no parameter-specific detail, but none is needed here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Delete a «Подборка»' — a specific verb and resource — and immediately clarifies the scope: the products inside are not deleted. This distinguishes it from sibling deletion tools like delete_list and makes the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides useful context by noting the operation is gated by writes_enabled and that the user must confirm first because deletion is irreversible. However, it does not explicitly compare this tool with siblings such as delete_list or set_selection_items, so an agent must infer when this is the correct choice among alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delivery_estimateA
When a product would arrive, to which of the account's addresses, and from which warehouse ("Завтра, 2 сентября" / "ул. Данилова, 17" / "Со склада Ozon"). The date is relative to that address, so quote both. This is per product, before ordering; for an existing order the dates are in list_orders(), and for an order being formed in get_checkout().
| Name | Required | Description | Default |
|---|---|---|---|
| sku_or_url | Yes | A product SKU ("3077454533") or a full ozon.ru product URL. Variants have their own SKUs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| sku | Yes | |
| source | No | |
| address | No | |
| delivery | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It discloses an important nuance: the date is relative to the address, so both must be quoted together. It also clarifies the estimate is pre-order and per product. It does not explicitly state it is read-only, but 'estimate before ordering' strongly implies no mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and every sentence adds value: the core output, the address-relative date caveat, and the sibling routing. The first clause is a slightly awkward fragment ('When a product would arrive...') rather than a clean verb phrase, which costs a point but does not harm clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema, the description provides the necessary context: what is estimated, the per-address date behavior, the pre-order scope, and which sibling tools cover adjacent cases. An agent has enough information 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the parameter description already explains that sku_or_url accepts a SKU or full product URL and that variants have their own SKUs. The tool description adds context that the estimate is per product, but it does not add significant 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines what the tool provides: a delivery estimate for a product before ordering, including arrival date, target address, and source warehouse. It also distinguishes itself from list_orders() and get_checkout() by explicitly scoping it to per-product pre-order estimates, so an agent can tell it apart from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states exactly when to use this tool: per product, before ordering. It also names the alternatives for related scenarios, saying existing order dates are in list_orders() and checkout-formation dates are in get_checkout(), giving the agent clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_selectionA
[GATED by writes_enabled] Rename a selection, and optionally replace its description. Visibility is preserved: an edit carries it, so a public selection stays public and a private one stays private.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | New name. | |
| uuid | Yes | The selection, from list_selections()[].uuid. | |
| description | No | New description. Omit to keep the current one — Ozon rewrites both together. |
Output Schema
| Name | Required | Description |
|---|---|---|
| link | No | The link Ozon's own «Скопировать ссылку» gives; it carries the owner id and needs it to work. |
| name | No | |
| uuid | Yes | |
| cover | No | |
| items | No | How many products it holds; selection_products() lists them. |
| public | No | |
| status | No | |
| owner_id | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses a gating condition (writes_enabled) and the behavioral trait that visibility is preserved, which are both valuable beyond the schema. It does not describe return values or error conditions, but an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with a single purpose statement and a key behavioral note. The gating condition is front-loaded, making it immediately actionable, and there is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers the core purpose, the gating condition, and the visibility preservation. The schema covers parameters, and an output schema exists, so return values are not needed. It is sufficiently complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description adds little beyond what the schema already documents. The description's mention of 'rename' and 'replace description' aligns with the schema but does not provide new parameter-specific details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: rename a selection and optionally replace its description. It distinguishes from siblings like create_selection, delete_selection, and set_selection_public by specifying exactly what it modifies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on what the tool does and notes that visibility is preserved, implying that visibility changes belong elsewhere. However, it does not explicitly name alternative tools or state when not to use it, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_cheaperA
The cheapest lots of the same thing, ranked by payable price — top limit
(default 10).
Looks in both places Ozon keeps them: its own «Есть дешевле или быстрее»
offers for this exact product, and a price-sorted search by the card's
title, which reaches the same product listed separately. Entries carry
seller and delivery when they came from the offers list, and offers have
no title — confirm the model with product_details() before quoting one.
Raises when the base price cannot be read, rather than answering "nothing is
cheaper" for a product it failed to price.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many entries to return at most. | |
| sku_or_url | Yes | A product SKU ("3077454533") or a full ozon.ru product URL. Variants have their own SKUs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| base | Yes | |
| cheaper | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It clearly explains ranking by payable price, the two lookup sources, the caveat that offer entries have no title and need confirmation, and the important failure behavior of raising instead of falsely reporting nothing cheaper.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core behavior, followed by source detail, a caveat, and the failure mode. Every sentence adds meaningful operational information without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description covers the non-obvious behavioral and data-quality aspects: ranking, limit, source logic, missing titles on offers, and exception behavior. It is sufficiently complete 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.
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 useful context beyond the schema by explaining that sku_or_url drives both the exact product offers and a title-based search, and by restating the limit default in the operational context of ranking output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it finds the cheapest lots of the same product ranked by payable price. It also distinguishes itself from generic search by explaining its two sources and the exact-product focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when the tool is appropriate: when finding cheaper copies of the same product, using both Ozon's offers list and title-based search. It does not explicitly name alternative sibling tools or state when not to use it, but it does provide a useful follow-up instruction to verify offers with product_details() before quoting them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cartA
The whole cart (paginated through): items with title, price, quantity and
checked — the tick is what decides the order's contents — plus Ozon's own
group headings ("Доступны для заказа", «Бронирование товаров»).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| items | No | The items actually read. |
| groups | No | |
| item_count | No | How many were read. |
| total_items | No | How many Ozon says the cart holds; a difference means the read came up short. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose meaningful behavior: pagination ('paginated through') and the semantic role of the `checked` field ('the tick is what decides the order's contents'). It omits auth requirements, rate limits, and empty-cart behavior, which are gaps for a zero-annotation tool, but the disclosed traits are genuinely useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is dense but not wasteful; the core scope ('The whole cart') is front-loaded, and the details on item fields, `checked` semantics, and group headings each earn their place. Slightly long due to parenthetical group-heading examples, but efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and zero parameters, the description covers the key aspects an agent needs: scope, pagination, item composition, the decisive `checked` field, and group headings. Minor omissions (empty-cart behavior, auth) are not critical given the output schema carries return-structure details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, so the baseline of 4 applies. There is nothing for the description to document beyond what the empty schema already conveys, and it adds no misleading parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (the cart) and scope ('The whole cart... paginated through'), with specific detail on contents: items with title, price, quantity, and `checked`, plus group headings. The verb is implicit but unambiguous. It does not explicitly name a sibling to differentiate from, but the read-vs-mutate contrast with set_cart_quantity and select_cart_items is evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied rather than stated — 'the whole cart' signals a full-read operation, and the read nature contrasts with mutation siblings. However, there is no explicit guidance on when to use this versus alternatives, no exclusions, and no note about prerequisites like being logged in.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_checkoutA
The order being formed from the selected cart items, with everything that
can be changed: payment methods (each with its payment_type), the
pay-on-delivery switch, one entry per destination in deliveries (each with
its shipments in split_keys and its selectable pickup_points), the
shipments with their delivery dates, points choices and the money
breakdown — totals.total is what Ozon charges today (0 ₽ on a fully
deferred order) and totals.order_total is what the order costs.
Pay-on-delivery does not always cover the whole order. pay_after_receipt
.scope is one of "full", "partial" (some items must be paid up front:
prepayment_amount now, post_payment_amount on receipt) or "none", and .note
states it in words. On a partial order pay_now_items and pay_on_receipt_items
name the lines on each side, as Ozon itself splits them, and the shipments
are loaded with their items, each carrying prepaid (null when it holds
items from both sides). shipment_items forces that loading on (true) or off
(false); by default it happens only when scope is "partial".
Forms the checkout itself if Ozon has not yet. If it reports
available=false, reason says what to fix — usually: select cart items.
Change it with configure_checkout, submit with place_order.
| Name | Required | Description | Default |
|---|---|---|---|
| shipment_items | No | Force loading each shipment's items on (true) or off (false); default loads them only when the order is split between prepaid and deferred parts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| points | No | |
| reason | No | |
| totals | No | |
| available | No | |
| shipments | No | |
| deliveries | No | |
| installment | No | |
| payment_options | No | |
| pay_after_receipt | No | |
| place_order_action | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure. It reveals a side effect ('Forms the checkout itself if Ozon has not yet'), explains the available=false reason mechanism, details the shipment_items loading default, and describes nuanced pay-on-delivery scope behavior. This is unusually transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long and dense, but nearly every sentence contributes distinct information about checkout structure, behavior, or default values. It is not front-loaded with a clear verb phrase, but it is well organized and avoids redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description appropriately focuses on behavioral semantics and edge cases rather than return fields. It covers the tool's side effect, failure reasons, parameter defaults, and relationship to sibling tools, making it complete for an agent deciding to call or interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter shipment_items has full schema description coverage, so the baseline is 3. The description adds context by tying the default loading behavior to pay_after_receipt.scope being 'partial' and explaining that shipment_items forces loading on or off. This enriches the parameter's meaning beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description precisely defines what get_checkout returns: the current checkout being formed from selected cart items, including payment methods, deliveries, shipments, and totals. It also distinguishes the tool from its direct siblings by stating that configure_checkout changes the checkout and place_order submits it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it operates on selected cart items, can create the checkout if Ozon has not yet, and reports available=false with a reason when something needs fixing. It names the alternatives configure_checkout and place_order, but does not explicitly state scenarios where get_checkout should be avoided in favor of get_cart or other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_descriptionB
Product description text plus the images embedded in it.
| Name | Required | Description | Default |
|---|---|---|---|
| sku_or_url | Yes | A product SKU ("3077454533") or a full ozon.ru product URL. Variants have their own SKUs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| sku | Yes | |
| images | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the output content (description text and images) but does not explicitly mention side effects, read-only status, authentication needs, or any limitations. The 'get' prefix implies read-only behavior, but the description itself does not confirm it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, containing a single short phrase with no redundant words. It is appropriately sized for a simple retrieval tool and immediately communicates the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple tool with one parameter and an output schema, so the short description is partly acceptable. However, it lacks any context on when to prefer this tool over related product-data tools, and it does not mention that it accepts both SKU and URL (though the schema covers that). Overall, it is adequate but has clear gaps in usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes the single parameter sku_or_url with 100% coverage, including examples and clarification that variants have own SKUs. The description adds no additional parameter semantics, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description, "Product description text plus the images embedded in it," clearly identifies what the tool returns: the product description and its embedded images. It is distinct from siblings like product_details or get_reviews by focusing specifically on the description content, but it lacks an explicit verb such as 'retrieves' or 'returns', so it is more of a noun phrase than a full command.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like product_details or search. There is no mention of exclusion conditions, prerequisites, or the specific scenario where this tool is the correct choice, leaving the agent to infer usage solely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_financesA
Ozon Card balance and the total points. This balance is what a card payment draws on, so it is what decides whether pay_order() will need a top-up. Breakdown by point type → get_points().
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| points | No | |
| ozon_card_balance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It adds the meaningful fact that the returned balance is what card payments draw on and drives pay_order top-up decisions, but it does not explicitly state read-only status, auth requirements, or failure behavior. For a zero-parameter balance query, this is reasonable but not fully complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences each earn their place: the first states the data returned, the second explains its operational meaning for pay_order, and the third routes to get_points for detail. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-argument read operation with an output schema, the description covers what is returned, why it matters in the payment flow, and how to get more detail via get_points. Nothing required to call the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there is no parameter-semantics burden for the description to carry. Per the zero-parameter baseline, this dimension should score 4; no additional parameter documentation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as the Ozon Card balance and total points, and differentiates it from get_points by pointing to that sibling for point-type breakdown. However, it lacks an explicit action verb and relies on the tool name's 'get' to convey the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes point-type breakdowns to get_points() and explains that the balance determines whether pay_order() needs a top-up. This gives an agent clear context for when this tool matters and which sibling covers the alternative case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listsA
The account's wishlists (вишлисты), each with its size and list_id — which
is what set_list_membership() and delete_list() take. With a sku, every list
also carries contains, so a product already in a list is not added twice.
Ozon's «Подборки» are a different thing, kept elsewhere and not exposed.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | No | A product SKU: the same lists, each with `contains` saying whether it holds that product. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that lists are account-scoped, the response includes size/list_id, the sku parameter changes each list to include contains, and that «Подборки» are intentionally not exposed. This is solid transparency for a simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler. The core purpose is front-loaded, the cross-reference to consuming functions is relevant, and the «Подборки» clarification earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has one optional parameter, low complexity, and an output schema, so the description doesn't need to enumerate return fields. It provides the essential integration context and edge semantics for the sku parameter, making it complete for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents sku at 100% coverage. The description adds value by explaining the purpose: sku enriches each list with contains so callers can avoid duplicating a product in a list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the resource ('account's wishlists'), the returned fields (size, list_id, conditional contains), and explicitly distinguishes wishlists from Ozon's «Подборки». This differentiates it from related list-like sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains that list_id feeds set_list_membership() and delete_list(), and that passing a sku lets callers check contains to avoid double-adding a product. It also rules out «Подборки», though it doesn't directly compare against sibling tools like list_favorites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pointsB
Points by type (Ozon points, miles, WOW points, stars) with amounts, burning points, and per-store seller bonuses.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| burning | No | |
| by_type | No | |
| seller_bonuses | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It describes the returned content but does not state that the operation is read-only, whether authentication is required, or any other behavioral traits. The tool name implies a getter, but the description itself does not clarify side effects or safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and free of filler, front-loading the resource type and enumerating the returned categories. It is slightly fragmentary rather than a full sentence, but every phrase adds useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity of a zero-parameter read tool and the presence of an output schema, the description is largely complete for invoking the tool. It lists the main content areas, though it omits any usage context or explicit read-only statement, which are not critical for a simple getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema coverage, so there are no parameter semantics to clarify. The description does not need to compensate for missing schema information, and the baseline for zero-parameter tools applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (points) and the specific data returned: points by type with amounts, burning points, and per-store seller bonuses. It is not a tautology and is distinguishable from siblings like get_cart or get_finances, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives such as get_finances, purchases, or list_orders. The description only states what data is returned, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reviewsC
Reviews on their own: overall score, individual reviews (author/score/text/date) and review photos.
| Name | Required | Description | Default |
|---|---|---|---|
| sku_or_url | Yes | A product SKU ("3077454533") or a full ozon.ru product URL. Variants have their own SKUs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| score | No | |
| photos | No | |
| reviews | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It lists the data returned, but does not disclose pagination, ordering, behavior for products without reviews, authentication requirements, or side effects. The read-only nature is only implied by the name and content, not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and scannable, front-loading the core resource and then enumerating the included data. It is a fragment rather than a complete sentence, but every phrase earns its place with no redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read operation with a fully described schema and an output schema, the essential content is covered. Missing are practical details like pagination or limits for large review sets, and a clearer relationship to sibling tools such as product_details, making it adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the single parameter thoroughly, including accepted formats (SKU or full ozon.ru URL) and the variant-SKU note. With 100% schema description coverage, the description adds no extra parameter 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource ('Reviews on their own') and enumerates the contents returned: overall score, individual reviews with author/score/text/date, and review photos. It lacks an explicit imperative verb, but combined with the tool name and content list, the purpose is clear and distinct from broader product tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance about when to use this tool versus alternatives like product_details or search. The phrase 'on their own' weakly implies standalone review retrieval, but no alternatives, exclusions, or selection conditions are stated, leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_search_filtersA
Facets available for a query: {name, key, type, options|range}. Apply them with search(filters={key: value}) — checkbox/category value = option.value, range value = "min;max". Flow: search → get_search_filters → search(filters).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The same search text whose facets you want. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. It explains the returned faceted structure and how to use values (option.value vs range 'min;max'), which is meaningful behavioral context. Lacks only details about failures or empty results, but the core behavior is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences deliver a precise structure definition, usage example, and workflow. All sentences are high-value with no redundant filler; the format example is compact and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter), the presence of an output schema, and the detailed usage flow, the description is complete. Agents know what to send and how to interpret results, including value formats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the query parameter, and the description reinforces that it must be the same search text used previously. This adds practical context beyond the schema's description, ensuring agents pass the correct value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns facets available for a query, with structure {name, key, type, options|range}. It distinguishes itself from sibling tools like search by explaining it provides filter metadata, not search results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes the flow: search → get_search_filters → search(filters), and explains how to apply returned filters with the search tool. This gives the agent clear when-to-use and integration guidance beyond mere existence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_selectionA
One «Подборка» in full: name, description, product count, status and
public — whether it is published to the account's public profile.
list_selections() does not carry the description or public; this does, and
it is the only reliable read of visibility, because a selection under review
is listed as "На модерации" either way.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | The selection, from list_selections()[].uuid. |
Output Schema
| Name | Required | Description |
|---|---|---|
| link | No | The link Ozon's own «Скопировать ссылку» gives; it carries the owner id and needs it to work. |
| name | No | |
| uuid | Yes | |
| cover | No | |
| items | No | How many products it holds; selection_products() lists them. |
| public | No | |
| status | No | |
| owner_id | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals that the tool returns a full selection object and explains a nuance about visibility reliability ('a selection under review is listed as На модерации either way'). While it doesn't explicitly state it's read-only, the description clearly implies a non-mutating retrieval, and the added moderation context adds useful behavioral insight beyond a common get. It would be improved by an explicit statement that it performs no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose. It efficiently contrasts with the sibling tool and explains why this tool is necessary. The moderation explanation adds a slightly tangential detail but supports the usage guidance, so it earns its place. Not perfectly minimal but well structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter) and the presence of an output schema, the description provides enough context for an agent to use it correctly. It explains what the result contains, why it differs from list_selections, and the reliability caveat about visibility. Error handling or invalid uuid cases are not mentioned, but for a simple getter this is acceptable. The description covers the essential contextual information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema coverage is 100% — the uuid parameter is fully described as 'The selection, from list_selections()[].uuid.' The description does not add additional parameter semantics beyond what the schema already provides. The contrast with list_selections is about the return value, not the parameter, so it doesn't enhance parameter understanding. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies exactly what the tool returns — a full selection with name, description, product count, status, and public visibility. It also distinguishes itself from list_selections by explicitly stating what list_selections lacks. The verb and resource are clear, and the tool is clearly differentiated from its sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool over list_selections: when you need the description or the `public` flag. It also explains why this is the only reliable read of visibility, given the moderation ambiguity. This provides clear contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cancel_reasonsA
Reasons Ozon will accept for cancelling an order, with their reason_id. The catch-all one (needs_comment=true) is refused without a comment.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | An order number ("44563249-0877") — the order_number field of a list_orders() entry. Its detail_link is accepted too, since the number is encoded in it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It exposes a non-obvious constraint: the catch-all reason with needs_comment=true is refused without a comment. It also notes that reason_id is returned, which is essential for a subsequent cancel_order call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, with the main purpose front-loaded and a caveat appended. Every word contributes meaning; 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema and parameter schema cover return structure and input format. The description adds purpose and a key behavioral caveat. The only minor omission is an explicit connection to the cancel_order workflow, but that is easily inferred from the sibling list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the parameter schema already explains the order number format and that detail_link is accepted. The description adds no parameter-level information, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's resource ('Reasons Ozon will accept for cancelling an order') and the key output ('reason_id'). It distinguishes the listing intent from the sibling cancel_order, which actually performs the cancellation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when preparing to cancel an order, but it does not explicitly state 'use before cancel_order' or mention any exclusions. The relationship to cancel_order is inferable from sibling names rather than stated in the description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_favoritesA
Favorites as product tiles: sku, title, price, old price, url.
Paginated through for you — limit caps how many come back, there is no
page to ask for.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many entries to return at most. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It discloses that pagination is automatic, that `limit` caps results, and that there is no page parameter to request. It also enumerates the returned fields. It does not mention authorization or side effects, but listing favorites is inherently read-only and safe. This is solid disclosure beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero redundancy. The purpose is front-loaded, the return fields are listed compactly, and the pagination behavior is explained efficiently. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the presence of an output schema (even though not shown) and the description's inclusion of return fields and pagination, it is largely complete. It does not cover error cases or ordering, but those are minor for a basic list operation. It could benefit from stating it returns the current user's favorites, but that is strongly implied by the name and sibling context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the `limit` parameter (coverage 100%), so the baseline is 3. The description adds valuable context by clarifying that pagination is handled automatically and there is no separate page parameter. This extra information helps the agent understand the single parameter's role beyond the schema's basic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact purpose: listing favorites as product tiles, with the specific fields (sku, title, price, old price, url). This clearly distinguishes it from sibling tools like get_lists (which handles user lists) and set_favorite (which toggles favorites). The verb and resource are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (to view a user's favorite products) but does not explicitly contrast with alternatives like get_lists or set_favorite. It provides clear context on the return type, which helps an agent infer when to call it, but it stops short of stating when not to use it or naming a specific sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ordersA
Orders with status, state (active/received/cancelled), pickup point, delivery slot/ETA and their items. No order total: Ozon states none on the list. Money is amount_due_at_pickup («К оплате при получении», what is owed on collection) per entry, and price plus paid true/false per item. An item's price is not the order's; paid null means unknown, not unpaid. An entry is a delivery group: items arriving together share it, so order_numbers can hold several and its items can be paid and unpaid. Giving either date searches the archive and stops paginating once past the window — cheaper than pulling the whole history for one month. Pass an entry's order number or detail_link on to order_products(), cancel_order() or pay_order().
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many entries to return at most. | |
| scope | No | Which orders: "active" (still in flight — received and cancelled ones are left out, even though Ozon shows them among the current), "completed" (the «Завершённые» archive) or "all". | active |
| date_to | No | ||
| date_from | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It reveals non-obvious facts: there is no order total; amount_due_at_pickup is per entry; paid null means unknown, not unpaid; each entry is a delivery group that can contain multiple order_numbers; and giving a date searches the archive and stops paginating. This goes far beyond a generic list description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but each sentence carries a distinct, useful fact: output composition, monetary semantics, delivery-group modeling, archive/date behavior, and downstream routing. It is longer than strictly necessary but not padded; the 'cheaper' explanation is slightly extra but still relevant to usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list operation with four parameters and no annotations, the description covers output structure, tricky field semantics, grouping behavior, archive/date behavior, and how to connect to related tools. The only minor gaps are date inclusivity and authentication requirements, but the output schema exists and shared login context is implied by the sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, with limit and scope documented but date parameters only minimally. The description adds meaningful date behavior ('Giving either date searches the archive and stops paginating once past the window') and clarifies output semantics tied to price/paid. It does not elaborate on limit, but the schema already documents that parameter, so the description compensates reasonably for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the resource (orders) and the returned fields (status, state, pickup point, delivery slot/ETA, items), and clearly flags the absence of an order total. It lacks an explicit imperative verb like 'lists', but the tool name and content make the purpose unmistakable, and it distinguishes itself from downstream tools like order_products(), cancel_order(), and pay_order().
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete follow-up guidance: 'Pass an entry's order number or detail_link on to order_products(), cancel_order() or pay_order().' It also explains when date parameters trigger archive search and stop pagination, which helps an agent choose efficient usage. It does not explicitly state when not to use this tool versus a sibling, 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.
list_returnsA
Returns this account has opened, newest first: the return number, the
date of the application, Ozon's own status badge ("Деньги отправлены", "Ждём
товар") and the sentence under it, the amount, and the products going back.
Paginated through — limit caps how many come back.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many entries to return at most. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses sorting order ('newest first'), exact fields returned, and pagination behavior via 'limit'. This goes beyond a minimal listing and gives the agent a good sense of what to expect, though it does not explicitly state side-effect-free or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: the first enumerates all returned fields, the second explains the pagination. No fluff, high information density, and important details are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple schema (only one optional parameter) and the presence of an output schema, the description covers the essential invocation details: scope, ordering, fields, and pagination. It lacks explicit mention of error cases or authorization, but that is acceptable for such a straightforward list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, limit, is fully described in the schema ('How many entries to return at most'). The description adds meaning by explaining pagination ('Paginated through – `limit` caps how many come back'), which is not redundant with the schema description, so it earns above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Returns...') and the resource ('this account has opened'), with specific details about the content (return number, date, status badge, amount, products). It is unambiguous and distinct from sibling tools like list_orders, which cover orders rather than returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The description implies it is for listing returns, but does not mention scenarios where another sibling (e.g., list_orders or get_finances) might be preferred, nor any preconditions or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_selectionsA
The account's «Подборки» — curated, publishable lists of products, a different thing from the wishlists in get_lists(). Each carries the uuid every other selection tool takes, how many products it holds, and Ozon's own status: "Личная подборка" while private, "N сохранений" once public, "На модерации" while a publication is being reviewed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. It discloses the scope (account-level), the fact these are curated publishable lists rather than wishlists, and the meaning of status values including private/public/moderation states. It does not explicitly state read-only behavior or pagination, but the list semantics and output-focused detail cover the important behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: one sentence defines and differentiates the resource, a second explains the fields an agent can expect. Every clause earns its place and the most important distinguishing fact (not wishlists) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool with an output schema, the description is nearly complete: it states the scope, return fields, and status semantics, and links the returned UUIDs to the selection-tool family. It could add an explicit note about what it does not return (e.g., full product data) or authentication requirements, but those gaps are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so schema coverage is trivially 100% and no parameter documentation is needed. The description adds useful return-value semantics (uuid, product count, Ozon status) even though that is output rather than parameter info, fully compensating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource ('account's curated, publishable lists of products') and immediately distinguishes it from wishlists in get_lists(), which is enough to know what it operates on. It stops short of an explicit verb like 'Returns' or 'Lists', so the action is inferred from the tool name rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent this is not the wishlist tool (get_lists) and explains that the returned UUIDs are what 'every other selection tool takes', implying list_selections is the entry point for selection operations. It lacks an explicit 'use this when... / use get_lists when...' rule 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.
order_productsB
Items of one order: sku, title, price paid, chosen variant, seller and a product-card link. Accepts an order number ("44563249-0865") or a detail_link from list_orders()[].detail_link.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | An order number ("44563249-0877") — the order_number field of a list_orders() entry. Its detail_link is accepted too, since the number is encoded in it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It states the output fields and input formats but does not explicitly indicate that this is a read-only operation, any authentication requirements, error handling, or potential limitations. The absence of any mention of side effects or edge cases leaves an agent without full understanding of its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first lists output fields, the second explains input formats. It is front-loaded with the purpose and extremely efficient, containing no redundant words. Every clause earns its place, making it an excellent example of concise, structured writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a single simple parameter, an output schema, and no nested objects, the description covers the core purpose and input requirements well. It does not discuss error cases or prerequisites like authentication, but the presence of an output schema alleviates the need to detail return values. Overall, it is nearly complete for a simple read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already explains the parameter format including the detail_link acceptance. The description adds a concrete example and reinforces the dual format, but it does not provide substantive new meaning beyond the schema. Since the schema fully documents the parameter, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns items of one order with a specific list of fields (sku, title, price, variant, seller, link). It distinguishes itself from list_orders (which lists orders, not items) and other product-related tools by focusing on a single order's contents. The verb 'Items of one order' is specific, though it doesn't explicitly name a sibling to avoid confusion, which keeps it slightly below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies accepted input formats (order number or detail_link from list_orders) and implies it should be used when needing the items of a particular order. However, it does not explicitly state when NOT to use it or mention alternative tools for other scenarios. The guidance is clear enough for basic use but lacks explicit exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pay_orderA
[GATED] Ask Ozon to charge an order left in «Ожидаем оплаты», and report
what the user must still do.
The result spells it out: amount_due is the charge, shortfall is set when
the Ozon Card balance does not cover it (top up by that much), and
next_step is the instruction to relay. payment_url is where the payment
is completed — that page signs the account in to Ozon Bank, which is the
owner's step, so this server never finishes the charge itself.
Tell the user plainly: top up by shortfall if present, then finish at
payment_url. Ordering with pay-on-delivery avoids all of it.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | An order number ("44563249-0877") — the order_number field of a list_orders() entry. Its detail_link is accepted too, since the number is encoded in it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| detail | No | |
| next_step | No | |
| shortfall | No | |
| amount_due | No | |
| payment_url | No | |
| order_number | Yes | |
| needs_bank_passcode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses a critical limitation: 'this server never finishes the charge itself' — the payment must be completed by the user at payment_url, which signs into Ozon Bank. It also explains the result fields (amount_due, shortfall, next_step) and instructs how to relay them. This goes beyond basic behavior to reveal side effects and user involvement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence contributes: it states purpose, explains result fields, clarifies the server's role, and gives user instructions. The purpose is front-loaded in the first sentence. It is structured but slightly verbose; could be tightened while retaining all details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a payment-charge tool with an output schema, the description covers the preconditions (order awaiting payment), the action, the result fields, and the user's next steps. It also mentions the pay-on-delivery alternative. It does not explicitly cover error handling (e.g., what if the order is already paid), but the precondition is stated. Given complexity, this is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema description already documents the order parameter including format and accepted detail_link. The tool description does not add any additional meaning beyond what the schema provides. Baseline of 3 is appropriate because the schema fully handles parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: 'Ask Ozon to charge an order left in «Ожидаем оплаты»' and 'report what the user must still do.' It clearly distinguishes from siblings like place_order (new orders) and cancel_order (cancellations) by targeting the awaiting-payment state. The verb 'charge' plus resource 'order' is precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the condition for use: orders in the 'Ожидаем оплаты' state. It also hints at an alternative: 'Ordering with pay-on-delivery avoids all of it,' implying when not to use this tool. However, it does not name a specific sibling tool as an alternative, leaving some inference to the agent. This is clear context but not fully explicit about exclusions beyond pay-on-delivery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_orderA
[GATED by orders_enabled — SPENDS REAL MONEY] Submit the order that get_checkout() describes. Not undoable from here except by cancel_order(). Read get_checkout() immediately before, show the user totals.order_total — what the order costs — and pass back the figure they agreed to. The call is refused if that no longer matches, and nothing is ordered. Returns once the order actually exists, with its order_number: keep it, it is what cancel_order() and pay_order() need. Paying from the Ozon Card balance settles with the order; pay-on-delivery leaves nothing to pay today.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm_total | Yes | The total the user agreed to, copied from get_checkout().totals — either order_total ("777 ₽") or total ("0 ₽ сегодня"). Refused if Ozon has recalculated since. |
Output Schema
| Name | Required | Description |
|---|---|---|
| link | No | |
| total | No | |
| order_total | No | |
| payment_url | No | |
| order_number | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It discloses that the tool 'SPENDS REAL MONEY', is gated by 'orders_enabled', is not undoable except via cancel_order(), refuses the call if the total mismatches, and returns only when the order actually exists. It also explains payment settlement behavior for Ozon Card and pay-on-delivery. This is exemplary transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but every sentence adds critical operational detail for a high-risk action. The gating warning is front-loaded, and instructions are sequenced logically. Minor redundancy exists ('pass back the figure they agreed to' vs. 'confirm_total' semantics) but overall it is well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a financial transaction tool, the description covers preconditions, required user-facing steps, failure conditions, return value (order_number), and downstream tool dependencies. Even with an output schema present, the description explains what an agent needs to know to call it correctly and safely. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes confirm_total with examples and validation semantics (100% coverage). The description reinforces this by instructing to copy from get_checkout().totals and explaining the refusal on mismatch. It adds value by tying the parameter to the workflow, though the schema is already strong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Submit the order that get_checkout() describes.' It uses a specific verb and resource, and distinguishes itself from related tools like get_checkout (which only describes) and cancel_order/pay_order (which are post-submission steps).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: read get_checkout() immediately before, show the user the total, and pass back the agreed figure. It also mentions the refusal condition if the total no longer matches, and directs the caller to use cancel_order() or pay_order() subsequently. This is clear when-to-use and how-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
product_detailsA
Product card: title, three prices, variants, characteristics, gallery photos.
Money as Ozon prints it: price is «С банками» — what the account actually
pays and the figure to compare lots on — price_regular is «С другими
банками», price_old the struck-through comparison. available says whether
it is on sale at all. cheaper_offers / cheaper_from are Ozon's own count
and lowest price for other offers of this product; find_cheaper() lists them.
Each variant carries its own sku, price and availability — that sku is what
goes into the cart, and for apparel it is the only one that will add.
with_description / with_reviews fetch those too (separate requests each);
get_description() and get_reviews() do the same on their own.
| Name | Required | Description | Default |
|---|---|---|---|
| sku_or_url | Yes | A product SKU ("3077454533") or a full ozon.ru product URL. Variants have their own SKUs. | |
| with_reviews | No | Also fetch the reviews (one extra request). | |
| with_description | No | Also fetch the description text and its images (one extra request). |
Output Schema
| Name | Required | Description |
|---|---|---|
| sku | No | |
| price | No | The payable price — Ozon's «С банками» figure, which is what the account pays. |
| title | No | |
| photos | No | |
| reviews | No | |
| variants | No | |
| available | No | Whether Ozon offers it for sale at all. |
| price_old | No | The struck-through price Ozon compares against. |
| description | No | |
| cheaper_from | No | Ozon's own «от N ₽» for those offers — the lowest it knows about. |
| price_regular | No | Ozon's «С другими банками» price. |
| cheaper_offers | No | How many other-seller offers Ozon counts for this product; find_cheaper() lists them. |
| characteristics | No | |
| description_images | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: it defines the three price meanings, explains available, and reveals the critical variant SKU behavior—that the variant SKU is what goes into the cart and for apparel is the only addable one. This is substantive context beyond what the schema or tool name conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the one-line product card summary, then organized into pricing, availability, cheaper offers, variant behavior, and optional-flag guidance. Every sentence adds operational value; the length is justified by dense, necessary semantics rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter read tool with full schema coverage and an output schema, the description covers the runtime facts an agent needs: price interpretation, variant SKU handling, optional fetches, and sibling alternatives. Auth and rate limits are not needed for this get-details tool's core contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics: variants carry their own sku and 'that sku is what goes into the cart', and with_description/with_reviews are separate requests with standalone alternatives. This goes beyond the schema's brief parameter descriptions, particularly for sku_or_url.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise product-card scope: title, three prices, variants, characteristics, gallery photos. It names sibling tools like get_description(), get_reviews(), and find_cheaper() so an agent can distinguish this tool from related ones without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes the agent to alternatives: get_description() and get_reviews() do the same fetches standalone, and find_cheaper() lists cheaper offers, implying when not to bundle those requests. It does not explicitly contrast product_details with search, but the scope of a full product card is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
purchasesA
Everything ever bought, as product tiles (sku/title/price/url) — the
answer to "have I bought this before" and "buy that thing again".
With query Ozon searches its own purchase history server-side, which is
much cheaper than paging through all of it.
Orders, statuses and totals are not here: that is list_orders().
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Order of the purchase history. Ignored when a query is given (Ozon ranks the search). | newest |
| limit | No | How many entries to return at most. | |
| query | No | Text to search the purchase history for; omit to list all of it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the search behavior (server-side query) and what is excluded (orders, statuses, totals), but does not mention whether the operation is read-only, potential permissions, rate limits, or error behavior. The description gives some useful behavioral context but has clear gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each with a distinct purpose: define the tool, explain query behavior, and name the sibling alternative. There is no fluff or repetition, 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, return values need no explanation. The description covers purpose, usage, behavior, and alternatives. It could add a note on whether the history is personal or requires authentication, but for a simple list tool the current level is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds extra meaning for the query parameter by explaining that Ozon searches server-side and that this is cheaper than paging, which is not in the schema description. No extra context for sort or limit is needed since the schema already documents them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('bought'), resource ('everything ever bought'), and presentation format ('product tiles (sku/title/price/url)'). It also names the use cases ('have I bought this before', 'buy that thing again'), which clearly distinguishes it from siblings like list_orders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says that orders, statuses, and totals are not here and points to list_orders() as the alternative. It also explains when to use the query parameter (server-side search is cheaper than paging), giving clear usage context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_from_selectionA
[GATED by writes_enabled] Take products out of a «Подборка», keeping the rest. Fails if the selection holds none of them, rather than reporting a removal that did not happen.
| Name | Required | Description | Default |
|---|---|---|---|
| skus | Yes | Products to take out; the rest stay. | |
| uuid | Yes | The selection, from list_selections()[].uuid. |
Output Schema
| Name | Required | Description |
|---|---|---|
| link | No | The link Ozon's own «Скопировать ссылку» gives; it carries the owner id and needs it to work. |
| name | No | |
| uuid | Yes | |
| cover | No | |
| items | No | How many products it holds; selection_products() lists them. |
| public | No | |
| status | No | |
| owner_id | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it declares the mutation scope and explicitly describes failure behavior ('Fails if the selection holds none of them, rather than reporting a removal that did not happen'), which prevents false-success assumptions. It does not detail permissions or reversibility, but the writes_enabled gate is surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences; the operation and scope come first, then the critical failure behavior. No filler and no repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with full schema coverage, an output schema, and a clear SKU-source hint, the description covers the essential call context and failure mode. It could name sibling alternatives or clarify whether partial matches also fail, but the core information an agent needs is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so a baseline of 3 applies. The description adds value by tying skus to a presence requirement: removal fails if none of the provided SKUs are currently in the selection, which goes beyond the schema's enumeration of the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation ('Take products out'), the target resource ('a «Подборка»/selection'), and clarifies the partial scope ('keeping the rest'). It is readily distinguishable from siblings such as add_to_selection, set_selection_items, and edit_selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended usage is clear: use this to remove a defined set of SKUs from a selection while preserving the rest. However, it does not explicitly state when to prefer it over alternatives like set_selection_items or edit_selection, nor does it state any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchA
Storefront search → product tiles (sku/title/price/url). Give a text query, a category slug ("produkty-dlya-doma-9200"), or both. limit is depth, not page size: pages are walked until there are that many results, so raise it when looking for the cheapest — a page holds a few dozen and the cheapest lot is often further down. sort="cheap" ranks on the payable price (Ozon's own order goes by a different figure). Ozon's text search is literal about words: a lot whose own title omits the brand does not come back for a query that includes it, so search the model ("Basilisk V3 X HyperSpeed") rather than brand-plus-model, and confirm what a lot actually is with product_details() — a tile's title is the seller's wording and may name no model at all. A tile is not a card: for variants, characteristics, photos and stock call product_details() with its sku. filters comes from get_search_filters() — {key: option_value} for a checkbox or category facet, {key: "min;max"} for a range, e.g. {"currency_price": "200;600"}. Narrowing by price is a filter, not a sort.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number. | |
| sort | No | How Ozon should rank the results. | popular |
| limit | No | How many entries to return at most. | |
| query | No | Search text. Give this, a category, or both. | |
| filters | No | Facets from get_search_filters(): {key: option_value} for a checkbox or category, {key: "min;max"} for a range, e.g. {"currency_price": "200;600"}. | |
| category | No | A category slug from a category URL, e.g. "produkty-dlya-doma-9200". |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses critical behaviors: limit is depth (pages walked), sort='cheap' ranks on payable price rather than Ozon's order, text search is literal about words (brand mismatch), and tile titles are seller wording that may omit the model. These are non-obvious behaviors the agent must know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence contributes value. It front-loads the core purpose and then adds nuances in a logical order. While it is longer than typical, it is efficient because each clause covers a distinct behavioral point with no fluff. A 4 is fair because it could be tightened slightly without losing substance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex with filters, sort semantics, and interaction with sibling tools. The description covers all necessary operational details: how to combine query and category, how to use filters, how limit behaves, and when to defer to product_details(). An output schema exists, so return format is defined. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema coverage is 100%, the description adds substantial meaning beyond the schema: it explains the limit semantics (depth not page size), interprets sort values, details the filters format with a concrete example, and clarifies category slug usage. This is far above the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Storefront search → product tiles (sku/title/price/url)'. It clearly distinguishes the tool from siblings by noting that a tile is not a card and that product_details() is needed for deeper data. The scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use and when-not-to-use guidance. It directs agents to product_details() for variants/characteristics/photos/stock and to get_search_filters() for filters. It also explains that price narrowing is a filter, not a sort, and recommends searching the model rather than brand+model, with a concrete example. This fully routes the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_cart_itemsA
[GATED by writes_enabled] Choose which cart items make up the order. This is the step that composes a checkout: get_checkout() reports nothing orderable until something is ticked, and it orders exactly what is ticked — so "buy these two" is mode="only" with those two skus, whatever else the cart holds. Returns the cart as it is afterwards, so the ticks can be checked before ordering.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "only" ticks exactly these and unticks everything else — the usual way to compose an order; "add"/"remove" adjust the current ticks; "all"/"none" ignore skus. | only |
| skus | No | Cart item ids (the `id` field of get_cart().items). Required for "only", "add", "remove". |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | No | The items actually read. |
| groups | No | |
| item_count | No | How many were read. |
| total_items | No | How many Ozon says the cart holds; a difference means the read came up short. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It explicitly notes the writes_enabled gate, states that the tool modifies which items are ticked, and explains the return value (the cart after ticking). It also clarifies the effect on get_checkout. This is a solid disclosure, though it does not mention reversibility or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact block of three sentences, each earning its place: the gate, the purpose/example, and the return behavior. It is slightly long but not wasteful, and front-loads the most critical information (the gate and the ordering dependency).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential context: the ordering flow, the dependency on get_checkout, and the return value. Given that an output schema exists (not shown here) and the input schema is fully descriptive, the description is complete enough for an agent to use the tool correctly. It does not over-explain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes both parameters in detail (100% coverage), but the description adds a practical example ('buy these two' -> mode='only' with two skus) that clarifies the semantics beyond the schema. This adds value without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Choose') and resource ('cart items') and explains the tool's role as the step that composes a checkout. It clearly distinguishes this from read-only tools like get_cart and quantity-changing tools like set_cart_quantity, and ties it to the checkout flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when this tool is used ('the step that composes a checkout') and gives a concrete example of mode='only'. It implies that get_checkout depends on ticks, so this should be called before ordering. It does not explicitly name alternatives or state when not to use it, 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.
selection_productsA
The products a «Подборка» holds: sku, title, price and a card link. Neither list_selections() nor get_selection() carries them — they state a count only — so this is the read to make before changing what is in there.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | The selection, from list_selections()[].uuid. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It clearly indicates this is a read operation ('the read to make before changing'), implying no side effects. It also discloses what data is returned (sku, title, price, link) and contrasts with sibling reads. It doesn't explicitly state 'read-only', but the context strongly implies it, so a small deduction is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero redundancy. The first sentence states the purpose and contents; the second provides the usage context and differentiation from siblings. Information is front-loaded and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with one parameter and an output schema (which carries return details), the description fully covers why and when to use it, what it returns, and how it differs from related tools. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the only parameter, uuid, is already documented in the schema as 'The selection, from list_selections()[].uuid.' The tool description adds no additional parameter detail beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (holds) and resource (products of a selection), enumerates the fields returned (sku, title, price, card link), and explicitly distinguishes it from sibling tools list_selections() and get_selection() which only provide a count. An agent can immediately tell this is the detail read for a selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool: before changing the contents of a selection. It names the alternatives (list_selections, get_selection) and explains why they are insufficient (only a count), leaving no ambiguity about the tool's role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_statusA
Start here. Reports whether the stored session still acts as the account and what this server is allowed to do: writes_enabled covers cart, favorites and lists, orders_enabled covers placing an order. Both are the operator's settings and no tool can change them — plan around them. When signed_in is false, every other tool raises instead of answering, because a signed-out session otherwise looks exactly like an empty account: no orders, no balances, no explanation. Recovery is start_login() + submit_login_code(), and backup_available=true means it will most likely recover by itself on the next call.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| detail | No | |
| user_id | No | |
| signed_in | No | |
| orders_enabled | No | |
| writes_enabled | No | |
| backup_available | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses critical behaviors: signed-out sessions cause other tools to raise (rather than silently return empty results), and backup_available=true may cause automatic recovery on the next call. It also notes that operator settings are immutable by any tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the most important instruction ('Start here'). Each sentence adds distinct value: purpose, flag semantics, error behavior, and recovery steps. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (not shown but signaled) and zero input parameters, the description covers all necessary context: what the flags mean, what happens when signed out, and how to recover. It fully equips the agent to interpret results and take appropriate next actions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description correctly omits parameter details. The baseline for 0 params is 4, and nothing further is needed. The description instead focuses on output semantics, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool reports session status and server permissions, and it explains the two key flags (writes_enabled, orders_enabled) and their scope. It also positions itself as the entry point ('Start here'), which distinguishes it from all sibling tools that operate on specific resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Start here', establishing it as the first tool to call. It also provides clear conditional guidance: when signed_in is false, other tools will raise, and recovery is start_login() + submit_login_code(). This gives the agent a decision path and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_cart_quantityA
[GATED by writes_enabled] Set how many of a product are in the cart.
Adding, changing and removing are all this one call: quantity=0 removes.
Ozon reports nothing about the outcome, so the cart is read back: ok=false
with the reason in detail means the call was accepted and changed nothing
— an out-of-stock product, or an apparel base SKU with no size chosen (use
the variant sku from product_details()).
Being in the cart is not being in the order: tick it with
select_cart_items() before checkout.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | Yes | A product SKU ("3077454533"). For apparel use the variant SKU, not the base one. | |
| quantity | Yes | Desired quantity in the cart; 0 removes the item. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| detail | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully carries the behavioral burden. It discloses that Ozon reports no outcome, so the cart is read back, and explains the meaning of 'ok=false' with 'detail'. It also discloses the gating by writes_enabled and the edge case of out-of-stock or base SKU without size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient; every sentence serves a purpose. It front-loads the core purpose, then explains the unified behavior, response semantics, and workflow caveats without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description doesn't need to explain return structure, but it goes further to explain the ok=false semantics and the gating condition. It also covers the apparel edge case and the distinction from order selection, making it complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with clear descriptions for both sku and quantity. The description reinforces the quantity=0 removal behavior but does not add substantial parameter-specific meaning beyond the schema. The variant SKU note is already in the schema, so the description adds no extra parameter insight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Set how many of a product are in the cart') and clarifies that adding, changing, and removing are all handled by this single call. It distinguishes itself from siblings like get_cart (view) and select_cart_items (select for order) by defining its unique role in the cart workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use it (to modify cart quantity), and clarifies the relationship with select_cart_items by noting that being in the cart is not being in the order and that select_cart_items should be called before checkout. It also guides on using the variant SKU for apparel, pointing to product_details() as the source.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_favoriteA
[GATED by writes_enabled] Add a product to favorites or remove it.
Ozon reports no outcome for this, so detail names the read that confirms
it — list_favorites(). Favorites are what check_favorite_price_drops()
watches.
| Name | Required | Description | Default |
|---|---|---|---|
| add | No | True adds to favorites, False removes. | |
| sku | Yes | A product SKU ("3077454533"). For apparel use the variant SKU, not the base one. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| detail | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool is gated by 'writes_enabled', that Ozon reports no outcome, and that confirmation requires a separate read call. This goes beyond basic functionality and explains real-world behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the gating condition. Every sentence adds value: the action, the lack of direct outcome, the confirmation read, and the linkage to price-drop watching. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter write tool with an output schema, the description fully equips the agent to call and verify the operation. It covers what happens, how to confirm, and the relationship to other favorites-related tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% description coverage for both parameters ('add' and 'sku'), including examples and usage notes. The tool description adds no additional parameter-level detail, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Add'/'remove') and resource ('favorites'), clearly distinguishing the write action from read-only siblings like list_favorites. It also references the related check_favorite_price_drops, giving context on the domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly defines when to use the tool (to add or remove favorites) and provides a confirmation workflow via list_favorites. It does not explicitly state when not to use alternatives, but the gating and lack of direct outcome make the usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_list_membershipA
[GATED by writes_enabled] Put a product into a collection or wishlist,
or take it out. Ozon reports no outcome for this, so detail names the read
that confirms it — get_lists(sku).
| Name | Required | Description | Default |
|---|---|---|---|
| add | No | True puts the product in the list, False takes it out. | |
| sku | Yes | A product SKU ("3077454533"). For apparel use the variant SKU, not the base one. | |
| list_id | Yes | Target list, from get_lists()[].list_id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| detail | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a critical behavioral trait: Ozon reports no outcome for this operation, so the agent must confirm via get_lists(sku). This goes beyond annotations (none provided) and adds actionable context about side effects and confirmation workflow. The writes_enabled gating is also mentioned, though its exact meaning is not elaborated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver the core purpose, the permission gate, and the confirmation read. No filler, front-loaded with the gating context, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, the description covers purpose, permission gating, no-outcome behavior, and confirmation path. An output schema exists (though its content isn't shown here), which reduces the need to explain return values. Missing are explicit usage conditions and edge-case callouts, but the essential details are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter descriptions are detailed: add explains boolean semantics, sku notes variant guidance, list_id references get_lists()[].list_id. The description itself adds no extra parameter information 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: put a product into a collection or wishlist, or take it out. It specifies the resource (list membership) and direction (add/remove). While it doesn't explicitly differentiate from sibling tools like set_favorite, the operation is distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The '[GATED by writes_enabled]' hint implies a permission prerequisite, but there is no mention of preconditions, typical use cases, or when other tools (like set_favorite) should be preferred. The agent must infer usage from the schema and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_selection_itemsA
[GATED by writes_enabled] Set which products a selection holds, as the
whole list. For "add this" / "take that out" use add_to_selection() and
remove_from_selection(), which read the current products first; this one
replaces them, and an empty list empties the selection.
Products must be in favorites first — Ozon draws only from there, and a
product that is not is dropped silently, so check the items count that
comes back.
| Name | Required | Description | Default |
|---|---|---|---|
| skus | Yes | The products the selection should hold, in full — not an addition. | |
| uuid | Yes | The selection, from list_selections()[].uuid. |
Output Schema
| Name | Required | Description |
|---|---|---|
| link | No | The link Ozon's own «Скопировать ссылку» gives; it carries the owner id and needs it to work. |
| name | No | |
| uuid | Yes | |
| cover | No | |
| items | No | How many products it holds; selection_products() lists them. |
| public | No | |
| status | No | |
| owner_id | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does an excellent job. It discloses the gating by writes_enabled, the replace semantics, that an empty list empties the selection, that products not in favorites are silently dropped, and advises checking the returned items count.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, starting with the gate and core behavior. Every sentence earns its place, including the caveat about favorites and the silent drop, without any redundant fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool modifies a resource with side effects, so prerequisites, behavioral caveats, and validation guidance are all present. An output schema exists, so return values are not required. The description covers everything needed to call the tool correctly and confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already clearly documents both parameters: skus are the full list, not an addition, and uuid comes from list_selections()[].uuid. The description reinforces the replacement behavior but does not add significant new parameter-level meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb (Set), resource (which products a selection holds), and scope (as the whole list). It distinguishes itself from sibling tools add_to_selection() and remove_from_selection() by explicitly naming them as alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool vs alternatives: for 'add this'/'take that out' use add_to_selection()/remove_from_selection(), while this one replaces the whole list. It also gives the prerequisite that products must be in favorites first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_selection_publicA
[GATED by writes_enabled] Publish a selection to the account owner's public profile, or unpublish it. Outward-facing — confirm with them before publishing. Publication is reviewed by Ozon, so the status comes back as "На модерации" rather than public.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | The selection, from list_selections()[].uuid. | |
| public | Yes | True publishes to the account's public profile, False takes it back to link-only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| link | No | The link Ozon's own «Скопировать ссылку» gives; it carries the owner id and needs it to work. |
| name | No | |
| uuid | Yes | |
| cover | No | |
| items | No | How many products it holds; selection_products() lists them. |
| public | No | |
| status | No | |
| owner_id | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and does so exceptionally well: it flags the write gating (writes_enabled), discloses the outward-facing nature, requires confirmation, and — critically — explains that publication is reviewed by Ozon and returns status 'На модерации' rather than public, which prevents an agent from misinterpreting a non-public response as failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, each earning its place: the core action is front-loaded in the first sentence, the confirmation requirement in the second, and the essential moderation-outcome caveat in the third. Zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a mutation with outward-facing consequences and an output schema present, so return values need no explanation. The description covers gating, confirmation duty, and the moderation delay; the schema covers parameter provenance. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters, including that uuid comes from list_selections()[].uuid and that public=False returns the selection to link-only. The description adds minimal parameter-specific detail beyond the schema's existing documentation, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (publish/unpublish) plus the resource (a selection on the account owner's public profile), with an explicit distinction between the two states. This clearly separates it from content-management siblings like create_selection, edit_selection, and set_selection_items, which operate on selection contents rather than its outward visibility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys clear operational context: it is outward-facing, requires confirmation with the user before publishing, and is gated by writes_enabled. This implies when it should and should not be invoked. It stops short of naming explicit sibling alternatives or a when-not-to-use statement, but the context is unambiguous given the unique purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_loginA
Ask Ozon to send a one-time login code to login (account email or
phone). Use this when session_status() reports signed_in=false and the kept
profile copy did not recover it.
Ozon delivers the code out of band (email, SMS or a flash call), so ask the
user for it and pass it to submit_login_code().
| Name | Required | Description | Default |
|---|---|---|---|
| login | Yes | The account's email or phone, as registered with Ozon. |
Output Schema
| Name | Required | Description |
|---|---|---|
| login | No | |
| stage | Yes | |
| detail | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that the code is delivered out of band (email, SMS, or flash call), implying the agent must await user input. It also implies the operation is non-destructive by nature of being a login initiation. However, it does not mention potential errors, rate limits, or idempotency, which would strengthen transparency further.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the purpose, then the usage condition and next step. No filler; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is part of a login flow with session_status and submit_login_code. The description covers when to use, what it does, and what to do next. An output schema exists to describe the return value, so nothing critical is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the parameter fully: 'The account's email or phone, as registered with Ozon.' The description repeats this ('account email or phone') without adding new syntax or format details, so it adds no value beyond the schema. With 100% coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Ask Ozon to send a one-time login code to `login`'. It clearly distinguishes this from sibling tools like submit_login_code (which submits the code) and session_status (which checks status), so an agent can tell them apart without reading schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly gives the condition for use: 'Use this when session_status() reports signed_in=false and the kept profile copy did not recover it.' It also instructs the agent to ask the user for the code and pass it to submit_login_code(), providing clear routing to the next step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_login_codeA
Finish the login with the code Ozon sent, and keep a copy of the restored profile so the next sign-out costs nobody a code. Codes expire and are single-use: if it is refused, call start_login() again.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The one-time code Ozon sent; digits only, as received. |
Output Schema
| Name | Required | Description |
|---|---|---|
| detail | No | |
| user_id | No | |
| signed_in | No | |
| orders_enabled | No | |
| writes_enabled | No | |
| backup_available | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden. It discloses that codes are single-use and expire, and that a refusal means the login flow must be restarted. It also instructs the agent to 'keep a copy of the restored profile' – a behavioral directive beyond the tool's own action. It does not explicitly state that completing login mutates session state, but the output schema likely covers the result. This is solid disclosure for a simple auth tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The main action is front-loaded, followed by a critical behavioral note and a fallback instruction. Every sentence contributes essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and an output schema. The description covers the action, the code's constraints, and the fallback. It doesn't explicitly state the prerequisite of having called start_login, but this is strongly implied by 'finish the login.' The instruction to keep a profile copy is an extra nuance that helps the agent. Given the output schema exists, the description is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the code as 'The one-time code Ozon sent; digits only, as received' – 100% coverage. The description adds the expiry and single-use constraints, which are not in the schema, enhancing the agent's understanding of the parameter's lifecycle. This adds meaning beyond the schema, so it exceeds the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Finish the login with the code Ozon sent' – a specific verb (finish) and resource (login) that clearly states the tool's role. It distinguishes itself from start_login by describing the completion step, and the sibling list confirms start_login exists. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names the alternative: 'if it is refused, call start_login() again.' This gives a clear condition and directs the agent to the correct fallback. It also implies this tool should be used after start_login, and the warning about code expiry and single-use adds context on when to retry.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
42 tool updates
v1.2.1- First observed
add_to_selection - First observed
cancel_order - First observed
check_favorite_price_drops - First observed
configure_checkout - First observed
create_list - First observed
create_selection - First observed
delete_list - First observed
delete_selection - First observed
delivery_estimate - First observed
edit_selection - First observed
find_cheaper - First observed
get_cart - First observed
get_checkout - First observed
get_description - First observed
get_finances - First observed
get_lists - First observed
get_points - First observed
get_reviews - First observed
get_search_filters - First observed
get_selection - First observed
list_cancel_reasons - First observed
list_favorites - First observed
list_orders - First observed
list_returns - First observed
list_selections - First observed
order_products - First observed
pay_order - First observed
place_order - First observed
product_details - First observed
purchases - First observed
remove_from_selection - First observed
search - First observed
select_cart_items - First observed
selection_products - First observed
session_status - First observed
set_cart_quantity - First observed
set_favorite - First observed
set_list_membership - First observed
set_selection_items - First observed
set_selection_public - First observed
start_login - First observed
submit_login_code
TDQS
Each tool targets a distinct resource or action, and the descriptions carefully separate cart operations, search, checkout, orders, favorites, wishlists, selections, and auth. A few near-boundary cases like get_lists vs list_selections and product_details vs get_reviews/get_description are only disambiguated by reading the descriptions rather than the names.
Most tools follow a get_/list_/set_/create_/delete_ verb-object pattern, but the set mixes standalone nouns like purchases, session_status, and selection_products with noun phrases like product_details and delivery_estimate. The inconsistency is not chaotic, but it is noticeable across 42 tools.
42 tools is well beyond the 25+ threshold and makes the server feel heavy even for a broad e-commerce account domain. The surface is highly granular, with 10 selection tools and separate get_reviews/get_description calls that could plausibly be consolidated.
The core shopping lifecycle is well covered: search, product details, cart, checkout, payment, ordering, cancellation, favorites, wishlists, selections, purchases, and returns listing. The main gap is that returns can only be listed, not opened or managed, and there is no address management.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Agentic commerce gateway: discovery, search, checkout across Shopify/Woo/Odoo/PrestaShop.
Web search, page reading and structured extraction for AI agents, with strong RU coverage
AI-agent product catalog: search, lookup & purchase routing over verified merchant data.
Hosted MCP for e-commerce: live product catalog, stock, and pricing for AI agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceIntegrates with Yandex Market Partner API, providing search and execute tools for managing orders, returns, shipments, offers, prices, and other seller operations via natural language.181MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to search products, manage cart, place orders, and track shipments on Amazon via browser automation.271MIT
- AlicenseNot gradedqualityCmaintenanceConnects AI assistants to Wildberries and Ozon seller accounts for real-time access to sales, stocks, prices, finances, and reviews through official APIs.MIT
- AlicenseAqualityCmaintenanceEnables AI agents to read and work with Wildberries, Ozon, and Yandex Market seller accounts through typed tools, multi-account support, unified data schemas, rate limiting, audit, and encrypted credential storage.17101MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Alexander-Zhukov/ozon-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server