Skip to main content
Glama

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

list_orders

Orders (active / archive / all), each with its order_number, status, state, pickup point, slot, what is owed on collection and per-item payment state; optionally within an ISO date range

order_products

Items of one order: sku, title, price paid, variant, seller, and each item's parcel status

purchases

Everything ever ordered, as product tiles; with a query, Ozon's own search over the whole history

bought_items

What was actually received: the purchase list matched against the orders, with the coverage of the scan

list_returns

Returns: number, date, status, amount, the products going back

Catalog

Tool

search

Storefront search by text and/or category slug, with sort, facet filters and a depth limit

get_search_filters

Facets available for a query, and the values search takes

product_details

Card: price, variants (each with its own sku), characteristics, photos; description and reviews on request

get_reviews

Rating, review count, the breakdown per star, and reviews to any depth (sort="worst" for the complaints)

get_description

Description text plus the images embedded in it

delivery_estimate

When a product would arrive, to which address, from which warehouse

find_cheaper

The cheapest lots of the same thing: Ozon's own other-seller offers plus a price-sorted search

Cart

Tool

get_cart

The whole cart: items, quantities, ticks, group headings, and the size Ozon declares

set_cart_quantity

Set the quantity; 0 removes

select_cart_items

Tick what makes up the order — only / add / remove / all / none

Favorites and wishlists

Tool

list_favorites

Favorites as product tiles

set_favorite

Add or remove

get_lists

Wishlists with their ids and sizes; with a sku, whether each holds it

create_list / delete_list

Make a wishlist, or delete one

set_list_membership

Put a product in a wishlist or take it out

check_favorite_price_drops

Price changes since the previous call

«Подборки»

Tool

list_selections

Selections with size, status, ids and the share link

get_selection

One selection in full, including description and visibility

selection_products

What it holds: sku, title, price, card link

create_selection

Create one around a product; private by default

add_to_selection

Add products, keeping the ones already in it

remove_from_selection

Take products out, keeping the rest

set_selection_items

Replace the whole list of products

edit_selection

Rename it, replace its description

set_selection_public

Publish to the public profile, or unpublish

delete_selection

Delete it; the products stay

Checkout

Tool

get_checkout

The order being formed: payment methods, pay-on-delivery, destinations, pickup points, shipments, points, totals

configure_checkout

Set payment, points, pay-on-delivery and pickup point in one call

place_order

Spends money. Submit, waiting until the order exists

pay_order

Charge an order left unpaid, and report what is left to do

list_cancel_reasons

Reasons Ozon accepts for cancelling

cancel_order

Cancel an order, or named items of it, returning them to the cart

Session and money

Tool

session_status

Whether the session acts as the account, and which gates are open

start_login / submit_login_code

Restore a dead session with a one-time code

get_finances

Ozon Card balance and total points

get_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

OZON_PROFILE_DIR

/data/profile

Persistent Chromium profile holding the session

OZON_PROFILE_BACKUP

/data/profile.backup

Copy of a known-good profile, restored on a sign-out

OZON_STATE_PATH

/data/state.json

Legacy cookie snapshot, imported once to seed a new profile

OZON_IMPERSONATE

chrome124

curl_cffi TLS-impersonation profile

OZON_ENABLE_WRITES

0

Allow cart / favorites / list / cancellation changes

OZON_ENABLE_ORDERS

0

Allow place_order — spends money

OZON_MONITOR_STORE

/data/price_history.json

Favorites price-history file

OZON_REQUEST_TIMEOUT

30

Seconds for one HTTP call

OZON_REQUEST_ATTEMPTS

3

Attempts before a call is reported as failed

OZON_RETRY_BACKOFF_SECONDS

1

Base wait between attempts, doubled and jittered

OZON_RETRY_CAP_SECONDS

20

Longest wait, including a Retry-After Ozon asks for

OZON_BROWSER_TIMEOUT

60

Seconds for a browser navigation or a login step

OZON_IDLE_SECONDS

600

Close the idle browser; the HTTP session stays

OZON_TRANSPORT

stdio

stdio (client spawns the process), http (streamable HTTP at /mcp) or sse (deprecated, /sse)

