Commonplace

Use when selling a big item: fitness gear, hot tubs, furniture, appliances. Pickup handled.

Should I use this

Quality & Safety

A
Description quality
99%
Schema completeness
86%
Naming quality
84%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~8,706Tokens (tool definitions)
~2.4 KBTypical response size
Significant attention impact (6.80% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "seller": {
      "url": "https://trycommonplace.com/mcp"
    }
  }
}

Remote endpoints

https://trycommonplace.com/mcpstreamable-http

What it can do

Tool inventory

Tools (23)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢catalog_search_listings(query, min_price_usd, max_price_usd, sort, deliver_to, ...)

Search live Commonplace inventory by words, category, place (deliver_to alone returns some listings near it, not every one), or any mix. Results are active and buyable. outcome: ok; none; none_within_limits (every match is in hidden); out_of_budget (matches only outside the price range; examples ignore deliver_to); undeliverable (none reaches deliver_to; examples say how far). With deliver_to, each result carries delivery (known, deliverable, driving distance_miles, fee_usd, total_usd). Candidates come from the words or categories plus the catalogue's proximity ranking, not the whole catalogue: to be thorough, also search category_hint and its department. Up to 40 are checked per call, roughly nearest first; with max_distance_miles, one already well past it in a straight line is not checked but counted in too_far (distance_is_straight_line: a lower bound, not a drive). delivery_checked, candidates_considered and candidates_unchecked (could be inside the limits, never checked) say how far it got; next_offset, passed back as offset, checks the rest. cheapest and most_expensive spend all 40 checks and return the best (results_not_shown counts the rest; a limit up to 40 returns them); any sort orders only what was checked. farthest_checked_miles, the longest drive measured, can pass the radius. `hidden` counts every candidate left out, once each, by reason, with its nearest or cheapest examples. When no title matches, the category the words point to is browsed (no_title_matched) or the outcome is none; matched_on names looser words that matched. more_available: candidates_unchecked (see next_offset), or more_matches_unread: more listings match than one search reads, which offset cannot reach; narrow the words, category or price.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "description": "What to look for, e.g. \"peloton bike+\" or \"sectional sofa\". Words match titles loosely, with only a few everyday synonyms (couch and sofa, fridge and refrigerator) (\"hot tub\" misses a listing titled Jacuzzi: search its category), though \"+\" and \"plus\" count as the same. Optional when category is given: without words, the search browses the category."
    },
    "min_price_usd": {
      "type": "number",
      "minimum": 0,
      "description": "Lowest buyer_price_usd, inclusive, in US dollars. Always compared with buyer_price_usd, with or without deliver_to."
    },
    "max_price_usd": {
      "type": "number",
      "minimum": 0,
      "description": "Highest price, inclusive, in US dollars: buyer_price_usd, or with deliver_to the total with delivery. A listing whose buyer price alone is over it is not a candidate at all. For \"under $1,200\", pass 1199.99."
    },
    "sort": {
      "type": "string",
      "enum": [
        "best_match",
        "cheapest",
        "most_expensive",
        "newest",
        "nearest"
      ],
      "description": "best_match is relevance order and says nothing about price. With deliver_to, cheapest orders by the delivered total and nearest by driving distance (nearest needs deliver_to)."
    },
    "deliver_to": {
      "type": "string",
      "maxLength": 120,
      "description": "Where it would be delivered: a 5-digit ZIP or \"City, ST\". Keeps only items that can be delivered there, which can be far away. To find items near a place, give the place here with max_distance_miles."
    },
    "category": {
      "type": "string",
      "maxLength": 400,
      "description": "Only these categories: a slug from catalog_list_categories, listing_resolve_category or a result's category_slug, or several separated by commas (sofas,sectionals,general-furniture). A department (furniture) or parent (peloton) covers every category beneath it, and a category covers the older slugs its listings are stored under (peloton-bike returns peloton-bike-2nd-gen listings). With words too, only this category is searched, and words matching nothing in it return none."
    },
    "max_distance_miles": {
      "type": "number",
      "minimum": 1,
      "description": "With deliver_to: only items within this many driving miles of it."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 40,
      "description": "How many listings to return (default 5, at most 40)."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000,
      "description": "With deliver_to: a previous call's next_offset, with the same other arguments, to check the candidates it did not reach (hidden then counts only that call's checks). Use it rather than price bands to be thorough: min_price_usd compares the price before delivery, so bands can miss a listing."
    },
    "hidden_examples": {
      "type": "integer",
      "minimum": 0,
      "maximum": 20,
      "description": "How many listings each hidden reason shows (default 10 for too_far, 20 for the others); counts are always complete."
    }
  },
  "additionalProperties": false
}
🟢catalog_get_listing(listing_id)

