Koskamo

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.

ForthClear MCP logo, by Forthcast, LLCVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by Forthcast, LLC
MCP endpoint (Streamable HTTP)
https://app.forthclear.io/mcp
Vendor documentation

What its tools do

29 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

29 of 29 have a description · 29 of 29 declare behavior hints · 29 of 29 with parameters document them all

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

Vendor evidenceRegistry 1.5.0

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
Server-advertised capabilities
{
  "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.

ForthClear is a B2B marketplace for surplus, overstock, and returned inventory, operated by Forthcast, LLC. Use it to find lots for sale, look up suppliers, ask a seller for a bulk price, and buy when instant checkout is offered. The seller sells the goods. ForthClear runs the marketplace and Stripe processes the payment. ForthClear does not hold buyer funds. Catalogue search, listing details, supplier lookup, and price suggestions are public. A quote can be requested with an email address. Orders, checkout, disputes, and saved searches need a signed-in buyer. Publishing listings, answering quotes, and shipping need a signed-in seller. Sign-in is OAuth 2.1 with PKCE. Scopes are buyer:read, buyer:write, buyer:purchase, seller:read, and seller:write.

Tools

29 advertised

search_inventory — Search inventory
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

search_inventory input schema
{
  "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."
    }
  }
}
search_inventory output schema
{
  "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"
          }
        }
      }
    }
  }
}
search_inventory annotations
{
  "title": "Search inventory",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
get_product_details — Get product details
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_product_details input schema
{
  "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"
    }
  }
}
get_product_details output schema
{
  "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"
    }
  }
}
get_product_details annotations
{
  "title": "Get product details",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
request_quote — Request a bulk quote
Advertised by the server during the last successful anonymous check.
Open-world

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.

request_quote input schema
{
  "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."
    }
  }
}
request_quote output schema
{
  "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."
    }
  }
}
request_quote annotations
{
  "title": "Request a bulk quote",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_quote_status — Get quote status
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_quote_status input schema
{
  "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"
    }
  }
}
get_quote_status output schema
{
  "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"
      ]
    }
  }
}
get_quote_status annotations
{
  "title": "Get quote status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
create_listing — Create a listing
Advertised by the server during the last successful anonymous check.
Open-world

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.

create_listing input schema
{
  "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"
    }
  }
}
create_listing output schema
{
  "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"
    }
  }
}
create_listing annotations
{
  "title": "Create a listing",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_pricing_recommendation — Get pricing recommendation
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_pricing_recommendation input schema
{
  "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."
    }
  }
}
get_pricing_recommendation output schema
{
  "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."
    }
  }
}
get_pricing_recommendation annotations
{
  "title": "Get pricing recommendation",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
get_quote_requests — Get incoming quote requests
Advertised by the server during the last successful anonymous check.
Advertised read-only

List quote requests buyers sent you. Requires sign-in with seller access. Filter to pending, responded, or all.

get_quote_requests input schema
{
  "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."
    }
  }
}
get_quote_requests output schema
{
  "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"
    }
  }
}
get_quote_requests annotations
{
  "title": "Get incoming quote requests",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
respond_to_quote — Respond to a quote request
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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.

respond_to_quote input schema
{
  "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."
    }
  }
}
respond_to_quote output schema
{
  "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"
    }
  }
}
respond_to_quote annotations
{
  "title": "Respond to a quote request",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
bulk_update_listings — Bulk update listing prices or MOQ
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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.

bulk_update_listings input schema
{
  "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)."
    }
  }
}
bulk_update_listings output schema
{
  "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"
    }
  }
}
bulk_update_listings annotations
{
  "title": "Bulk update listing prices or MOQ",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
set_listing_shipping — Set listing shipping
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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.

set_listing_shipping input schema
{
  "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."
    }
  }
}
set_listing_shipping output schema
{
  "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"
      }
    }
  }
}
set_listing_shipping annotations
{
  "title": "Set listing shipping",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
bulk_mark_shipped — Bulk mark orders shipped
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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.

bulk_mark_shipped input schema
{
  "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_mark_shipped output schema
{
  "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"
    }
  }
}
bulk_mark_shipped annotations
{
  "title": "Bulk mark orders shipped",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
bulk_export_orders — Export orders as CSV
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

bulk_export_orders input schema
{
  "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."
    }
  }
}
bulk_export_orders output schema
{
  "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"
    }
  }
}
bulk_export_orders annotations
{
  "title": "Export orders as CSV",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
seller_inbox_summarise — Summarise seller inbox
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

seller_inbox_summarise input schema
{
  "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)."
    }
  }
}
seller_inbox_summarise output schema
{
  "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"
            ]
          }
        }
      }
    }
  }
}
seller_inbox_summarise annotations
{
  "title": "Summarise seller inbox",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
quick_buy — Quick buy
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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.

quick_buy input schema
{
  "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."
    }
  }
}
quick_buy output schema
{
  "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"
      }
    }
  }
}
quick_buy annotations
{
  "title": "Quick buy",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
search_inventory_semantic — Semantic inventory search
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

search_inventory_semantic input schema
{
  "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"
    }
  }
}
search_inventory_semantic output schema
{
  "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"
            ]
          }
        }
      }
    }
  }
}
search_inventory_semantic annotations
{
  "title": "Semantic inventory search",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
get_order_status — Get order status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Check status, tracking, and the inspection deadline for an order you placed. Requires sign-in with buyer access.

get_order_status input schema
{
  "type": "object",
  "required": [
    "order_id"
  ],
  "properties": {
    "order_id": {
      "type": "integer",
      "description": "ForthClear order id"
    }
  }
}
get_order_status output schema
{
  "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"
      ]
    }
  }
}
get_order_status annotations
{
  "title": "Get order status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
open_dispute — Open a dispute
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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.

open_dispute input schema
{
  "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"
    }
  }
}
open_dispute output schema
{
  "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"
          }
        }
      }
    }
  }
}
open_dispute annotations
{
  "title": "Open a dispute",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
subscribe_to_query — Subscribe to a saved search
Advertised by the server during the last successful anonymous check.
Open-world

Save a catalogue search and receive new matching listings by email, webhook, or a pollable feed. Requires sign-in with buyer access.

subscribe_to_query input schema
{
  "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)."
    }
  }
}
subscribe_to_query output schema
{
  "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"
        }
      }
    }
  }
}
subscribe_to_query annotations
{
  "title": "Subscribe to a saved search",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
search_suppliers — Search suppliers
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

search_suppliers input schema
{
  "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."
    }
  }
}
search_suppliers output schema
{
  "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"
          }
        }
      }
    }
  }
}
search_suppliers annotations
{
  "title": "Search suppliers",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
preview_checkout — Preview checkout
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

preview_checkout input schema
{
  "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."
    }
  }
}
preview_checkout output schema
{
  "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"
    }
  }
}
preview_checkout annotations
{
  "title": "Preview checkout",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
confirm_purchase — Confirm purchase
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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.

confirm_purchase input schema
{
  "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."
    }
  }
}
confirm_purchase output schema
{
  "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"
      ]
    }
  }
}
confirm_purchase annotations
{
  "title": "Confirm purchase",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
list_my_orders — List my orders
Advertised by the server during the last successful anonymous check.
Advertised read-only

List orders the signed-in buyer placed. Requires buyer read access.

list_my_orders input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "description": "Maximum orders to return, 1–50. Default 20."
    }
  }
}
list_my_orders output schema
{
  "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"
            ]
          }
        }
      }
    }
  }
}
list_my_orders annotations
{
  "title": "List my orders",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
list_seller_orders — List seller orders
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_seller_orders input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "description": "Maximum orders to return, 1–50. Default 20."
    }
  }
}
list_seller_orders output schema
{
  "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"
            ]
          }
        }
      }
    }
  }
}
list_seller_orders annotations
{
  "title": "List seller orders",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
cancel_order — Cancel overdue unshipped order
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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.

cancel_order input schema
{
  "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."
    }
  }
}
cancel_order output schema
{
  "type": "object",
  "required": [
    "status",
    "order_id"
  ],
  "properties": {
    "refund": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "is_test": {
      "type": "boolean"
    },
    "order_id": {
      "type": "integer"
    }
  }
}
cancel_order annotations
{
  "title": "Cancel overdue unshipped order",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
mark_order_received — Mark order received
Advertised by the server during the last successful anonymous check.
Advertised destructive

Mark a shipped order received. This starts the 3-day inspection window and does not pay the seller. Requires buyer write access.

mark_order_received input schema
{
  "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."
    }
  }
}
mark_order_received output schema
{
  "type": "object",
  "required": [
    "order_id",
    "status"
  ],
  "properties": {
    "status": {
      "type": "string"
    },
    "order_id": {
      "type": "integer"
    },
    "inspection_deadline": {
      "type": [
        "string",
        "null"
      ]
    }
  }
}
mark_order_received annotations
{
  "title": "Mark order received",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
confirm_order — Confirm order
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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.

confirm_order input schema
{
  "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."
    }
  }
}
confirm_order output schema
{
  "type": "object",
  "required": [
    "order_id",
    "status"
  ],
  "properties": {
    "payout": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "order_id": {
      "type": "integer"
    }
  }
}
confirm_order annotations
{
  "title": "Confirm order",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
get_dispute_status — Get dispute status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read the claim on an order you placed. Requires buyer read access.

get_dispute_status input schema
{
  "type": "object",
  "required": [
    "order_id"
  ],
  "properties": {
    "order_id": {
      "type": "integer",
      "description": "ForthClear order id."
    }
  }
}
get_dispute_status output schema
{
  "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"
    }
  }
}
get_dispute_status annotations
{
  "title": "Get dispute status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
list_my_quotes — List my quotes
Advertised by the server during the last successful anonymous check.
Advertised read-only

List quote requests for the signed-in buyer. Requires buyer read access.

list_my_quotes input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "description": "Maximum quotes to return, 1-50. Default 20."
    }
  }
}
list_my_quotes output schema
{
  "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"
            ]
          }
        }
      }
    }
  }
}
list_my_quotes annotations
{
  "title": "List my quotes",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
accept_quote_and_pay — Accept counter and pay
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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.

accept_quote_and_pay input schema
{
  "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."
    }
  }
}
accept_quote_and_pay output schema
{
  "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"
      ]
    }
  }
}
accept_quote_and_pay annotations
{
  "title": "Accept counter and pay",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}

Prompts

Not advertised

No prompt definitions available.

Resources

2 advertised

marketplace_stats

Advertised by the server during the last successful anonymous check.

Current marketplace statistics

marketplace_stats URI
forthclear://stats

MIME type: application/json

categories

Advertised by the server during the last successful anonymous check.

Available product categories

categories URI
forthclear://categories

MIME type: application/json

90-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.

Too few checks for a percentage yet (1 of 1 answered).

  1. 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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http forthclear-mcp https://app.forthclear.io/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add forthclear-mcp --url https://app.forthclear.io/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable forthclear-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "forthclear-mcp": {
      "url": "https://app.forthclear.io/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "forthclear-mcp": {
      "type": "streamableHttp",
      "url": "https://app.forthclear.io/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start forthclear-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "forthclear-mcp": {
      "type": "http",
      "url": "https://app.forthclear.io/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http forthclear-mcp https://app.forthclear.io/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://app.forthclear.io/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.

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.

Claim this listing