marketplace-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@marketplace-mcpwhat's running low across all my marketplaces?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
marketplace-mcp
An MCP server that lets AI agents work with Wildberries / Ozon / Yandex Market seller accounts: typed read tools, multi-account support, data normalization, rate limiting, auditing and encrypted credentials. Not a generic proxy — tools are namespaced per marketplace (wb_*, ozon_*, ym_*), each checks connection permissions and returns one normalized shape.
Status: v0.3 — READ surface across all three marketplaces. Core, the WB / Ozon / Yandex Market adapters, 17 tools. Not implemented yet: WRITE with preview/confirmation, history collectors, advertising and finance. See the roadmap.
The point of this project
One question, one response shape, regardless of the platform. The three marketplaces model products, stocks and orders incompatibly: on WB a stock row is "a size in a warehouse", on Ozon it is "a product with an array of fbo/fbs types", on Yandex Market it is "warehouse → product → stock types (AVAILABLE/FREEZE/DEFECT/…)". This server reduces that to a single schema, so an agent can ask "what is running low?" and get one answer covering three accounts:
unified stock list: 9 rows from 3 marketplaces
low stock: wildberries/ZR-002=7, ozon/ZR-002=3
ym dual-path stocks ok: 1 FBS (account) + 2 FBO (shop)That is not an illustration — it is output from npm test, which runs all three adapters through the same zod schemas.
The second line shows an honest platform quirk: Yandex Market splits stocks across two API methods, and one call physically cannot cover both warehouse kinds. So a merged query across three accounts returns only seller warehouses from Yandex Market until the agent also asks about Market warehouses. The server does not hide this behind a "convenient" aggregation that would silently drop stock.
Related MCP server: WB MCP Server
Quick start without API keys (demo)
No database, no tokens: without DATABASE_URL the server starts with an in-memory store and mock seller accounts for all three marketplaces, filled with realistic data.
npm install
npm run dev # stdio transportConnect it to Claude Code:
claude mcp add marketplace -- npx tsx /path/to/marketplace-mcp/src/index.tsThen ask in chat: "show my connections", "what is running out of stock — check every marketplace", "compare prices for ZR-002 across the three accounts", "how many orders this week in total?".
Connecting real seller accounts
Credentials can come from the environment (demo mode, no database) or be stored encrypted in PostgreSQL (production).
WB_API_TOKEN=... # Wildberries
OZON_CLIENT_ID=... OZON_API_KEY=... # Ozon
YM_API_KEY=... # Yandex Market
npm run devEvery platform authenticates differently, which is exactly why credentials are stored as a set of keys rather than a single token column:
Marketplace | Authentication | Where to get it |
Wildberries |
| Seller cabinet → Settings → API access |
Ozon | two headers: | Seller cabinet → Settings → Seller API |
Yandex Market |
| Seller cabinet → API modules → Authorization tokens |
connection_test validates the key and reports what is actually reachable: per API category on WB, and the list of business accounts and shops on Yandex Market.
Test environments
None of the three marketplaces hands out public test credentials — every sandbox is tied to a seller account. What actually exists:
Marketplace | Sandbox | How to get in |
Wildberries | Yes — separate | The sandbox token is created in the seller cabinet separately from the production one. Supported via |
Ozon | Yes — the test environment mirrors Seller API methods and is isolated from real data | Needs Client-Id and Api-Key from a seller cabinet |
Yandex Market | No separate environment — instead there are test orders inside the live cabinet (delivered with | Seller cabinet → API modules → Test order |
One caveat about WB is baked into the code: not every category has a sandbox. "Analytics" has none, and that is where stocks live — so in sandbox mode wb_stocks_get talks to the production API. The server does not pretend the isolation is complete: the sandbox flag is visible in connections_list, and marketplace_capabilities returns an explicit sandbox_warning. Everything is read-only, so the account is never modified.
Production mode
cp .env.example .env # MASTER_KEY and MCP_AUTH_TOKEN: openssl rand -hex 32
docker compose up --buildBrings up PostgreSQL with automatic migrations plus the server on Streamable HTTP: POST /mcp, health at GET /health.
Transport security. These tools sit in front of other people's seller-account keys, so /mcp is protected by a bearer token (MCP_AUTH_TOKEN) and Origin validation (MCP_ALLOWED_ORIGINS, DNS-rebinding defence). Without MCP_AUTH_TOKEN the server deliberately binds to 127.0.0.1 only and warns about it. In compose the port is published on loopback — expose it through a TLS reverse proxy. Account keys are stored as AES-256-GCM ciphertext; the master key lives outside the database.
Architecture
MCP client (Claude / ChatGPT / agent)
│ stdio | Streamable HTTP (stateless, POST /mcp, bearer + Origin)
▼
MCP server ── shared tools: connections_list, connection_test, marketplace_capabilities
│
├─ core: store (Postgres/in-memory) · secrets (AES-GCM) · rate limiter
│ (token bucket per marketplace+connection+endpoint group) ·
│ retries (backoff+jitter) · audit (tool_calls) · unified error model
│
├─ adapters/common/schema.ts — THE single normalized schema for all platforms
│
├─ adapters/wb — Content / Analytics / Statistics / Discounts-Prices APIs
├─ adapters/ozon — Seller API (all methods POST, last_id cursor)
└─ adapters/ym — Partner API (businessId → campaignId)Core principles:
One schema for every platform and for the mocks:
adapters/common/schema.tsis the single source of truth. The schemas double as tooloutputSchemas, so the SDK validates responses, and the test suite additionally runs the real-API mappings through them. Shape drift fails at compile time or in tests — not in the customer's account.Multi-account: when several connections exist for one marketplace and
connection_idis omitted, the server returnsAMBIGUOUS_CONNECTIONwith the list, never a silent pick. The same rule applies to Yandex Market business accounts (businessId).FBO and FBS never merge: on all three platforms they are separate rows with an explicit
fulfillment_model, not one blended number.Unified error model:
AUTH_FAILED,MARKETPLACE_PERMISSION_DENIED,RATE_LIMITED(withretry_after_ms),UPSTREAM_TIMEOUT, … — AI-legible codes carrying aretryableflag.Money as decimal strings with a currency, dates as UTC ISO 8601, and a single
limit/cursorpagination contract layered over three different mechanisms (WB cursor, Ozonlast_id, Yandex MarketnextPageToken).Secrets are never logged and never appear in responses, errors or the audit log; only ciphertext reaches the database.
Tools (17)
Tool | Purpose |
| connected seller accounts, never secrets |
| key check: per API category on WB, with the shop list on Yandex Market |
| what the agent may access, which credentials and scopes are required |
| Wildberries |
| Ozon |
| Yandex Market |
ym_campaigns_list exists because of Yandex Market's two-level model: a business account (businessId) contains shops (campaignId), and different methods need different identifiers.
Marketplace API compliance (verified 2026-08-28)
Paths, hosts and limits were checked against the official specifications rather than written from memory.
Wildberries — from the official OpenAPI specifications:
Group | Host | Limit |
Content |
| 100/min |
Prices and discounts |
| 10/6s |
Statistics |
| 1/min |
Analytics |
| 3/min |
GET /api/v1/supplier/stockswas switched off on 2026-06-23. Stocks now come fromPOST /api/analytics/v1/stocks-report/wb-warehouses(FBO) and.../seller-warehouses(FBS); the token needs the "Analytics" category.The new method does not return the seller article (only
nmId), soseller_skuis enriched from the product cards.Authorization is the raw token with no
Bearerprefix: the spec declares anapiKeysecurity scheme, and the wordBearernever appears in the WB specifications.
Ozon — api-seller.ozon.ru, every method a POST, last_id cursor pagination. Uses /v3/product/list, /v3/product/info/list, /v4/product/info/stocks, /v5/product/info/prices (v4 is deprecated), /v2/posting/fbo/list, /v3/posting/fbs/list. As of August 2026 none of these carry a shutdown notice. Ozon publishes no public OpenAPI specification, so the contract was assembled from documentation and maintained clients — this is the part that most needs verification against a live key. Verified live: Ozon reports bad credentials with HTTP 400 (code: 5 / code: 16), not 401, and the client maps that to AUTH_FAILED.
Yandex Market — api.partner.market.yandex.ru, from the official OpenAPI specification (github.com/yandex-market/yandex-market-partner-api). Limits taken from the spec: GET /v2/campaigns 1000/hour, POST /v3/businesses/{id}/offers/stocks 500/min, POST /v1/businesses/{id}/orders 10000/hour (max 50 orders per response, ≤30-day window). The non-standard 420 status is treated as a rate limit.
Yandex Market splits stocks across two methods, which the adapter handles: POST /v3/businesses/{id}/offers/stocks covers seller warehouses (FBS/DBS/Express, and only works without warehouse groups), while POST /v2/campaigns/{campaignId}/offers/stocks covers Market warehouses (FBY → FBO) and is the only working path when warehouse groups exist. ym_stocks_get picks the right path based on whether campaign_id was passed; to see all stock the tool is called twice — stated explicitly in its description for the agent.
What remains unverified. The actual response bodies of all three platforms: specifications describe the contract, but only a live key confirms that production matches in every field — contract tests over recorded responses are planned for that. Ozon is the weakest link (no public spec). Also deliberately out of scope for v0.3: Ozon product brand (lives in attributes, a separate call) and warehouse names on Ozon and Yandex Market (separate directories) — those fields return null rather than being invented.
Roadmap
Stage | Scope | Status |
1. Core | connections, secrets, permissions, audit, rate limits, error model | ✅ |
2. Wildberries READ | products / stocks / prices / orders | ✅ |
3. Ozon READ | Seller API: products / stocks / prices / orders FBO+FBS | ✅ |
4. Yandex Market READ | campaigns / products / stocks / prices / orders | ✅ |
4b. Extended READ | finance, reviews, advertising (Ozon Performance API, WB Advert) | — |
5. History collectors | price/stock snapshot worker (tables already in the schema) | — |
6–7. WRITE | preview/dry-run → confirmation → execution; policy limits; idempotency | — |
Tests
npm testNo external dependencies — an in-memory linked MCP client↔server pair. Covers: tools/list and the presence of outputSchema on all 12 data tools, mock data for three platforms, pagination, FBO/FBS separation, the unified error model, auditing, absence of secrets in responses, cross-marketplace normalization (3 platforms × 4 entity kinds through one set of schemas), merging stocks from three accounts into one list, both Yandex Market stock paths (account FBS and shop FBO), WB sandbox host routing (including the categories that have no sandbox), the real-API mappings for WB / Ozon / Yandex Market against the shared schemas, and rate limiter behaviour.
Mock product titles and warehouse names are intentionally left in Russian: that is what the real marketplace APIs return, so the demo stays faithful to production data.
License
MIT
Available Tools
17 toolsconnection_getGet connectionA
Returns details of a single connection by connection_id (never secrets).
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It adds a meaningful guarantee that secrets are never returned, which goes beyond the tool title. It does not mention not-found behavior or authentication requirements, but for a single-connection getter, the core safe-read behavior is sufficiently transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence states the action, scope, and an important behavioral caveat with no wasted words. Every element carries signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter get operation with no output schema, the description covers the essential call context: what resource, how to identify it, and what not to expect (secrets). It is slightly thin on return structure and error cases, but those are minor for this tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description references connection_id but adds no semantic detail beyond the schema's required uuid property. Since schema description coverage is 0%, the description could compensate more by explaining how the ID relates to connections_list results or what format to expect, but the single parameter is self-explanatory enough to avoid a lower score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and object ('Returns details of a single connection') and clearly identifies the selecting parameter ('by connection_id'). This differentiates it from sibling tools like connections_list, which would cover multiple connections, and connection_test, which has a different purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies appropriate use: call when you have a specific connection_id and want that connection's details. However, it does not explicitly state when to use alternatives such as connections_list for enumerating connections or connection_test for checking connectivity, leaving sibling differentiation mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connections_listList connectionsA
Returns every connected marketplace seller account (never keys or secrets). Call this first to learn the connection_id required by the other tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses that the tool is read-like ('Returns...') and explicitly guarantees no keys or secrets are exposed. Minor omissions remain, such as pagination or exact response structure, but the core behavioral scope is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no filler. The main purpose is front-loaded, the security qualifier is parenthetical, and the usage instruction is a separate clear sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with no output schema, this description is sufficient. It names the resource, the scope ('every connected marketplace seller account'), a key output field (connection_id), and how the tool fits into the broader workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero properties and is fully covered, so there are no parameters to describe. The description adds useful semantic context by explaining that the returned data contains connection_id, which is the meaningful output for downstream calls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource: it 'Returns every connected marketplace seller account.' It also clarifies what it does NOT return ('never keys or secrets'), which distinguishes it from a secrets-fetching tool and reinforces its listing role among connection_get and connection_test.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit 'when' guidance: 'Call this first to learn the connection_id required by the other tools.' It does not name specific alternatives or say when not to use it, but for a first-step discovery tool this is clear, actionable context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connection_testTest connectionB
Performs a real read-only connectivity check: token validity and API availability. The seller account is not modified.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavior disclosure. It explicitly states the operation is read-only and that the seller account is not modified, which is strong side-effect transparency. It does not mention failure behavior or permissions, but the core safety profile is clearly conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the central action ('Performs a real read-only connectivity check') and then appends the key scoping detail. There is no filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool, the description covers purpose and side-effect safety, but omits the return/response shape and never explains connection_id origin. Since there is no output schema, this is a non-trivial gap for an agent deciding whether the call succeeded.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the only property, connection_id, is not explained in the description. An agent must infer that it identifies the connection to test; no guidance is given about where to obtain it or how it relates to other connection tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific operation — a 'real read-only connectivity check' — and names what it verifies: token validity and API availability. It doesn't explicitly differentiate from siblings like connection_get, but the test-vs-get distinction is implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or alternative-selection guidance is provided. An agent is not told to use this tool before other connection/API tools or when credentials need validation, so it must infer applicability from the title and purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketplace_capabilitiesConnection capabilitiesA
Shows which data categories are actually available to the AI for this connection (token scopes plus server policy). Call before using the marketplace-specific tools.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries most of the behavioral burden. It does add meaningful context by explaining that availability depends on 'token scopes plus server policy' and that this is a read-only capability check ('Shows'). However, it does not describe the output shape, error behavior, or what happens when the connection is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core behavior is stated first, and the usage directive is appended immediately. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter introspection tool, the description gives enough to call it correctly: what it returns conceptually, the scope, and when to call it. An explicit mention of the expected output format would improve completeness, but it is largely sufficient given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate. It only references 'this connection,' which roughly maps to connection_id, and the single parameter is self-explanatory as a UUID and name. The description adds minimal semantic value beyond the schema but does not create confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific action ('Shows which data categories are actually available') and a specific resource ('for this connection'). It also distinguishes the tool from the marketplace-specific siblings by explaining that it reveals available capabilities rather than directly operating on marketplace data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The instruction 'Call before using the marketplace-specific tools' gives an explicit, actionable usage context. It does not explicitly list when not to use it or name alternative tools, but the timing guidance is strong enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ozon_orders_listOzon: list ordersA
Returns Ozon postings for a period (30 days by default): posting number, date, items, amount, status. FBO and FBS are independent order streams on Ozon; both are returned by default. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| date_from | No | ISO start date (defaults to −30 days) | |
| connection_id | No | Ozon connection id. Required when more than one is configured (see connections_list). | |
| fulfillment_model | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes | |
| success | Yes | |
| marketplace | Yes | |
| connection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It explicitly labelRead-only', discloses the 30-day default, and explains that FBO and FBS are independent streams both returned by default. These are real behavioral traits beyond the schema. It stops short of describing pagination behavior or rate limits, but the output schema and parameter names soften those gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core purpose, key returned fields, default period, stream behavior, and read-only nature are all conveyed efficiently. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter list tool with an output schema, the description provides enough to call it correctly in most cases: default period, default fulfillment stream, and read-only safety. The main omission is pagination (how to use 'cursor' to page beyond 'limit'), but the schema plus output schema cover much of the remaining context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 40%, so the description needs to compensate. It does add meaning for 'date_from' (30-day default) and 'fulfillment_model' (FBO/FBS independent streams, both default), but it does not explain 'cursor' pagination, 'limit' semantics, or the 'connection_id' requirement beyond what the schema already says. Partial compensation, not full.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb and resource: 'Returns Ozon postings for a period' and enumerates the returned fields (posting number, date, items, amount, status). It also distinguishes Ozon orders from Ozon products, stocks, and prices visible in sibling tools, and clarifies FBO/FBS are separate order streams.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool ('Returns Ozon postings for a period') and provides useful defaults, but it never names alternatives or states when not to use it. It doesn't mention that stock, price, or product queries would use other Ozon sibling tools, so usage guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ozon_prices_getOzon: get pricesA
Returns current Ozon prices: price before discount, price for the customer, currency. Read-only; never changes prices. Money values are decimal strings.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| connection_id | No | Ozon connection id. Required when more than one is configured (see connections_list). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes | |
| success | Yes | |
| marketplace | Yes | |
| connection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does meaningfully disclose behavior: 'Read-only; never changes prices' is an explicit safety guarantee, and 'Money values are decimal strings' prevents float-parsing mistakes. It does not cover pagination or connection-related failure modes, but for a simple read-only getter the key behavioral traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the main action, and every sentence adds information: what is returned, the read-only guarantee, and the decimal-string format. There is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description does not need to explain return values in detail. However, it omits practical call context such as pagination via cursor, the meaning of limit, or how to handle multiple Ozon connections beyond the schema note. It is adequate for a straightforward price getter but leaves some operational gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%; only connection_id has an explanation. The description does not compensate by explaining limit or cursor behavior, nor does it mention pagination or how the parameters affect results. The description focuses on return fields rather than the input parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Returns current Ozon prices.' It enumerates the returned fields (price before discount, customer price, currency) and the 'Ozon' qualifier clearly distinguishes it from sibling tools like wb_prices_get and ym_prices_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives. It does not state that this is the tool for reading Ozon price data specifically, nor does it mention any exclusions or when a sibling tool like ozon_products_list might be more appropriate. The only contextual hint appears in the schema's connection_id description, not in the tool description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ozon_products_listOzon: list productsA
Returns Ozon products: product_id, seller article (offer_id), title, category. Read-only. Use it to survey the assortment; do not use it for stocks (ozon_stocks_get) or prices (ozon_prices_get).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, max 1000 | |
| cursor | No | Cursor from the previous response (next_cursor) | |
| connection_id | No | Ozon connection id. Required when more than one is configured (see connections_list). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes | |
| success | Yes | |
| marketplace | Yes | |
| connection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It explicitly discloses 'Read-only', the critical safety trait for a tool that could otherwise be assumed to mutate, and it scopes behavior with the 'survey the assortment' framing. It does not cover pagination iteration or rate limits, but those mechanics are inferable from the cursor parameter description and the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the resource and fields, followed by routing guidance. Every sentence earns its place; there is zero filler and no restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter paginated list with an output schema, nothing essential is missing: return fields are stated, read-only safety is stated, sibling routing is explicit, and pagination mechanics live in the cursor parameter. The output schema covers return structure, so the description need not restate it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: limit, cursor, and connection_id each carry their own schema descriptions. The tool description adds no parameter-level detail beyond that, so the baseline of 3 applies — the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Returns'), a specific resource (Ozon products), and the exact fields returned (product_id, offer_id, title, category). The Ozon prefix plus the explicit exclusion of stocks/prices tools distinguishes it from the nine sibling marketplace tools (wb_products_list, ym_products_list, ozon_stocks_get, ozon_prices_get).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use ('Use it to survey the assortment') and explicit when-not-to-use with named alternatives ('do not use it for stocks (ozon_stocks_get) or prices (ozon_prices_get)'). An agent can route itself correctly with no inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ozon_stocks_getOzon: get stocksA
Returns Ozon stock levels split by FBO (Ozon warehouses) and FBS (seller warehouses): available to order and reserved. Read-only. Fulfillment models are never merged.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| seller_sku | No | Filter by seller article (offer_id) | |
| connection_id | No | Ozon connection id. Required when more than one is configured (see connections_list). | |
| fulfillment_model | No | FBO — Ozon warehouses, FBS — seller warehouses | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes | |
| success | Yes | |
| marketplace | Yes | |
| connection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states 'Read-only' and reveals a non-obvious behavior: 'Fulfillment models are never merged.' It does not mention pagination behavior or data freshness, but for a simple read-only stock query these are not critical omissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with no fluff. It front-loads the core purpose ('Returns Ozon stock levels split by FBO and FBS'), then adds the useful read-only and non-merging clarifications. Every sentence contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and a relatively simple read-only list operation, the description covers the essential behavior and key non-obvious detail (FBO/FBS split). It does not explain pagination or the connection_id disambiguation, but those are adequately handled by the schema and don't make the tool impossible to invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes 3 of 5 parameters (60% coverage), and the description reinforces the meaning of fulfillment_model by explaining 'FBO (Ozon warehouses) and FBS (seller warehouses)' — though this largely duplicates the schema text. It adds no semantic value for limit, cursor, or seller_sku, so this is a middle-ground score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns'), a specific resource ('Ozon stock levels'), and a defining structural detail (split by FBO and FBS, available to order and reserved). It clearly distinguishes this tool from marketplace siblings like wb_stocks_get and ym_stocks_get by explicitly naming Ozon and the stock-level resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: when Ozon stock levels are needed, with a useful clarification that FBO and FBS are never merged. However, it does not explicitly state when not to use it or name alternative tools for different marketplace/stock needs, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wb_orders_listWB: list ordersA
Returns Wildberries orders for a period (30 days by default): date, article, amount, warehouse, status. Read-only. WB refreshes this data every 30 minutes and retains it for 90 days. For aggregate sales stats, call this tool and compute on the AI side.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| date_from | No | ISO start date (defaults to −30 days). Maximum depth is 90 days. | |
| connection_id | No | Wildberries connection id. Required when more than one is configured (see connections_list). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes | |
| success | Yes | |
| marketplace | Yes | |
| connection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses that the operation is read-only, that data refreshes every 30 minutes, and that data is retained for 90 days. It does not mention pagination or rate limits, but for a read-only listing tool the disclosed behavior is substantially informative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. It front-loads the core purpose, then adds the read-only behavior and a practical usage recommendation. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple first call, and output schema likely covers return values, but it omits pagination entirely. Since limit defaults to 100 with a maximum of 200, the recommendation to use this tool for aggregate sales stats is incomplete without telling the agent to paginate via cursor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, and the description adds no parameter-level meaning beyond what the schema already states. The '30 days by default' and '90 days' language merely restates the date_from schema description, while limit and cursor remain undocumented in both the schema and the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns'), a specific resource ('Wildberries orders'), and enumerates the returned fields (date, article, amount, warehouse, status). It also distinguishes this from sibling tools by explicitly naming Wildberries and positioning it as the tool to use for order data rather than products, stocks, or prices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it is for reading orders over a period, with a default of 30 days, and explicitly says 'For aggregate sales stats, call this tool and compute on the AI side.' It does not explicitly describe when to use other tools, but its Wildberries-specific scope and the aggregate-stats recommendation provide sufficient guidance for routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wb_prices_getWB: get pricesA
Returns current Wildberries prices and discounts. Read-only; never changes prices. Money values are decimal strings with a currency, never floats.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, max 1000 | |
| cursor | No | Cursor from the previous response (next_cursor) | |
| connection_id | No | Wildberries connection id. Required when more than one is configured (see connections_list). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes | |
| success | Yes | |
| marketplace | Yes | |
| connection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It explicitly states the tool is read-only and never changes prices, which is important safety-relevant context. It also discloses that money values are decimal strings with a currency rather than floats, adding a concrete data-contract detail beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The primary purpose is front-loaded, followed by a behavioral guarantee, then a meaningful data-format note. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple read-only list/get with three optional parameters, a fully documented schema, and an output schema present. The description covers what is returned, side-effect safety, and the money representation. An agent has enough context to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add parameter-level detail beyond the schema; cursor, limit, and connection_id are already well documented. The money-value note is useful but applies to response data rather than parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns') and names a precise resource ('current Wildberries prices and discounts'), immediately distinguishing it from sibling tools like wb_products_list, wb_stocks_get, and price tools for other marketplaces. It also adds a behavioral distinction by stating it is read-only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly establishes when to use the tool: when current Wildberries prices and discounts are needed. 'Read-only; never changes prices' is a useful explicit usage boundary. It does not name alternative tools or exclusion conditions, but the resource-specific wording makes the intended context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wb_products_listWB: list productsA
Returns Wildberries product cards: WB article (nmID), seller article, barcode, title, brand, category. Read-only; the seller account is not modified. Use it to survey the assortment; do not use it for stocks (wb_stocks_get) or prices (wb_prices_get).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, max 100 | |
| cursor | No | Cursor from the previous response (next_cursor) | |
| connection_id | No | Wildberries connection id. Required when more than one is configured (see connections_list). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes | |
| success | Yes | |
| marketplace | Yes | |
| connection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose that the tool is read-only and that the seller account is not modified, which is valuable. However, it does not mention pagination behavior, response shape beyond field names, rate limits, or any auth requirements, leaving some uncertainty for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loads the purpose and return fields, then states the read-only nature, then gives usage differentiation. Every sentence earns its place and there is no padding or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema covers all parameters, an output schema exists so return values need not be explained in the description, and the description covers purpose, safety/read-only behavior, and when to use or avoid the tool. Nothing essential is missing for a low-complexity list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents limit, cursor, and connection_id with meaningful descriptions. The description adds no additional parameter-level meaning beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns') with a clear resource ('Wildberries product cards') and enumerates the returned fields (WB article nmID, seller article, barcode, title, brand, category). It also differentiates itself from stocks and prices tools, and the title/name clarify the marketplace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('survey the assortment') and explicitly says not to use it for stocks (wb_stocks_get) or prices (wb_prices_get), naming the sibling alternatives. This gives an agent unambiguous routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wb_stocks_getWB: get stocksA
Returns current stock levels split by FBO (WB warehouses) and FBS (seller warehouses): available to order, in transit to customer, in transit from customer. Read-only. Fulfillment models are never merged into one number. WB refreshes this data every 30 minutes. Requires the Analytics (Аналитика) token category.
| Name | Required | Description | Default |
|---|---|---|---|
| seller_sku | No | Filter by seller article | |
| connection_id | No | Wildberries connection id. Required when more than one is configured (see connections_list). | |
| fulfillment_model | No | FBO — WB warehouses, FBS — seller warehouses, all — both (two API calls) | all |
| marketplace_product_id | No | Filter by WB article (nmID) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes | |
| success | Yes | |
| marketplace | Yes | |
| connection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses read-only behavior, the never-merge rule for FBO/FBS, the 30-minute refresh cadence, and the required token category—all key behavioral traits beyond what the schema shows.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all informative and free of fluff. The most critical information, what the tool returns and the FBO/FBS split, is front-loaded, followed by necessary behavior and prerequisites.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and full parameter documentation present, the description covers prerequisites, read-only behavior, data freshness, and the FBO/FBS distinction—everything needed for correct invocation and selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds little beyond the schema's parameter descriptions, though it reinforces the 'never merged' behavior relevant to the fulfillment_model parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns'), a precise resource ('current stock levels'), and the key split by FBO/FBS. It clearly identifies this as the Wildberries stocks tool, distinguishing it from sibling tools like ozon_stocks_get and ym_stocks_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear usage context: read-only, requires the Analytics token category, and data refreshes every 30 minutes. It does not explicitly name alternatives or when-not conditions, but the WB-specific scope and prerequisites are strong enough for an agent to know when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ym_campaigns_listYandex Market: list businesses and shopsA
Returns the Yandex Market shops (campaignId) and business accounts (businessId) the token can reach. Yandex Market has a two-level structure: an account holds several shops, and different methods need different identifiers. Call this before the other ym_* tools.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | No | Yandex Market connection id. Required when more than one is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It conveys a read-only discovery operation ('Returns'), scopes results to what 'the token can reach', and explains the two-level account/shop structure that determines which IDs are returned. It does not mention pagination or failure modes, but for a simple list tool the primary behavior is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no filler. The return value is stated first, the structural context follows, and the usage ordering guideline is placed last. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a discovery tool with one optional parameter and no output schema, the description provides the essential return semantics (campaignId and businessId), the data model that makes those IDs meaningful, and the exact usage position relative to sibling tools. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, connection_id, already has a complete schema description ('Required when more than one is configured'), so schema coverage is 100%. The tool description adds no parameter-specific meaning beyond the schema, which puts it at the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns') and names the exact resources ('shops' and 'business accounts') with their ID fields (campaignId and businessId). It clearly distinguishes this discovery tool from the ym_products_list, ym_stocks_get, ym_prices_get, and ym_orders_list siblings, which all operate on already-identified entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs 'Call this before the other ym_* tools', making the intended sequencing unmistakable. It also explains why: Yandex Market has a two-level structure and different methods need different identifiers, so an agent knows this tool supplies prerequisites for later calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ym_orders_listYandex Market: list ordersA
Returns Yandex Market orders for a period (30 days by default): date, items, amount, status, shop. Read-only. A single request spans at most 30 days (API limitation).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, max 50 (API limitation) | |
| cursor | No | ||
| date_from | No | ISO start date (defaults to −30 days). Range must not exceed 30 days. | |
| business_id | No | Business account id (businessId). If omitted, taken from the connection or resolved via ym_campaigns_list. | |
| connection_id | No | Yandex Market connection id. Required when more than one is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes | |
| success | Yes | |
| marketplace | Yes | |
| connection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses read-only behavior and the 30-day API limitation, which is useful. However, it omits pagination behavior (cursor usage), any rate-limiting or error conditions, and does not clarify that results are paginated. This leaves gaps in behavioral disclosure beyond the minimal traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the main purpose. Each sentence earns its place: the first states what it returns and the default period; the second adds read-only status and the API limitation. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, no annotations, and the presence of an output schema, the description covers the basic functionality and the main constraint (30-day span) but omits guidance on pagination, which is critical for a list endpoint with a cursor parameter. It also does not explain how business_id or connection_id are resolved, though part of that is in the schema. The output schema exists, so return values are handled, but the usage context on pagination and parameter relationships is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80% (high), so baseline is 3. The description adds little beyond the schema: it mentions the default period but the schema already specifies 'ISO start date (defaults to −30 days). Range must not exceed 30 days.' It does not clarify the semantics of cursor, limit, business_id, or connection_id beyond what is already in the property descriptions. Therefore no significant added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns'), resource ('Yandex Market orders'), and the constituent fields (date, items, amount, status, shop). This clearly differentiates it from sibling tools like wb_orders_list and ozon_orders_list by naming the marketplace, and from ym_campaigns_list by the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: default period of 30 days, read-only nature, and the API limitation that a single request spans at most 30 days. However, it does not explicitly mention when to use this tool versus alternatives (e.g., for detailed order search or when different criteria are needed), so it lacks exclusions but is above the baseline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ym_prices_getYandex Market: get pricesB
Returns Yandex Market prices: base price, price for the customer, currency. Read-only; never changes prices. Money values are decimal strings.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| business_id | No | Business account id (businessId). If omitted, taken from the connection or resolved via ym_campaigns_list. | |
| connection_id | No | Yandex Market connection id. Required when more than one is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes | |
| success | Yes | |
| marketplace | Yes | |
| connection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description does valuable work by stating that the operation is read-only, never changes prices, and that money values are decimal strings. However, it does not disclose pagination behavior via the cursor, the meaning of the limit, or how business_id/connection_id resolution behaves at runtime, so the behavioral picture is incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core return values. 'Read-only' and 'never changes prices' are slightly redundant, so it is not perfectly tight, but every sentence otherwise contributes useful information without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema presumably covers the return shape, so details about response fields are less critical. However, the description omits important operational context: how cursor pagination works, what limit controls, and when business_id/connection_id are required. An agent could call the tool, but it would have to discover pagination and connection semantics elsewhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, leaving limit and cursor undocumented, and the tool description adds no parameter-level meaning whatsoever. The description does not mention pagination, paging size, or the fallback resolution of business_id, so the agent gets no help beyond the already-present schema comments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Returns'), names the resource ('Yandex Market prices'), and enumerates the returned values (base price, customer price, currency). The explicit 'Yandex Market' scope clearly distinguishes it from sibling price tools for other marketplaces, and 'Read-only' reinforces that it is a retrieval operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as ym_stocks_get, ym_orders_list, or the other marketplace price tools. It also does not mention prerequisites like when business_id must be manually provided or how connection_id should be chosen, leaving selection and setup entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ym_products_listYandex Market: list productsA
Returns Yandex Market products: seller article (offerId), title, category, barcode, Market SKU. Read-only. Operates at the business-account level (businessId), not per shop.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, max 200 | |
| cursor | No | Cursor from the previous response (next_cursor) | |
| business_id | No | Business account id (businessId). If omitted, taken from the connection or resolved via ym_campaigns_list. | |
| connection_id | No | Yandex Market connection id. Required when more than one is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes | |
| success | Yes | |
| marketplace | Yes | |
| connection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of safety disclosure and explicitly states 'Read-only.' It also adds the important scope constraint that the tool operates on businessId, not the shop level. It does not mention rate limits or authentication, but the connection-based parameters and output schema cover most remaining context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The first sentence front-loads purpose and output fields; the second clarifies scope and read-only behavior. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a full input schema, output schema, and explicit read-only scope, the description is largely complete. It could be improved by naming sibling product-list tools for explicit routing, but the platform and scope make the correct selection clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful context for business_id by specifying that it operates at the business-account level and not per shop. It also lists the product fields returned, which helps the agent understand what the tool's output represents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Returns Yandex Market products' and lists the exact fields returned (offerId, title, category, barcode, Market SKU). It also clarifies the scope as business-account level rather than per-shop, which distinguishes it from shop-level tools and from similar marketplace list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is a read-only list operation at the business-account level. The 'not per shop' caveat helps the agent understand when not to use it for shop-specific needs, though it does not explicitly name alternative tools like wb_products_list or ozon_products_list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ym_stocks_getYandex Market: get stocksA
Returns Yandex Market stock levels: available to order and reserved. Read-only. Market stock types (AVAILABLE/FIT/FREEZE/DEFECT/…) are normalized: sellable quantity is kept separate from reserved and defective stock. IMPORTANT: Yandex Market splits stocks across two methods and a single call does NOT cover both. Without campaign_id you get seller warehouses (FBS/DBS/Express). With campaign_id you get Market warehouses (FBY, i.e. the FBO model), which is also the only working path for accounts with warehouse groups. To see all stock, call it twice: without campaign_id and with it (shop ids come from ym_campaigns_list).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, max 100 | |
| cursor | No | ||
| seller_sku | No | Filter by seller article (offerId) | |
| business_id | No | Business account id (businessId). If omitted, taken from the connection or resolved via ym_campaigns_list. | |
| campaign_id | No | Shop id (campaignId). Required for stocks in Market warehouses (FBY/LaaS) and for accounts that use warehouse groups. Discover it via ym_campaigns_list. | |
| connection_id | No | Yandex Market connection id. Required when more than one is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes | |
| success | Yes | |
| marketplace | Yes | |
| connection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the operation is read-only, explains how stock types are normalized, and prominently warns about the two-method split. This is exactly the kind of non-obvious behavior an agent needs to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then adds normalization details and a critical call-pattern warning in a logical order. Every sentence earns its place, and the IMPORTANT section prevents the most likely misuse without being bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex stock endpoint with no required parameters, the description covers all key decisions: warehouse type selection, campaign_id necessity for FBY/warehouse groups, and the need to call twice. It also references ym_campaigns_list for id discovery, leaving no critical gap for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents most parameters, but the description adds meaning beyond it: campaign_id determines which warehouse model is queried (FBY/FBO vs FBS/DBS/Express), and business_id resolution is explained via connection or ym_campaigns_list. This materially improves correct parameter selection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Returns Yandex Market stock levels') and immediately defines the scope ('available to order and reserved'). It also explains the normalization of stock types, which makes it clearly distinguishable from price, order, and non-Yandex stock tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit conditional guidance: without campaign_id the caller gets seller warehouses, with campaign_id it gets Market warehouses, and a single call does not cover both. It also tells the agent to call twice for full stock visibility and points to ym_campaigns_list for shop ids, which is strong routing context.
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.
17 tool updates
v0.3.0- First observed
connection_get - First observed
connection_test - First observed
connections_list - First observed
marketplace_capabilities - First observed
ozon_orders_list - First observed
ozon_prices_get - First observed
ozon_products_list - First observed
ozon_stocks_get - First observed
wb_orders_list - First observed
wb_prices_get - First observed
wb_products_list - First observed
wb_stocks_get - First observed
ym_campaigns_list - First observed
ym_orders_list - First observed
ym_prices_get - First observed
ym_products_list - First observed
ym_stocks_get
TDQS
Scored across 17 tools
Each tool targets a distinct resource and marketplace: connections, capabilities, products, stocks, prices, and orders are clearly separated, and provider prefixes (wb_/ozon_/ym_) remove cross-marketplace confusion. The descriptions also explicitly warn against using one tool for another data category.
The naming pattern is largely consistent: provider prefix plus resource plus list/get (e.g., wb_products_list, ozon_stocks_get, ym_orders_list). Minor deviations include connections_list vs connection_get/connection_test (plural/singular inconsistency) and marketplace_capabilities lacking a verb suffix.
17 tools is slightly above the typical 3-15 range, but the count is justified by covering three separate marketplaces with four data categories each plus connection and capability tools. No tool feels redundant; the scope is broad but well organized.
The server fully covers the read-only marketplace domain: products, stocks, prices, and orders for all three supported marketplaces, plus connection discovery, testing, and capability checks. Required prerequiste lookups like ym_campaigns_list are present, so the user has no dead ends.
Maintenance
Related MCP Connectors
Verified, pay-per-use API tools for AI agents through one authenticated connection.
Real-time Amazon product, seller, and search data for AI agents across 21 marketplaces.
Connect AI agents to 1000+ apps with managed authentication and tool-calling.
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceConnects AI assistants to Wildberries and Ozon seller accounts for real-time access to sales, stocks, prices, finances, and reviews through official APIs.MIT
- FlicenseAqualityBmaintenanceEnables AI assistants to retrieve a Wildberries seller's product cards and customer reviews through the official Content and Feedbacks APIs.250 npm-
- AlicenseAqualityBmaintenanceEnables read-only analytics and product search for a Wildberries seller account, covering items, advertising, sales, stock, reviews, finances, and tariffs through MCP clients like ChatGPT or Cursor.12MIT
- AlicenseAqualityAmaintenanceOzon Seller API in your AI assistant: products, FBS and FBO orders, prices, stocks, finance and reviews. 441 methods live in a YAML catalog the server executes, the agent searches it in plain language and calls a method through three generic tools, and every method carries an access class so writes and irreversible calls ask for confirmation.25331 PyPI1MIT