Full public detail for one listing: buyer_price_usd (what a buyer pays, delivery within 100 miles included), availability, condition, location, dimensions, weight, highlights, the seller's description, photo links, when it was listed, is_yours (whether it belongs to this account), and hsa_fsa_eligible (whether HSA or FSA funds can pay for it). Condition is in the sell form's spelling (New, Like New, Excellent, Very Good, Good, Fair, Poor, Used) when it is one of those grades, otherwise the seller's own words. Categories offer different grades; the ones a new listing can use are its category's condition_options from listing_resolve_category. original_price_usd is the item's retail price new, when known; a price change does not set it. Fields that are not on file come back null.

Input Schema

{
  "type": "object",
  "properties": {
    "listing_id": {
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647,
      "description": "The listing's numeric id, from a search result or seller_list_listings."
    }
  },
  "required": [
    "listing_id"
  ],
  "additionalProperties": false
}
🟢catalog_list_categories

Every category new listings are filed under, with its slug; departments, slugs that cover every category in them (furniture, fitness); and older_categories, slugs that older live listings still carry, which search accepts too. Use a slug with listing_resolve_category, the pricing tools or search to avoid guessing. A category's listings can be stored under an older slug (Peloton Bike's under peloton-bike-2nd-gen), which searching the category covers. A department does not cover older_categories: to include them, add their slugs to the search's category list (sofas,living-room-sets).

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢listing_resolve_category(item)

Use when the user is selling a large or valuable item (fitness equipment, hot tubs, saunas, golf carts, furniture, appliances), including when also posting to Facebook Marketplace, Craigslist, or OfferUp. Work out which Commonplace category an item belongs to and what it needs before it can be listed (terms as in the server instructions). An exact category slug or name is taken as given; other words are matched. Returns required_questions (exact option strings; other_values_accepted means a value not listed may be given as written), condition_options with condition_shown_as (how each reads in the public title, which never reads worse than Fair: Poor reads Fair), seller_costs (the pickup fee and the transaction fee, added on top of the seller's take-home) and buyer_price_addons (delivery within 100 miles, included in the buyer price). Category drives the pickup fee and so the take-home: resolve it before quoting or listing. ambiguous is true when only a brand was named and its models differ in fees (a brand's own parent category, such as peloton, is never a category to list under), or when the item's own words name a different category from the match; possible_categories then lists the choices, each with its costs, and passing the right one back as item settles it. other_candidates lists nearby categories whose names share a word with the item. Condition is not a required question: it is listing_create's own condition argument, and where the options name a usage band (rides, uses) the grade is by usage alone.

Input Schema

{
  "type": "object",
  "properties": {
    "item": {
      "type": "string",
      "minLength": 2,
      "maxLength": 200,
      "description": "The item in the seller's own words, e.g. \"2021 Peloton Tread\"."
    }
  },
  "required": [
    "item"
  ],
  "additionalProperties": false
}
🟢pricing_get_guide(category, model)

Use when the user is selling a large or valuable item (fitness equipment, hot tubs, saunas, golf carts, furniture, appliances), including when also posting to Facebook Marketplace, Craigslist, or OfferUp. What comparable items sell or list for, as low / typical / high prices before delivery (buyers see these plus added_to_buyer_price_usd, in buyer_prices_usd): low is the 25th percentile, typical the median, high the top of where most sit (never below typical). take_home_usd is what a seller is paid when an item sells at each figure. sample_size counts every listing it is based on, sold and past ones included. model narrows it to listings whose titles name a brand, model or year; narrowed_to says whether it did, and model_matches how many listings name it (a range needs 5). basis says whether the range comes from sold items or listings; a narrowed range can differ in basis from the whole category. available: false means too little data for a range. The price the seller asked for on Facebook Marketplace, Craigslist, or OfferUp becomes their take-home on Commonplace. The buyer price includes pickup and delivery.

Input Schema

