Skip to main content
Glama

Server Details

Resollo marketplace: search, seller lookup, offers, orders, draft listings. All human-approved.

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

TDQS

A4.2/5.0

Scored across 19 tools

Disambiguation5/5

Each tool targets a distinct resource and action, with clear separation between browsing, listing, offers, orders, questions, reviews, and seller account state. Potentially confusable pairs like orders.place vs orders.checkoutLink and offers.make vs orders.place are explicitly differentiated in their descriptions.

Naming Consistency4/5

Names consistently use a dotted resource.action convention: offers.list, orders.status, products.search, sellers.get, and so on. Minor deviations are camelCase action names like checkoutLink and createFromUpload, but the overall pattern remains predictable.

Tool Count4/5

The 19 tools span six coherent marketplace subdomains, and each tool appears to earn its place by covering a distinct buyer or seller operation. It is slightly heavy, but not excessive given the breadth of marketplace workflows.

Completeness3/5

The surface covers discovery, offers, orders, questions, reviews, and seller state, but has notable gaps such as updating/deleting product listings, dispatching orders, answering questions, and creating reviews. Many of these gaps appear intentionally delegated to the human web UI, but agents still hit dead ends for common lifecycle operations.

Available Tools

19 tools
marketplace.infoGet Resollo marketplace taxonomy and metadataA
Read-only
Inspect

Returns the static reference data an agent needs to build valid searches and read responses without guessing: the numeric category ids and their keys/English names (use these for search's category filter), the condition codes, the list of supported ISO currency codes and the fallback default currency (search and product tools default to the caller's own currency when known), the payment- and shipment-method codes, the available sort options, the max search page size, and policy URLs (AI policy, OpenAPI spec). The photo limit per listing depends on the seller's plan -- see sellers.status max_images. Read-only, no authentication required. Safe to call once and cache for the session.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
limitsYes
categoriesYes
conditionsYes
currenciesYes
policy_urlsYes
sort_optionsYes
payment_methodsYes
default_currencyYesLast-resort fallback only, used when the caller's currency can't be determined. A signed-in caller gets prices in their own currency (sellers.status.currency); an anonymous one in a currency derived like on the website (country, then browser language).
shipment_methodsYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and openWorldHint, and the description reinforces consistency while adding genuinely new behavioral facts: no authentication is required, the call is safe to cache for the session, and other tools default to the caller's currency when known. That is auth, caching, and cross-tool default behavior — real value beyond the annotations.

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

Conciseness4/5

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

Front-loaded with the purpose, then a dense enumeration of payload contents, then two short operational sentences. The long first sentence is warranted for a reference-data dump, though it would scan better as a list; nothing is padding.

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

Completeness5/5

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

An output schema exists, so return values need not be described, and the description nonetheless names the payload categories plus the auth, caching, and currency-default behavior an agent needs before calling. Nothing material is missing for a static reference endpoint.

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 has zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-parameter tool is 4. The description instead explains what the parameterless payload contains, which is useful but not 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?

Opens with a specific verb and resource ("Returns the static reference data") and then enumerates exactly what that data is: category ids and keys, condition codes, currency codes and default, payment/shipment method codes, sort options, max page size, and policy URLs. An agent can tell immediately that this is the taxonomy/reference endpoint and not a search or listing tool.

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

Usage Guidelines5/5

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

Explicitly states the purpose of calling it (build valid searches and read responses without guessing), tells the agent how to use the output ("use these for search's category filter"), routes a sub-question to the right sibling ("see sellers.status max_images"), and advises caching once per session. Both the when and the alternative path are stated.

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

offers.listList the authenticated user's own Resollo offersA
Read-only
Inspect

Returns the caller's most recent Make-an-Offer / bargaining offers. Pass role: 'buyer' for offers you sent, or role: 'seller' for offers received on your own listings; omit role for both. Optionally filter to a single state (pending / accepted / rejected / countered / buyer_accepted / expired). Each entry has the product, the offered price, the seller's counter price if any, and timestamps. Read-only, no side effects. Requires a signed-in Resollo user (OAuth sign-in, or an 'Authorization: Bearer ' header).

