Search surplus and overstock inventory, request bulk quotes, and check out.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
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.
Export the calling seller's orders as CSV (Order ID, Product, Buyer, Quantity, Total, Status, Date). Thin adapter over POST /api/seller/orders/bulk-export — orders not owned by the caller are silently skipped. Returns the CSV body as a string plus the suggested filename.
Order ids belonging to the calling seller (max 200/request). Orders owned by anyone else are skipped.
Export the calling seller's orders as CSV (Order ID, Product, Buyer, Quantity, Total, Status, Date). Thin adapter over POST /api/seller/orders/bulk-export — orders not owned by the caller are silently skipped. Returns the CSV body as a string plus the suggested filename.
| Argument | Type | Description |
|---|---|---|
| order_ids* | array | Order ids belonging to the calling seller (max 200/request). Orders owned by anyone else are skipped. |
{
"type": "object",
"required": [
"order_ids"
],
"properties": {
"order_ids": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"maxItems": 200,
"minItems": 1,
"description": "Order ids belonging to the calling seller (max 200/request). Orders owned by anyone else are skipped."
}
}
}Mark up to 200 of the calling seller's orders as shipped, optionally writing a shared tracking number / URL / carrier to every order. Thin adapter over POST /api/seller/orders/bulk-mark-shipped — same per-order ownership filter, auto-detected carrier when only a tracking number is supplied. Supplying tracking overwrites any tracking already on the order, and each updated order sends the buyer a shipment message. Returns per-order success/failure buckets.
| Argument | Type | Description |
|---|---|---|
| order_ids* | array | Order ids belonging to the calling seller (max 200/request). Orders owned by anyone else are skipped. |
| carrier_name | string | Carrier for the shipment. Omit to infer it from tracking_number. |
| tracking_url | string | Tracking URL written to every listed order. |
| tracking_number | string | Tracking number written to every listed order. Supplying this without carrier_name auto-detects the carrier. |
{
"type": "object",
"required": [
"order_ids"
],
"properties": {
"order_ids": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"maxItems": 200,
"minItems": 1,
"description": "Order ids belonging to the calling seller (max 200/request). Orders owned by anyone else are skipped."
},
"carrier_name": {
"type": "string",
"maxLength": 255,
"description": "Carrier for the shipment. Omit to infer it from tracking_number."
},
"tracking_url": {
"type": "string",
"maxLength": 2000,
"description": "Tracking URL written to every listed order."
},
"tracking_number": {
"type": "string",
"maxLength": 255,
"description": "Tracking number written to every listed order. Supplying this without carrier_name auto-detects the carrier."
}
}
}Bulk update prices or minimum order quantities across up to 200 of the calling seller's product listings. Thin adapter over POST /api/products/bulk-update-price and /bulk-update-moq — same seller-ownership filter and per-product validation. Choose mode='price_set' (value=USD), 'price_percent_increase' / 'price_percent_decrease' (value=percent), or 'moq_set' (value=integer units).
| Argument | Type | Description |
|---|---|---|
| mode* | string | What to change and how: price_set writes an absolute USD price, price_percent_increase / price_percent_decrease adjust the current price by a percentage, moq_set writes a minimum order quantity. |
| value* | number | USD price for price_set, percent (0-1000) for percent modes, integer units (1-999999) for moq_set. |
| product_ids* | array | ForthClear product ids to update (max 200/request). |
{
"type": "object",
"required": [
"product_ids",
"mode",
"value"
],
"properties": {
"mode": {
"enum": [
"price_set",
"price_percent_increase",
"price_percent_decrease",
"moq_set"
],
"type": "string",
"description": "What to change and how: price_set writes an absolute USD price, price_percent_increase / price_percent_decrease adjust the current price by a percentage, moq_set writes a minimum order quantity."
},
"value": {
"type": "number",
"description": "USD price for price_set, percent (0-1000) for percent modes, integer units (1-999999) for moq_set."
},
"product_ids": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"maxItems": 200,
"minItems": 1,
"description": "ForthClear product ids to update (max 200/request)."
}
}
}Create a new product listing (seller tool)
| Argument | Type | Description |
|---|---|---|
| sku | string | Seller's own stock-keeping unit, shown to buyers and used for reconciliation. |
| name* | string | Listing title shown to buyers and matched by catalogue search. |
| category* | string | Catalogue category. One of: electronics, apparel, home_goods, beauty, sports, kitchenware, office_supplies, toys, food_beverage, tools, other. |
| quantity* | integer | Units available in this lot. |
| condition* | string | Standard liquidation condition grade (Task #72) |
| description | string | Listing body copy: condition detail, packaging, lot composition. Buyers filter on its presence and agents summarise it. |
| price_per_unit* | integer | Price in cents |
| original_retail_price | integer | Original retail price in cents |
Status, tracking and inspection deadline for an order owned by the authenticated buyer (X-MCP-API-Key of the order's buyer, or a buyer X-Agent-Token).
| Argument | Type | Description |
|---|---|---|
| order_id* | integer | ForthClear order id |
{
"type": "object",
"required": [
"order_id"
],
"properties": {
"order_id": {
"type": "integer",
"description": "ForthClear order id"
}
}
}Get AI-powered pricing recommendation for inventory (seller tool)
| Argument | Type | Description |
|---|---|---|
| category* | string | Catalogue category. One of: electronics, apparel, home_goods, beauty, sports, kitchenware, office_supplies, toys, food_beverage, tools, other. |
| quantity | integer | Lot size being priced; recommendations scale with volume. |
| condition* | string | Standard liquidation condition grade (Task #72) |
| original_retail* | integer | Original retail price in cents |
{
"type": "object",
"required": [
"category",
"condition",
"original_retail"
],
"properties": {
"category": {
"enum": [
"electronics",
"apparel",
"home_goods",
"beauty",
"sports",
"kitchenware",
"office_supplies",
"toys",
"food_beverage",
"tools",
"other"
],
"type": "string",
"description": "Catalogue category. One of: electronics, apparel, home_goods, beauty, sports, kitchenware, office_supplies, toys, food_beverage, tools, other."
},
"quantity": {
"type": "integer",
"description": "Lot size being priced; recommendations scale with volume."
},
"condition": {
"enum": [
"salvage",
"customer_returns",
"shelf_pulls",
"overstock",
"new_or_refurbished"
],
"type": "string",
"description": "Standard liquidation condition grade (Task #72)"
},
"original_retail": {
"type": "integer",
"description": "Original retail price in cents"
}
}
}Get detailed information about a specific product
| Argument | Type | Description |
|---|---|---|
| product_id* | string | Product ID (format: product_123) |
{
"type": "object",
"required": [
"product_id"
],
"properties": {
"product_id": {
"type": "string",
"description": "Product ID (format: product_123)"
}
}
}Get pending quote requests for seller's products (seller tool)
| Argument | Type | Description |
|---|---|---|
| status | string | Which of the calling seller's quote requests to return: pending (awaiting a reply), responded, or all. |
{
"type": "object",
"properties": {
"status": {
"enum": [
"pending",
"responded",
"all"
],
"type": "string",
"default": "pending",
"description": "Which of the calling seller's quote requests to return: pending (awaiting a reply), responded, or all."
}
}
}Read back a quote you filed: status (pending, responded, accepted, rejected, completed), the seller's price and shipping once they reply, and what to do next. Pass the status_token request_quote returned; a buyer X-Agent-Token or account key can read its own quotes without one.
| Argument | Type | Description |
|---|---|---|
| quote_id* | integer | Quote id from request_quote |
| status_token | string | status_token from the request_quote response |
{
"type": "object",
"required": [
"quote_id"
],
"properties": {
"quote_id": {
"type": "integer",
"description": "Quote id from request_quote"
},
"status_token": {
"type": "string",
"description": "status_token from the request_quote response"
}
}
}Open a dispute on a delivered order awaiting the buyer's confirmation. Moves the order to 'issue_reported', records the issue and notifies admins. Requires the order's buyer (X-MCP-API-Key or buyer X-Agent-Token).
| Argument | Type | Description |
|---|---|---|
| reason* | string | Dispute reason |
| order_id* | integer | ForthClear order id |
| photo_urls | array | Optional evidence URLs |
| description* | string | Free-text description of the issue |
| requested_action | string | Resolution the buyer is requesting |
{
"type": "object",
"required": [
"order_id",
"reason",
"description"
],
"properties": {
"reason": {
"enum": [
"missing_units",
"quality_issue",
"damaged",
"wrong_item",
"other"
],
"type": "string",
"description": "Dispute reason"
},
"order_id": {
"type": "integer",
"description": "ForthClear order id"
},
"photo_urls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"maxItems": 10,
"description": "Optional evidence URLs"
},
"description": {
"type": "string",
"maxLength": 2000,
"description": "Free-text description of the issue"
},
"requested_action": {
"enum": [
"refund",
"replacement",
"partial_refund"
],
"type": "string",
"description": "Resolution the buyer is requesting"
}
}
}One-step purchase for products with instant checkout enabled (seller opt-in) and orders under bulk threshold. For products without instant checkout or larger orders, use request_quote instead.
| Argument | Type | Description |
|---|---|---|
| quantity* | integer | Number of units to purchase |
| buyer_name | string | Buyer's full name |
| product_id* | string | Product ID (format: product_123) |
| buyer_email* | string | Buyer's email address |
| buyer_company | string | Buyer's company name |
{
"type": "object",
"required": [
"product_id",
"quantity",
"buyer_email"
],
"properties": {
"quantity": {
"type": "integer",
"minimum": 1,
"description": "Number of units to purchase"
},
"buyer_name": {
"type": "string",
"description": "Buyer's full name"
},
"product_id": {
"type": "string",
"description": "Product ID (format: product_123)"
},
"buyer_email": {
"type": "string",
"format": "email",
"description": "Buyer's email address"
},
"buyer_company": {
"type": "string",
"description": "Buyer's company name"
}
}
}Request a bulk quote for a product (buyer tool). Works without credentials: buyer_email is required and is where the seller replies. Anonymous quotes are limited to 5 per hour per IP; a buyer X-Agent-Token binds the quote to the buyer's account instead.
| Argument | Type | Description |
|---|---|---|
| message | string | Additional message to seller |
| quantity* | integer | Number of units to quote |
| buyer_name | string | Buyer's full name |
| product_id* | string | Product ID (format: product_123) |
| buyer_email* | string | Buyer's email address (required) |
| target_price | integer | Target price per unit in cents (optional) |
| buyer_company | string | Buyer's company name |
{
"type": "object",
"required": [
"product_id",
"quantity",
"buyer_email"
],
"properties": {
"message": {
"type": "string",
"description": "Additional message to seller"
},
"quantity": {
"type": "integer",
"minimum": 1,
"description": "Number of units to quote"
},
"buyer_name": {
"type": "string",
"description": "Buyer's full name"
},
"product_id": {
"type": "string",
"description": "Product ID (format: product_123)"
},
"buyer_email": {
"type": "string",
"format": "email",
"description": "Buyer's email address (required)"
},
"target_price": {
"type": "integer",
"description": "Target price per unit in cents (optional)"
},
"buyer_company": {
"type": "string",
"description": "Buyer's company name"
}
}
}Respond to a buyer's quote request (seller tool)
| Argument | Type | Description |
|---|---|---|
| action* | string | accept the buyer's terms as asked, counter with a different price (requires counter_price), or decline the request. |
| message | string | Optional note sent to the buyer alongside the decision. |
| counter_price | integer | Counter offer price in cents (for counter action) |
| quote_request_id* | integer | Id of the quote request to answer, as returned by get_quote_requests. |
{
"type": "object",
"required": [
"quote_request_id",
"action"
],
"properties": {
"action": {
"enum": [
"accept",
"counter",
"decline"
],
"type": "string",
"description": "accept the buyer's terms as asked, counter with a different price (requires counter_price), or decline the request."
},
"message": {
"type": "string",
"description": "Optional note sent to the buyer alongside the decision."
},
"counter_price": {
"type": "integer",
"description": "Counter offer price in cents (for counter action)"
},
"quote_request_id": {
"type": "integer",
"description": "Id of the quote request to answer, as returned by get_quote_requests."
}
}
}Search available liquidation inventory with filters
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum listings to return (default 20, max 100). |
| query | string | Search query |
| category | string | Product category |
| condition | string | Standard liquidation condition grade (Task #72) |
| max_price | integer | Maximum price in cents |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"description": "Maximum listings to return (default 20, max 100)."
},
"query": {
"type": "string",
"description": "Search query"
},
"category": {
"type": "string",
"description": "Product category"
},
"condition": {
"enum": [
"salvage",
"customer_returns",
"shelf_pulls",
"overstock",
"new_or_refurbished"
],
"type": "string",
"description": "Standard liquidation condition grade (Task #72)"
},
"max_price": {
"type": "integer",
"description": "Maximum price in cents"
}
}
}Semantic catalog search: ranks listings by similarity to a natural-language description (e.g. 'something like AirPods but cheaper'). Returns the search_inventory product shape plus a similarity score in [0, 1]. No credentials needed.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Number of ranked results to return |
| query* | string | Natural-language description of what the buyer wants |
| category | string | Restrict candidates to a single category |
| condition | string | Restrict candidates to one condition grade |
| max_price | integer | Maximum price per unit in cents |
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"description": "Number of ranked results to return"
},
"query": {
"type": "string",
"description": "Natural-language description of what the buyer wants"
},
"category": {
"type": "string",
"description": "Restrict candidates to a single category"
},
"condition": {
"enum": [
"salvage",
"customer_returns",
"shelf_pulls",
"overstock",
"new_or_refurbished"
],
"type": "string",
"description": "Restrict candidates to one condition grade"
},
"max_price": {
"type": "integer",
"description": "Maximum price per unit in cents"
}
}
}Read-only digest of the calling seller's inbox: pending quote requests, orders at risk of missing their ship-by deadline, and orders with reported issues. Useful for a daily standup or cron-driven agent that decides which bulk action to run next.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max items to surface in each bucket. |
| window_hours | integer | Look-ahead window for ship-by-date risk detection (default 24h). |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Max items to surface in each bucket."
},
"window_hours": {
"type": "integer",
"default": 24,
"maximum": 168,
"minimum": 1,
"description": "Look-ahead window for ship-by-date risk detection (default 24h)."
}
}
}Save a search for the calling agent principal. New matching listings are sent to each channel: webhook (HMAC-signed POST), email, or a pollable resource at /api/mcp/resources/subscriptions/{id}. Requires credentials.
| Argument | Type | Description |
|---|---|---|
| query* | object | Marketplace filter object (category, minPrice, maxPrice, minQuantity, search, sellerCountry, condition, moqRange, bulkDealsOnly). |
| channels* | array | Where to send new matches: 1-5 of webhook (public https URL), email, or mcp_resource (poll). |
{
"type": "object",
"required": [
"query",
"channels"
],
"properties": {
"query": {
"type": "object",
"description": "Marketplace filter object (category, minPrice, maxPrice, minQuantity, search, sellerCountry, condition, moqRange, bulkDealsOnly).",
"additionalProperties": true
},
"channels": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"type",
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"type": {
"const": "webhook"
}
}
},
{
"type": "object",
"required": [
"type",
"email"
],
"properties": {
"type": {
"const": "email"
},
"email": {
"type": "string",
"format": "email"
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"const": "mcp_resource"
}
}
}
]
},
"maxItems": 5,
"minItems": 1,
"description": "Where to send new matches: 1-5 of webhook (public https URL), email, or mcp_resource (poll)."
}
}
}{
"type": "object",
"required": [
"name",
"category",
"condition",
"quantity",
"price_per_unit"
],
"properties": {
"sku": {
"type": "string",
"description": "Seller's own stock-keeping unit, shown to buyers and used for reconciliation."
},
"name": {
"type": "string",
"description": "Listing title shown to buyers and matched by catalogue search."
},
"category": {
"enum": [
"electronics",
"apparel",
"home_goods",
"beauty",
"sports",
"kitchenware",
"office_supplies",
"toys",
"food_beverage",
"tools",
"other"
],
"type": "string",
"description": "Catalogue category. One of: electronics, apparel, home_goods, beauty, sports, kitchenware, office_supplies, toys, food_beverage, tools, other."
},
"quantity": {
"type": "integer",
"minimum": 1,
"description": "Units available in this lot."
},
"condition": {
"enum": [
"salvage",
"customer_returns",
"shelf_pulls",
"overstock",
"new_or_refurbished"
],
"type": "string",
"description": "Standard liquidation condition grade (Task #72)"
},
"description": {
"type": "string",
"description": "Listing body copy: condition detail, packaging, lot composition. Buyers filter on its presence and agents summarise it."
},
"price_per_unit": {
"type": "integer",
"description": "Price in cents"
},
"original_retail_price": {
"type": "integer",
"description": "Original retail price in cents"
}
}
}