{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "minLength": 2,
      "maxLength": 120,
      "description": "A category name or slug, e.g. \"hot tubs\"."
    },
    "model": {
      "type": "string",
      "minLength": 2,
      "maxLength": 80,
      "description": "A brand, model or year to narrow to, e.g. \"Kettler\", \"Bike+\" or \"2022\". Matched against listing titles in the category."
    }
  },
  "required": [
    "category"
  ],
  "additionalProperties": false
}
🟢pricing_quote_payout(category, desired_payout_usd, buyer_sees_usd, price_usd)

Use when the user is selling a large or valuable item (fitness equipment, hot tubs, saunas, golf carts, furniture, appliances), including when also posting to Facebook Marketplace, Craigslist, or OfferUp. The seller's fee math for a category (terms as in the server instructions). Give exactly one of: desired_payout_usd, a take-home, for the buyer price a new listing shows (the transaction and pickup fees and delivery added on top; the seller is paid exactly the take-home); buyer_sees_usd, a price a buyer pays (a listing's price or an offer), for what the seller takes home at it (delivery, then the transaction fee, then the pickup fee come out); or price_usd, an older listing's asking price, for its take-home. pickup_fee_waived is true when, taking fees out of a price, the pickup fee would exceed what is left after the transaction fee. The price the seller asked for on Facebook Marketplace, Craigslist, or OfferUp becomes their take-home on Commonplace. The buyer price includes pickup and delivery.

Input Schema

{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "minLength": 2,
      "maxLength": 120,
      "description": "A category name or slug."
    },
    "desired_payout_usd": {
      "type": "number",
      "minimum": 1,
      "description": "What the seller wants to take home, in US dollars. How every new listing is priced."
    },
    "buyer_sees_usd": {
      "type": "number",
      "minimum": 1,
      "description": "A price a buyer pays, in US dollars: a listing's buyer price, or an offer."
    },
    "price_usd": {
      "type": "number",
      "minimum": 1,
      "description": "An asking price before delivery on a listing made before September 4 2026, in US dollars."
    }
  },
  "required": [
    "category"
  ],
  "additionalProperties": false
}
🟢delivery_quote_listing(listing_id, destination)

Whether a listing can be delivered to a destination, what delivery adds on top of its buyer_price_usd (0 means it is included), the distance, and the total the buyer pays. When no quote is possible, `unresolved` says which end could not be placed: "origin" means the listing's own location is unknown, so no address the buyer gives will help. `reason` is the platform's own wording, and "calculated manually" in it means no quote yet: whenever there is no automatic quote, whichever end is at fault, the team prices that delivery by hand, and needs_manual_quote is true (ask Commonplace support for one: support_create_ticket where this connection has it, otherwise the support line, (516) 357-5989). A quote gives included_miles (free) and per_mile_usd, the category's rate for miles 101 to 200 and beyond 200. Delivery within 100 miles of the item is already included in its price; beyond that a per-mile fee applies, and most items cannot travel beyond 1,500 miles.

Input Schema

{
  "type": "object",
  "properties": {
    "listing_id": {
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647,
      "description": "The listing's numeric id, from a search result."
    },
    "destination": {
      "type": "string",
      "minLength": 3,
      "maxLength": 120,
      "description": "A 5-digit ZIP or \"City, ST\"."
    }
  },
  "required": [
    "listing_id",
    "destination"
  ],
  "additionalProperties": false
}
🟢support_search_help(question)

Answer a question about how Commonplace works. platform_policy states the current rules on the topics the question is about (delivery, payment, inspection and returns, warranty, offers, selling), from the live settings. answers are the closest published help articles, each marked truncated when cut short (the whole answer is at help_center_url). loosely_related shares some words with the question (it can still hold the answer, so read it) and does not count toward found, but can still hold the answer in other words (a subscription, asked about as a membership). found is true when platform_policy or answers has something. Where an article disagrees with platform_policy, platform_policy is current.

Input Schema

{
  "type": "object",
  "properties": {
    "question": {
      "type": "string",
      "minLength": 3,
      "maxLength": 300
    }
  },
  "required": [
    "question"
  ],
  "additionalProperties": false
}
🟢listing_crosslist_draft(title, description, price_usd, price_type, photo_urls, ...)

