Search / com.resollo/agent-api
Resollo Agent API
R0· no sign-inResollo marketplace: search, seller lookup, offers, orders, draft listings. All human-approved.
v3.3.11 · active · website · descriptor JSON · versions
Search / com.resollo/agent-api
R0· no sign-inResollo marketplace: search, seller lookup, offers, orders, draft listings. All human-approved.
v3.3.11 · active · website · descriptor JSON · versions
{
"mcpServers": {
"agent-api": {
"type": "http",
"url": "https://www.resollo.com/api/mcp"
}
}
}claude mcp add --transport http agent-api https://www.resollo.com/api/mcp[mcp_servers.agent-api]
url = "https://www.resollo.com/api/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"agent-api": {
"type": "remote",
"url": "https://www.resollo.com/api/mcp",
"enabled": true
}
}
}{
"mcpServers": {
"agent-api": {
"type": "http",
"url": "https://www.resollo.com/api/mcp"
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=agent-api&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vd3d3LnJlc29sbG8uY29tL2FwaS9tY3AifQ%3D%3D"
}{
"servers": {
"agent-api": {
"type": "http",
"url": "https://www.resollo.com/api/mcp"
}
}
}{
"mcpServers": {
"agent-api": {
"httpUrl": "https://www.resollo.com/api/mcp"
}
}
}extensions:
"agent-api":
enabled: true
name: "agent-api"
type: streamable_http
uri: "https://www.resollo.com/api/mcp"
timeout: 300
protocol.modernsupports 2026-07-28 (server/discover)protocol.statelessanswers without a sessionprotocol.transportstreamable HTTPprotocol.list_ttltools/list declares ttlMs 0, so clients re-fetch it on every useauth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptionsevery tool has a descriptiontools.description_length1 tools have descriptions over 1,024 characters, which crowds the contexttools.schemasevery tool has an object input schematools.annotations19 of 19 tools declare readOnlyHint or destructiveHinttools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: orders.place (idempotentHint); products.create (idempotentHint); products.createFromUpload (idempotentHint); …tools.token_costabout 6,734 tokens to load every tooltools.api_dumptools are not a one-to-one API dumpstability.changes41 tool changes in 30 daysstability.rug_pull2 tools kept their name but changed most of their description in 30 days; review before trusting themdeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packagemarketplace.infochangedoutput schemaorders.listchangeddescription, input schemaReturns the caller's most recent orders. Pass role: 'buyer' for orders you placed, or role: 'seller' for orders on your own listings. 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 <agent api key>' header).
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 <agent api key>' header).
offers.listchangeddescription, input schemaReturns 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. 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 <agent api key>' header).
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 <agent api key>' header).
products.createchangeddescriptionStarts 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'. After a picker upload, sellers.listings shows the draft. Requires a signed-in Resollo user (OAuth sign-in, or an 'Authorization: Bearer <agent api key>' header).
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 <agent api key>' header).
marketplace.infochangeddescriptionReturns 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 default (USD), 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.
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.
orders.listchangeddescription, input schemaReturns the caller's most recent orders. Pass role: 'buyer' for orders you placed, or role: 'seller' for orders on your own listings. 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 USD), 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 <agent api key>' header).
Returns the caller's most recent orders. Pass role: 'buyer' for orders you placed, or role: 'seller' for orders on your own listings. 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 <agent api key>' header).
orders.statuschangedinput schemasellers.statuschangeddescription, output schemaReturns 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, and their remaining AI credit balance (products.create consumes 2 credits per call). 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.
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.
products.createchangedoutput schemaproducts.getchangeddescription, input schema, output schemaFetch 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 the listing's own currency (price.currency); 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.
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.
Showing the latest 10. Full history: list_changes · trend: quality JSON.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+dns-namespace +website +reachable +uptime-98% +updated-3d-ago -no-repository
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://www.resollo.com/api/mcp streamable-http | none | yes | 98% | 1069 ms | 2026-07-28 | 2026-10-19 |
marketplace.inforead-only | 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. |
offers.listread-only | 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 <agent api key>' header). |
offers.makedestructive | 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 <agent api key>' header). |
offers.responddestructive | 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 <agent api key>' header). |
orders.checkoutLinkdestructive | 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 still need to complete payment there. Fails with not_ready_for_payment if the seller hasn't dispatched the order yet, or already_paid if it's already been paid. Requires a signed-in Resollo user (OAuth sign-in, or an 'Authorization: Bearer <agent api key>' header). |
orders.listread-only | 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 <agent api key>' header). |
orders.placedestructive | 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 <agent api key>' header). The buyer must have explicitly approved this specific order before you call this tool (confirm must be true). |
orders.rejectdestructive | 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). |
orders.statusread-only | 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). |
products.createdestructive | 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 <agent api key>' header). |
products.createFromUploaddestructive | 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. |
products.getread-only | 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. |
products.searchread-only | 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. |
questions.askdestructive | 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). |
questions.listread-only | 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. |
reviews.listread-only | 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. |
sellers.getread-only | 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 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. |
sellers.listingsread-only | 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 <agent api key>' header). |
sellers.statusread-only | 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. |
Schemas: list_tools.
{
"name": "com.resollo/agent-api",
"_meta": {},
"title": "Resollo Agent API",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://www.resollo.com/api/mcp",
"type": "streamable-http"
}
],
"version": "3.3.11",
"websiteUrl": "https://www.resollo.com",
"description": "Resollo marketplace: search, seller lookup, offers, orders, draft listings. All human-approved."
}