OZON_HOST / OZON_PORT

0.0.0.0 / 8084

Bind for the HTTP transports; the same port serves /metrics

OZON_ALLOWED_HOSTS

[]

Host headers sse accepts; empty means any. Naming hosts turns on MCP's exact-match check

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 Xvfb

Under 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_checkout switches 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_order cannot 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 gate

ty 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

MIT

Available Tools

42 tools
add_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
skusYesProducts to add; the existing ones stay.
uuidYesThe selection, from list_selections()[].uuid.

Output Schema

ParametersJSON Schema
NameRequiredDescription
linkNoThe link Ozon's own «Скопировать ссылку» gives; it carries the owner id and needs it to work.
nameNo
uuidYes
coverNo
itemsNoHow many products it holds; selection_products() lists them.
publicNo
statusNo
owner_idNo
descriptionNo

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
skusNoCancel only these lines (skus from order_products()) and leave the rest of the order standing. Omit to cancel the whole order.
orderYesAn 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.
commentNoFree-text explanation. Required by the catch-all reason (needs_comment=true).
reason_idNoA reason_id from list_cancel_reasons(); "504" (изменить заказ и оформить заново) is the neutral default and needs no comment.504
return_to_cartNoPut the cancelled items back in the cart, so the order can be recomposed.

Output Schema

ParametersJSON Schema
NameRequiredDescription
skusNo
detailNo
cancelledNo
reason_idNo
order_numberYes
returned_to_cartNo

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