Use when the user is selling a large or valuable item (fitness equipment, hot tubs, saunas, golf carts, furniture, appliances), including when also posting to Facebook Marketplace, Craigslist, or OfferUp. Save a draft and return a confirm link. Nothing is published until the seller opens the link and taps Publish. No Commonplace account is required. When seller_phone is included, the seller is also texted the link. Use this when also posting to Facebook Marketplace, Craigslist, or OfferUp, and when this connection cannot create listings itself. The price the seller asked for on Facebook Marketplace, Craigslist, or OfferUp becomes their take-home on Commonplace. The buyer price includes pickup and delivery.

Input Schema

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 3,
      "maxLength": 150
    },
    "description": {
      "type": "string",
      "maxLength": 2000
    },
    "price_usd": {
      "type": "number",
      "minimum": 1,
      "maximum": 1000000,
      "description": "Dollars. By default this is what the seller takes home. Pass price_type facebook_buyer_price when it is the price a buyer pays on the other site."
    },
    "price_type": {
      "type": "string",
      "enum": [
        "take_home",
        "facebook_buyer_price"
      ],
      "description": "take_home (the default) is what the seller takes home. facebook_buyer_price is what a buyer pays on the other site."
    },
    "photo_urls": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 2000000
      },
      "maxItems": 8,
      "description": "https image URLs, or small data:image URLs. They are downloaded and re-hosted. A photo that cannot be fetched is skipped and the draft is still saved."
    },
    "city": {
      "type": "string",
      "maxLength": 80
    },
    "state": {
      "type": "string",
      "maxLength": 40
    },
    "zip": {
      "type": "string",
      "maxLength": 20,
      "description": "5-digit pickup ZIP. City and state work when there is no ZIP."
    },
    "condition": {
      "type": "string",
      "maxLength": 80
    },
    "category": {
      "type": "string",
      "maxLength": 120
    },
    "brand": {
      "type": "string",
      "maxLength": 80
    },
    "seller_name": {
      "type": "string",
      "maxLength": 120
    },
    "seller_phone": {
      "type": "string",
      "maxLength": 40,
      "description": "A US mobile. When present, the confirm link is texted here as well as returned."
    },
    "seller_email": {
      "type": "string",
      "maxLength": 200
    },
    "source_url": {
      "type": "string",
      "maxLength": 400,
      "description": "The other site's listing URL, kept for the assistant. It is not shown to buyers."
    }
  },
  "required": [
    "title",
    "price_usd"
  ],
  "additionalProperties": false
}
🟢pricing_quote_crosslist(category, price_usd, price_type, zip)

Use when the user is selling a large or valuable item (fitness equipment, hot tubs, saunas, golf carts, furniture, appliances), including when also posting to Facebook Marketplace, Craigslist, or OfferUp. The price the seller asked for on Facebook Marketplace, Craigslist, or OfferUp becomes their take-home on Commonplace. The buyer price includes pickup and delivery. Give category and price. price_type defaults to take_home. Pass facebook_buyer_price when the number is what a buyer pays on the other site. ZIP is optional. The result is take_home_usd and buyer_price_usd.

Input Schema

{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "minLength": 2,
      "maxLength": 120,
      "description": "A category slug, a category name, or the item words."
    },
    "price_usd": {
      "type": "number",
      "minimum": 1,
      "maximum": 1000000
    },
    "price_type": {
      "type": "string",
      "enum": [
        "take_home",
        "facebook_buyer_price"
      ],
      "description": "take_home (the default) is what the seller takes home. facebook_buyer_price is what a buyer pays on the other site."
    },
    "zip": {
      "type": "string",
      "maxLength": 20,
      "description": "Optional 5-digit pickup ZIP."
    }
  },
  "required": [
    "category",
    "price_usd"
  ],
  "additionalProperties": false
}
🔴mark_sold_elsewhere(manage_token)

Use when the user is selling a large or valuable item (fitness equipment, hot tubs, saunas, golf carts, furniture, appliances), including when also posting to Facebook Marketplace, Craigslist, or OfferUp. Call this when the item sells on Facebook Marketplace, Craigslist, OfferUp, or anywhere else. Pass the manage_token that listing_crosslist_draft returned. The listing comes down. No account is required. If it never published, the confirm link stops working.

Input Schema

{
  "type": "object",
  "properties": {
    "manage_token": {
      "type": "string",
      "minLength": 16,
      "maxLength": 80,
      "description": "The manage_token returned with the draft."
    }
  },
  "required": [
    "manage_token"
  ],
  "additionalProperties": false
}
🟢account_get_profile