NameRequiredDescriptionDefault
roleNoWhose side to list from: 'buyer' returns offers you sent, 'seller' returns offers received on your listings. Omit for both, newest first (each entry's role says which side it is).
limitNoMaximum number of most-recent offers to return (1-50, default 20).
stateNoOptional filter to a single offer state. When omitted, offers in every state are returned.

Output Schema

NameRequiredDescription
countYes
offersYes

TDQS

A4.1/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true and openWorldHint=false, and the description adds useful context: authentication requirements via OAuth or Bearer token, newest-first ordering, and the return fields for each entry. It repeats the no-side-effects point already covered by annotations, but the auth and ordering details are meaningful additions.

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, dense, and free of waste. It starts with the core purpose, then covers role semantics, state filtering, return contents, and auth in a logical sequence.

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

Completeness5/5

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

With an output schema, full schema description coverage, and read-only annotations, the description is complete enough for correct invocation. It covers authentication, filtering behavior, ordering, and the key fields returned without over-explaining.

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 explains role, limit, and state in detail. The description reinforces the same role behavior and state values but does not add syntax, format, or edge-case meaning beyond what the schema provides.

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

Purpose4/5

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

The description states a specific verb and resource: it returns the caller's recent Make-an-Offer / bargaining offers, with role and state filtering. The scope is clear enough to distinguish it from mutation siblings like offers.make and offers.respond, though it does not explicitly name alternatives.

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 exactly how to use role: buyer for sent offers, seller for received offers, and omission for both, plus optional state filtering. It gives clear contextual guidance but does not explicitly compare against sibling listing tools such as orders.list or sellers.listings.

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

offers.makeMake an offer (bargain) on a Resollo productA
Destructive
Inspect

Submits a price offer (Make an Offer / bargaining) on a fixed-price Resollo listing, on behalf of the authenticated buyer. Only works on fixed-price listings where the seller has offers enabled and a fully active Stripe Connect account -- never on auctions. A product can only have one active offer at a time; if it's currently locked by someone else's in-flight offer, or isn't otherwise eligible, this returns product_not_eligible. This does NOT move any money -- it only creates a PENDING offer the seller must respond to (see offers.respond). Requires a signed-in Resollo user (OAuth sign-in, or an 'Authorization: Bearer ' header).

NameRequiredDescriptionDefault
product_idYesThe uuid of the fixed-price listing to bid on.
currency_codeNoISO 4217 code for offered_price. Defaults to the product's own listing currency if omitted.
offered_priceYesThe price the buyer offers, in `currency_code` (or the listing's own currency if that is omitted).

Output Schema

NameRequiredDescription
stateYes
offer_idYes
created_atYes
product_idYes
offered_priceYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only give readOnlyHint=false, destructiveHint=true, openWorldHint=false; the description goes well beyond by stating no money moves, that a PENDING offer is created awaiting seller response, the one-active-offer-per-product constraint, the specific error code returned when ineligible, and the auth requirements (OAuth or Bearer agent key). This is exactly the extra context annotations cannot carry.

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

Conciseness4/5

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

Front-loaded with the core action and eligibility, then constraints, then auth. Dense and largely waste-free, though the single long paragraph with em-dashes and parentheticals could be split for faster scanning.

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 a rich output schema present, the description covers everything an agent needs: eligibility preconditions, auth, the pending-not-paid semantics, the concurrency lock, and the error code. Return-value detail is correctly left to the output schema.

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

Parameters3/5

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

Schema description coverage is 100%, so product_id, currency_code and offered_price are already fully documented in the schema; the description adds only the buyer-context and listing-currency framing, not new parameter semantics. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Submits a price offer on a fixed-price Resollo listing') and immediately delimits it from auctions and from the sibling offers.respond ('see offers.respond'). An agent can distinguish it from every sibling without opening a schema.

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

Usage Guidelines5/5

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

Explicit when-it-works conditions (fixed-price listing, seller has offers enabled, active Stripe Connect account), an explicit when-it-does-not ('never on auctions'), and the failure mode (product_not_eligible) plus the alternative/next step (offers.respond). Nothing is left to inference.

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

offers.respondRespond to a Resollo offerA
Destructive
Inspect

Responds to a pending Make an Offer / bargaining offer. If the caller is the SELLER of the offer, action must be 'accept', 'reject', or 'counter' (counter_price required for 'counter') and the offer must currently be pending. If the caller is the BUYER, action must be 'accept_counter' and the offer must currently be countered. Accepting an offer or a counter-offer immediately creates a confirmed order at the agreed price -- it does NOT charge any payment method, the buyer still completes payment themselves afterwards through the normal flow, exactly like after orders.place. Requires a signed-in Resollo user (OAuth sign-in, or an 'Authorization: Bearer ' header).

NameRequiredDescriptionDefault
actionYesSeller actions on a pending offer: accept | reject | counter (counter_price required). Buyer action on a countered offer: accept_counter.
offer_idYesThe uuid of the offer to respond to.
counter_priceNoThe seller's counter-offer price. Required when action is `counter`.

Output Schema

NameRequiredDescription
stateYes
offer_idYes

TDQS

A4.4/5.0
Behavior5/5

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

Annotations declare only readOnlyHint=false, destructiveHint=true, openWorldHint=false; the description goes well beyond them by disclosing that accept immediately creates a confirmed order, that no payment method is charged at this step, that the buyer still completes payment through the normal flow afterward, and that a signed-in user or agent API key header is required.

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

Conciseness4/5

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

A single dense paragraph that front-loads the purpose, then the seller rules, the buyer rule, and the payment consequence, closing with auth requirements. It is appropriately sized for a stateful multi-action tool, though the action/role rules echo the schema's enum description closely.

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

Completeness5/5

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

With an output schema present, return values need not be explained; the description still covers every decision point an agent needs — auth method, offer state requirements, action eligibility by role, counter_price conditionality, and the downstream consequence of acceptance.

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's own enum description already maps each action to seller vs. buyer and notes counter_price is required for 'counter'. The description largely restates these same role/action pairings, adding little syntax or format detail beyond the structured fields.

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

Purpose5/5

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

States a specific verb ('Responds to') and resource ('a pending Make an Offer / bargaining offer'), which cleanly separates it from offers.make (creating an offer) and offers.list (reading them). The role-conditional action rules make the tool's scope unambiguous without opening the schema.

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

Usage Guidelines4/5

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

Gives explicit preconditions: sellers must use accept/reject/counter on a pending offer, buyers must use accept_counter on a countered offer. It does not name a sibling alternative for the underlying transaction (e.g. orders.place or offers.make), but the state conditions are precise enough to select the tool correctly.

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

orders.listList the authenticated user's own Resollo ordersA
Read-only
Inspect

Returns the caller's most recent orders. Pass role: 'buyer' for orders you placed, or role: 'seller' for orders on your own listings; omit role for both. Each entry has the same decoded status booleans as orders.status (reserved / dispatched / paid / received / rejected / closed), plus the product name, item count, total price (converted to the requested currency, default: your own), the other party's name, and a link to the order page. Read-only, no side effects. Requires a signed-in Resollo user (OAuth sign-in, or an 'Authorization: Bearer ' header).

NameRequiredDescriptionDefault
roleNoWhose side to list from: 'buyer' returns orders you placed, 'seller' returns orders on your listings. Omit for both, newest first (each entry's role says which side it is).
limitNoMaximum number of most-recent orders to return (1-50, default 20).
currencyNoISO 4217 code for the returned price fields. Same default as in search_products (the caller's own currency, else derived like on the website, else marketplace.info default_currency).

Output Schema

NameRequiredDescription
countYes
ordersYes

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the annotations, it discloses the authentication requirement (OAuth sign-in or 'Authorization: Bearer <agent api key>'), the default newest-first ordering, and the currency-conversion default chain. 'Read-only, no side effects' partly restates readOnlyHint=true, but the auth and ordering context is genuine added value.

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?

One dense paragraph with the purpose front-loaded and no filler sentences. The enumeration of return fields is somewhat redundant given an output schema exists, costing a little tightness.

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 three-optional-parameter read tool with full schema coverage, annotations, and an output schema, everything an agent needs is present: auth, filter semantics, ordering, currency behavior, and the read-only guarantee. No gaps remain that would cause a misinvocation.

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 role, limit and currency are already fully documented, and the description's role and currency sentences largely restate those descriptions. It adds only the default-ordering note ('omit role for both') already implied by the enum, so baseline 3 applies.

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

Purpose5/5

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

Opens with a specific verb and resource ('Returns the caller's most recent orders') and immediately scopes it to the authenticated user, which separates it from siblings like offers.list and products.search. It also anchors itself to orders.status, so an agent knows this is the list view of the same order 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 role parameter is framed as explicit routing: 'buyer' for orders you placed, 'seller' for orders on your listings, omit for both — that removes the main ambiguity an agent would face. However, it never states when to prefer a sibling (e.g., when to use orders.status instead for a single order), so the when-not guidance is absent.

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

orders.placeReserve a Resollo productA
Destructive
Inspect

Creates a RESERVATION for the given product -- it does NOT complete a purchase and does NOT charge any payment method. After calling this tool, a human (the buyer) MUST log in to Resollo and complete payment manually through the normal checkout flow (Stripe-hosted checkout page, or cash-payment confirmation). Never tell the user their order is 'placed' or 'paid' after calling this tool -- tell them the item is reserved and they need to complete payment themselves at resollo.com to finalize it. Only fixed-price listings can be reserved this way (not auctions). Requires a signed-in Resollo user (OAuth sign-in, or an 'Authorization: Bearer ' header). The buyer must have explicitly approved this specific order before you call this tool (confirm must be true).

NameRequiredDescriptionDefault
commentNoOptional note to the seller, attached to the order chat.
confirmYesHuman-confirmation gate. Must be true, and only set it after the user has explicitly approved this specific order having seen the payment-safety text. An agent must never set this on its own initiative.
currencyNoInformational only, used solely to detect a currency mismatch worth surfacing to the buyer (payment_safety.currency_mismatch). Does NOT change what gets charged -- the order is always recorded and settled in the listing's own native currency regardless of this value.
quantityNoUnits to reserve (1-20, default 1).
product_idYesThe uuid of the fixed-price listing to reserve.
address_keyNoKey of one of the buyer's own saved addresses (never a free-text address). Required unless shipment_method is `personal`; defaults to the buyer's active address when omitted.
payment_methodYesHow buyer and seller will settle payment off-platform. Must be one the seller accepts (see get_product.seller.accepted_payment_methods).
shipment_methodYesHow the item will be handed over. Must be one the seller accepts (see get_product.seller.accepted_shipment_methods).

Output Schema

NameRequiredDescription
stateYes
productYes
order_idYes
quantityYes
created_atYes
total_priceYes
payment_methodYes
payment_safetyYes
shipment_methodYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true, and the description explains the real-world consequence behind that: inventory is reserved, no payment is taken, and a human must complete checkout. It also adds auth requirements and the critical instruction never to tell the user the order is 'placed' or 'paid'. It does not discuss reservation expiry or how a reservation is released, which is the main remaining gap.

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 reservation-not-purchase distinction is correctly front-loaded, and every paragraph carries operational instructions. The caveat is repeated three times (does not purchase, buyer must pay manually, never say 'placed'), which is slightly redundant but defensible for a high-stakes mutation.

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

Completeness5/5

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

For a destructive, human-in-the-loop mutation with eight parameters, the description covers scope, auth, preconditions, post-call messaging, and limitations. An output schema exists, so return-value detail is unnecessary, and the remaining 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?

Schema coverage is 100%, so the baseline is 3, but the description adds decision-relevant meaning by tying confirm to the human-approval gate and restricting product_id to fixed-price listings, which the schema itself does not say. It does not add anything on payment_method/shipment_method beyond the schema's seller-acceptance note.

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 first sentence states a specific verb and resource ("Creates a RESERVATION for the given product") and immediately scopes it against the obvious misreading ("does NOT complete a purchase and does NOT charge"). This clearly separates it from siblings such as orders.checkoutLink and offers.make, which an agent might otherwise confuse with placing an order.

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

Usage Guidelines5/5

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

Explicit when-to-use conditions are given: fixed-price listings only, not auctions; requires a signed-in user via OAuth or bearer agent key; and the buyer must have explicitly approved the specific order with confirm=true. It also names the follow-up path (buyer completes payment at resollo.com via Stripe or cash confirmation), which effectively routes the agent to the correct next step.

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

orders.rejectReject a reserved Resollo orderA
Destructive
Inspect

Rejects an order on behalf of the SELLER -- only allowed while the order is still RESERVED, i.e. before the seller has dispatched it or the buyer has paid. Returns order_not_reserved once the order has moved past that point (use the normal Resollo order page for anything after dispatch). This does NOT move any money -- no payment has happened yet at the RESERVED stage. Requires a signed-in Resollo user (OAuth sign-in, or an 'Authorization: Bearer ' header).

NameRequiredDescriptionDefault
orderIdYesThe uuid of the RESERVED order to reject.

Output Schema

NameRequiredDescription
stateYes
order_idYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare destructiveHint=true and readOnlyHint=false, and the description goes further: it discloses the state-machine constraint, the exact failure mode ('Returns order_not_reserved'), the money-safety guarantee ('This does NOT move any money'), and the auth requirement (OAuth sign-in or Bearer agent API key). That is meaningful context beyond the annotations.

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

Conciseness5/5

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

Three sentences, front-loaded with the action and its precondition, followed by the failure mode, the money-safety note, and auth. Every clause carries information an agent needs before calling.

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

Completeness5/5

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

An output schema exists so return values needn't be explained, and the description still covers preconditions, failure code, money semantics, and auth. Nothing required to call this mutation 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% and the schema already documents orderId, its uuid format, and pattern. The description only reinforces the precondition ('RESERVED order to reject'); baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource ('Rejects an order'), names the acting party (on behalf of the SELLER), and scopes it to the RESERVED state. This clearly separates it from siblings like orders.place, orders.status, and orders.checkoutLink.

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

Usage Guidelines5/5

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

Gives an explicit precondition ('only allowed while the order is still RESERVED, i.e. before the seller has dispatched it or the buyer has paid') and an explicit alternative for the out-of-scope case ('use the normal Resollo order page for anything after dispatch'). Nothing is left to inference.

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

orders.statusGet the status of a Resollo orderA
Read-only
Inspect

Returns the current status of one order: whether it's reserved, dispatched, paid, received, rejected, or closed (decoded booleans, not a raw state number), carrier/tracking info if dispatched, and the total price. The caller must be either the order's buyer or its seller -- returns forbidden otherwise. Read-only, no side effects. Requires a signed-in Resollo user (OAuth sign-in, or an 'Authorization: Bearer ' header).

NameRequiredDescriptionDefault
orderIdYesThe order's uuid.
currencyNoISO 4217 code for the returned price fields. Same default as in search_products (the caller's own currency, else derived like on the website, else marketplace.info default_currency).

Output Schema

NameRequiredDescription
paidYes
closedYes
carrierYes
order_idYes
receivedYes
rejectedYes
reservedYes
created_atYes
dispatchedYes
total_priceYes
completed_atYes
tracking_numberYes

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint annotation: discloses the access-control rule and failure mode ('forbidden otherwise'), the authentication options (OAuth or bearer agent key), the decoded-boolean return shape, and that it is side-effect free. An agent knows exactly what it will get and what could fail.

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 packed sentences: what it returns first, then access control, then auth/side-effect guarantees. No redundant restatement of the tool name or title, and every clause carries distinct information.

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

Completeness5/5

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

With an output schema present, the description needn't detail return values, and it still covers the caller-visible contract: permissions, auth, error condition, and status encoding. Nothing needed to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so both orderId and currency are already documented in the schema. The description mentions the returned price but adds no syntax or formatting guidance for the currency parameter, so it neither compensates nor detracts.

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

Purpose5/5

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

States a specific verb and resource ('Returns the current status of one order') and enumerates the exact status values plus the payload (carrier/tracking, total price). This clearly separates it from siblings like orders.list and orders.checkoutLink.

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?

Implicitly scopes usage to a single known order and states the authorization precondition (buyer or seller, else forbidden). It does not explicitly name orders.list as the alternative for browsing multiple orders, so routing relies on inference.

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

products.createCreate a Resollo product listing from photosA
Destructive
Inspect

Starts creating a new Resollo listing from photos. It opens a photo upload (no photos in the call), which can be completed in two ways. (1) Resollo's photo picker: in clients that support MCP Apps (e.g. Claude, ChatGPT) it appears right in the chat; otherwise give the seller upload_url, a Resollo page where they pick the photos (signed in; phone gallery or camera works). (2) Direct upload, for agents that have a tool to create the WebP files (e.g. the free photo MCP servers at github.com/resollo/mcp-servers, ImageMagick, cwebp) and can send an HTTP PUT: call with upload: 'direct' -- only then does the result include upload_id and direct_upload, and the picker stays hidden. Create each photo as WebP as direct_upload.requirements says, PUT it to direct_upload.put_urls with direct_upload.headers, then call products.createFromUpload with upload_id. Resollo never converts photos -- if you can't, use (1). Never put photo bytes into a tool argument. A photo that arrives as a file (attached, or a file pasted from the seller's file manager) reaches your tools as that file and can go through (2). Only an inline image (e.g. a screenshot or a copied image) is just pixels, not a file -- for that one, use the picker. After the upload, Resollo's own AI writes the title, description, category, condition, and a suggested price, and creates the listing as an INACTIVE draft that is NOT publicly visible. The seller MUST review and activate it themselves on resollo.com. Never tell the user the listing is 'live' or 'published'. When a picker upload finishes, the picker itself shows the seller the draft and its activation link, so you don't need to look it up or wait for it; if you need its details later, it's the newest 'inactive' listing in sellers.listings. Requires a signed-in Resollo user (OAuth sign-in, or an 'Authorization: Bearer ' header).

NameRequiredDescriptionDefault
uploadNo'picker' (default): the seller picks the photos in Resollo's photo picker. 'direct': you will upload the photos yourself (see direct_upload in the result); the picker panel then stays hidden.picker

Output Schema

NameRequiredDescription
statusYes
upload_idNoIdentifies this upload; pass it to products.createFromUpload after a direct upload. Only returned for upload: 'direct' (and always over REST).
max_imagesYesHow many photos the seller's plan allows per listing.
upload_urlYesResollo page where the seller can pick the photos instead (signed in on resollo.com; phone gallery or camera works too). Give it to the user if your client didn't show Resollo's photo picker panel. It is not tied to this call: an upload there creates its own draft -- find it with sellers.listings.
direct_uploadNoFor agents that have a tool to create the WebP files (e.g. the free photo MCP servers at github.com/resollo/mcp-servers, ImageMagick or cwebp) and can send an HTTP PUT: upload the photos yourself instead of the picker. Create each photo as WebP, at most max_dimension_px on its longest side, under max_bytes, with metadata stripped, then PUT the raw bytes to put_urls[i] (e.g. `curl -X PUT -H 'Content-Type: image/webp' -H 'apikey: …' --data-binary @0.webp '<put_url>'`), and call products.createFromUpload with upload_id. Resollo never converts photos: if you can't produce such files, let the seller use the photo picker or upload_url. Only returned for upload: 'direct' (and always over REST).

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnly=false, destructive=true, openWorld=false) by disclosing that the result is an INACTIVE non-public draft, that the seller must activate it, that Resollo never converts photos, that no photo bytes may be passed as arguments, and the exact OAuth/Bearer auth requirement. This is unusually rich behavioral context.

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

Conciseness4/5

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

The core action is front-loaded and the two-step workflow is logically sequenced, so most sentences carry weight. It is nonetheless long and dense, with some parenthetical caveats about image vs. file handling that could be tightened without losing meaning.

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

Completeness5/5

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

Output schema exists so return values need not be explained, and the description still covers the full lifecycle: preconditions (signed-in user), the two upload paths, the follow-up call, and the inactive-draft outcome. Nothing an agent needs to invoke this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100% and the enum is already described, so the baseline is 3. The description earns extra credit by explaining the downstream consequences of each value (picker renders in-chat for MCP Apps clients vs. direct revealing upload_id/direct_upload and hiding the picker), which materially helps value selection.

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

Purpose5/5

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

States a specific verb+resource ('Starts creating a new Resollo listing from photos') and immediately distinguishes itself from the sibling products.createFromUpload by framing itself as the first step of a two-step flow. An agent can tell it apart from other products.* tools without opening the schema.

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

Usage Guidelines5/5

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

Explicitly lays out when to use each mode: picker (1) for MCP Apps clients or when only inline pixels exist, direct (2) only for agents that can produce WebP and do an HTTP PUT. It names the follow-up tool (products.createFromUpload) and the fallback path, leaving nothing to inference.

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

products.createFromUploadCreate the listing draft from uploaded photosA
Destructive
Inspect

Finishes a direct upload started with products.create: after you PUT the converted photos to its direct_upload.put_urls, call this with its upload_id. Resollo's own AI then writes the listing and creates it as an INACTIVE draft (not public) -- returns product_id, the suggested content and price range, and activation_url, where the seller reviews and activates it. Uses 2 AI credits. Photos that aren't WebP within direct_upload.requirements are rejected, never converted. Also used by Resollo's photo picker panel. Requires a signed-in Resollo user.

NameRequiredDescriptionDefault
upload_idYesThe upload_id returned by products.create.

Output Schema

NameRequiredDescription
stateYes
suggestedYes
product_idYes
activation_urlYes
quota_remainingYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only cover readOnly/destructive/openWorld hints, while the description adds substantial behavioral context: the product is created as an INACTIVE draft (not public), the seller activates it via activation_url, 2 AI credits are consumed per call, non-WebP photos are rejected rather than converted, and a signed-in user is required. Actions, side effects, cost, and failure mode are all disclosed.

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 action and its precondition are front-loaded, and the remaining sentences each carry real weight (draft state, cost, rejection rule, auth). It is dense but nearly waste-free; the aside about the photo picker panel is the only marginally non-essential sentence.

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

Completeness5/5

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

For a one-parameter mutation that already has an output schema, annotations, and a fully described input, the description covers everything an agent needs: sequencing with its predecessor, what gets created, what is returned, cost, and constraints. Nothing material is missing.

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

Parameters3/5

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

There is only one parameter and schema description coverage is 100%, so the schema fully documents upload_id and its relationship to products.create. The description restates the same origin ('its upload_id') without adding format or validation detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

The description states a concrete verb and outcome ('Finishes a direct upload started with products.create') and names the sibling it chains from. An agent can immediately distinguish it from products.create and the other products.* tools because it is framed as the terminal step of a two-phase upload flow.

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 gives the exact precondition for calling: PUT the converted photos to direct_upload.put_urls first, then call this with the upload_id from products.create. The alternative/predecessor tool is named explicitly along with the condition that selects it, leaving nothing to inference.

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

products.getGet Resollo product detailsA
Read-only
Inspect

Fetch the full details of one specific Resollo product listing by its ID, including its Semantic Profile (suitable_for, not_ideal_for, target_audience, key_strengths, evokes, is_similar_to -- useful for judging fit against a buyer's stated needs), attributes, all image URLs, shipment prices, and the seller's accepted payment/shipment methods. Returns not_found for products that don't exist, are sold, expired, or moderation-hidden. No authentication required. Reading the fields: semantic_profile is null when Resollo's AI wasn't confident enough to write one; shipment_prices are text ranges such as '1000-3000' in shipment_prices_currency (always equal to price.currency, not converted); payment method 'card' means paying by card directly to the seller (e.g. on handover), while online card payment through Resollo is 'stripe' and needs seller.stripe_connect_active.

NameRequiredDescriptionDefault
currencyNoISO 4217 code for the returned price fields. Same default as in search_products (the caller's own currency, else derived like on the website, else marketplace.info default_currency).
productIdYesThe product listing's uuid.

Output Schema

NameRequiredDescription
idYes
urlYes
nameYes
unitYes
priceYes
sellerYes
categoryYes
conditionYes
guaranteeYes
image_urlYes
min_priceYes
attributesYes
created_atYes
image_urlsYes
descriptionYes
listing_typeYes
offers_enabledYes
auction_ends_atYes
converted_priceYes
shipment_pricesYesShipping cost estimate per shipment method (courier, postal, locker), each with local and international text ranges such as "1000-3000", in shipment_prices_currency (NOT converted). Empty when the listing only offers personal pickup.
semantic_profileYes
quantity_availableYes
shipment_prices_currencyYesCurrency of the shipment_prices ranges. Always equal to price.currency (the listing's own currency), even when converted_price is in another currency.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the read-only annotation, the description adds substantial behavioral context: no authentication required, exact not_found conditions, semantic_profile nullability, shipment price text-range semantics, and payment method distinctions. These details materially help an agent interpret results correctly.

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 front-loaded with the core purpose and then adds relevant field-reading guidance. It is dense but largely waste-free, though its single long paragraph and many semicolon-separated details reduce scanability.

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

Completeness5/5

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

For a read-only get-by-ID tool, the description covers the important gaps: authentication requirements, error conditions, null semantic profiles, currency handling, and payment method interpretation. The output schema exists, so it does not need to document every return field structurally.

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

Parameters3/5

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

The input schema already has 100% description coverage for productId and currency, including the UUID format and currency default behavior. The description reinforces that lookup is by ID but does not add parameter-level meaning beyond the schema.

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

Purpose5/5

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

The description uses a specific verb and resource: fetching full details of one specific Resollo product listing by ID. It clearly distinguishes this from sibling operations like products.search and products.create by emphasizing retrieval of a single listing.

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

Usage Guidelines4/5

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

It clearly states the usage context: use this when you have a product ID and need full listing details. It also explains not_found outcomes for missing, sold, expired, or moderation-hidden products. However, it does not explicitly name products.search as the way to obtain an ID.

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

products.searchSearch Resollo productsA
Read-only
Inspect

Search active, publicly available product listings on the Resollo marketplace. Use this to browse or filter by keyword (matched at the start of a word: 'phone' finds 'phones' but not 'headphone'), category, price range, currency, or seller location. Returns only currently active, purchasable listings (never sold, expired, or moderation-hidden ones). For full details on one specific product you already have the ID for (including its Semantic Profile fields -- suitable_for, not_ideal_for, target_audience, key_strengths, evokes, is_similar_to -- which this search tool does NOT return), call products.get instead. Results are paginated via next_cursor; pass it back as the cursor argument to fetch the next page. count is the total number of matching listings across all pages, not the number returned on this page. No authentication required.

NameRequiredDescriptionDefault
qNoFree-text search across the listing's canonical name and description, matched at the start of a word: 'phone' finds 'phone' and 'phones' but not 'headphone'.
sortNoResult ordering. Never influenced by paid placement.newest
limitNoMaximum number of results to return per page (1-50, default 20).
cursorNoOpaque pagination cursor from a previous response's next_cursor.
categoryNoNumeric top-level category id (see getMarketplaceInfo.categories). Subcategory ids are accepted but rolled up to their top-level parent in the response.
currencyNoISO 4217 code used for price filtering and each result's converted_price. Defaults to the signed-in caller's own currency; for an anonymous caller it's derived like on the website (country, then browser language), falling back to marketplace.info default_currency. Must be one of getMarketplaceInfo.currencies.
locationNoComma-separated seller-location filters. Each entry is a 2-letter ISO country code ("HU") or a "COUNTRY:REGION" pair ("HU:BU"). Reflects the seller's profile location, not a per-listing field.
price_maxNoMaximum price in the resolved `currency`.
price_minNoMinimum price in the resolved `currency` (converted price, not the seller's native currency).
seller_idNoRestrict results to one seller's listings. The uuid is the seller.id from any search or getProduct result.

Output Schema

NameRequiredDescription
countYesTotal number of matching listings across all pages (exact when the query is narrowed, an estimate otherwise) -- not the number returned on this page.
productsYes
next_cursorYesPass as `cursor` to get the next page; null when this is the last page.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations give readOnly/openWorld, but the description adds real value on top: only active, purchasable listings are returned (never sold/expired/moderation-hidden), no auth is required, and pagination uses next_cursor with count being the all-pages total. It also discloses that Semantic Profile fields are not returned. Slightly short of a 5 only because it doesn't detail rate limits or ordering guarantees beyond what's implied.

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

Conciseness4/5

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

Front-loaded with scope, then usage, then the products.get alternative, then pagination/count, then auth. Dense but each sentence carries distinct information; only minor tightening (e.g., the Semantic Profile field enumeration) is possible.

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

Completeness5/5

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

With 10 params all documented, an output schema present, and annotations covering safety, the description still supplies scope constraints, pagination mechanics, count semantics, auth status, and sibling routing. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds non-trivial semantics beyond the schema: prefix-at-word-start matching behavior, the distinction between count (total) and page size, and that cursor round-trips next_cursor. These clarify how results behave, not just what fields exist.

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

Purpose5/5

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

Opens with a specific verb and resource ("Search active, publicly available product listings on the Resollo marketplace") and explicitly contrasts itself with products.get for single-product lookups. An agent can distinguish it from every sibling without opening a schema.

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

Usage Guidelines5/5

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

States exactly when to use it (browse/filter by keyword, category, price, currency, location) and names the alternative ('call products.get instead') with the precise condition (you already have the ID). Explicit routing is provided.

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

questions.askAsk a question about a Resollo productA
Destructive
Inspect

Submits a public question about a product listing on behalf of the authenticated caller -- exactly the same product_questions record the web 'Ask a question' form creates. The seller can answer it on the Resollo web UI (with their own AI-drafted-answer assistant); this tool does not draft or send an answer. Question text is capped at 500 characters. Requires a signed-in Resollo user (OAuth sign-in, or an 'Authorization: Bearer ' header).

NameRequiredDescriptionDefault
questionYesThe public question text (1-500 characters).
product_idYesThe uuid of the product to ask about.

Output Schema

NameRequiredDescription
idYes
answerYes
messageYes
created_atYes
product_idYes
answered_atYes
questioner_nameNo

TDQS

A4.5/5.0
Behavior5/5

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

The description provides crucial operational details beyond the annotations, such as the 500-character cap on the question text and the exact authentication methods required (OAuth/Bearer header). It also explicitly states that the behavior is identical to the web form.

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 highly efficient, moving logically from core function to functional limitations and finally to technical requirements (authentication). It is neither overly verbose nor overly sparse.

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 (involving submission, authentication, character limits, and manual follow-up), the definition is complete. It addresses all necessary preconditions for a successful 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?

The schema coverage is 100%, so the schema itself already documents the parameters fully. The description only reinforces the character limit which is already in the schema, meeting the minimum viable standard.

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 explicitly states it submits a public question about a product listing. It uses a specific verb ('Submits') and clearly identifies the resource and the action taken on that resource.

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 definition provides excellent context on usage by explaining the full lifecycle: the tool submits the question, but the seller answers it manually on the web UI. This clarifies that the tool is for inquiry, not response automation.

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

questions.listGet a Resollo product's questions and answersA
Read-only
Inspect

Returns every question asked about a product listing, including the seller's answer where one exists (answer/answered_at are null for unanswered questions). Useful to check what past buyers already asked before asking a new one, or before advising a buyer on a purchase decision. Read-only, no authentication required.

NameRequiredDescriptionDefault
productIdYesThe product listing's uuid.

Output Schema

NameRequiredDescription
questionsYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so repetition of 'read-only' adds little, but 'no authentication required' is genuinely new operational context. The disclosure that answer/answered_at are null for unanswered questions is also valuable behavioral detail beyond annotations.

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

Conciseness5/5

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

Three tight sentences with zero waste; the return shape and null caveat come first, followed by usage, with the access constraints last. Nothing is padding.

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?

An output schema exists, so return format need not be spelled out, and the description still covers result semantics and access requirements. Only minor gaps remain, such as ordering or pagination expectations for products with many questions.

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

Parameters3/5

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

Schema description coverage is 100% with a single required productId documented as a UUID, so the schema carries the full burden. The description adds no further parameter meaning (e.g., no note on what happens with an unknown or malformed UUID), so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource (returns every question asked about a product listing) plus the shape of the result, including that answers are inlined with null semantics. This clearly separates it from siblings like questions.ask and reviews.list.

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

Usage Guidelines4/5

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

Explicitly names two use cases: checking what past buyers asked before asking a new one, and advising a buyer on a purchase. This implicitly routes the agent away from questions.ask, though it never names the alternative or any exclusion condition directly.

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

reviews.listGet a Resollo product's reviewsA
Read-only
Inspect

Returns the reviews left for a product by past buyers (rating, message, date), plus the product's average rating and review count. Every review is tied to a real, verified order line -- only actual buyers can leave one. Useful to judge product/seller quality before advising a buyer on a purchase decision. Read-only, no authentication required.

NameRequiredDescriptionDefault
productIdYesThe product listing's uuid.

Output Schema

NameRequiredDescription
reviewsYes
avg_ratingYes
review_countYes

TDQS

A4.2/5.0
Behavior4/5

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

The description adds useful behavioral context beyond the annotations: reviews are tied to verified order lines, only actual buyers can leave them, and no authentication is required. It does not cover pagination, sorting, or error behavior, but the output schema exists and annotations already declare read-only status.

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 front-loaded and each sentence mostly earns its place by covering returns, provenance, usage, and safety. The final sentence partly repeats the read-only annotation, which keeps it slightly below maximally concise.

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

Completeness5/5

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

For a simple read-only tool with one well-documented parameter, an output schema, and annotations covering safety, the description is complete enough. It explains what is returned, why the data is trustworthy, and when it is useful.

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?

There is one required parameter, productId, and schema description coverage is 100%, so the schema already documents it as the product listing's UUID. The description only implies the parameter via 'for a product' and adds no further syntax or format 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 states a specific verb and resource: it returns reviews for a product, including rating, message, date, average rating, and review count. This is clearly distinguishable from sibling tools like products.get or orders.list, which cover different resources.

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 clear usage context by saying the reviews are useful to judge product or seller quality before advising a buyer. However, it does not explicitly compare against alternatives or state when not to use this tool.

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

sellers.getGet a Resollo seller's public profileA
Read-only
Inspect

Returns a seller's public profile -- the same information the web /user/ profile page shows: display name, avatar URL, about text, identity-verification badge, location (country/region/city), when they joined, accepted payment/shipment methods, whether they have a fully active Stripe Connect account, their number of currently active listings, completed-sale count, follower count, and their positive-feedback rating (0-5, null if they have no feedback yet). Useful for judging seller reputation before advising a buyer, or to get the shop_url for browsing everything they sell (pass the same seller id as search's seller_id filter). Read-only, no authentication required.

NameRequiredDescriptionDefault
sellerIdYesThe seller's uuid -- the seller.id from any search or getProduct result.

Output Schema

NameRequiredDescription
idYes
cityYes
nameYes
aboutYes
ratingYes
shop_urlYes
avatar_urlYes
sold_countYes
is_verifiedYes
profile_urlYes
region_codeYes
country_codeYes
member_sinceYes
feedback_countYes
follower_countYes
active_listing_countYes
stripe_connect_activeYes
accepted_payment_methodsYes
accepted_shipment_methodsYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered; the description nevertheless adds the authentication fact ('no authentication required') and discloses null semantics for the rating field. It does not contradict the annotations in any way, though the 'read-only' restatement is redundant.

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

Conciseness4/5

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

Front-loaded with the core action, then the field inventory. The long enumerations of fields largely duplicate what the output schema already conveys, so a few clauses are less load-bearing than they look, but no sentence is filler and the reputation/URL framing 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?

With only one required parameter and a full output schema, the description is more than complete enough: it covers purpose, auth, and return semantics. The only shortfall is not routing the agent to sellers.listings for the actual item list after obtaining shop_url.

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 uuid format and pattern are fully documented in the schema. The description adds real value by explaining where the id comes from ('the same seller id as search's seller_id filter' / 'seller.id from any search or getProduct result'), which is 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?

States a specific verb and resource ('Returns a seller's public profile') and enumerates the exact fields returned, drawing an explicit parallel to the web /user/<id> page. This clearly separates it from siblings like sellers.listings, sellers.status, and reviews.list, which cover other slices of seller data.

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

Usage Guidelines4/5

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

Gives two concrete use cases ('judging seller reputation before advising a buyer', 'get the shop_url for browsing everything they sell') and even cross-references the seller_id filter used by search. What is missing is an explicit when-not / alternative pointer — e.g. that sellers.listings is the tool for fetching the items themselves.

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

sellers.listingsList the authenticated seller's own listings (any state)A
Read-only
Inspect

Returns the caller's own product listings in EVERY state -- active, inactive, pending moderation, rejected, and closed -- not just the publicly visible ones (soft-deleted listings are excluded). Use this to find a draft created earlier with products.create (those sit in state 'inactive' until the seller activates them) when you no longer have its product_id, or to review what the seller currently has listed. Each entry includes the listing's state, category, condition, price, quantity, and an edit_url (the seller's product page where an inactive draft is reviewed and activated). A products.create draft's price is the midpoint of Resollo's AI price suggestion; the seller can change it before activating. Optionally filter to a single state. Read-only, no side effects. Requires a signed-in Resollo user (OAuth sign-in, or an 'Authorization: Bearer ' header).

NameRequiredDescriptionDefault
limitNoMaximum number of most-recent listings to return (1-100, default 50).
stateNoOptional filter to a single listing state. 'inactive' is where products.create drafts sit until the seller activates them. When omitted, listings in every state are returned.

Output Schema

NameRequiredDescription
countYes
listingsYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so the 'Read-only, no side effects' line is redundant, but the description still earns credit by disclosing that soft-deleted listings are excluded and spelling out the auth requirement (OAuth sign-in or Bearer agent API key header). It also explains the lifecycle semantics of 'inactive' drafts and where edit_url points.

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

Conciseness4/5

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

The most important fact — all states, not just public ones — is front-loaded, and each sentence is informational. It runs long, though, and the aside about drafts carrying the midpoint of Resollo's AI price suggestion is tangential to selecting or invoking the tool.

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

Completeness5/5

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

Everything an agent needs to choose and call this tool is present: state coverage, the draft-recovery use case, auth prerequisites, exclusion of soft-deleted items, and optional filtering. Return values are already covered by the output schema, and the description's field summary is a bonus rather than a requirement.

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

Parameters3/5

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

Schema coverage is 100% and both parameters are fully documented there, including the state enum and limit bounds, so baseline 3 applies. The description restates 'optionally filter to a single state' and the meaning of 'inactive' without adding anything the schema does not already say, and it never mentions 'limit'.

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

Purpose5/5

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

States a specific verb and resource ('Returns the caller's own product listings') and pins down the scope precisely: every state including inactive, pending_moderation, rejected, closed, excluding soft-deleted. This distinguishes it cleanly from public-search siblings like products.search and from products.get / products.create.

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

Usage Guidelines4/5

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

Gives two explicit usage triggers: recovering a draft created with products.create when the product_id is lost, and reviewing what the seller currently has listed. It implicitly excludes public-facing search ('not just the publicly visible ones') but never names products.search or products.get as the alternative for that case.

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

sellers.statusGet the authenticated seller's current listing statusA
Read-only
Inspect

Returns the authenticated user's current listing capabilities: whether they can create a new listing right now (subscription plan limit), whether they have a payment/shipment method configured (both required before products.create will succeed), the max images and price their plan allows (max_price null = no price cap), and their remaining AI credit balance (each draft listing costs 2 credits, charged when it is created from the uploaded photos). Call this BEFORE asking the user for photos or calling products.create, so you can tell the user upfront if something would block listing creation, instead of finding out only after a failed attempt. If the credit balance is too low, ai_credits_purchase_url is the seller's resollo.com page for buying more (translate_credits_purchase_url likewise for translation credits). Read-only, no side effects.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
planYesName of the seller's active subscription plan (e.g. Free, Standard, Commission); null if none is active.
currencyYesThe user's own currency (ISO 4217). Search, product and order tools return prices in it when you don't pass currency -- use it for price_min/price_max too.
max_priceYesThe plan's price cap per listing; null means no cap.
max_imagesYesMax photos per listing on the seller's plan.
max_productsYes
listing_countYesThe seller's current listings counted against max_products: every non-deleted listing, inactive drafts and closed ones included.
payment_methodsYesPayment method codes the seller accepts (see marketplace.info), e.g. cash, card, stripe.
plan_expires_atYesWhen the active plan ends (ISO 8601); null if it has no end date (commission plan) or none is active.
shipment_methodsYesShipment method codes the seller offers (see marketplace.info), e.g. personal, courier.
has_payment_methodYes
can_create_auctionsYes
can_create_productsYes
has_shipment_methodYes
ai_credits_remainingYes
ai_credits_purchase_urlYes
translate_credits_remainingYes
translate_credits_purchase_urlYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint=false, yet the description still adds real behavioral context: each draft listing costs 2 credits charged at creation time, max_price null means no cap, and ai_credits_purchase_url/translate_credits_purchase_url are the remediation paths. The closing 'Read-only, no side effects' mostly restates the annotation, which keeps it from a 5.

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

Conciseness4/5

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

The purpose and the capability list are front-loaded in the first sentence and everything after it is actionable. It is dense and somewhat run-on (the parenthetical asides stack up), but no sentence is pure filler.

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

Completeness5/5

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

With an output schema present, the description does not need to document return shapes, and it correctly focuses on when to call and how to interpret the credit/price results. Nothing an agent needs in order to invoke this zero-param read tool is missing.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. The description instead documents the semantic meaning of returned values (null max_price = no price cap, required payment/shipment config), which is helpful but technically return-value information rather than parameter meaning.

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

Purpose5/5

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

States a specific verb and resource — it returns the authenticated seller's listing capabilities — and enumerates the concrete fields (listing permission, payment/shipment config, image/price limits, AI credit balance). This is clearly distinguishable from siblings like sellers.get or sellers.listings, which retrieve profile/listing data rather than a pre-flight capability check.

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

Usage Guidelines5/5

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

Gives an explicit ordering rule: call this BEFORE asking the user for photos or calling products.create, and explains why (surface blockers upfront rather than after a failed attempt). It also names the concrete downstream condition — products.create will not succeed without a payment/shipment method — which is exactly the when-to-use signal an agent needs.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updates
    • Changedoffers.list6 fields changed
      • removedOutput schema / properties / count / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / count / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / offers / items / properties / created_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / offers / items / properties / created_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / offers / items / properties / expires_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / offers / items / properties / expires_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedorders.list8 fields changed
      • removedOutput schema / properties / count / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / count / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / orders / items / properties / completed_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / orders / items / properties / completed_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / orders / items / properties / counterparty / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / orders / items / properties / counterparty / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / orders / items / properties / created_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / orders / items / properties / created_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedorders.place2 fields changed
      • removedOutput schema / properties / payment_safety / properties / currency_mismatch / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / payment_safety / properties / currency_mismatch / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedorders.status8 fields changed
      • removedOutput schema / properties / carrier / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / carrier / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / completed_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / completed_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / created_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / created_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / tracking_number / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / tracking_number / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedproducts.get20 fields changed
      • removedOutput schema / properties / auction_ends_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / auction_ends_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / created_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / created_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / guarantee / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / guarantee / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / image_url / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / image_url / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / min_price / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / min_price / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / seller / properties / alias / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / seller / properties / alias / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / seller / properties / city / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / seller / properties / city / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / seller / properties / country_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / seller / properties / country_code / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / seller / properties / region_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / seller / properties / region_code / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / unit / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / unit / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedproducts.search16 fields changed
      • removedOutput schema / properties / count / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / count / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / next_cursor / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / next_cursor / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / products / items / properties / auction_ends_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / products / items / properties / auction_ends_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / products / items / properties / created_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / products / items / properties / created_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / products / items / properties / image_url / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / products / items / properties / image_url / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / products / items / properties / seller / properties / alias / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / products / items / properties / seller / properties / alias / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / products / items / properties / seller / properties / country_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / products / items / properties / seller / properties / country_code / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / products / items / properties / seller / properties / region_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / products / items / properties / seller / properties / region_code / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedquestions.ask6 fields changed
      • removedOutput schema / properties / answer / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / answer / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / answered_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / answered_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / questioner_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / questioner_name / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedquestions.list6 fields changed
      • removedOutput schema / properties / questions / items / properties / answer / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / questions / items / properties / answer / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / questions / items / properties / answered_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / questions / items / properties / answered_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / questions / items / properties / questioner_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / questions / items / properties / questioner_name / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedreviews.list4 fields changed
      • removedOutput schema / properties / avg_rating / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / avg_rating / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / reviews / items / properties / message / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / reviews / items / properties / message / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedsellers.get12 fields changed
      • removedOutput schema / properties / about / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / about / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / city / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / city / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / country_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / country_code / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / member_since / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / member_since / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / rating / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / rating / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / region_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / region_code / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedsellers.listings4 fields changed
      • removedOutput schema / properties / listings / items / properties / created_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / listings / items / properties / created_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / listings / items / properties / updated_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / listings / items / properties / updated_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedsellers.status6 fields changed
      • removedOutput schema / properties / max_price / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / max_price / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / plan / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / plan / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / plan_expires_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / plan_expires_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
  2. 3 tool updates
    • Changedmarketplace.info1 field changed
      • addedOutput schema / properties / default_currency / description
        Added value: +"Last-resort fallback only, used when the caller's currency can't be determined. A signed-in caller gets prices in their own currency (sellers.status.currency); an anonymous one in a currency derived like on the website (country, then browser language)."
    • Changedoffers.list2 fields changed
      • changedInput schema / properties / role / description
        Previous value: -"Whose side to list from: 'buyer' returns offers you sent, 'seller' returns offers received on your listings."New value: +"Whose side to list from: 'buyer' returns offers you sent, 'seller' returns offers received on your listings. Omit for both, newest first (each entry's role says which side it is)."
      • removedInput schema / required
        Removed value: -[
        -  "role"
        -]
    • Changedorders.list2 fields changed
      • changedInput schema / properties / role / description
        Previous value: -"Whose side to list from: 'buyer' returns orders you placed, 'seller' returns orders on your listings."New value: +"Whose side to list from: 'buyer' returns orders you placed, 'seller' returns orders on your listings. Omit for both, newest first (each entry's role says which side it is)."
      • removedInput schema / required
        Removed value: -[
        -  "role"
        -]
  3. 1 tool update
    • Changedproducts.create1 field changed
      • changedOutput schema / properties / upload_url / description
        Previous value: -"Resollo page where the seller can pick the photos instead (signed in on resollo.com; phone gallery or camera works too). Give it to the user if your client didn't show Resollo's photo picker panel."New value: +"Resollo page where the seller can pick the photos instead (signed in on resollo.com; phone gallery or camera works too). Give it to the user if your client didn't show Resollo's photo picker panel. It is not tied to this call: an upload there creates its own draft -- find it with sellers.listings."
  4. 2 tool updates
    • Changedproducts.get2 fields changed
      • changedOutput schema / properties / shipment_prices / description
        Previous value: -"Shipping cost estimate per shipment method (courier, postal, locker), each with local and international text ranges such as \"1000-3000\", in shipment_prices_currency (the listing's own currency, NOT converted). Empty when the listing only offers personal pickup."New value: +"Shipping cost estimate per shipment method (courier, postal, locker), each with local and international text ranges such as \"1000-3000\", in shipment_prices_currency (NOT converted). Empty when the listing only offers personal pickup."
      • changedOutput schema / properties / shipment_prices_currency / description
        Previous value: -"Currency of the shipment_prices ranges: always the listing's own currency (price.currency), even when converted_price is in another currency."New value: +"Currency of the shipment_prices ranges. Always equal to price.currency (the listing's own currency), even when converted_price is in another currency."
    • Changedsellers.status2 fields changed
      • addedOutput schema / properties / currency
        Added value: +{
        +  "description": "The user's own currency (ISO 4217). Search, product and order tools return prices in it when you don't pass currency -- use it for price_min/price_max too.",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "payment_methods",
        -  "shipment_methods",
        -  "plan",
        -  "plan_expires_at",
        -  "can_create_products",
        -  "max_products",
        -  "listing_count",
        -  "can_create_auctions",
        -  "has_payment_method",
        -  "has_shipment_method",
        -  "max_images",
        -  "max_price",
        -  "ai_credits_remaining",
        -  "translate_credits_remaining",
        -  "ai_credits_purchase_url",
        -  "translate_credits_purchase_url"
        -]New value: +[
        +  "currency",
        +  "payment_methods",
        +  "shipment_methods",
        +  "plan",
        +  "plan_expires_at",
        +  "can_create_products",
        +  "max_products",
        +  "listing_count",
        +  "can_create_auctions",
        +  "has_payment_method",
        +  "has_shipment_method",
        +  "max_images",
        +  "max_price",
        +  "ai_credits_remaining",
        +  "translate_credits_remaining",
        +  "ai_credits_purchase_url",
        +  "translate_credits_purchase_url"
        +]
  5. 1 tool update
    • Changedproducts.get3 fields changed
      • changedOutput schema / properties / shipment_prices / description
        Previous value: -"Shipping cost estimate per shipment method (courier, postal, locker), each with local and international text ranges such as \"1000-3000\", in the listing's own currency (price.currency). Empty when the listing only offers personal pickup."New value: +"Shipping cost estimate per shipment method (courier, postal, locker), each with local and international text ranges such as \"1000-3000\", in shipment_prices_currency (the listing's own currency, NOT converted). Empty when the listing only offers personal pickup."
      • addedOutput schema / properties / shipment_prices_currency
        Added value: +{
        +  "description": "Currency of the shipment_prices ranges: always the listing's own currency (price.currency), even when converted_price is in another currency.",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "description",
        -  "category",
        -  "condition",
        -  "price",
        -  "converted_price",
        -  "listing_type",
        -  "auction_ends_at",
        -  "quantity_available",
        -  "image_url",
        -  "seller",
        -  "url",
        -  "created_at",
        -  "unit",
        -  "guarantee",
        -  "min_price",
        -  "offers_enabled",
        -  "attributes",
        -  "semantic_profile",
        -  "image_urls",
        -  "shipment_prices"
        -]New value: +[
        +  "id",
        +  "name",
        +  "description",
        +  "category",
        +  "condition",
        +  "price",
        +  "converted_price",
        +  "listing_type",
        +  "auction_ends_at",
        +  "quantity_available",
        +  "image_url",
        +  "seller",
        +  "url",
        +  "created_at",
        +  "unit",
        +  "guarantee",
        +  "min_price",
        +  "offers_enabled",
        +  "attributes",
        +  "semantic_profile",
        +  "image_urls",
        +  "shipment_prices",
        +  "shipment_prices_currency"
        +]
  6. 5 tool updates
    • Changedorders.list1 field changed
      • changedInput schema / properties / currency / description
        Previous value: -"ISO 4217 code for the returned price fields. Defaults to USD. Same semantics as in search_products."New value: +"ISO 4217 code for the returned price fields. Same default as in search_products (the caller's own currency, else derived like on the website, else marketplace.info default_currency)."
    • Changedorders.status1 field changed
      • changedInput schema / properties / currency / description
        Previous value: -"ISO 4217 code for the returned price fields. Defaults to USD. Same semantics as in search_products."New value: +"ISO 4217 code for the returned price fields. Same default as in search_products (the caller's own currency, else derived like on the website, else marketplace.info default_currency)."
    • Changedproducts.get1 field changed
      • changedInput schema / properties / currency / description
        Previous value: -"ISO 4217 code for the returned price fields. Defaults to USD. Same semantics as in search_products."New value: +"ISO 4217 code for the returned price fields. Same default as in search_products (the caller's own currency, else derived like on the website, else marketplace.info default_currency)."
    • Changedproducts.search2 fields changed
      • changedInput schema / properties / currency / description
        Previous value: -"ISO 4217 code used for price filtering and each result's converted_price. Defaults to USD. Must be one of getMarketplaceInfo.currencies."New value: +"ISO 4217 code used for price filtering and each result's converted_price. Defaults to the signed-in caller's own currency; for an anonymous caller it's derived like on the website (country, then browser language), falling back to marketplace.info default_currency. Must be one of getMarketplaceInfo.currencies."
      • changedInput schema / properties / q / description
        Previous value: -"Free-text search across the listing's canonical name and description."New value: +"Free-text search across the listing's canonical name and description, matched at the start of a word: 'phone' finds 'phone' and 'phones' but not 'headphone'."
    • Changedsellers.status2 fields changed
      • addedOutput schema / properties / max_images / description
        Added value: +"Max photos per listing on the seller's plan."
      • addedOutput schema / properties / max_price / description
        Added value: +"The plan's price cap per listing; null means no cap."
  7. 1 tool update
    • Changedmarketplace.info2 fields changed
      • removedOutput schema / properties / limits / properties / create_product_max_images
        Removed value: -{
        -  "type": "number"
        -}
      • changedOutput schema / properties / limits / required
        Previous value: -[
        -  "search_max_limit",
        -  "create_product_max_images"
        -]New value: +[
        +  "search_max_limit"
        +]
  8. 1 tool update
    • Changedproducts.create2 fields changed
      • changedOutput schema / properties / direct_upload / required
        Previous value: -[
        -  "headers",
        -  "requirements",
        -  "expires_in_seconds"
        -]New value: +[
        +  "put_urls",
        +  "headers",
        +  "requirements",
        +  "expires_in_seconds"
        +]
      • changedOutput schema / required
        Previous value: -[
        -  "status",
        -  "upload_url",
        -  "max_images",
        -  "direct_upload"
        -]New value: +[
        +  "status",
        +  "upload_url",
        +  "max_images"
        +]
  9. 1 tool update
    • Changedproducts.create4 fields changed
      • changedOutput schema / properties / direct_upload / description
        Previous value: -"For agents that have a tool to create the WebP files (e.g. the free photo MCP servers at github.com/resollo/mcp-servers, ImageMagick or cwebp) and can send an HTTP PUT: upload the photos yourself instead of the picker. Create each photo as WebP, at most max_dimension_px on its longest side, under max_bytes, with metadata stripped, then PUT the raw bytes to put_urls[i] (e.g. `curl -X PUT -H 'Content-Type: image/webp' -H 'apikey: …' --data-binary @0.webp '<put_url>'`), and call products.createFromUpload with upload_id. Resollo never converts photos: if you can't produce such files, let the seller use the photo picker or upload_url."New value: +"For agents that have a tool to create the WebP files (e.g. the free photo MCP servers at github.com/resollo/mcp-servers, ImageMagick or cwebp) and can send an HTTP PUT: upload the photos yourself instead of the picker. Create each photo as WebP, at most max_dimension_px on its longest side, under max_bytes, with metadata stripped, then PUT the raw bytes to put_urls[i] (e.g. `curl -X PUT -H 'Content-Type: image/webp' -H 'apikey: …' --data-binary @0.webp '<put_url>'`), and call products.createFromUpload with upload_id. Resollo never converts photos: if you can't produce such files, let the seller use the photo picker or upload_url. Only returned for upload: 'direct' (and always over REST)."
      • changedOutput schema / properties / direct_upload / required
        Previous value: -[
        -  "put_urls",
        -  "headers",
        -  "requirements",
        -  "expires_in_seconds"
        -]New value: +[
        +  "headers",
        +  "requirements",
        +  "expires_in_seconds"
        +]
      • changedOutput schema / properties / upload_id / description
        Previous value: -"Identifies this upload; pass it to products.createFromUpload after a direct upload."New value: +"Identifies this upload; pass it to products.createFromUpload after a direct upload. Only returned for upload: 'direct' (and always over REST)."
      • changedOutput schema / required
        Previous value: -[
        -  "status",
        -  "upload_url",
        -  "max_images",
        -  "upload_id",
        -  "direct_upload"
        -]New value: +[
        +  "status",
        +  "upload_url",
        +  "max_images",
        +  "direct_upload"
        +]
  10. 1 tool update
    • Changedproducts.create1 field changed
      • addedInput schema / properties / upload
        Added value: +{
        +  "default": "picker",
        +  "description": "'picker' (default): the seller picks the photos in Resollo's photo picker. 'direct': you will upload the photos yourself (see direct_upload in the result); the picker panel then stays hidden.",
        +  "enum": [
        +    "picker",
        +    "direct"
        +  ],
        +  "type": "string"
        +}
  11. 2 tool updates
    • Changedproducts.create3 fields changed
      • addedOutput schema / properties / direct_upload
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "For agents that have a tool to create the WebP files (e.g. the free photo MCP servers at github.com/resollo/mcp-servers, ImageMagick or cwebp) and can send an HTTP PUT: upload the photos yourself instead of the picker. Create each photo as WebP, at most max_dimension_px on its longest side, under max_bytes, with metadata stripped, then PUT the raw bytes to put_urls[i] (e.g. `curl -X PUT -H 'Content-Type: image/webp' -H 'apikey: …' --data-binary @0.webp '<put_url>'`), and call products.createFromUpload with upload_id. Resollo never converts photos: if you can't produce such files, let the seller use the photo picker or upload_url.",
        +  "properties": {
        +    "expires_in_seconds": {
        +      "type": "number"
        +    },
        +    "headers": {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "description": "Send these headers with every PUT.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "put_urls": {
        +      "description": "One signed URL per photo slot, in photo order (index 0 is the cover). Upload with HTTP PUT.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "requirements": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "format": {
        +          "const": "image/webp",
        +          "type": "string"
        +        },
        +        "max_bytes": {
        +          "type": "number"
        +        },
        +        "max_dimension_px": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "format",
        +        "max_dimension_px",
        +        "max_bytes"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "put_urls",
        +    "headers",
        +    "requirements",
        +    "expires_in_seconds"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / upload_id
        Added value: +{
        +  "description": "Identifies this upload; pass it to products.createFromUpload after a direct upload.",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "status",
        -  "upload_url",
        -  "max_images"
        -]New value: +[
        +  "status",
        +  "upload_url",
        +  "max_images",
        +  "upload_id",
        +  "direct_upload"
        +]
    • Changedproducts.createFromUpload1 field changed
      • changedInput schema / properties / upload_id / description
        Previous value: -"The upload id the photo picker panel received from products.create."New value: +"The upload_id returned by products.create."
  12. 2 tool updates
    • Changedsellers.listings3 fields changed
      • addedOutput schema / properties / listings / items / properties / category
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "id": {
        +      "type": "number"
        +    },
        +    "key": {
        +      "type": "string"
        +    },
        +    "name_en": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "key",
        +    "name_en"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / listings / items / properties / condition
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "key": {
        +      "type": "string"
        +    },
        +    "name_en": {
        +      "type": "string"
        +    },
        +    "value": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "value",
        +    "key",
        +    "name_en"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / properties / listings / items / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "state",
        -  "state_flags",
        -  "listing_type",
        -  "price",
        -  "quantity",
        -  "offers_enabled",
        -  "edit_url",
        -  "created_at",
        -  "updated_at"
        -]New value: +[
        +  "id",
        +  "name",
        +  "state",
        +  "state_flags",
        +  "listing_type",
        +  "category",
        +  "condition",
        +  "price",
        +  "quantity",
        +  "offers_enabled",
        +  "edit_url",
        +  "created_at",
        +  "updated_at"
        +]
    • Changedsellers.status3 fields changed
      • addedOutput schema / properties / payment_methods
        Added value: +{
        +  "description": "Payment method codes the seller accepts (see marketplace.info), e.g. cash, card, stripe.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / shipment_methods
        Added value: +{
        +  "description": "Shipment method codes the seller offers (see marketplace.info), e.g. personal, courier.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "plan",
        -  "plan_expires_at",
        -  "can_create_products",
        -  "max_products",
        -  "listing_count",
        -  "can_create_auctions",
        -  "has_payment_method",
        -  "has_shipment_method",
        -  "max_images",
        -  "max_price",
        -  "ai_credits_remaining",
        -  "translate_credits_remaining",
        -  "ai_credits_purchase_url",
        -  "translate_credits_purchase_url"
        -]New value: +[
        +  "payment_methods",
        +  "shipment_methods",
        +  "plan",
        +  "plan_expires_at",
        +  "can_create_products",
        +  "max_products",
        +  "listing_count",
        +  "can_create_auctions",
        +  "has_payment_method",
        +  "has_shipment_method",
        +  "max_images",
        +  "max_price",
        +  "ai_credits_remaining",
        +  "translate_credits_remaining",
        +  "ai_credits_purchase_url",
        +  "translate_credits_purchase_url"
        +]
  13. 4 tool updates
    • Changedoffers.list2 fields changed
      • addedOutput schema / properties / count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "offers"
        -]New value: +[
        +  "offers",
        +  "count"
        +]
    • Changedproducts.get3 fields changed
      • addedOutput schema / properties / seller / properties / accepted_payment_methods / description
        Added value: +"Payment method codes (see marketplace.info). 'card' means paying by card directly to the seller, e.g. on handover -- not online; online card payment is 'stripe' and needs stripe_connect_active."
      • addedOutput schema / properties / seller / properties / stripe_connect_active / description
        Added value: +"Whether online card payment through Resollo (payment method 'stripe') is available from this seller."
      • addedOutput schema / properties / shipment_prices / description
        Added value: +"Shipping cost estimate per shipment method (courier, postal, locker), each with local and international text ranges such as \"1000-3000\", in the listing's own currency (price.currency). Empty when the listing only offers personal pickup."
    • Changedproducts.search2 fields changed
      • addedOutput schema / properties / count / description
        Added value: +"Total number of matching listings across all pages (exact when the query is narrowed, an estimate otherwise) -- not the number returned on this page."
      • addedOutput schema / properties / next_cursor / description
        Added value: +"Pass as `cursor` to get the next page; null when this is the last page."
    • Changedsellers.status4 fields changed
      • addedOutput schema / properties / listing_count
        Added value: +{
        +  "description": "The seller's current listings counted against max_products: every non-deleted listing, inactive drafts and closed ones included.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / plan
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Name of the seller's active subscription plan (e.g. Free, Standard, Commission); null if none is active."
        +}
      • addedOutput schema / properties / plan_expires_at
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "When the active plan ends (ISO 8601); null if it has no end date (commission plan) or none is active."
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "can_create_products",
        -  "max_products",
        -  "can_create_auctions",
        -  "has_payment_method",
        -  "has_shipment_method",
        -  "max_images",
        -  "max_price",
        -  "ai_credits_remaining",
        -  "translate_credits_remaining",
        -  "ai_credits_purchase_url",
        -  "translate_credits_purchase_url"
        -]New value: +[
        +  "plan",
        +  "plan_expires_at",
        +  "can_create_products",
        +  "max_products",
        +  "listing_count",
        +  "can_create_auctions",
        +  "has_payment_method",
        +  "has_shipment_method",
        +  "max_images",
        +  "max_price",
        +  "ai_credits_remaining",
        +  "translate_credits_remaining",
        +  "ai_credits_purchase_url",
        +  "translate_credits_purchase_url"
        +]
  14. 2 tool updates
    • Changedproducts.create21 fields changed
      • removedInput schema / properties / category_id
        Removed value: -{
        -  "description": "Optional override for the AI-chosen category id (see getMarketplaceInfo.categories).",
        -  "exclusiveMinimum": 0,
        -  "maximum": 9007199254740991,
        -  "type": "integer"
        -}
      • removedInput schema / properties / condition
        Removed value: -{
        -  "description": "Optional override for the AI-chosen condition code (see getMarketplaceInfo.conditions).",
        -  "exclusiveMinimum": 0,
        -  "maximum": 9007199254740991,
        -  "type": "integer"
        -}
      • removedInput schema / properties / description
        Removed value: -{
        -  "description": "Optional override for the AI-generated description.",
        -  "maxLength": 500,
        -  "minLength": 1,
        -  "type": "string"
        -}
      • removedInput schema / properties / guarantee
        Removed value: -{
        -  "description": "Optional warranty / guarantee text.",
        -  "maxLength": 500,
        -  "type": "string"
        -}
      • removedInput schema / properties / images
        Removed value: -{
        -  "description": "1-5 real photo files of the item. Resollo's own AI generates the listing content from these.",
        -  "items": {
        -    "properties": {
        -      "data": {
        -        "description": "Base64-encoded image bytes (never a URL).",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "mime_type": {
        -        "description": "Declared image type. Only a hint -- the decoded bytes are re-validated server-side.",
        -        "enum": [
        -          "image/jpeg",
        -          "image/png",
        -          "image/webp"
        -        ],
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "mime_type",
        -      "data"
        -    ],
        -    "type": "object"
        -  },
        -  "maxItems": 5,
        -  "minItems": 1,
        -  "type": "array"
        -}
      • removedInput schema / properties / is_business_listing
        Removed value: -{
        -  "default": false,
        -  "description": "Whether this is a business (vs. private) listing.",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / name
        Removed value: -{
        -  "description": "Optional override for the AI-generated title.",
        -  "maxLength": 100,
        -  "minLength": 1,
        -  "type": "string"
        -}
      • removedInput schema / properties / offers_enabled
        Removed value: -{
        -  "default": true,
        -  "description": "Whether buyers may send Make-an-Offer bids on the listing.",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / price
        Removed value: -{
        -  "description": "Optional fixed price override. When omitted, Resollo's AI price-suggestion sets it.",
        -  "exclusiveMinimum": 0,
        -  "type": "number"
        -}
      • removedInput schema / properties / quantity
        Removed value: -{
        -  "default": 1,
        -  "description": "Units available (default 1).",
        -  "maximum": 9007199254740991,
        -  "minimum": 1,
        -  "type": "integer"
        -}
      • removedInput schema / properties / unit
        Removed value: -{
        -  "default": "piece",
        -  "description": "Unit of sale (default \"piece\").",
        -  "maxLength": 20,
        -  "type": "string"
        -}
      • removedInput schema / required
        Removed value: -[
        -  "images"
        -]
      • removedOutput schema / properties / activation_url
        Removed value: -{
        -  "type": "string"
        -}
      • addedOutput schema / properties / max_images
        Added value: +{
        +  "description": "How many photos the seller's plan allows per listing.",
        +  "type": "number"
        +}
      • removedOutput schema / properties / product_id
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / quota_remaining
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "autofill": {
        -      "type": "number"
        -    },
        -    "price_suggestion": {
        -      "type": "number"
        -    }
        -  },
        -  "required": [
        -    "autofill",
        -    "price_suggestion"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / state
        Removed value: -{
        -  "const": "inactive",
        -  "type": "string"
        -}
      • addedOutput schema / properties / status
        Added value: +{
        +  "const": "awaiting_photos",
        +  "type": "string"
        +}
      • removedOutput schema / properties / suggested
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "attributes": {
        -      "additionalProperties": {
        -        "type": "string"
        -      },
        -      "propertyNames": {
        -        "type": "string"
        -      },
        -      "type": "object"
        -    },
        -    "category": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "number"
        -        },
        -        "key": {
        -          "type": "string"
        -        },
        -        "name_en": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "key",
        -        "name_en"
        -      ],
        -      "type": "object"
        -    },
        -    "condition": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "key": {
        -          "type": "string"
        -        },
        -        "name_en": {
        -          "type": "string"
        -        },
        -        "value": {
        -          "type": "number"
        -        }
        -      },
        -      "required": [
        -        "value",
        -        "key",
        -        "name_en"
        -      ],
        -      "type": "object"
        -    },
        -    "description": {
        -      "type": "string"
        -    },
        -    "name": {
        -      "type": "string"
        -    },
        -    "price": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "amount": {
        -          "type": "number"
        -        },
        -        "currency": {
        -          "type": "string"
        -        },
        -        "max": {
        -          "type": "number"
        -        },
        -        "min": {
        -          "type": "number"
        -        },
        -        "reasoning": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "amount",
        -        "currency",
        -        "min",
        -        "max",
        -        "reasoning"
        -      ],
        -      "type": "object"
        -    },
        -    "semantic_profile": {
        -      "anyOf": [
        -        {
        -          "additionalProperties": {},
        -          "propertyNames": {
        -            "type": "string"
        -          },
        -          "type": "object"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    },
        -    "shipment_prices": {
        -      "additionalProperties": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "international": {
        -            "type": "string"
        -          },
        -          "local": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "local",
        -          "international"
        -        ],
        -        "type": "object"
        -      },
        -      "propertyNames": {
        -        "type": "string"
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "required": [
        -    "name",
        -    "description",
        -    "category",
        -    "condition",
        -    "attributes",
        -    "semantic_profile",
        -    "shipment_prices",
        -    "price"
        -  ],
        -  "type": "object"
        -}
      • addedOutput schema / properties / upload_url
        Added value: +{
        +  "description": "Resollo page where the seller can pick the photos instead (signed in on resollo.com; phone gallery or camera works too). Give it to the user if your client didn't show Resollo's photo picker panel.",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "product_id",
        -  "state",
        -  "suggested",
        -  "activation_url",
        -  "quota_remaining"
        -]New value: +[
        +  "status",
        +  "upload_url",
        +  "max_images"
        +]
    • Addedproducts.createFromUpload
  15. 1 tool update
    • Changedsellers.status3 fields changed
      • addedOutput schema / properties / ai_credits_purchase_url
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / translate_credits_purchase_url
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "can_create_products",
        -  "max_products",
        -  "can_create_auctions",
        -  "has_payment_method",
        -  "has_shipment_method",
        -  "max_images",
        -  "max_price",
        -  "ai_credits_remaining",
        -  "translate_credits_remaining"
        -]New value: +[
        +  "can_create_products",
        +  "max_products",
        +  "can_create_auctions",
        +  "has_payment_method",
        +  "has_shipment_method",
        +  "max_images",
        +  "max_price",
        +  "ai_credits_remaining",
        +  "translate_credits_remaining",
        +  "ai_credits_purchase_url",
        +  "translate_credits_purchase_url"
        +]
  16. 1 tool update
    • Changedsellers.status2 fields changed
      • addedOutput schema / properties / translate_credits_remaining
        Added value: +{
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "can_create_products",
        -  "max_products",
        -  "can_create_auctions",
        -  "has_payment_method",
        -  "has_shipment_method",
        -  "max_images",
        -  "max_price",
        -  "ai_credits_remaining"
        -]New value: +[
        +  "can_create_products",
        +  "max_products",
        +  "can_create_auctions",
        +  "has_payment_method",
        +  "has_shipment_method",
        +  "max_images",
        +  "max_price",
        +  "ai_credits_remaining",
        +  "translate_credits_remaining"
        +]
  17. 3 tool updates
    • Addedoffers.list
    • Addedorders.list
    • Addedsellers.listings

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Federated marketplace that indexes listings from personal humanMCP servers, enabling search across offers, trades, and services without requiring accounts.
    -
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to search, inspect, and purchase physical goods on an escrow-secured marketplace, including listing search, agent reputation checks, and offer creation.
    44
    779 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables extension-free sign-in to a marketplace and gives AI agents tools for searching and paginating listings, comparing sellers and asking prices, reading inbox conversations, and preparing owner-approved seller messages with a WhatsApp handoff. It can be shared across local agents over a Unix socket or remote agents through an authenticated OAuth relay, without ever exposing passwords or cookies.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources