{
  "server": {
    "name": "bot.border/borderbot",
    "version": "1.0.0",
    "url": "https://api.border.bot/mcp"
  },
  "tools": [
    {
      "name": "classify_product",
      "title": "Classify a product (HS/HTS code)",
      "description": "Find the HS / HTS tariff code for a product being shipped to a country. Give a product page URL, a plain-language description and/or a public product photo URL, plus the destination. If anything is missing, border.bot asks the user directly (or returns status \"needs_input\" listing the exact questions to ask — ask them, then call again with the answers). With a product URL, the classifier reads the listing, and border.bot infers the country of origin from it (page data, then AI) and asks the user to confirm it. Costs the mode’s credits (see `mode`), charged only when the classification runs. Returns the code, its hierarchy, confidence, reasoning, alternatives and the remaining credit balance.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "description": {
            "description": "What the product is: type, material/composition, intended use and user. E.g. \"Men’s short-sleeve t-shirt, 100% cotton, knitted\".",
            "type": "string",
            "maxLength": 2000
          },
          "product_url": {
            "description": "Product page URL (http/https). border.bot reads it for details and origin.",
            "type": "string",
            "maxLength": 2048
          },
          "image_url": {
            "description": "Public URL of a product photo (http/https) to classify with vision — use when there is no listing URL.",
            "type": "string",
            "maxLength": 2048
          },
          "destination_country": {
            "description": "Where the parcel is going — ISO 3166-1 alpha-2 code such as \"US\", \"GB\" or \"DE\" (country names also work). Leave empty to ask the user.",
            "type": "string",
            "maxLength": 60
          },
          "origin_country": {
            "description": "Where the product was made — ISO-2 code, or \"unknown\". Leave empty: border.bot infers it (product page, then AI) and asks the user to confirm.",
            "type": "string",
            "maxLength": 60
          },
          "mode": {
            "description": "The classification mode (leave empty for the default).",
            "type": "string",
            "maxLength": 40
          }
        },
        "additionalProperties": false
      },
      "annotations": {
        "title": "Classify a product",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true
      },
      "_meta": {
        "bot.border/spendsCredits": true
      }
    },
    {
      "name": "classify_products",
      "title": "Classify several products",
      "description": "Find the HS codes for up to 25 products at once (a cart, an order, a catalogue page). Each product needs a description or a product URL, and its destination country. Each is charged as one classification by the mode; one that fails never stops the others, and is refunded. For a single product, or when details are missing, use classify_product, which asks for them.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "products": {
            "minItems": 1,
            "maxItems": 25,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "description": {
                  "description": "What the product is: type, material, use and who it is for.",
                  "type": "string",
                  "maxLength": 2000
                },
                "product_url": {
                  "description": "Product page URL (http/https).",
                  "type": "string",
                  "maxLength": 2048
                },
                "destination_country": {
                  "description": "Where it is shipped to (ISO-2 code or country name). Needed for every product.",
                  "type": "string",
                  "maxLength": 60
                },
                "origin_country": {
                  "description": "Where it was made, if known.",
                  "type": "string",
                  "maxLength": 60
                },
                "title": {
                  "type": "string",
                  "maxLength": 300
                },
                "brand": {
                  "type": "string",
                  "maxLength": 120
                },
                "price": {
                  "description": "Unit price (some codes depend on it).",
                  "type": "number",
                  "minimum": 0
                },
                "currency": {
                  "description": "ISO 4217 currency of the price.",
                  "type": "string",
                  "maxLength": 3
                }
              },
              "additionalProperties": false
            },
            "description": "The products, each with its destination."
          },
          "mode": {
            "description": "The classification mode for every product (leave empty for the default).",
            "type": "string",
            "maxLength": 40
          }
        },
        "required": [
          "products"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Classify products",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      },
      "_meta": {
        "bot.border/spendsCredits": true
      }
    },
    {
      "name": "find_agency_product_code",
      "title": "Find an agency product code",
      "description": "Find the product code the destination’s import agency asks for on entry, in that agency’s coding scheme: which agency and scheme depend on the destination (for example, FDA’s import product code such as 16AYN07 for foods, drugs, devices and cosmetics entering the US). Lists each part of the code and whether the agency’s own check accepted it. Describe what the product is, what it is made of and how it is processed or packed. Costs 1 credit; goods the agency doesn’t regulate are refused and refunded, and destinations without agency codes are refused before charging.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "minLength": 3,
            "maxLength": 2000,
            "description": "What the product is, its material, and how it is processed or packed."
          },
          "destination_country": {
            "description": "Where the goods are imported (its agency’s codes are used) — ISO 3166-1 alpha-2 code such as \"US\", \"GB\" or \"DE\" (country names also work). Leave empty to ask the user.",
            "type": "string",
            "maxLength": 60
          },
          "hs_code": {
            "description": "Its tariff code, when known (a hint).",
            "type": "string",
            "maxLength": 16
          }
        },
        "required": [
          "description"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Find an agency product code",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      },
      "_meta": {
        "bot.border/spendsCredits": true
      }
    },
    {
      "name": "calculate_landed_cost",
      "title": "Calculate duties, taxes & landed cost",
      "description": "Calculate import duties, taxes, fees and the total landed cost of a shipment into the United States, Canada, the United Kingdom or an EU country. Needs an HS code — or a product URL/description to classify first — plus the country of origin, the destination and the goods value. Missing details are asked from the user directly (or returned as status \"needs_input\" with the exact questions). Costs 1 credit, or 2 when the product must be classified first (the user is asked to confirm). Returns every duty/fee/tax line, totals, de minimis status, the trade agreement applied, and conditional measures that may apply (not included in totals).",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "hs_code": {
            "description": "HS/HTS code if known, e.g. \"6109.10\" or \"6109100012\".",
            "type": "string",
            "maxLength": 20
          },
          "description": {
            "description": "Product description (used to classify when no HS code is given).",
            "type": "string",
            "maxLength": 2000
          },
          "product_url": {
            "description": "Product page URL (used to classify, infer origin and suggest the value).",
            "type": "string",
            "maxLength": 2048
          },
          "origin_country": {
            "description": "Country of origin (where it was made) — ISO 3166-1 alpha-2 code such as \"US\", \"GB\" or \"DE\" (country names also work). Leave empty to ask the user.",
            "type": "string",
            "maxLength": 60
          },
          "destination_country": {
            "description": "Destination country (one list_supported_countries marks for landed cost) — ISO 3166-1 alpha-2 code such as \"US\", \"GB\" or \"DE\" (country names also work). Leave empty to ask the user.",
            "type": "string",
            "maxLength": 60
          },
          "value": {
            "description": "Total customs value of the goods in the shipment (price × quantity), excluding shipping.",
            "type": "number",
            "exclusiveMinimum": 0,
            "maximum": 100000000
          },
          "currency": {
            "description": "ISO 4217 currency of `value`, e.g. \"USD\" (default: the product page currency or USD).",
            "type": "string",
            "maxLength": 3
          },
          "shipping_cost": {
            "description": "Shipping cost, in the same currency.",
            "type": "number",
            "minimum": 0,
            "maximum": 10000000
          },
          "insurance_cost": {
            "description": "Insurance cost, in the same currency.",
            "type": "number",
            "minimum": 0,
            "maximum": 10000000
          },
          "quantity": {
            "description": "Number of units (default 1).",
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 1000000
          },
          "weight": {
            "description": "Total shipment weight.",
            "type": "number",
            "exclusiveMinimum": 0,
            "maximum": 100000000
          },
          "weight_unit": {
            "description": "Unit for `weight` (default kg).",
            "type": "string",
            "enum": [
              "kg",
              "lb"
            ]
          },
          "transport_mode": {
            "description": "Transport mode (default air — typical for parcels).",
            "type": "string",
            "enum": [
              "air",
              "sea",
              "road",
              "rail"
            ]
          },
          "shipment_channel": {
            "description": "How the parcel travels: \"courier\" (express carriers such as DHL/UPS/FedEx, default) or \"postal\" (national post). Affects de minimis and postal regimes.",
            "type": "string",
            "enum": [
              "courier",
              "postal"
            ]
          },
          "conditions": {
            "description": "Rate conditions the goods meet, when the destination reserves a rate for them: a kind (pharmaceutical, end_use, certificate, company, quality, route) or the publisher’s code (EU additional code 2500). Only claim one the importer can justify; the rates that could be claimed are listed in the result.",
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 20
            }
          }
        },
        "additionalProperties": false
      },
      "annotations": {
        "title": "Calculate landed cost",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true
      },
      "_meta": {
        "bot.border/spendsCredits": true
      }
    },
    {
      "name": "calculate_cart",
      "title": "Landed cost of a cart",
      "description": "Duties, taxes, fees and the landed cost of a whole cart or order (up to 50 lines) to one destination: the freight shared out by value, one de minimis check, per-entry fees once. Each line needs its HS code, country of origin and line value (classify it first if needed). Costs 1 credit per line. Destinations border.bot’s own data covers only; for others, use calculate_landed_cost line by line.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "destination_country": {
            "description": "Destination country (ISO-2 or name). — ISO 3166-1 alpha-2 code such as \"US\", \"GB\" or \"DE\" (country names also work). Leave empty to ask the user.",
            "type": "string",
            "maxLength": 60
          },
          "lines": {
            "minItems": 1,
            "maxItems": 50,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "hs_code": {
                  "type": "string",
                  "maxLength": 20,
                  "description": "HS/HTS code of the line (4–10 digits; dots allowed)."
                },
                "origin_country": {
                  "type": "string",
                  "maxLength": 60,
                  "description": "Where the goods were made (ISO-2 or name)."
                },
                "value": {
                  "type": "number",
                  "exclusiveMinimum": 0,
                  "description": "Total value of the line (price × quantity), in `currency`."
                },
                "quantity": {
                  "description": "Units in the line, default 1.",
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991
                },
                "title": {
                  "description": "What the line is (echoed in the answer).",
                  "type": "string",
                  "maxLength": 200
                },
                "conditions": {
                  "description": "Rate conditions the goods meet, when the destination reserves a rate for them: a kind (pharmaceutical, end_use, certificate, company, quality, route) or the publisher’s code (EU additional code 2500). Only claim one the importer can justify; the rates that could be claimed are listed in the result.",
                  "maxItems": 10,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "maxLength": 20
                  }
                }
              },
              "required": [
                "hs_code",
                "origin_country",
                "value"
              ],
              "additionalProperties": false
            },
            "description": "The cart’s lines."
          },
          "currency": {
            "description": "ISO 4217 currency of every value, default USD.",
            "type": "string",
            "maxLength": 3
          },
          "shipping_cost": {
            "description": "Freight for the whole cart.",
            "type": "number",
            "minimum": 0
          },
          "insurance_cost": {
            "description": "Insurance for the whole cart.",
            "type": "number",
            "minimum": 0
          },
          "region": {
            "description": "State or province (Canada needs one, e.g. ON).",
            "type": "string",
            "maxLength": 6
          },
          "shipping_terms": {
            "description": "Incoterm of the prices (C and D terms already include the carriage).",
            "type": "string",
            "enum": [
              "EXW",
              "FCA",
              "FAS",
              "FOB",
              "CFR",
              "CIF",
              "CPT",
              "CIP",
              "DAP",
              "DPU",
              "DDP"
            ]
          }
        },
        "required": [
          "lines"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Landed cost of a cart",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      },
      "_meta": {
        "bot.border/spendsCredits": true
      }
    },
    {
      "name": "check_restricted_goods",
      "title": "Check restricted & prohibited goods",
      "description": "Check whether a product is prohibited or restricted when shipped to a country: import bans, sanctions tied to where it was made, and agency requirements (e.g. FDA, APHIS) — plus the export rules of the ship-from country when given. Give a product page URL, a description and/or an HS code, plus the destination. Missing details are asked from the user directly (or returned as status \"needs_input\" with the exact questions). Free: no credits are used. Results are guidance — carriers may have their own restrictions.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "description": {
            "description": "What the product is (rules also match on keywords such as \"lithium battery\").",
            "type": "string",
            "maxLength": 2000
          },
          "product_url": {
            "description": "Product page URL (http/https) — read for the title, materials, brand and origin.",
            "type": "string",
            "maxLength": 2048
          },
          "hs_code": {
            "description": "HS code if known (4–10 digits), e.g. \"8507.60\" — needed for HS-based rules.",
            "type": "string",
            "maxLength": 20
          },
          "destination_country": {
            "description": "Where the goods are going (its import rules are checked) — ISO 3166-1 alpha-2 code such as \"US\", \"GB\" or \"DE\" (country names also work). Leave empty to ask the user.",
            "type": "string",
            "maxLength": 60
          },
          "origin_country": {
            "description": "Where the product was made — ISO-2 code, or \"unknown\". Drives origin rules such as sanctions. Leave empty to ask.",
            "type": "string",
            "maxLength": 60
          },
          "ship_from_country": {
            "description": "Country the parcel ships from, if export rules should be checked (optional).",
            "type": "string",
            "maxLength": 60
          }
        },
        "additionalProperties": false
      },
      "annotations": {
        "title": "Check restricted goods",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      },
      "_meta": {
        "bot.border/spendsCredits": false
      }
    },
    {
      "name": "screen_party",
      "title": "Screen a person or company",
      "description": "Check a person’s or company’s name against every loaded denied-party list (the US lists — OFAC’s SDN and non-SDN lists, the Entity List, the Denied Persons List… — and the UN, EU, UK, Canadian, Swiss, Japanese and New Zealand sanctions lists where loaded). Exact and fuzzy matches on names and aliases, each with the list that names the party, its kind (sanctions, export control, debarment) and issuer; the check is kept as the workspace’s evidence. Free. A match is a lead for a person to review, not a verdict: never refuse a customer on a match alone.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 500,
            "description": "The person’s or company’s name."
          },
          "company": {
            "description": "A company to screen too.",
            "type": "string",
            "maxLength": 500
          },
          "country": {
            "description": "The party’s country (ISO-2 or name): matches with an address, nationality or flag there are flagged.",
            "type": "string",
            "maxLength": 60
          },
          "reference": {
            "description": "Your reference for the check (an order or customer id).",
            "type": "string",
            "maxLength": 200
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Screen a person or company",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "_meta": {
        "bot.border/spendsCredits": false
      }
    },
    {
      "name": "infer_country_of_origin",
      "title": "Find where a product is made",
      "description": "Estimate a product’s country of origin from everything known about it: its page data, “Made in …” text, a label in its photo, the brand, materials and price, where it ships from and its barcode. Returns the most likely country with a probability, the alternatives and the evidence. Origin drives duty rates (and sanctions), so confirm with the user when it says review is needed.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "title": {
            "description": "Product name.",
            "type": "string",
            "maxLength": 300
          },
          "description": {
            "description": "Product description.",
            "type": "string",
            "maxLength": 2000
          },
          "brand": {
            "type": "string",
            "maxLength": 120
          },
          "product_url": {
            "description": "Product page URL: its data and “Made in …” text are read.",
            "type": "string",
            "maxLength": 2048
          },
          "image_url": {
            "description": "Product photo URL: a visible “Made in …” label is strong evidence.",
            "type": "string",
            "maxLength": 2048
          },
          "gtin": {
            "description": "Barcode (GTIN, UPC, EAN): a weak hint of where the brand registered.",
            "type": "string",
            "maxLength": 14
          },
          "material": {
            "type": "string",
            "maxLength": 300
          },
          "ship_from": {
            "description": "Country the goods ship from (ISO-2 or name).",
            "type": "string",
            "maxLength": 60
          },
          "price": {
            "type": "number",
            "minimum": 0
          },
          "currency": {
            "type": "string",
            "maxLength": 3
          },
          "review_threshold": {
            "description": "When to send it to review (0–1): an origin below this probability, or a declaration with this much evidence against it. Defaults to the workspace’s setting.",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          }
        },
        "additionalProperties": false
      },
      "annotations": {
        "title": "Find country of origin",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      },
      "_meta": {
        "bot.border/spendsCredits": true
      }
    },
    {
      "name": "check_country_of_origin",
      "title": "Check a declared country of origin",
      "description": "Check whether a declared country of origin (from a supplier, a listing or a customs entry) fits everything else known about the product. Returns a verdict, the share of the evidence pointing elsewhere, the likely origin and the reasons. With no evidence either way it says so instead of guessing.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "declared_origin": {
            "type": "string",
            "maxLength": 60,
            "description": "The declared country of origin (ISO-2 or name)."
          },
          "title": {
            "description": "Product name.",
            "type": "string",
            "maxLength": 300
          },
          "description": {
            "description": "Product description.",
            "type": "string",
            "maxLength": 2000
          },
          "brand": {
            "type": "string",
            "maxLength": 120
          },
          "product_url": {
            "description": "Product page URL: its data and “Made in …” text are read.",
            "type": "string",
            "maxLength": 2048
          },
          "image_url": {
            "description": "Product photo URL: a visible “Made in …” label is strong evidence.",
            "type": "string",
            "maxLength": 2048
          },
          "gtin": {
            "description": "Barcode (GTIN, UPC, EAN): a weak hint of where the brand registered.",
            "type": "string",
            "maxLength": 14
          },
          "material": {
            "type": "string",
            "maxLength": 300
          },
          "ship_from": {
            "description": "Country the goods ship from (ISO-2 or name).",
            "type": "string",
            "maxLength": 60
          },
          "price": {
            "type": "number",
            "minimum": 0
          },
          "currency": {
            "type": "string",
            "maxLength": 3
          },
          "review_threshold": {
            "description": "When to send it to review (0–1): an origin below this probability, or a declaration with this much evidence against it. Defaults to the workspace’s setting.",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          }
        },
        "required": [
          "declared_origin"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Check country of origin",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      },
      "_meta": {
        "bot.border/spendsCredits": true
      }
    },
    {
      "name": "get_credit_balance",
      "title": "Get credit balance",
      "description": "Show the credit balance of the border.bot workspace this connection bills.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "annotations": {
        "title": "Credit balance",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "_meta": {
        "bot.border/spendsCredits": false
      }
    },
    {
      "name": "get_pricing",
      "title": "Get pricing",
      "description": "List how many credits each border.bot action uses.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "annotations": {
        "title": "Pricing",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "_meta": {
        "bot.border/spendsCredits": false
      }
    },
    {
      "name": "list_supported_countries",
      "title": "List supported countries",
      "description": "Look up country codes and coverage: the nomenclature classification answers in for each destination (a 10-digit national tariff where border.bot has one, 6-digit HS elsewhere) and which destinations landed-cost calculation covers.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "search": {
            "description": "Filter by country name or code, e.g. \"korea\" or \"KR\".",
            "type": "string",
            "maxLength": 60
          }
        },
        "additionalProperties": false
      },
      "annotations": {
        "title": "Supported countries",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "_meta": {
        "bot.border/spendsCredits": false
      }
    },
    {
      "name": "extract_product_page",
      "title": "Read a product page",
      "description": "Read a product page URL and extract its title, brand, price, materials, images and any stated country of origin. Free unless your workspace pricing says otherwise.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "maxLength": 2048,
            "description": "The product page URL (http or https)."
          }
        },
        "required": [
          "url"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Read product page",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      },
      "_meta": {
        "bot.border/spendsCredits": true
      }
    }
  ]
}