ForthClear MCP
An official MCP server for the ForthClear B2B wholesale marketplace, enabling AI agents to search surplus inventory, request bulk quotes, manage product listings, and facilitate checkout for overstock and returned goods.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://app.forthclear.io/mcpWhat its tools do
29 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (15)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to forthclear.io ·
- Passed Endpoint is on the registry namespace domain ·
- Warning Advertises resources/templates/list but does not implement it
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search surplus inventory with filters
- Request bulk quotes for products
- Create and update product listings
- Facilitate fast checkout for orders
Source and maintenance
Protocol and capabilities
- Server
- forthclear-liquidation 1.5.0
- MCP protocol negotiated in check
- 2025-03-26
- Tools
- 29 advertised
- Resources
- 2 advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
},
"resources": {
"subscribe": false,
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
29 advertised
search_inventory — Search inventory
Keyword search of published, in-stock surplus listings. No sign-in required. `query` matches the name, description, brand, SKU, and category words, in any order. If the whole query is a category (electronics, clothes, home goods), it is treated as that category filter. Pass `category` as a catalogue category, such as electronics or home_goods, when you want to limit results. `max_price` is the maximum unit price in cents. `condition` is salvage, customer_returns, shelf_pulls, overstock, or new_or_refurbished. Name, brand, and SKU matches rank above description matches. For a sentence about what you want, use search_inventory_semantic.
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"description": "Maximum listings to return (default 20, max 100)."
},
"query": {
"type": "string",
"description": "Words to match, or a category name such as electronics or clothes. Not a sentence — use search_inventory_semantic for that."
},
"category": {
"enum": [
"electronics",
"apparel",
"home_goods",
"beauty",
"sports",
"kitchenware",
"office_supplies",
"toys",
"food_beverage",
"tools",
"other"
],
"type": "string",
"description": "Limit to one catalogue category. One of: electronics, apparel, home_goods, beauty, sports, kitchenware, office_supplies, toys, food_beverage, tools, other. Prose such as \"Electronics\" or \"clothes\" is accepted and mapped to the stored value."
},
"condition": {
"enum": [
"salvage",
"customer_returns",
"shelf_pulls",
"overstock",
"new_or_refurbished"
],
"type": "string",
"description": "Condition of the goods: salvage (sold as-is), customer returns, shelf pulls, overstock, or new or refurbished."
},
"max_price": {
"type": "integer",
"description": "Maximum unit price in cents. 5000 means $50.00."
}
}
}{
"type": "object",
"required": [
"products",
"total",
"message"
],
"properties": {
"total": {
"type": "integer",
"description": "Catalogue matches before the limit is applied."
},
"message": {
"type": "string"
},
"products": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"category",
"quantity",
"price",
"url"
],
"properties": {
"id": {
"type": "string",
"description": "Opaque listing id, `product_<n>`."
},
"moq": {
"type": "integer"
},
"url": {
"type": "string",
"description": "Absolute URL of the public listing page."
},
"name": {
"type": "string"
},
"price": {
"type": "integer",
"description": "Unit price in cents."
},
"category": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"supplier": {
"type": "object",
"required": [
"name",
"slug",
"country",
"type",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"type": {
"type": "string"
},
"country": {
"type": "string"
}
},
"description": "Present when this listing's seller has claimed a published supplier profile."
},
"condition": {
"type": [
"string",
"null"
]
},
"image_url": {
"type": [
"string",
"null"
],
"description": "Absolute https URL of the primary photo, or null when the listing has none."
},
"next_step": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
],
"description": "Plain-text listing copy. HTML and citation markers are removed."
},
"shipping_price": {
"type": [
"number",
"string"
],
"description": "Per-unit shipping as a number, or the string quote shipping."
},
"quote_threshold": {
"type": "integer"
},
"discount_percent": {
"type": [
"integer",
"null"
],
"description": "Null when the listing has no original retail price on file."
},
"ship_from_country": {
"type": [
"string",
"null"
]
},
"instant_checkout_eligible": {
"type": "boolean"
},
"requires_verified_reseller": {
"type": "boolean"
}
}
}
}
}
}{
"title": "Search inventory",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}get_product_details — Get product details
Read one listing: description, price, quantity, condition, photo, and whether instant checkout is available. No sign-in required. Use this before requesting a quote or buying. Pass the exact id from search, for example product_2731.
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Alias for product_id"
},
"productId": {
"type": "string",
"description": "Alias for product_id"
},
"product_id": {
"type": "string",
"description": "Exact id from search, for example product_2731"
}
}
}{
"type": "object",
"required": [
"id",
"name",
"category",
"quantity_available",
"price",
"quote_required",
"url"
],
"properties": {
"id": {
"type": "string"
},
"moq": {
"type": "integer"
},
"url": {
"type": "string",
"description": "Absolute URL of the public listing page."
},
"name": {
"type": "string"
},
"price": {
"type": "integer",
"description": "Unit price in minor units of currency."
},
"seller": {
"type": "object",
"required": [
"company",
"verified"
],
"properties": {
"company": {
"type": "string"
},
"verified": {
"type": "boolean",
"description": "True when a Stripe account id is on file. It does not mean payouts are enabled. Payment readiness is checked at checkout."
}
}
},
"category": {
"type": "string"
},
"currency": {
"type": "string"
},
"lot_type": {
"type": "string"
},
"supplier": {
"type": "object",
"required": [
"name",
"slug",
"country",
"type",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"type": {
"type": "string"
},
"country": {
"type": "string"
}
},
"description": "Present when this listing's seller has claimed a published supplier profile."
},
"condition": {
"type": [
"string",
"null"
]
},
"image_url": {
"type": [
"string",
"null"
],
"description": "Absolute https URL of the primary photo, or null when the listing has none."
},
"next_step": {
"type": "string"
},
"ship_from": {
"type": [
"string",
"null"
]
},
"terms_url": {
"type": "string"
},
"sold_as_is": {
"type": "boolean"
},
"description": {
"type": [
"string",
"null"
],
"description": "Plain-text listing copy. HTML and citation markers are removed."
},
"next_action": {
"type": "string"
},
"claims_summary": {
"type": "string"
},
"quote_required": {
"type": "boolean"
},
"shipping_price": {
"type": [
"number",
"string"
],
"description": "Per-unit shipping as a number, or the string quote shipping."
},
"original_retail": {
"type": [
"integer",
"null"
]
},
"quote_threshold": {
"type": "integer"
},
"shipping_method": {
"type": "string"
},
"bulk_price_tiers": {
"type": "array",
"items": {
"type": "object",
"required": [
"min_quantity",
"price_cents"
],
"properties": {
"price_cents": {
"type": "integer"
},
"min_quantity": {
"type": "integer"
}
}
}
},
"instant_checkout": {
"type": "boolean"
},
"claims_policy_url": {
"type": "string"
},
"payment_readiness": {
"type": "string"
},
"ship_from_country": {
"type": [
"string",
"null"
]
},
"min_order_quantity": {
"type": "integer"
},
"quantity_available": {
"type": "integer"
},
"condition_definition": {
"type": "string"
},
"shipping_price_cents": {
"type": [
"integer",
"null"
],
"description": "Per-unit freight in cents, or null when not priced."
},
"quote_quantity_threshold": {
"type": "integer"
},
"instant_checkout_eligible": {
"type": "boolean"
},
"requires_verified_reseller": {
"type": "boolean"
}
}
}{
"title": "Get product details",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}request_quote — Request a bulk quote
Ask a seller to price a bulk order. No sign-in required if you pass buyer_email, which is where the seller replies. buyer_email is always required, including when you are signed in. Anonymous requests are limited to 5 per hour. Sign in with buyer access to attach the quote to your account. Save status_token and pass it to get_quote_status. This does not charge a card. Sensitive: requires user approval each time.
{
"type": "object",
"required": [
"product_id",
"quantity",
"buyer_email",
"idempotency_key"
],
"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": "Exact id from search, for example product_2731"
},
"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"
},
"idempotency_key": {
"type": "string",
"description": "Required. 8–200 characters (letters, digits, . _ : -). The same key returns the original result for 24 hours and is sent to Stripe as Idempotency-Key."
}
}
}{
"type": "object",
"required": [
"success",
"message",
"quote"
],
"properties": {
"quote": {
"type": "object",
"required": [
"id",
"product_id",
"product_name",
"quantity",
"status",
"expected_response"
],
"properties": {
"id": {
"type": "integer"
},
"status": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"product_id": {
"type": "string"
},
"product_name": {
"type": "string"
},
"target_price": {
"type": [
"number",
"null"
],
"description": "Buyer target per unit, as supplied."
},
"seller_company": {
"type": "string"
},
"expected_response": {
"type": "string",
"description": "What happens next. The seller is notified. There is no guaranteed reply time."
}
}
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
},
"status_token": {
"type": "string",
"description": "Pass to get_quote_status to read this quote back. Keep it: an anonymous caller has no other way in."
}
}
}{
"title": "Request a bulk quote",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}get_quote_status — Get quote status
Check a quote you requested: pending, responded, accepted, rejected, or completed, plus the seller price and shipping once they reply. No sign-in required when you pass the status_token from request_quote. Signed-in buyers can also read their own quotes without the token.
{
"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"
}
}
}{
"type": "object",
"required": [
"quote_id",
"product_id",
"quantity",
"status",
"seller_response",
"created_at",
"updated_at",
"next_action",
"buyer_quote_url"
],
"properties": {
"status": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"quote_id": {
"type": "integer"
},
"created_at": {
"type": "string"
},
"product_id": {
"type": "string"
},
"updated_at": {
"type": "string"
},
"next_action": {
"type": "string"
},
"buyer_quote_url": {
"type": "string"
},
"seller_response": {
"type": [
"object",
"null"
],
"required": [
"price_per_unit",
"currency"
],
"properties": {
"message": {
"type": [
"string",
"null"
]
},
"currency": {
"type": "string"
},
"shipping": {
"type": [
"number",
"null"
]
},
"price_per_unit": {
"type": "number"
},
"total_additional_costs": {
"type": [
"number",
"null"
]
}
}
},
"target_price_per_unit": {
"type": [
"number",
"null"
]
}
}
}{
"title": "Get quote status",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}create_listing — Create a listing
Publish a surplus lot for sale. Requires sign-in with seller access. Provide a title, category, condition, quantity, and price per unit. Sensitive: requires user approval each time.
{
"type": "object",
"required": [
"name",
"category",
"condition",
"quantity",
"price_per_unit",
"idempotency_key"
],
"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": "Condition of the goods: salvage (sold as-is), customer returns, shelf pulls, overstock, or new or refurbished."
},
"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"
},
"idempotency_key": {
"type": "string",
"description": "Required. 8–200 characters (letters, digits, . _ : -). The same key returns the original result for 24 hours and is sent to Stripe as Idempotency-Key."
},
"original_retail_price": {
"type": "integer",
"description": "Original retail price in cents"
}
}
}{
"type": "object",
"required": [
"success",
"message",
"listing"
],
"properties": {
"listing": {
"type": "object",
"required": [
"id",
"name",
"category",
"quantity",
"price",
"status",
"view_url"
],
"properties": {
"id": {
"type": "string"
},
"sku": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"price": {
"type": "integer",
"description": "Unit price in cents."
},
"status": {
"type": "string"
},
"category": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"view_url": {
"type": "string",
"description": "Buyer-facing listing page."
},
"condition": {
"type": [
"string",
"null"
]
},
"image_url": {
"type": [
"string",
"null"
]
},
"original_retail": {
"type": [
"integer",
"null"
]
}
}
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}{
"title": "Create a listing",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}get_pricing_recommendation — Get pricing recommendation
Suggest a liquidation unit price in cents from MSRP, condition, category, and lot size. No sign-in required. original_retail is MSRP per unit in cents. Larger lots suggest a lower per-unit price. The result is bounded below retail. This does not change any listing's price.
{
"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": "Units in the lot. Larger lots get a lower per-unit suggestion. Omit for a small lot."
},
"condition": {
"enum": [
"salvage",
"customer_returns",
"shelf_pulls",
"overstock",
"new_or_refurbished"
],
"type": "string",
"description": "Condition of the goods: salvage (sold as-is), customer returns, shelf pulls, overstock, or new or refurbished."
},
"original_retail": {
"type": "integer",
"description": "MSRP per unit in cents. 5000 means $50.00. Required, and must be greater than zero."
}
}
}{
"type": "object",
"required": [
"recommended_price",
"price_range",
"discount_from_retail",
"factors",
"tips"
],
"properties": {
"tips": {
"type": "array",
"items": {
"type": "string"
}
},
"factors": {
"type": "array",
"items": {
"type": "string"
}
},
"price_range": {
"type": "object",
"required": [
"low",
"high"
],
"properties": {
"low": {
"type": "number"
},
"high": {
"type": "number"
}
}
},
"recommended_price": {
"type": "number"
},
"discount_from_retail": {
"type": "number",
"description": "Percent below original retail."
}
}
}{
"title": "Get pricing recommendation",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}get_quote_requests — Get incoming quote requests
List quote requests buyers sent you. Requires sign-in with seller access. Filter to pending, 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."
}
}
}{
"type": "object",
"required": [
"quotes",
"total",
"message"
],
"properties": {
"total": {
"type": "integer"
},
"quotes": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"product_id",
"quantity",
"status",
"created_at"
],
"properties": {
"id": {
"type": "integer"
},
"status": {
"type": "string"
},
"message": {
"type": [
"string",
"null"
]
},
"quantity": {
"type": "integer"
},
"created_at": {
"type": "string",
"description": "ISO-8601 timestamp."
},
"product_id": {
"type": "string"
},
"product_name": {
"type": "string"
},
"target_price": {
"type": [
"integer",
"null"
],
"description": "Buyer target in cents."
},
"buyer_company": {
"type": "string"
}
}
}
},
"message": {
"type": "string"
}
}
}{
"title": "Get incoming quote requests",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}respond_to_quote — Respond to a quote request
Answer a quote from a buyer by accepting it, sending a counter-price, or declining. Requires sign-in with seller access. The buyer is notified. Sensitive: requires user approval each time.
{
"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."
}
}
}{
"type": "object",
"required": [
"success",
"message",
"quote"
],
"properties": {
"quote": {
"type": "object",
"required": [
"id",
"status",
"action"
],
"properties": {
"id": {
"type": "integer"
},
"action": {
"type": "string"
},
"status": {
"type": "string"
},
"response_price": {
"type": "integer"
}
}
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}{
"title": "Respond to a quote request",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}bulk_update_listings — Bulk update listing prices or MOQ
Change the price or the minimum order quantity on up to 200 of your listings. Requires sign-in with seller access. price_set takes price_cents (integer cents). value_usd is an explicit dollar amount and is deprecated. The percent modes adjust the current price, and moq_set writes a minimum order quantity. Previous values are replaced. Sensitive: requires user approval each time.
{
"type": "object",
"required": [
"product_ids",
"mode"
],
"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 unit price in cents via price_cents, price_percent_increase / price_percent_decrease adjust the current price by a percentage, moq_set writes a minimum order quantity."
},
"value": {
"type": "number",
"description": "Percent (0-1000) for percent modes, or integer units (1-999999) for moq_set. Not accepted for price_set."
},
"value_usd": {
"type": "number",
"description": "Deprecated. For price_set only, an explicit price in US dollars. Prefer price_cents."
},
"price_cents": {
"type": "integer",
"description": "For price_set only. Absolute unit price in cents. 5000 means $50.00."
},
"product_ids": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"maxItems": 200,
"minItems": 1,
"description": "ForthClear product ids to update (max 200/request)."
}
}
}{
"type": "object",
"required": [
"success",
"mode",
"updated_count",
"updates",
"message"
],
"properties": {
"mode": {
"type": "string"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
},
"updates": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"before",
"after"
],
"properties": {
"id": {
"type": "integer"
},
"after": {
"type": "number"
},
"before": {
"type": [
"number",
"null"
]
}
}
}
},
"updated_count": {
"type": "integer"
}
}
}{
"title": "Bulk update listing prices or MOQ",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}set_listing_shipping — Set listing shipping
Set how your listings ship: the shipping price per unit, or that shipping is quoted per order, and the lot type (parcel, pallet, truckload or mixed). Optionally set where your stock ships from; that is part of your seller account and shows on all your listings. Requires sign-in with seller access. Up to 200 of your listings per call; every id must be yours or nothing changes. shipping_price_cents is charged per unit at checkout (0 means free shipping). quote_shipping=true removes the fixed price so buyers ask for a quote, and turns off instant checkout on those listings, because instant checkout needs a fixed shipping price. Sensitive: requires user approval each time.
{
"type": "object",
"required": [
"product_ids"
],
"properties": {
"lot_type": {
"enum": [
"parcel",
"pallet",
"truckload",
"mixed"
],
"type": "string",
"description": "How the lot ships: parcel (boxes by courier), pallet, truckload, or mixed."
},
"product_ids": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"maxItems": 200,
"minItems": 1,
"description": "Your ForthClear product ids (max 200 per call)."
},
"quote_shipping": {
"type": "boolean",
"description": "true: no fixed shipping price; buyers request a quote that includes shipping. Turns off instant checkout on these listings. Not with shipping_price_cents."
},
"ship_from_region": {
"type": "string",
"description": "Optional state or region your stock ships from, for example Michigan. Applies to your whole seller account. Only with ship_from_country."
},
"ship_from_country": {
"type": "string",
"description": "Two-letter country code your stock ships from, for example US. Applies to your whole seller account."
},
"shipping_price_cents": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"description": "Shipping price per unit in cents, charged per unit at checkout. 0 means free shipping. Not with quote_shipping."
}
}
}{
"type": "object",
"required": [
"success",
"updated_count",
"updates",
"ship_from",
"instant_checkout_turned_off",
"message"
],
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
},
"updates": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"shipping_price_cents",
"lot_type"
],
"properties": {
"id": {
"type": "integer"
},
"lot_type": {
"type": "string"
},
"shipping_price_cents": {
"type": [
"integer",
"null"
]
}
}
}
},
"ship_from": {
"type": [
"object",
"null"
],
"properties": {
"region": {
"type": [
"string",
"null"
]
},
"country": {
"type": "string"
}
}
},
"updated_count": {
"type": "integer"
},
"instant_checkout_turned_off": {
"type": "array",
"items": {
"type": "integer"
}
}
}
}{
"title": "Set listing shipping",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": true
}bulk_mark_shipped — Bulk mark orders shipped
Mark up to 200 of your orders as shipped, with an optional tracking number, tracking link, and carrier applied to the whole batch. Requires sign-in with seller access. Tracking you supply replaces tracking already on those orders, and each buyer is notified. Sensitive: requires user approval each time.
{
"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."
}
}
}{
"type": "object",
"required": [
"successful",
"failed",
"successCount",
"failureCount",
"carrier"
],
"properties": {
"failed": {
"type": "array",
"items": {
"type": "object",
"required": [
"orderId",
"reason"
],
"properties": {
"reason": {
"type": "string"
},
"orderId": {
"type": "integer"
}
}
}
},
"carrier": {
"type": [
"string",
"null"
]
},
"successful": {
"type": "array",
"items": {
"type": "integer"
}
},
"failureCount": {
"type": "integer"
},
"successCount": {
"type": "integer"
}
}
}{
"title": "Bulk mark orders shipped",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}bulk_export_orders — Export orders as CSV
Download your orders as CSV, with order id, product, buyer, quantity, total, status, and date. Requires sign-in with seller access. Only orders you own are included.
{
"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."
}
}
}{
"type": "object",
"required": [
"filename",
"content_type",
"included_count",
"requested_count",
"skipped_count",
"csv"
],
"properties": {
"csv": {
"type": "string"
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"skipped_count": {
"type": "integer"
},
"included_count": {
"type": "integer"
},
"requested_count": {
"type": "integer"
}
}
}{
"title": "Export orders as CSV",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}seller_inbox_summarise — Summarise seller inbox
Summarise your seller inbox: quotes waiting for a reply, orders that may miss their ship-by date, and orders with reported problems. Requires sign-in with seller access. Use it to decide what to answer or ship next.
{
"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)."
}
}
}{
"type": "object",
"required": [
"window_hours",
"generated_at",
"counts",
"pending_quotes",
"at_risk_orders",
"reported_issues",
"next_actions"
],
"properties": {
"counts": {
"type": "object",
"required": [
"pending_quotes",
"at_risk_orders",
"reported_issues"
],
"properties": {
"at_risk_orders": {
"type": "integer"
},
"pending_quotes": {
"type": "integer"
},
"reported_issues": {
"type": "integer"
}
}
},
"generated_at": {
"type": "string"
},
"next_actions": {
"type": "array",
"items": {
"type": "string"
}
},
"window_hours": {
"type": "integer"
},
"at_risk_orders": {
"type": "array",
"items": {
"type": "object",
"required": [
"order_id",
"status"
],
"properties": {
"status": {
"type": "string"
},
"ship_by": {
"type": "string"
},
"buyer_id": {
"type": "integer"
},
"order_id": {
"type": "integer"
},
"hours_remaining": {
"type": [
"number",
"null"
]
}
}
}
},
"pending_quotes": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"quantity"
],
"properties": {
"id": {
"type": "integer"
},
"buyer_id": {
"type": "integer"
},
"quantity": {
"type": "integer"
},
"created_at": {
"type": "string"
},
"product_id": {
"type": [
"string",
"null"
]
},
"target_price_cents": {
"type": [
"number",
"null"
]
}
}
}
},
"reported_issues": {
"type": "array",
"items": {
"type": "object",
"required": [
"order_id",
"status"
],
"properties": {
"status": {
"type": "string"
},
"buyer_id": {
"type": "integer"
},
"order_id": {
"type": "integer"
},
"reported_at": {
"type": [
"string",
"null"
]
}
}
}
}
}
}{
"title": "Summarise seller inbox",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}quick_buy — Quick buy
Start instant checkout for one listing. The listing's seller sells the goods. ForthClear runs the marketplace and Stripe processes the payment. Requires sign-in with buyer purchase access. buyer_email is required. quantity must be a positive integer below the listing's quote threshold (quote_quantity_threshold from get_product_details). A threshold of 1 means no quantity can be bought instantly — use request_quote. The listing must have instant checkout and a shipping price. This creates a checkout session; it does not charge the card. Sensitive: requires user approval each time.
{
"type": "object",
"required": [
"product_id",
"quantity",
"buyer_email",
"idempotency_key"
],
"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": "Exact id from search, for example product_2731"
},
"buyer_email": {
"type": "string",
"format": "email",
"description": "Buyer's email address"
},
"buyer_company": {
"type": "string",
"description": "Buyer's company name"
},
"idempotency_key": {
"type": "string",
"description": "Required. 8–200 characters (letters, digits, . _ : -). The same key returns the original result for 24 hours and is sent to Stripe as Idempotency-Key."
}
}
}{
"type": "object",
"required": [
"success",
"checkout",
"payment",
"next_steps"
],
"properties": {
"message": {
"type": "string"
},
"payment": {
"type": "object",
"required": [
"method",
"instructions"
],
"properties": {
"method": {
"type": "string"
},
"contact_url": {
"type": "string"
},
"complete_url": {
"type": "string"
},
"instructions": {
"type": "string"
}
}
},
"success": {
"type": "boolean"
},
"checkout": {
"type": "object",
"required": [
"id",
"status",
"quantity",
"grand_total"
],
"properties": {
"id": {
"type": "string"
},
"status": {
"type": "string"
},
"currency": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"subtotal": {
"type": "integer"
},
"unit_price": {
"type": "integer"
},
"grand_total": {
"type": "integer"
},
"platform_fee": {
"type": "integer"
},
"product_name": {
"type": "string"
}
}
},
"next_steps": {
"type": "array",
"items": {
"type": "string"
}
}
}
}{
"title": "Quick buy",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": true
}search_inventory_semantic — Semantic inventory search
Find listings by describing what you want in everyday language, such as returned kitchen appliances in bulk. No sign-in required. Semantic matches include similarity from 0 to 1 and match_type semantic. When the embedding index is empty or no provider is configured, results use keyword search, similarity is null, and match_type is keyword_fallback. category, when set, is one catalogue category such as electronics. max_price is the maximum unit price 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": {
"enum": [
"electronics",
"apparel",
"home_goods",
"beauty",
"sports",
"kitchenware",
"office_supplies",
"toys",
"food_beverage",
"tools",
"other"
],
"type": "string",
"description": "Limit to one catalogue category. One of: electronics, apparel, home_goods, beauty, sports, kitchenware, office_supplies, toys, food_beverage, tools, other."
},
"condition": {
"enum": [
"salvage",
"customer_returns",
"shelf_pulls",
"overstock",
"new_or_refurbished"
],
"type": "string",
"description": "Condition of the goods: salvage (sold as-is), customer returns, shelf pulls, overstock, or new or refurbished."
},
"max_price": {
"type": "integer",
"description": "Maximum price per unit in cents"
}
}
}{
"type": "object",
"required": [
"query",
"results",
"count",
"model",
"message",
"products",
"total"
],
"properties": {
"count": {
"type": "integer"
},
"model": {
"type": "string"
},
"query": {
"type": "string"
},
"total": {
"type": "integer"
},
"message": {
"type": "string"
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"product_id",
"name",
"price",
"url",
"similarity",
"match_type"
],
"properties": {
"id": {
"type": "string"
},
"sku": {
"type": [
"string",
"null"
]
},
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"price": {
"type": "integer"
},
"category": {
"type": [
"string",
"null"
]
},
"quantity": {
"type": "integer"
},
"condition": {
"type": [
"string",
"null"
]
},
"image_url": {
"type": [
"string",
"null"
]
},
"match_type": {
"type": "string"
},
"product_id": {
"type": "integer"
},
"similarity": {
"type": [
"number",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"original_retail": {
"type": [
"number",
"null"
]
},
"discount_percent": {
"type": [
"number",
"null"
]
}
}
}
},
"products": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"price",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"price": {
"type": "integer"
},
"category": {
"type": [
"string",
"null"
]
},
"quantity": {
"type": "integer"
},
"condition": {
"type": [
"string",
"null"
]
},
"image_url": {
"type": [
"string",
"null"
]
},
"match_type": {
"type": "string"
},
"similarity": {
"type": [
"number",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"discount_percent": {
"type": [
"number",
"null"
]
}
}
}
}
}
}{
"title": "Semantic inventory search",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}get_order_status — Get order status
Check status, tracking, and the inspection deadline for an order you placed. Requires sign-in with buyer access.
{
"type": "object",
"required": [
"order_id"
],
"properties": {
"order_id": {
"type": "integer",
"description": "ForthClear order id"
}
}
}{
"type": "object",
"required": [
"order_id",
"status",
"quantity",
"currency",
"tracking",
"created_at",
"updated_at",
"next_actions"
],
"properties": {
"status": {
"type": "string"
},
"currency": {
"type": "string"
},
"order_id": {
"type": "integer"
},
"quantity": {
"type": "integer"
},
"tracking": {
"type": [
"object",
"null"
],
"required": [
"number"
],
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"number": {
"type": "string"
},
"carrier": {
"type": [
"string",
"null"
]
},
"expected_delivery": {
"type": [
"string",
"null"
]
}
}
},
"created_at": {
"type": "string"
},
"updated_at": {
"type": "string"
},
"next_actions": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"description"
],
"properties": {
"type": {
"type": "string"
},
"deadline": {
"type": [
"string",
"null"
]
},
"description": {
"type": "string"
}
}
}
},
"ship_by_date": {
"type": [
"string",
"null"
]
},
"total_amount": {
"type": [
"number",
"null"
]
},
"payment_released": {
"type": "boolean"
},
"issue_reported_at": {
"type": [
"string",
"null"
]
},
"inspection_deadline": {
"type": [
"string",
"null"
]
},
"delivery_received_at": {
"type": [
"string",
"null"
]
}
}
}{
"title": "Get order status",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}open_dispute — Open a dispute
Report a problem with an order. not_received is allowed while the order is marked shipped. Other reasons require a delivered order waiting for confirmation. This records the issue, pauses the seller payout, and notifies ForthClear. Requires sign-in with buyer access. Sensitive: requires user approval each time.
{
"type": "object",
"required": [
"order_id",
"reason",
"description",
"idempotency_key"
],
"properties": {
"reason": {
"enum": [
"missing_units",
"quality_issue",
"damaged",
"wrong_item",
"not_received",
"other"
],
"type": "string",
"description": "Dispute reason. not_received is allowed while the order is shipped. The other reasons require delivered_pending_confirmation."
},
"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"
},
"idempotency_key": {
"type": "string",
"description": "Required. 8–200 characters (letters, digits, . _ : -). The same key returns the original result for 24 hours and is sent to Stripe as Idempotency-Key."
},
"requested_action": {
"enum": [
"refund",
"replacement",
"partial_refund"
],
"type": "string",
"description": "Resolution the buyer is requesting"
}
}
}{
"type": "object",
"required": [
"success",
"message",
"dispute_id",
"order_id",
"status",
"opened_at",
"sla",
"next_actions"
],
"properties": {
"sla": {
"type": "object",
"required": [
"admin_review_within_hours",
"admin_review_deadline"
],
"properties": {
"admin_review_deadline": {
"type": "string"
},
"admin_review_within_hours": {
"type": "integer"
}
}
},
"status": {
"type": "string"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
},
"order_id": {
"type": "integer"
},
"opened_at": {
"type": "string"
},
"dispute_id": {
"type": "string"
},
"next_actions": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"description"
],
"properties": {
"type": {
"type": "string"
},
"description": {
"type": "string"
}
}
}
}
}
}{
"title": "Open a dispute",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": true
}subscribe_to_query — Subscribe to a saved search
Save a catalogue search and receive new matching listings by email, webhook, or a pollable feed. Requires sign-in with buyer access.
{
"type": "object",
"required": [
"query",
"channels"
],
"properties": {
"query": {
"type": "object",
"properties": {
"sort": {
"enum": [
"newest",
"price_low",
"price_high",
"quantity_low",
"quantity_high",
"discount_desc",
"lot_total_low",
"lot_total_high"
],
"type": "string",
"description": "Result order: newest, price_low, price_high, quantity_low, quantity_high, discount_desc, lot_total_low, or lot_total_high."
},
"search": {
"type": "string",
"maxLength": 200,
"description": "Words to match in the listing name, description, brand, or SKU."
},
"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."
},
"maxPrice": {
"type": "number",
"minimum": 0,
"description": "Maximum unit price in US dollars. 50 means $50."
},
"minPrice": {
"type": "number",
"minimum": 0,
"description": "Minimum unit price in US dollars. 50 means $50."
},
"moqRange": {
"enum": [
"0",
"1-50",
"51-100",
"101-500",
"501-1000",
"1001+"
],
"type": "string",
"description": "Minimum-order band: 0, 1-50, 51-100, 101-500, 501-1000, or 1001+."
},
"condition": {
"enum": [
"salvage",
"customer_returns",
"shelf_pulls",
"overstock",
"new_or_refurbished"
],
"type": "string",
"description": "Condition of the goods: salvage (sold as-is), customer returns, shelf pulls, overstock, or new or refurbished."
},
"minQuantity": {
"type": "integer",
"minimum": 0,
"description": "Minimum units available on the listing."
},
"bulkDealsOnly": {
"type": "boolean",
"description": "When true, only listings that have a bulk price tier."
},
"sellerCountry": {
"type": "string",
"maxLength": 10,
"description": "Seller country, as stored on the seller account (name or 2-letter code)."
}
},
"description": "Marketplace filter. Prices are US dollars per unit. Omit a field to leave it unset.",
"additionalProperties": false
},
"channels": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"type",
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Public https URL that receives new matches. Private and loopback addresses are rejected."
},
"type": {
"const": "webhook",
"description": "Deliver matches by HTTP POST to url."
}
}
},
{
"type": "object",
"required": [
"type",
"email"
],
"properties": {
"type": {
"const": "email",
"description": "Deliver matches by email."
},
"email": {
"type": "string",
"format": "email",
"description": "Address that receives new matches."
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"const": "mcp_resource",
"description": "Keep matches on a pollable feed. The response includes poll_url."
}
}
}
]
},
"maxItems": 5,
"minItems": 1,
"description": "Where to send new matches. One to five entries. Each entry is a webhook (public https URL), an email address, or mcp_resource (poll the returned feed)."
}
}
}{
"type": "object",
"required": [
"success",
"subscription",
"webhook_contract"
],
"properties": {
"success": {
"type": "boolean"
},
"subscription": {
"type": "object",
"required": [
"id",
"query",
"channels",
"active",
"created_at",
"poll_url",
"unsubscribe_url"
],
"properties": {
"id": {
"type": "integer"
},
"query": {
"type": "object"
},
"active": {
"type": "boolean"
},
"channels": {
"type": "array",
"items": {
"type": "object"
}
},
"poll_url": {
"type": "string"
},
"created_at": {
"type": "string"
},
"unsubscribe_url": {
"type": "string"
}
}
},
"webhook_contract": {
"type": "object",
"required": [
"event",
"signature_header",
"algorithm",
"encoding",
"secret_env"
],
"properties": {
"event": {
"type": "string"
},
"encoding": {
"type": "string"
},
"algorithm": {
"type": "string"
},
"secret_env": {
"type": "string"
},
"signature_header": {
"type": "string"
}
}
}
}
}{
"title": "Subscribe to a saved search",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}search_suppliers — Search suppliers
Search the supplier directory. No sign-in required. Returns published company profiles only, including profiles a company has claimed. These are not lots for sale. A profile is compiled from public sources and is not an endorsement. Use search_inventory to find lots you can buy. Filter with query, country, type (3pl, returns_processor, brand_retailer, liquidator, other), or category.
{
"type": "object",
"properties": {
"type": {
"enum": [
"3pl",
"returns_processor",
"brand_retailer",
"liquidator",
"other"
],
"type": "string",
"description": "Kind of company."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"description": "Maximum profiles to return (default 20, max 50)."
},
"query": {
"type": "string",
"description": "Words to match against the company name, city, or summary."
},
"country": {
"type": "string",
"description": "Country name or 2-letter code, matched exactly."
},
"category": {
"type": "string",
"description": "One category the profile lists, such as apparel or electronics."
}
}
}{
"type": "object",
"required": [
"suppliers",
"total",
"message"
],
"properties": {
"total": {
"type": "integer"
},
"message": {
"type": "string"
},
"suppliers": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"slug",
"country",
"type",
"categories",
"claimed",
"url"
],
"properties": {
"url": {
"type": "string"
},
"city": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"type": {
"type": "string"
},
"blurb": {
"type": [
"string",
"null"
]
},
"claimed": {
"type": "boolean"
},
"country": {
"type": "string"
},
"website": {
"type": [
"string",
"null"
]
},
"categories": {
"type": "array",
"items": {
"type": "string"
}
},
"type_label": {
"type": "string"
}
}
}
}
}
}{
"title": "Search suppliers",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}preview_checkout — Preview checkout
Read the seller of record, unit price, shipping, tax, and total for an instant-checkout listing. Does not charge a card. Requires buyer read access. Pass the returned checkout_id to confirm_purchase.
{
"type": "object",
"required": [
"product_id",
"quantity",
"idempotency_key"
],
"properties": {
"quantity": {
"type": "integer",
"description": "Units to buy. Must be below the quote threshold."
},
"product_id": {
"type": "string",
"description": "Exact id from search, for example product_2731."
},
"idempotency_key": {
"type": "string",
"description": "Required. 8–200 characters (letters, digits, . _ : -). The same key returns the original result for 24 hours and is sent to Stripe as Idempotency-Key."
},
"shipping_address_id": {
"type": "string",
"description": "Optional. Shipping is the listing's shipping price; tax is not collected on this path."
}
}
}{
"type": "object",
"required": [
"status",
"checkout_id",
"total_cents",
"seller_of_record"
],
"properties": {
"tax": {
"type": "string"
},
"status": {
"type": "string"
},
"is_test": {
"type": "boolean"
},
"currency": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"tax_cents": {
"type": [
"integer",
"null"
]
},
"terms_url": {
"type": "string"
},
"expires_at": {
"type": "string"
},
"preview_id": {
"type": "string"
},
"product_id": {
"type": "string"
},
"checkout_id": {
"type": "string"
},
"total_cents": {
"type": "integer"
},
"product_name": {
"type": "string"
},
"claims_summary": {
"type": "string",
"description": "Inspection is 3 days after the buyer marks the order received. Short-unit claims apply beyond a 5% tolerance. Salvage is as-is. Not-received claims are allowed while the order is shipped."
},
"shipping_cents": {
"type": "integer"
},
"subtotal_cents": {
"type": "integer"
},
"buyer_fee_cents": {
"type": "integer"
},
"seller_of_record": {
"type": "string"
},
"unit_price_cents": {
"type": "integer"
},
"claims_policy_url": {
"type": "string"
},
"seller_fee_percent": {
"type": "integer"
}
}
}{
"title": "Preview checkout",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}confirm_purchase — Confirm purchase
Charge the previewed checkout. Uses a Stripe shared payment token when the SDK supports it, otherwise the buyer's saved card, off session. Charges of US$1,000 or more return requires_action and a URL for 3-D Secure. Returns confirmed only after the PaymentIntent succeeds and the order exists. Fails with PRICE_CHANGED if the preview no longer matches. Sensitive: requires user approval each time.
{
"type": "object",
"required": [
"checkout_id",
"payment",
"idempotency_key"
],
"properties": {
"payment": {
"type": "object",
"properties": {
"saved_card": {
"type": "boolean",
"description": "Charge the card saved on the ForthClear account."
},
"shared_payment_token": {
"type": "string",
"description": "Stripe shared payment token."
}
},
"description": "shared_payment_token when the Stripe SDK supports it, or saved_card true."
},
"checkout_id": {
"type": "string",
"description": "checkout_id from preview_checkout."
},
"idempotency_key": {
"type": "string",
"description": "Required. 8–200 characters (letters, digits, . _ : -). The same key returns the original result for 24 hours and is sent to Stripe as Idempotency-Key."
}
}
}{
"type": "object",
"required": [
"status",
"checkout_id"
],
"properties": {
"status": {
"type": "string",
"description": "quoted, pending, requires_action, confirmed, failed, or cancelled."
},
"is_test": {
"type": "boolean"
},
"currency": {
"type": "string"
},
"order_id": {
"type": [
"integer",
"null"
]
},
"action_url": {
"type": [
"string",
"null"
]
},
"checkout_id": {
"type": "string"
},
"amount_charged_cents": {
"type": [
"integer",
"null"
]
}
}
}{
"title": "Confirm purchase",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": true
}list_my_orders — List my orders
List orders the signed-in buyer placed. Requires buyer read access.
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "Maximum orders to return, 1–50. Default 20."
}
}
}{
"type": "object",
"required": [
"orders",
"total"
],
"properties": {
"total": {
"type": "integer"
},
"orders": {
"type": "array",
"items": {
"type": "object",
"required": [
"order_id",
"status"
],
"properties": {
"role": {
"type": "string"
},
"status": {
"type": "string"
},
"is_test": {
"type": "boolean"
},
"ship_by": {
"type": [
"string",
"null"
]
},
"currency": {
"type": "string"
},
"order_id": {
"type": "integer"
},
"quantity": {
"type": "integer"
},
"created_at": {
"type": [
"string",
"null"
]
},
"product_id": {
"type": "string"
},
"total_cents": {
"type": [
"integer",
"null"
]
},
"tracking_number": {
"type": [
"string",
"null"
]
},
"inspection_deadline": {
"type": [
"string",
"null"
]
}
}
}
}
}
}{
"title": "List my orders",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}list_seller_orders — List seller orders
List orders for the signed-in seller. Requires seller read access. Returns order id, status, quantity, and total. Buyer contact details stay on the order page.
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "Maximum orders to return, 1–50. Default 20."
}
}
}{
"type": "object",
"required": [
"orders",
"total"
],
"properties": {
"total": {
"type": "integer"
},
"orders": {
"type": "array",
"items": {
"type": "object",
"required": [
"order_id",
"status"
],
"properties": {
"role": {
"type": "string"
},
"status": {
"type": "string"
},
"is_test": {
"type": "boolean"
},
"ship_by": {
"type": [
"string",
"null"
]
},
"currency": {
"type": "string"
},
"order_id": {
"type": "integer"
},
"quantity": {
"type": "integer"
},
"created_at": {
"type": [
"string",
"null"
]
},
"product_id": {
"type": "string"
},
"total_cents": {
"type": [
"integer",
"null"
]
},
"tracking_number": {
"type": [
"string",
"null"
]
},
"inspection_deadline": {
"type": [
"string",
"null"
]
}
}
}
}
}
}{
"title": "List seller orders",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}cancel_order — Cancel overdue unshipped order
Cancel an unshipped order whose ship-by date has passed, for a full refund. Seller Agreement §5.4. Requires buyer purchase access. Sensitive: requires user approval each time.
{
"type": "object",
"required": [
"order_id",
"idempotency_key"
],
"properties": {
"order_id": {
"type": "integer",
"description": "ForthClear order id."
},
"idempotency_key": {
"type": "string",
"description": "Required. 8–200 characters (letters, digits, . _ : -). The same key returns the original result for 24 hours and is sent to Stripe as Idempotency-Key."
}
}
}{
"type": "object",
"required": [
"status",
"order_id"
],
"properties": {
"refund": {
"type": "string"
},
"status": {
"type": "string"
},
"is_test": {
"type": "boolean"
},
"order_id": {
"type": "integer"
}
}
}{
"title": "Cancel overdue unshipped order",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": true
}mark_order_received — Mark order received
Mark a shipped order received. This starts the 3-day inspection window and does not pay the seller. Requires buyer write access.
{
"type": "object",
"required": [
"order_id",
"idempotency_key"
],
"properties": {
"order_id": {
"type": "integer",
"description": "ForthClear order id."
},
"idempotency_key": {
"type": "string",
"description": "Required. 8–200 characters (letters, digits, . _ : -). The same key returns the original result for 24 hours and is sent to Stripe as Idempotency-Key."
}
}
}{
"type": "object",
"required": [
"order_id",
"status"
],
"properties": {
"status": {
"type": "string"
},
"order_id": {
"type": "integer"
},
"inspection_deadline": {
"type": [
"string",
"null"
]
}
}
}{
"title": "Mark order received",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}confirm_order — Confirm order
End the inspection window after it has elapsed. A live order then starts the seller payout. A sandbox order is marked delivered and is not paid out. Requires buyer write access.
{
"type": "object",
"required": [
"order_id",
"idempotency_key"
],
"properties": {
"order_id": {
"type": "integer",
"description": "ForthClear order id."
},
"idempotency_key": {
"type": "string",
"description": "Required. 8–200 characters (letters, digits, . _ : -). The same key returns the original result for 24 hours and is sent to Stripe as Idempotency-Key."
}
}
}{
"type": "object",
"required": [
"order_id",
"status"
],
"properties": {
"payout": {
"type": "string"
},
"status": {
"type": "string"
},
"order_id": {
"type": "integer"
}
}
}{
"title": "Confirm order",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": true
}get_dispute_status — Get dispute status
Read the claim on an order you placed. Requires buyer read access.
{
"type": "object",
"required": [
"order_id"
],
"properties": {
"order_id": {
"type": "integer",
"description": "ForthClear order id."
}
}
}{
"type": "object",
"required": [
"order_id",
"order_status"
],
"properties": {
"reason": {
"type": [
"string",
"null"
]
},
"order_id": {
"type": "integer"
},
"description": {
"type": [
"string",
"null"
]
},
"reported_at": {
"type": [
"string",
"null"
]
},
"claim_status": {
"type": [
"string",
"null"
]
},
"order_status": {
"type": "string"
},
"payout_paused": {
"type": "boolean"
}
}
}{
"title": "Get dispute status",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}list_my_quotes — List my quotes
List quote requests for the signed-in buyer. Requires buyer read access.
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "Maximum quotes to return, 1-50. Default 20."
}
}
}{
"type": "object",
"required": [
"quotes",
"total"
],
"properties": {
"total": {
"type": "integer"
},
"quotes": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"status"
],
"properties": {
"id": {
"type": "integer"
},
"status": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"created_at": {
"type": [
"string",
"null"
]
},
"product_id": {
"type": "string"
},
"target_price_cents": {
"type": [
"integer",
"null"
]
},
"response_price_cents": {
"type": [
"integer",
"null"
]
}
}
}
}
}
}{
"title": "List my quotes",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}accept_quote_and_pay — Accept counter and pay
Accept a seller's quoted price and charge it with the same payment options as confirm_purchase. Requires buyer purchase access. Sensitive: requires user approval each time.
{
"type": "object",
"required": [
"quote_id",
"payment",
"idempotency_key"
],
"properties": {
"payment": {
"type": "object",
"properties": {
"saved_card": {
"type": "boolean",
"description": "Charge the saved card."
},
"shared_payment_token": {
"type": "string",
"description": "Stripe shared payment token."
}
},
"description": "Same payment object as confirm_purchase."
},
"quote_id": {
"type": "integer",
"description": "Quote id from list_my_quotes or get_quote_status."
},
"idempotency_key": {
"type": "string",
"description": "Required. 8–200 characters (letters, digits, . _ : -). The same key returns the original result for 24 hours and is sent to Stripe as Idempotency-Key."
}
}
}{
"type": "object",
"required": [
"status"
],
"properties": {
"status": {
"type": "string"
},
"is_test": {
"type": "boolean"
},
"currency": {
"type": "string"
},
"order_id": {
"type": [
"integer",
"null"
]
},
"action_url": {
"type": [
"string",
"null"
]
},
"checkout_id": {
"type": "string"
},
"amount_charged_cents": {
"type": [
"integer",
"null"
]
}
}
}{
"title": "Accept counter and pay",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": true
}Prompts
Not advertised
Resources
2 advertised
marketplace_stats
Current marketplace statistics
forthclear://statscategories
Available product categories
forthclear://categories90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1347 ms
- 95th percentile latency
- 1347 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1347 ms · metadata changed · 29 tool(s), 2 resource(s); warnings: Advertises resources/templates/list but does not implement it
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http forthclear-mcp https://app.forthclear.io/mcpCodex
codex mcp add forthclear-mcp --url https://app.forthclear.io/mcpCursor
{
"mcpServers": {
"forthclear-mcp": {
"url": "https://app.forthclear.io/mcp"
}
}
}Cline
{
"mcpServers": {
"forthclear-mcp": {
"type": "streamableHttp",
"url": "https://app.forthclear.io/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"forthclear-mcp": {
"type": "http",
"url": "https://app.forthclear.io/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http forthclear-mcp https://app.forthclear.io/mcpClaude Desktop
https://app.forthclear.io/mcpWindsurf
{
"mcpServers": {
"forthclear-mcp": {
"serverUrl": "https://app.forthclear.io/mcp"
}
}
}Let your agent find its tools
Find servers like ForthClear MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other commerce servers
Do you run ForthClear MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.