The Commonplace account this connection acts for: name, and a masked phone and email. Use it to confirm the right account before creating or changing anything. phone: null only means the account has no phone on file; each listing made with listing_create carries its own pickup phone (seller_phone), which is how Commonplace reaches the seller about that listing.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢seller_list_listings(include_sold, include_removed)

The seller's own listings - the same list Your Listings shows - with each one's status (Active; In review; Reserved; Sold; Inactive, which seller_relist_listing can bring back; Removed, taken down by the seller, shown only with include_removed and never back), pricing_basis (take_home: seller_update_listing's price_usd sets take_home_usd; asking_price, older listings: it sets asking_usd, null on one lifted to its floor), take_home_usd, buyer_price_usd, the transaction and pickup fees, and link. Removed listings are left out unless include_removed is true. Drafts saved without photos are not listings yet; they are returned separately in drafts_awaiting_photos, each with its finish link. A draft only ever lacks photos: with one, a listing publishes.

Input Schema

{
  "type": "object",
  "properties": {
    "include_sold": {
      "type": "boolean",
      "description": "Include sold items (default false)."
    },
    "include_removed": {
      "type": "boolean",
      "description": "Include listings the seller took down, shown with status Removed (default false). A removed listing cannot come back."
    }
  },
  "additionalProperties": false
}
🟢seller_list_offers(include_closed)

Offers buyers have made on the seller's own listings. Shows the amount, the listed price at the time, the status and any counter. Amounts are in buyer-price terms, like buyer_price_usd; accepting reprices the listing to the agreed amount and works the seller's take-home out again. Buyers are shown by first name and last initial; their contact details are never available.

Input Schema

{
  "type": "object",
  "properties": {
    "include_closed": {
      "type": "boolean",
      "description": "Include accepted, declined and expired offers (default false: only ones still open)."
    }
  },
  "additionalProperties": false
}
🟢seller_list_sales

Orders on the seller's items: order number, status, inspection result, the payout on each and the pickup window. Commonplace pays sellers at pickup, after inspection, by payment link. This system does not record whether a payout was actually sent, so payout_sent is always null here.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟡listing_create(title, category, price_usd, lowest_take_home_usd, condition, ...)

Use when the user is selling a large or valuable item (fitness equipment, hot tubs, saunas, golf carts, furniture, appliances), including when also posting to Facebook Marketplace, Craigslist, or OfferUp. Publish a listing for the seller (terms as in the server instructions). Resolve the category with listing_resolve_category first. Condition is required. The category's other questions are optional and can be added after the listing is up. The price the seller asked for on Facebook Marketplace, Craigslist, or OfferUp becomes their take-home on Commonplace. The buyer price includes pickup and delivery. With a photo it publishes live (status live, or in_review outside our categories); with none, a draft is saved and finish_url is where the seller adds photos (or use listing_add_photos). A connection that cannot publish can save a no-account draft with listing_crosslist_draft instead. Drafts never expire or show to buyers; seller_list_listings lists them and listing_discard_draft removes one. Without confirmed: true nothing is saved: the result is a preview of what would be published (public_title, answers as stored, take_home_usd, buyer_price_usd and the fees added on top), with problems listing anything a confirmed call would refuse and ignored_answers any key the category does not ask. Listing is free. The seller is paid their take-home at pickup (bank transfer, Venmo, Cash App, or PayPal), not after delivery. Promote is an optional add-on and this never turns it on. Within minutes of publishing, a description is generated from details and may retitle the listing; it can state things the seller never said, so check it on the listing page (support corrects it; no tool edits one). environment in the result names the deployment: only production reaches real buyers.

Input Schema

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 3,
      "maxLength": 150,
      "description": "Just the item, e.g. \"Peloton Bike+ 2022\": the platform adds condition and city, and the preview's public_title is the exact result."
    },
    "category": {
      "type": "string",
      "minLength": 2,
      "maxLength": 120,
      "description": "The category from listing_resolve_category. An exact slug or name is used as given; anything else is matched with the title, and the preview shows which category it landed in."
    },
    "price_usd": {
      "type": "number",
      "minimum": 1,
      "maximum": 1000000,
      "description": "What the seller wants to take home, in US dollars. The transaction and pickup fees and delivery are added on top for buyers."
    },
    "lowest_take_home_usd": {
      "type": "number",
      "minimum": 1,
      "maximum": 1000000,
      "description": "Optional: the least the seller would take home. Offers that reach it are accepted automatically; it is never shown to buyers. Above price_usd it is set to price_usd."
    },
    "condition": {
      "type": "string",
      "maxLength": 80,
      "description": "An exact option from the category's condition_options, given here and not in answers. Where the options name a usage band (rides, uses), grade by usage and put cosmetic wear in details."
    },
    "pickup_zip": {
      "type": "string",
      "minLength": 3,
      "maxLength": 200,
      "description": "Where the item is: a 5-digit ZIP or \"City, ST\". The exact address is confirmed before pickup."
    },
    "details": {
      "type": "string",
      "maxLength": 2000,
      "description": "Anything else the seller said about the item: age, wear, what is included. Contact details are removed, and the listing's description is generated from it."
    },
    "answers": {
      "type": "object",
      "additionalProperties": {
        "type": "string",
        "maxLength": 300
      },
      "maxProperties": 25,
      "description": "Answers to the category's required_questions, keyed by the `key` values from listing_resolve_category. Use its exact option strings; where none fits (a brand that is not listed, say), give the real value as written. Condition is not one of them; give it as `condition`. Every answer is a string: a number as digits (\"2021\"), and for a question of type chips several choices separated by commas, options and the seller's own words alike (the preview's answers show how each is stored). The preview's ignored_answers lists any key this category does not ask."
    },
    "photo_urls": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 262144
      },
      "maxItems": 8,
      "description": "Up to 8 photos. Prefer https image URLs (JPEG, PNG, WebP or GIF, up to 5MB each). A data:image URL works only for a small image: the whole request is limited to 256KB and a larger one is refused before the tool runs. A photo the seller attached in the chat goes in photo_files, never written out here; if the chat app cannot attach it, publish without photos to save a draft and give the seller finish_url. A preview does not download photos: include https links in it anyway so they are checked (a Commonplace link such as /api/img/<listing id>/0 belongs to that listing, and another seller's is a problem there), but send an inline image only with the confirmed call, since writing one out twice costs the seller minutes. EXIF location data is removed."
    },
    "photo_files": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "download_url": {
            "type": "string"
          },
          "file_id": {
            "type": "string"
          },
          "mime_type": {
            "type": "string"
          },
          "file_name": {
            "type": "string"
          }
        },
        "required": [
          "download_url",
          "file_id"
        ],
        "additionalProperties": false
      },
      "maxItems": 8,
      "description": "Photos the seller attached in the chat. The chat app fills these in (each a download_url and file_id); never write one by hand. They get the same checks as photo_urls."
    },
    "seller_name": {
      "type": "string",
      "maxLength": 120,
      "description": "Only if the account has no name on file."
    },
    "seller_phone": {
      "type": "string",
      "maxLength": 40,
      "description": "Required when the account has no phone on file (account_get_profile shows phone: null); otherwise only to use a different number. A US number that receives texts: pickup is arranged by text, and a landline is accepted but gets none. 10 digits, with or without +1, spaces or dashes. It is saved with this listing. If the account has no phone, it is also saved as a contact number so the next listing does not ask again. It is not used to sign in."
    },
    "confirmed": {
      "type": "boolean",
      "description": "false: nothing is saved, and the result is a preview. true: publish, once the seller has agreed to exactly this; with no photos it saves a draft instead, finished at finish_url."
    }
  },
  "required": [
    "title",
    "category",
    "price_usd",
    "pickup_zip",
    "confirmed"
  ],
  "additionalProperties": false
}
🟡listing_add_photos(draft_id, photo_urls, photo_files, confirmed)

