{"serverId":"mcp-registry/com.resollo/agent-api","tools":[{"name":"marketplace.info","fixed":{"name":"marketplace_info","description":"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, ","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"readOnlyHint":true,"openWorldHint":false},"title":"Get Resollo marketplace taxonomy and metadata"},"changes":[{"kind":"name","detail":"Renamed \"marketplace.info\" → \"marketplace_info\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":181,"tokensAfter":181},{"name":"offers.list","fixed":{"name":"offers_list","description":"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","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"role":{"enum":["buyer","seller"],"type":"string","description":"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)."},"limit":{"type":"integer","default":20,"maximum":50,"minimum":1,"description":"Maximum number of most-recent offers to return (1-50, default 20)."},"state":{"enum":["pending","accepted","rejected","countered","buyer_accepted","expired"],"type":"string","description":"Optional filter to a single offer state. When omitted, offers in every state are returned."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false},"title":"List the authenticated user's own Resollo offers"},"changes":[{"kind":"name","detail":"Renamed \"offers.list\" → \"offers_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":348,"tokensAfter":348},{"name":"offers.make","fixed":{"name":"offers_make","description":"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 th","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["product_id","offered_price"],"properties":{"product_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The uuid of the fixed-price listing to bid on."},"currency_code":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code for offered_price. Defaults to the product's own listing currency if omitted."},"offered_price":{"type":"number","description":"The price the buyer offers, in `currency_code` (or the listing's own currency if that is omitted).","exclusiveMinimum":0}}},"annotations":{"readOnlyHint":false,"openWorldHint":false,"destructiveHint":true},"title":"Make an offer (bargain) on a Resollo product"},"changes":[{"kind":"name","detail":"Renamed \"offers.make\" → \"offers_make\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":364,"tokensAfter":364},{"name":"offers.respond","fixed":{"name":"offers_respond","description":"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","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["offer_id","action"],"properties":{"action":{"enum":["accept","reject","counter","accept_counter"],"type":"string","description":"Seller actions on a pending offer: accept | reject | counter (counter_price required). Buyer action on a countered offer: accept_counter."},"offer_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The uuid of the offer to respond to."},"counter_price":{"type":"number","description":"The seller's counter-offer price. Required when action is `counter`.","exclusiveMinimum":0}}},"annotations":{"readOnlyHint":false,"openWorldHint":false,"destructiveHint":true},"title":"Respond to a Resollo offer"},"changes":[{"kind":"name","detail":"Renamed \"offers.respond\" → \"offers_respond\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":370,"tokensAfter":370},{"name":"orders.checkoutLink","fixed":{"name":"orders_checkoutLink","description":"Creates and returns a Stripe-hosted checkout URL for a DISPATCHED, not-yet-paid order, on behalf of the BUYER -- exactly what the 'Pay with Stripe' button on the Resollo order page does. This tool NEVER charges any payment method and NEVER completes a payment itself -- it only produces a link. The human buyer must open that URL themselves and complete payment on Stripe's own hosted page. Never tell the user their order is 'paid' after calling this tool -- give them the link and tell them they st","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["orderId"],"properties":{"orderId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The uuid of the dispatched, not-yet-paid order."}}},"annotations":{"readOnlyHint":false,"openWorldHint":false,"destructiveHint":true},"title":"Get a Stripe checkout link for a dispatched Resollo order"},"changes":[{"kind":"name","detail":"Renamed \"orders.checkoutLink\" → \"orders_checkoutLink\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":267,"tokensAfter":267},{"name":"orders.list","fixed":{"name":"orders_list","description":"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 us","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"role":{"enum":["buyer","seller"],"type":"string","description":"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)."},"limit":{"type":"integer","default":20,"maximum":50,"minimum":1,"description":"Maximum number of most-recent orders to return (1-50, default 20)."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"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)."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false},"title":"List the authenticated user's own Resollo orders"},"changes":[{"kind":"name","detail":"Renamed \"orders.list\" → \"orders_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":357,"tokensAfter":357},{"name":"orders.place","fixed":{"name":"orders_place","description":"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. O","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["product_id","payment_method","shipment_method","confirm"],"properties":{"comment":{"type":"string","maxLength":500,"description":"Optional note to the seller, attached to the order chat."},"confirm":{"type":"boolean","const":true,"description":"Human-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."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"Informational 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."},"quantity":{"type":"integer","default":1,"maximum":20,"minimum":1,"description":"Units to reserve (1-20, default 1)."},"product_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The uuid of the fixed-price listing to reserve."},"address_key":{"type":"string","maxLength":20,"minLength":1,"description":"Key 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_method":{"enum":["cash","card","bank","paypal","stripe"],"type":"string","description":"How buyer and seller will settle payment off-platform. Must be one the seller accepts (see get_product.seller.accepted_payment_methods)."},"shipment_method":{"enum":["personal","courier","postal","locker"],"type":"string","description":"How the item will be handed over. Must be one the seller accepts (see get_product.seller.accepted_shipment_methods)."}}},"annotations":{"readOnlyHint":false,"openWorldHint":false,"destructiveHint":true},"title":"Reserve a Resollo product"},"changes":[{"kind":"name","detail":"Renamed \"orders.place\" → \"orders_place\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":707,"tokensAfter":707},{"name":"orders.reject","fixed":{"name":"orders_reject","description":"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 <agent api key>' header).","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["orderId"],"properties":{"orderId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The uuid of the RESERVED order to reject."}}},"annotations":{"readOnlyHint":false,"openWorldHint":false,"destructiveHint":true},"title":"Reject a reserved Resollo order"},"changes":[{"kind":"name","detail":"Renamed \"orders.reject\" → \"orders_reject\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":257,"tokensAfter":257},{"name":"orders.status","fixed":{"name":"orders_status","description":"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 <agent api key>' header).","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["orderId"],"properties":{"orderId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The order's uuid."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"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)."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false},"title":"Get the status of a Resollo order"},"changes":[{"kind":"name","detail":"Renamed \"orders.status\" → \"orders_status\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":309,"tokensAfter":309},{"name":"products.create","fixed":{"name":"products_create","description":"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","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"upload":{"enum":["picker","direct"],"type":"string","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."}}},"annotations":{"readOnlyHint":false,"openWorldHint":false,"destructiveHint":true},"title":"Create a Resollo product listing from photos"},"changes":[{"kind":"name","detail":"Renamed \"products.create\" → \"products_create\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":258,"tokensAfter":258},{"name":"products.createFromUpload","fixed":{"name":"products_createFromUpload","description":"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 pho","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["upload_id"],"properties":{"upload_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The upload_id returned by products.create."}}},"annotations":{"readOnlyHint":false,"openWorldHint":false,"destructiveHint":true},"title":"Create the listing draft from uploaded photos"},"changes":[{"kind":"name","detail":"Renamed \"products.createFromUpload\" → \"products_createFromUpload\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":269,"tokensAfter":269},{"name":"products.get","fixed":{"name":"products_get","description":"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 ","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["productId"],"properties":{"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"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)."},"productId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The product listing's uuid."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false},"title":"Get Resollo product details"},"changes":[{"kind":"name","detail":"Renamed \"products.get\" → \"products_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":331,"tokensAfter":331},{"name":"products.search","fixed":{"name":"products_search","description":"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_a","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"q":{"type":"string","maxLength":200,"minLength":1,"description":"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'."},"sort":{"enum":["newest","price_asc","price_desc"],"type":"string","default":"newest","description":"Result ordering. Never influenced by paid placement."},"limit":{"type":"integer","default":20,"maximum":50,"minimum":1,"description":"Maximum number of results to return per page (1-50, default 20)."},"cursor":{"type":"string","maxLength":2000,"description":"Opaque pagination cursor from a previous response's next_cursor."},"category":{"type":"integer","maximum":9007199254740991,"description":"Numeric top-level category id (see getMarketplaceInfo.categories). Subcategory ids are accepted but rolled up to their top-level parent in the response.","exclusiveMinimum":0},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"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."},"location":{"type":"string","maxLength":200,"description":"Comma-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_max":{"type":"number","minimum":0,"description":"Maximum price in the resolved `currency`."},"price_min":{"type":"number","minimum":0,"description":"Minimum price in the resolved `currency` (converted price, not the seller's native currency)."},"seller_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Restrict results to one seller's listings. The uuid is the seller.id from any search or getProduct result."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false},"title":"Search Resollo products"},"changes":[{"kind":"name","detail":"Renamed \"products.search\" → \"products_search\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":774,"tokensAfter":774},{"name":"questions.ask","fixed":{"name":"questions_ask","description":"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 <agent api key>' header).","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["product_id","question"],"properties":{"question":{"type":"string","maxLength":500,"minLength":1,"description":"The public question text (1-500 characters)."},"product_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The uuid of the product to ask about."}}},"annotations":{"readOnlyHint":false,"openWorldHint":true,"destructiveHint":true},"title":"Ask a question about a Resollo product"},"changes":[{"kind":"name","detail":"Renamed \"questions.ask\" → \"questions_ask\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":289,"tokensAfter":289},{"name":"questions.list","fixed":{"name":"questions_list","description":"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.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["productId"],"properties":{"productId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The product listing's uuid."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false},"title":"Get a Resollo product's questions and answers"},"changes":[{"kind":"name","detail":"Renamed \"questions.list\" → \"questions_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":211,"tokensAfter":211},{"name":"reviews.list","fixed":{"name":"reviews_list","description":"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.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["productId"],"properties":{"productId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The product listing's uuid."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false},"title":"Get a Resollo product's reviews"},"changes":[{"kind":"name","detail":"Renamed \"reviews.list\" → \"reviews_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":218,"tokensAfter":218},{"name":"sellers.get","fixed":{"name":"sellers_get","description":"Returns a seller's public profile -- the same information the web /user/<id> 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","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["sellerId"],"properties":{"sellerId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The seller's uuid -- the seller.id from any search or getProduct result."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false},"title":"Get a Resollo seller's public profile"},"changes":[{"kind":"name","detail":"Renamed \"sellers.get\" → \"sellers_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":273,"tokensAfter":273},{"name":"sellers.listings","fixed":{"name":"sellers_listings","description":"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 ed","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"limit":{"type":"integer","default":50,"maximum":100,"minimum":1,"description":"Maximum number of most-recent listings to return (1-100, default 50)."},"state":{"enum":["active","inactive","pending_moderation","rejected","closed"],"type":"string","description":"Optional 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."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false},"title":"List the authenticated seller's own listings (any state)"},"changes":[{"kind":"name","detail":"Renamed \"sellers.listings\" → \"sellers_listings\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":302,"tokensAfter":302},{"name":"sellers.status","fixed":{"name":"sellers_status","description":"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 ca","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"readOnlyHint":true,"openWorldHint":false},"title":"Get the authenticated seller's current listing status"},"changes":[{"kind":"name","detail":"Renamed \"sellers.status\" → \"sellers_status\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":180,"tokensAfter":180}],"toolsChanged":19,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}