ForthClear Liquidation Marketplace
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Search surplus and overstock inventory, request bulk quotes, and check out.
| Author | io.forthclear |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 287 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"ForthClear Liquidation Marketplace": {
"url": "https://app.forthclear.io/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (17)
search_inventoryread-onlySearch available liquidation inventory with filters
Parameters:
limit— integer — Maximum listings to return (default 20, max 100).query— string — Search querycategory— string — Product categorycondition— string — Standard liquidation condition grade (Task #72)max_price— integer — Maximum price in cents
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_product_detailsread-onlyGet detailed information about a specific product
Parameters:
product_id(required) — string — Product ID (format: product_123)
Hints: read-only yes · destructive no · idempotent not declared · open-world no
request_quoteRequest 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.
Parameters:
product_id(required) — string — Product ID (format: product_123)quantity(required) — integer — Number of units to quotebuyer_email(required) — string — Buyer's email address (required)message— string — Additional message to sellerbuyer_name— string — Buyer's full nametarget_price— integer — Target price per unit in cents (optional)buyer_company— string — Buyer's company name
Hints: read-only no · destructive no · idempotent no · open-world yes
get_quote_statusread-onlyRead 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.
Parameters:
quote_id(required) — integer — Quote id from request_quotestatus_token— string — status_token from the request_quote response
Hints: read-only yes · destructive no · idempotent not declared · open-world no
create_listingCreate a new product listing (seller tool)
Parameters:
name(required) — string — Listing title shown to buyers and matched by catalogue search.category(required) — string — Catalogue category. One of: electronics, apparel, home_goods, beauty, sports, kitchenware, office_supplies, toys, food_beverage, tools, other.condition(required) — string — Standard liquidation condition grade (Task #72)quantity(required) — integer — Units available in this lot.price_per_unit(required) — integer — Price in centssku— string — Seller's own stock-keeping unit, shown to buyers and used for reconciliation.description— string — Listing body copy: condition detail, packaging, lot composition. Buyers filter on its presence and agents summarise it.original_retail_price— integer — Original retail price in cents
Hints: read-only no · destructive no · idempotent no · open-world yes
get_pricing_recommendationread-onlyGet AI-powered pricing recommendation for inventory (seller tool)
Parameters:
category(required) — string — Catalogue category. One of: electronics, apparel, home_goods, beauty, sports, kitchenware, office_supplies, toys, food_beverage, tools, other.condition(required) — string — Standard liquidation condition grade (Task #72)original_retail(required) — integer — Original retail price in centsquantity— integer — Lot size being priced; recommendations scale with volume.
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_quote_requestsread-onlyGet pending quote requests for seller's products (seller tool)
Parameters:
status— string — Which of the calling seller's quote requests to return: pending (awaiting a reply), responded, or all.
Hints: read-only yes · destructive no · idempotent not declared · open-world no
respond_to_quoteRespond to a buyer's quote request (seller tool)
Parameters:
quote_request_id(required) — integer — Id of the quote request to answer, as returned by get_quote_requests.action(required) — 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)
Hints: read-only no · destructive no · idempotent no · open-world yes
bulk_update_listingsdestructiveBulk 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).
Parameters:
product_ids(required) — array — ForthClear product ids to update (max 200/request).mode(required) — 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(required) — number — USD price for price_set, percent (0-1000) for percent modes, integer units (1-999999) for moq_set.
Hints: read-only no · destructive yes · idempotent no · open-world yes
bulk_mark_shippeddestructiveMark 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.
Parameters:
order_ids(required) — 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.
Hints: read-only no · destructive yes · idempotent no · open-world yes
bulk_export_ordersread-onlyExport 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.
Parameters:
order_ids(required) — array — Order ids belonging to the calling seller (max 200/request). Orders owned by anyone else are skipped.
Hints: read-only yes · destructive no · idempotent not declared · open-world no
seller_inbox_summariseread-onlyRead-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.
Parameters:
limit— integer — Max items to surface in each bucket.window_hours— integer — Look-ahead window for ship-by-date risk detection (default 24h).
Hints: read-only yes · destructive no · idempotent not declared · open-world no
quick_buyOne-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.
Parameters:
product_id(required) — string — Product ID (format: product_123)quantity(required) — integer — Number of units to purchasebuyer_email(required) — string — Buyer's email addressbuyer_name— string — Buyer's full namebuyer_company— string — Buyer's company name
Hints: read-only no · destructive no · idempotent no · open-world yes
search_inventory_semanticread-onlySemantic 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.
Parameters:
query(required) — string — Natural-language description of what the buyer wantslimit— integer — Number of ranked results to returncategory— string — Restrict candidates to a single categorycondition— string — Restrict candidates to one condition grademax_price— integer — Maximum price per unit in cents
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_order_statusread-onlyStatus, 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).
Parameters:
order_id(required) — integer — ForthClear order id
Hints: read-only yes · destructive no · idempotent not declared · open-world no
open_disputeOpen 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).
Parameters:
order_id(required) — integer — ForthClear order idreason(required) — string — Dispute reasondescription(required) — string — Free-text description of the issuephoto_urls— array — Optional evidence URLsrequested_action— string — Resolution the buyer is requesting
Hints: read-only no · destructive no · idempotent no · open-world yes
subscribe_to_querySave 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.
Parameters:
query(required) — object — Marketplace filter object (category, minPrice, maxPrice, minQuantity, search, sellerCountry, condition, moqRange, bulkDealsOnly).channels(required) — array — Where to send new matches: 1-5 of webhook (public https URL), email, or mcp_resource (poll).
Hints: read-only no · destructive no · idempotent no · open-world yes
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.