Add photos to a draft that listing_create saved without photos, and publish it. Only drafts this connection's account created through the connector can be finished here. Requires confirmed: true.

Input Schema

{
  "type": "object",
  "properties": {
    "draft_id": {
      "type": "string",
      "minLength": 5,
      "maxLength": 64,
      "description": "A draft_id from listing_create or from drafts_awaiting_photos in seller_list_listings."
    },
    "photo_urls": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 262144
      },
      "maxItems": 8,
      "description": "Up to 8 photos. Prefer https image URLs (JPEG, PNG, WebP or GIF, up to 5MB each). A data:image URL works only for a small image: the whole request is limited to 256KB and a larger one is refused before the tool runs. A photo the seller attached in the chat goes in photo_files, never written out here; if the chat app cannot attach it, publish without photos to save a draft and give the seller finish_url. A preview does not download photos: include https links in it anyway so they are checked (a Commonplace link such as /api/img/<listing id>/0 belongs to that listing, and another seller's is a problem there), but send an inline image only with the confirmed call, since writing one out twice costs the seller minutes. EXIF location data is removed."
    },
    "photo_files": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "download_url": {
            "type": "string"
          },
          "file_id": {
            "type": "string"
          },
          "mime_type": {
            "type": "string"
          },
          "file_name": {
            "type": "string"
          }
        },
        "required": [
          "download_url",
          "file_id"
        ],
        "additionalProperties": false
      },
      "maxItems": 8,
      "description": "Photos the seller attached in the chat. The chat app fills these in (each a download_url and file_id); never write one by hand. They get the same checks as photo_urls."
    },
    "confirmed": {
      "type": "boolean",
      "description": "false: nothing is published, and the result says what would be. true: publish, once the seller has agreed."
    }
  },
  "required": [
    "draft_id",
    "confirmed"
  ],
  "additionalProperties": false
}
🔴listing_discard_draft(draft_id, confirmed)

