Sellee is coming soon. Sellee Local is available now. Run it yourself →
SELLEE MCP

Give your agent the ability to sell.

An MCP server for agents that sell. Manage listings, attach photos, and issue escrow-backed checkout links.

Listings go live on carousell.ai. Checkout and escrow run on its rails. It is the same rail Sellee sells through.

Connect

One command, and nothing to paste. An OAuth-capable MCP client does the rest.

claude mcp add --transport http sellee https://api.carousell.ai/mcp
  1. Your client calls the endpoint

    The first call comes back 401 with a challenge naming where to authenticate. No key, no setup.

  2. It discovers and registers itself

    The challenge points at the resource metadata, which names the authorization server. Registration is dynamic, so there is no client id to request.

  3. A browser opens and you sign in

    You sign in with Google and approve a consent screen. This is the only step with a human in it.

  4. The client holds rotating tokens

    Access tokens last an hour and refresh tokens thirty days, and the client rotates them for you. Revoking a refresh token revokes its whole family.

Sign-in is limited to thecarousell.com accounts.The server is internal-only for now, so the consent screen will turn away an account outside that domain. The command above is what you will run when it opens up.

There is an API-key path too, for clients that cannot do OAuth. It is a fallback and it is on its way out, so build against OAuth.

Tools

10 tools. Two sets are conditional on how the server is deployed, and the badges say which. Every tool needs authentication, including get_listing, which is public over REST but not here.

Listings

Read and write the seller’s own listings.

get_listing

Fetch one listing by id, with a public profile of its seller.

list_listings

List the seller’s own listings, newest first. Filter by status, and page with created_before.

create_listing

Create a listing: title, description, price, condition, ordered photos, and links to the item’s pages on other marketplaces.

update_listing

Patch a listing. Only the fields you send change, and sending photos replaces the whole set.

create_photo_upload_urlwhen media uploads are on

Mint a short-lived URL to upload one photo’s bytes over REST.

Checkout

Turn an agreed price into a link a buyer can pay.

create_checkout

Create a one-time, expiring carousell.ai checkout link for a buyer who agreed a price. The buyer enters their address and email there, then pays into escrow.

get_transactionwhen checkout is live

Fetch one transaction. Poll it to learn when a checkout was paid or a deal completed. Once paid it carries the buyer’s shipping address and the ship-by deadline.

Payouts and shipping

Getting the item to the buyer, and the money to the seller.

get_shipping_pagewhen checkout is live

Get the page URL where the seller marks an order shipped or cancels it, plus the deadline. Relay both.

stripe_onboardingwhen checkout is live

Generate a Stripe onboarding URL for the seller. Required to receive payouts, not to list or to take payment.

stripe_onboarding_statuswhen checkout is live

Check whether onboarding is complete, and how much money is waiting to be paid out.

What is deliberately not a tool

Two absences, both on purpose.

Creating an account, or issuing a keyThose responses carry a plaintext API key, and a key must never enter a model’s context. Sellers onboard out of band and the client authenticates every call.
Marking an order shipped, or cancelling itThe ship page is the only surface that advances a shipment. An agent relays that page’s link; it never submits tracking itself.

Photos

Uploading a photo is two steps, and the second one is plain REST rather than a tool: image bytes must not ride a JSON tool call.

  1. Mint a URL

    create_photo_upload_url returns an upload URL that carries its own authorization, so the upload itself needs no key. It lasts five minutes: mint it immediately before you use it.

  2. POST the bytes

    Send the raw image as the body with a real image/* content type. The cap is 4 MB, so resize first. You get back an encrypted URL.

  3. Attach it

    Pass those URLs as media on create or update. Order matters: the first is the cover image.

Handling credentials

Four rules. The last one is the one that bites.

The escrow flow

What a transaction does after you hand a buyer a link. There are no webhooks, so pollget_transaction to follow it.

initiated

The link exists. The buyer has not opened it yet.

awaiting_payment

The buyer submitted their address, so a payment session exists.

escrowed

Paid. The money is held, and the ship-by deadline starts.

shipped

Tracking is recorded, and the auto-release clock starts.

released

The buyer confirmed receipt, or the clock ran out. Funds are the seller’s.

Two exits: cancelled when a checkout lapses or is cancelled before payment, andrefunded when a paid order is cancelled or misses its ship-by deadline. The deadline is about three days after payment, and escrow auto-releases seven days after shipment.

Want to sell now?Sellee Local is the same selling agent, free and open source, on your own machine.

Sellee is coming soon.

Hosted Sellee is in private preview, in the US, on iMessage.

Don't want to wait?
Run Sellee Local nowThe same agent, free and open source, on your own machine.github.com/carousell/sellee