The description gives clear context for when to use the tool (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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
addedNo
dropsNo
risesNo
removedNo

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pointsNoHow many Ozon points to spend; 0 spends none. Offered amounts are in points[].
paymentNoA payment method: a word ("СБП", "Ozon Карта", "новой картой"), a masked card ("**5898") or a payment_type id. Must be one get_checkout() offers.
split_keyNoWhich shipment to retarget, from deliveries[].split_keys. Only needed when the order has more than one destination — otherwise the choice is unambiguous.
pickup_pointNoWhere 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_receiptNoTurn «Оплатить после получения» on or off. Only when pay_after_receipt.available.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pointsNo
reasonNo
totalsNo
availableNo
shipmentsNo
deliveriesNo
installmentNo
payment_optionsNo
pay_after_receiptNo
place_order_actionNo

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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

For a mutation tool with 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds cross-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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the new wishlist, as the user would read it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNo
nameNo
itemsNo
savesNo
list_idNo
containsNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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

Schema coverage is 100%, and the schema already 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
skuYesA product SKU ("3077454533"). For apparel use the variant SKU, not the base one.
nameYesName of the selection, as a person reads it.
publicNoTrue publishes it to the account's public profile (goes through moderation). False keeps it visible only to whoever has the link.
descriptionNoOptional text shown under the name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
linkNoThe link Ozon's own «Скопировать ссылку» gives; it carries the owner id and needs it to work.
nameNo
uuidYes
coverNo
itemsNoHow many products it holds; selection_products() lists them.
publicNo
statusNo
owner_idNo
descriptionNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYesThe list to delete, from get_lists()[].list_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
detailNo

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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

For a simple one-parameter 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYesThe selection to delete, from list_selections()[].uuid.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
detailNo

TDQS

A4.2/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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().

ParametersJSON Schema
NameRequiredDescriptionDefault
sku_or_urlYesA product SKU ("3077454533") or a full ozon.ru product URL. Variants have their own SKUs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
skuYes
sourceNo
addressNo
deliveryNo

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNew name.
uuidYesThe selection, from list_selections()[].uuid.
descriptionNoNew description. Omit to keep the current one — Ozon rewrites both together.

Output Schema

ParametersJSON Schema
NameRequiredDescription
linkNoThe link Ozon's own «Скопировать ссылку» gives; it carries the owner id and needs it to work.
nameNo
uuidYes
coverNo
itemsNoHow many products it holds; selection_products() lists them.
publicNo
statusNo
owner_idNo
descriptionNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's simplicity, the 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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool's 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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many entries to return at most.
sku_or_urlYesA product SKU ("3077454533") or a full ozon.ru product URL. Variants have their own SKUs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
baseYes
cheaperNo

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds 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.

Purpose5/5

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

The description states a specific verb and resource: 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.

Usage Guidelines4/5

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

The description gives clear context for when 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 ("Доступны для заказа", «Бронирование товаров»).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsNoThe items actually read.
groupsNo
item_countNoHow many were read.
total_itemsNoHow many Ozon says the cart holds; a difference means the read came up short.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
shipment_itemsNoForce 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

ParametersJSON Schema
NameRequiredDescription
pointsNo
reasonNo
totalsNo
availableNo
shipmentsNo
deliveriesNo
installmentNo
payment_optionsNo
pay_after_receiptNo
place_order_actionNo

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sku_or_urlYesA product SKU ("3077454533") or a full ozon.ru product URL. Variants have their own SKUs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
skuYes
imagesNo
descriptionNo

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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().

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
pointsNo
ozon_card_balanceNo

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
skuNoA product SKU: the same lists, each with `contains` saying whether it holds that product.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
burningNo
by_typeNo
seller_bonusesNo

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sku_or_urlYesA product SKU ("3077454533") or a full ozon.ru product URL. Variants have their own SKUs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
scoreNo
photosNo
reviewsNo

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesThe same search text whose facets you want.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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

Given the tool's simplicity (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.

Parameters4/5

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.

Purpose5/5

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

The description clearly states the tool returns 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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYesThe selection, from list_selections()[].uuid.

Output Schema

ParametersJSON Schema
NameRequiredDescription
linkNoThe link Ozon's own «Скопировать ссылку» gives; it carries the owner id and needs it to work.
nameNo
uuidYes
coverNo
itemsNoHow many products it holds; selection_products() lists them.
publicNo
statusNo
owner_idNo
descriptionNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
orderYesAn 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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many entries to return at most.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's simplicity, the 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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().

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many entries to return at most.
scopeNoWhich 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_toNo
date_fromNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many entries to return at most.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
orderYesAn 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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100% and the schema already 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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
orderYesAn 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

ParametersJSON Schema
NameRequiredDescription
detailNo
next_stepNo
shortfallNo
amount_dueNo
payment_urlNo
order_numberYes
needs_bank_passcodeNo

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema coverage is 100%, and the schema description already 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirm_totalYesThe 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

ParametersJSON Schema
NameRequiredDescription
linkNo
totalNo
order_totalNo
payment_urlNo
order_numberNo

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sku_or_urlYesA product SKU ("3077454533") or a full ozon.ru product URL. Variants have their own SKUs.
with_reviewsNoAlso fetch the reviews (one extra request).
with_descriptionNoAlso fetch the description text and its images (one extra request).

Output Schema

ParametersJSON Schema
NameRequiredDescription
skuNo
priceNoThe payable price — Ozon's «С банками» figure, which is what the account pays.
titleNo
photosNo
reviewsNo
variantsNo
availableNoWhether Ozon offers it for sale at all.
price_oldNoThe struck-through price Ozon compares against.
descriptionNo
cheaper_fromNoOzon's own «от N ₽» for those offers — the lowest it knows about.
price_regularNoOzon's «С другими банками» price.
cheaper_offersNoHow many other-seller offers Ozon counts for this product; find_cheaper() lists them.
characteristicsNo
description_imagesNo

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds 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.

Purpose5/5

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.

Usage Guidelines4/5

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().

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoOrder of the purchase history. Ignored when a query is given (Ozon ranks the search).newest
limitNoHow many entries to return at most.
queryNoText to search the purchase history for; omit to list all of it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. 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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
skusYesProducts to take out; the rest stay.
uuidYesThe selection, from list_selections()[].uuid.

Output Schema

ParametersJSON Schema
NameRequiredDescription
linkNoThe link Ozon's own «Скопировать ссылку» gives; it carries the owner id and needs it to work.
nameNo
uuidYes
coverNo
itemsNoHow many products it holds; selection_products() lists them.
publicNo
statusNo
owner_idNo
descriptionNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a two-parameter mutation 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo"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
skusNoCart item ids (the `id` field of get_cart().items). Required for "only", "add", "remove".

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsNoThe items actually read.
groupsNo
item_countNoHow many were read.
total_itemsNoHow many Ozon says the cart holds; a difference means the read came up short.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYesThe selection, from list_selections()[].uuid.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
detailNo
user_idNo
signed_inNo
orders_enabledNo
writes_enabledNo
backup_availableNo

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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

The tool has zero parameters, so the description 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.

Purpose5/5

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

The description clearly states that the tool 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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
skuYesA product SKU ("3077454533"). For apparel use the variant SKU, not the base one.
quantityYesDesired quantity in the cart; 0 removes the item.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
detailNo

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
addNoTrue adds to favorites, False removes.
skuYesA product SKU ("3077454533"). For apparel use the variant SKU, not the base one.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
detailNo

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
addNoTrue puts the product in the list, False takes it out.
skuYesA product SKU ("3077454533"). For apparel use the variant SKU, not the base one.
list_idYesTarget list, from get_lists()[].list_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
detailNo

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, and the parameter descriptions are 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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
skusYesThe products the selection should hold, in full — not an addition.
uuidYesThe selection, from list_selections()[].uuid.

Output Schema

ParametersJSON Schema
NameRequiredDescription
linkNoThe link Ozon's own «Скопировать ссылку» gives; it carries the owner id and needs it to work.
nameNo
uuidYes
coverNo
itemsNoHow many products it holds; selection_products() lists them.
publicNo
statusNo
owner_idNo
descriptionNo

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already 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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYesThe selection, from list_selections()[].uuid.
publicYesTrue publishes to the account's public profile, False takes it back to link-only.

Output Schema

ParametersJSON Schema
NameRequiredDescription
linkNoThe link Ozon's own «Скопировать ссылку» gives; it carries the owner id and needs it to work.
nameNo
uuidYes
coverNo
itemsNoHow many products it holds; selection_products() lists them.
publicNo
statusNo
owner_idNo
descriptionNo

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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

Schema coverage is 100%, so the schema already documents 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.

Purpose5/5

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.

Usage Guidelines4/5

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().

ParametersJSON Schema
NameRequiredDescriptionDefault
loginYesThe account's email or phone, as registered with Ozon.

Output Schema

ParametersJSON Schema
NameRequiredDescription
loginNo
stageYes
detailNo

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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

The description states a specific verb and resource: '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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe one-time code Ozon sent; digits only, as received.

Output Schema

ParametersJSON Schema
NameRequiredDescription
detailNo
user_idNo
signed_inNo
orders_enabledNo
writes_enabledNo
backup_availableNo

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 42 tool updatesv1.2.1
    • First observedadd_to_selection
    • First observedcancel_order
    • First observedcheck_favorite_price_drops
    • First observedconfigure_checkout
    • First observedcreate_list
    • First observedcreate_selection
    • First observeddelete_list
    • First observeddelete_selection
    • First observeddelivery_estimate
    • First observededit_selection
    • First observedfind_cheaper
    • First observedget_cart
    • First observedget_checkout
    • First observedget_description
    • First observedget_finances
    • First observedget_lists
    • First observedget_points
    • First observedget_reviews
    • First observedget_search_filters
    • First observedget_selection
    • First observedlist_cancel_reasons
    • First observedlist_favorites
    • First observedlist_orders
    • First observedlist_returns
    • First observedlist_selections
    • First observedorder_products
    • First observedpay_order
    • First observedplace_order
    • First observedproduct_details
    • First observedpurchases
    • First observedremove_from_selection
    • First observedsearch
    • First observedselect_cart_items
    • First observedselection_products
    • First observedsession_status
    • First observedset_cart_quantity
    • First observedset_favorite
    • First observedset_list_membership
    • First observedset_selection_items
    • First observedset_selection_public
    • First observedstart_login
    • First observedsubmit_login_code

TDQS

A3.6/5.0
Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count2/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Connects AI assistants to Wildberries and Ozon seller accounts for real-time access to sales, stocks, prices, finances, and reviews through official APIs.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    17
    101
    MIT

Latest Blog Posts

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