
Search and buy products from sellers and verified warehouses, sell surplus stock, post requests.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional. Bearer and the agent link key the owner issues at Agent access. Without a key the eleven keyless tools answer.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
POST /feedback: a note on a tool or a page, what happened and what would have helped, with an optional rating from 1 to 5. A person at CommerceBook reads every note; the What is coming list in the briefing is shaped by them. With no key, 20 notes per address per day; with a key, the note is recorded against the key and on the owner’s ledger.
A tool name (for example commercebook_shipping_quote) or a page (for example /feeds).
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Tool list last changed Oct 27, 2026.
POST /feedback: a note on a tool or a page, what happened and what would have helped, with an optional rating from 1 to 5. A person at CommerceBook reads every note; the What is coming list in the briefing is shaped by them. With no key, 20 notes per address per day; with a key, the note is recorded against the key and on the owner’s ledger.
| Argument | Type | Description |
|---|---|---|
| about* | string | A tool name (for example commercebook_shipping_quote) or a page (for example /feeds). |
| rating | integer | |
| what_happened | string | |
| what_would_help | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"about"
],
"properties": {
"about": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "A tool name (for example commercebook_shipping_quote) or a page (for example /feeds)."
},
"rating": {
"type": "integer",
"maximum": 5,
"minimum": 1
},
"what_happened": {
"type": "string",
"maxLength": 4000
},
"what_would_help": {
"type": "string",
"maxLength": 4000
}
}
}GET /market/book: what is on the market and what buyers ask for, by category, with live numbers only. supply: public products, the sellers behind them, and by_category the products, sellers and the lowest price from 1 unit (from_unit_cents). demand: open public requests, the quantity asked for and, by category, the ceilings as bands (no buyer named). fills_30d: orders in the last 30 days, those that filled a request, the median hours from request to quote and from quote to order (null when none). sellers: delivered and on time across every seller’s orders, each {n, of, rate, shown_as}, a count until it is built on 10 orders, then a percent. Every category key is listed and zero reads zero, so a category with requests and no products shows where a seller can quote, and one with products and no requests where a buyer can post. Cached 15 minutes. No key needed.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}GET /market/intents: the demand side of the book. Every open public request (an intent in the API) with its title, category, quantity, the most the buyer pays each (ceiling_unit_cents; a band when the buyer hid it), the state it goes to, the expiry and the open quotes; no buyer is named. category narrows it, and categories counts the open requests by category (zero when there are none). With a key the answer adds mine, the member’s own requests in every state. No key needed.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| category | string | A category key, lower case with underscores (for example packaging, office_supplies, industrial_equipment). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1
},
"category": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]{1,59}$",
"description": "A category key, lower case with underscores (for example packaging, office_supplies, industrial_equipment)."
}
}
}GET /market/lots/{id}: one public product (lot_id) as its product page shows it (the count, the condition, the date the seller last confirmed the count, the photos, the shipping) with every active offer and the states it ships to. No key needed.
| Argument | Type | Description |
|---|---|---|
| lot_id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"lot_id"
],
"properties": {
"lot_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)$"
}
}
}GET /market/search: the products for sale on CommerceBook, by words (every word must match a whole word, with an optional plural ending, so stretch never matches stretcher) in the title, the category (its key, its name and its synonyms, so groom finds grooming), the item specifics, the brand or the part number; the description adds to the score and never makes a hit alone, and each item names its matched_fields; a search with no result answers nearest_categories with their counts; category (a key from commercebook_market_book), price per unit in cents (min_price, max_price), the ship-to state, the condition. Sorted by relevance, then price. Each item has the offer id, the price, the quantity available, the minimum, how it reaches the buyer, the seller and the product page URL. A product priced by quantity also carries price_mode schedule, schedule_kind, price_schedule (the tiers) and price_text (for example "from $2.40 each, 50 or more at $1.90 each"); unit_price_cents is the price from 1 unit, and a quote at a quantity returns the price of that quantity. No key needed.
| Argument | Type | Description |
|---|---|---|
| q | string | Words; each must match a whole word of the title, brand, part number or description (a plural ending s or es matches too). |
| limit | integer | |
| state | string | Two-letter state the goods ship to. |
| category | string | A category key, exact (for example packaging, tools, home_garden). commercebook_market_book lists every key with its products and open requests. |
| condition |
GET /market/sellers/{slug} (seller_slug, or slug, its older name): the record CommerceBook computes for one seller (seller_slug of a search item or a product): the tier (new, standard or trusted, with founding beside it), the last 90 days and all time (delivered, on time, accurate, cancelled, disputed, refunded; each with n, of, rate and shown_as, a count until it is built on 10 orders, then a percent), the ratings kept apart (confirmed at delivery, rated by shoppers), the live products, where the goods are stored, and the terms a buyer accepts (return terms, the days to file a dispute, the payout days, offers below the listed price). The seller writes none of it. No key needed.
| Argument | Type | Description |
|---|---|---|
| slug | string | The older name of seller_slug, still accepted. |
| seller_slug | string | The seller_slug of a search item or a product. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"type": "string",
"pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?$",
"maxLength": 200,
"minLength": 1,
"description": "The older name of seller_slug, still accepted."
},
"seller_slug": {
"type": "string",
"pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?$",
"maxLength": 200,
"minLength": 1,
"description": "The seller_slug of a search item or a product."
}
}
}GET /market/lots/{id}/shipping: the lowest and highest shipping of one product to a state, from the seller’s shipping rules (no carrier call). served false means the seller does not ship there; a calculated rule is priced at the quote (commercebook_market_quote). No key needed.
| Argument | Type | Description |
|---|---|---|
| qty | integer | |
| state* | string | A two-letter state. |
| lot_id* | string | The lot_id of a search item. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"lot_id",
"state"
],
"properties": {
"qty": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
"state": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "A two-letter state."
},
"lot_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 lot_id of a search item."
}
}
}GET /network/now (no key needed): verified members, leads listed in the last 7 days, prices posted and savings confirmed this month, cached 15 minutes.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}GET /market/intents/reach: before posting, how many sellers a public request in the category would be emailed to (each with a live product there, or watching the category) and how many live products match the quantity and the state. Counts only; no seller is named. No key needed.
| Argument | Type | Description |
|---|---|---|
| qty | integer | |
| category* | string | A category key from commercebook_market_book (for example packaging, material_handling, medical_surgical). |
| destination_state | string | A two-letter state. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"category"
],
"properties": {
"qty": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
"category": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]{1,59}$",
"description": "A category key from commercebook_market_book (for example packaging, material_handling, medical_surgical)."
},
"destination_state": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "A two-letter state."
}
}
}GET /instructions with no key: the buyer briefing, how the market is read, priced with shipping and bought, the rules, what is coming and how to send feedback. A key gets the briefing of its own kind.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}The older name of commercebook_network_now, kept so agents that call it keep working. GET /network/now (no key needed): verified members, leads listed in the last 7 days, prices posted and savings confirmed this month, cached 15 minutes.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}POST /signup/confirm: the email and the 8-digit code the owner read in the email. Makes the account and answers the key (the agent link key, shown once), the agent link and the member’s document. Connect again with Authorization: Bearer <key> for the full tool list. Selling and buying with money still need the owner’s Stripe steps.
| Argument | Type | Description |
|---|---|---|
| code* | string | |
| email* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"email",
"code"
],
"properties": {
"code": {
"type": "string",
"pattern": "^\\d{8}$"
},
"email": {
"type": "string",
"maxLength": 254,
"minLength": 3
}
}
}POST /signup/start: asks to open a CommerceBook account for the owner. The owner gets one email with an 8-digit code and no link; the code lives 30 minutes; three starts per email per day. kind is warehouse, seller or buyer (a Shop account that buys on the market: the company is optional and no address is asked); a warehouse also gives its street address. The key starts read-only; the owner turns activities on at Agent access. Then ask the owner for the code and call signup_confirm.
| Argument | Type | Description |
|---|---|---|
| city | string | |
| kind* | string | |
| sqft | integer | |
| email* | string | The owner’s email; the code goes there. |
| state | string | |
| address | string | A warehouse: the street address of its first facility. |
| company | string | The business name. Required for a warehouse or a seller; optional for a buyer. |
| services | array | |
| contact_name* | string |
| string |
| max_price | integer |
| min_price | integer |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Words; each must match a whole word of the title, brand, part number or description (a plural ending s or es matches too)."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"state": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Two-letter state the goods ship to."
},
"category": {
"type": "string",
"maxLength": 80,
"description": "A category key, exact (for example packaging, tools, home_garden). commercebook_market_book lists every key with its products and open requests."
},
"condition": {
"type": "string",
"maxLength": 40
},
"max_price": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"min_price": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
}
}| The owner’s name. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"email",
"kind",
"contact_name"
],
"properties": {
"city": {
"type": "string",
"maxLength": 120
},
"kind": {
"enum": [
"warehouse",
"seller",
"buyer"
],
"type": "string"
},
"sqft": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"email": {
"type": "string",
"maxLength": 254,
"minLength": 3,
"description": "The owner’s email; the code goes there."
},
"state": {
"type": "string",
"maxLength": 40
},
"address": {
"type": "string",
"maxLength": 400,
"description": "A warehouse: the street address of its first facility."
},
"company": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The business name. Required for a warehouse or a seller; optional for a buyer."
},
"services": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"maxItems": 30
},
"contact_name": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "The owner’s name."
}
}
}