Discard a draft that listing_create saved without photos: it leaves drafts_awaiting_photos, its finish_url no longer opens it, and listing_add_photos can no longer finish it. Only this account's own connector drafts can be discarded. A draft cannot be edited, so to change one (a new price, say) discard it and create the listing again. Without confirmed: true nothing changes and the draft is described back.

Input Schema

{
  "type": "object",
  "properties": {
    "draft_id": {
      "type": "string",
      "minLength": 5,
      "maxLength": 64,
      "description": "A draft_id from listing_create or from drafts_awaiting_photos in seller_list_listings."
    },
    "confirmed": {
      "type": "boolean",
      "description": "false: nothing changes, and the result says what would. true: discard it, once the seller has agreed."
    }
  },
  "required": [
    "draft_id",
    "confirmed"
  ],
  "additionalProperties": false
}
🔴seller_update_listing(listing_id, title, price_usd, lowest_acceptable_usd, category, ...)

Edit one of the seller's own listings the way the website's Edit listing does: title, price (price_usd), lowest_acceptable_usd, category, condition, pickup location and photos. Give only what changes. Without confirmed: true nothing changes: the result lists the change and, when the price or category moves, would_result_in (take-home, buyer price, fees). What price_usd and lowest_acceptable_usd mean follows the listing's pricing_basis in seller_list_listings. take_home (every listing made from Sept 4 2026 on): price_usd is what the seller takes home, and our transaction and pickup fees and the delivery are added on top for buyers; lowest_acceptable_usd is the least they take home. asking_price (older listings): price_usd is the asking price before delivery (asking_usd), the take-home is that less our fees, and lowest_acceptable_usd is an asking price too. The platform adds the condition and city to the title, as it does at publish, and rebuilds them when the title, condition or pickup location changes; the preview's public_title is the exact result, and the listing's link does not change. photos is the whole ordered list after the edit, the first being the cover. A reserved or sold listing cannot be edited, and the description is not edited here (support corrects it).

Input Schema

{
  "type": "object",
  "properties": {
    "listing_id": {
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647
    },
    "title": {
      "type": "string",
      "minLength": 3,
      "maxLength": 150
    },
    "price_usd": {
      "type": "number",
      "minimum": 1,
      "maximum": 1000000,
      "description": "New price in US dollars, in the listing's pricing_basis: its take-home, or on an older listing its asking price."
    },
    "lowest_acceptable_usd": {
      "type": "number",
      "minimum": 0,
      "maximum": 1000000,
      "description": "The auto-accept floor, in the listing's pricing_basis: the least the seller takes home, or on an older listing the lowest asking price. Offers that reach it are accepted automatically. 0 removes it. It cannot be above price_usd."
    },
    "category": {
      "type": "string",
      "maxLength": 120,
      "description": "A category slug from catalog_list_categories or listing_resolve_category. It changes the fees and what buyers pay, so preview first."
    },
    "condition": {
      "type": "string",
      "maxLength": 80,
      "description": "One of the category's condition_options from listing_resolve_category."
    },
    "pickup_location": {
      "type": "string",
      "minLength": 3,
      "maxLength": 200,
      "description": "Where the item is now: \"City, ST\", or a full address that contains it. A ZIP alone cannot move where the listing says it is."
    },
    "photos": {
      "type": "array",
      "minItems": 1,
      "maxItems": 24,
      "items": {
        "type": "string",
        "maxLength": 262144
      },
      "description": "The listing's photos after the edit, in order, the first being the cover. \"existing:N\" keeps the photo now at index N (catalog_get_listing's photo_urls end in /N); an https image URL or a data:image URL adds one (at most 8 new per edit). Leave a photo out to remove it; at least one must remain. \"file:N\" places the Nth of photo_files, the photos attached in the chat."
    },
    "photo_files": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "download_url": {
            "type": "string"
          },
          "file_id": {
            "type": "string"
          },
          "mime_type": {
            "type": "string"
          },
          "file_name": {
            "type": "string"
          }
        },
        "required": [
          "download_url",
          "file_id"
        ],
        "additionalProperties": false
      },
      "maxItems": 8,
      "description": "Photos the seller attached in the chat. The chat app fills these in (each a download_url and file_id); never write one by hand. They get the same checks as photo_urls. Place them with \"file:N\" in photos (\"file:0\" first makes it the cover); any not placed are added after the photos."
    },
    "confirmed": {
      "type": "boolean",
      "description": "false: nothing changes, and the result says what would. true: do it, once the seller has agreed."
    }
  },
  "required": [
    "listing_id",
    "confirmed"
  ],
  "additionalProperties": false
}
🟡seller_relist_listing(listing_id, confirmed)

Put one of the seller's own inactive listings back on the marketplace. Only an inactive listing can be relisted. Requires confirmed: true.

Input Schema

{
  "type": "object",
  "properties": {
    "listing_id": {
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647
    },
    "confirmed": {
      "type": "boolean",
      "description": "false: nothing changes, and the result says what would. true: do it, once the seller has agreed."
    }
  },
  "required": [
    "listing_id",
    "confirmed"
  ],
  "additionalProperties": false
}
🔴seller_remove_listing(listing_id, confirmed)

Take one of the seller's own listings off the marketplace. Refused while an order is active on it - that needs the support team. Requires confirmed: true after the seller agrees to remove that specific item.

Input Schema

{
  "type": "object",
  "properties": {
    "listing_id": {
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647
    },
    "confirmed": {
      "type": "boolean",
      "description": "false: nothing changes, and the result says what would. true: do it, once the seller has agreed."
    }
  },
  "required": [
    "listing_id",
    "confirmed"
  ],
  "additionalProperties": false
}
🔴seller_respond_offer(offer_id, action, counter_usd, confirmed)

Accept, counter or decline an open offer on one of the seller's own listings. Amounts are in the same terms as the offer: the buyer-facing price. IMPORTANT consequences: accepting sets the listing's public price to the offer amount, and a counter becomes the listing's new public price for every buyer, not only this one. Requires confirmed: true after the seller agrees.

Input Schema

{
  "type": "object",
  "properties": {
    "offer_id": {
      "type": "string",
      "minLength": 5,
      "maxLength": 64
    },
    "action": {
      "type": "string",
      "enum": [
        "accept",
        "counter",
        "decline"
      ]
    },
    "counter_usd": {
      "type": "number",
      "minimum": 1,
      "maximum": 1000000,
      "description": "Required for a counter. Buyer-facing price in US dollars."
    },
    "confirmed": {
      "type": "boolean",
      "description": "false: nothing changes, and the result says what would. true: do it, once the seller has agreed."
    }
  },
  "required": [
    "offer_id",
    "action",
    "confirmed"
  ],
  "additionalProperties": false
}
🟡support_create_ticket(summary, order_number, listing_id, confirmed)

Hand a problem to the Commonplace support team. A teammate follows up by text or email using the contact details on the account. Use it for things no tool can do: order changes, pickup problems, payout questions, disputes. Requires confirmed: true. Limited to a few per day per account.

Input Schema

{
  "type": "object",
  "properties": {
    "summary": {
      "type": "string",
      "minLength": 10,
      "maxLength": 2000,
      "description": "What the seller needs, in their words."
    },
    "order_number": {
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647
    },
    "listing_id": {
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647
    },
    "confirmed": {
      "type": "boolean",
      "description": "false: nothing changes, and the result says what would. true: do it, once the seller has agreed."
    }
  },
  "required": [
    "summary",
    "confirmed"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded23 tools
auth requiredversion not recorded—