Koskamo

KaliCart Global MCP

A public, read-only MCP server providing federated commerce search across independent WooCommerce merchants. It allows AI agents to discover, search, and read product catalogs without scraping HTML, offering merchant-authoritative prices and inventory status via a keyless endpoint.

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.

KaliCart Global MCP logo, by KaliCart BridgeCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by KaliCart Bridge
MCP endpoint (Streamable HTTP)
https://dashboard.kalicart.com/mcp-public
Vendor documentation

What its tools do

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

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

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search the federated index for products using natural language queries and filters.
  • Fetch full product details including price, availability, and storefront URLs.
  • List WooCommerce merchants in the federated index to understand catalog coverage.
  • Check if a merchant domain runs an ARC-compliant catalog.

Source and maintenance

Community listingRegistry 1.1.0
Maintenance checked

Protocol and capabilities

Server
kalicart-global 1.1.0
MCP protocol negotiated in check
2025-11-25
Tools
9 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Use KaliCart Global to discover product candidates across participating WooCommerce merchants. Search results and product details are indexed snapshots, not checkout authority. Preserve the user requirements, inspect match evidence, and verify a selected offer through its returned merchant Bridge handoff before confirming variant, price or stock. KaliCart Global never checks out, pays, or modifies merchant data.

Tools

9 advertised

global_search — Search products across merchants
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when a user wants to find or compare product candidates across participating WooCommerce merchants. Search cards include bounded variants_compact and variant_option_values from the merchant snapshot. Option values are independent and do not prove a purchasable combination. Verify the selected variant, price and stock through its merchant Bridge handoff before confirming an offer. For a request with multiple distinct items, search each item independently (calls may run in parallel), then pass the selected p2209_id values together to verify_basket. Each offer states checkout_quote_available: only those merchants can return a WooCommerce-calculated delivered total (verify_basket quote:true). Use get_product only when a search card lacks needed indexed details.

global_search input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "q": {
      "type": "string",
      "description": "Free-text product query. Each term must match as a whole word in the native merchant catalog text (name, short description, description) or in the canonical category path, so English category terms reach catalogs written in other languages: q=\"mattress\" returns products under home.bedroom.mattress even when their text is Italian. There is no server-side translation of product text; for language-neutral retrieval by category use leaf and the canonical filters."
    },
    "leaf": {
      "type": "string",
      "description": "Canonical category node. Accepts a terminal leaf (e.g. beverages.alcohol.sparkling_prosecco) or any parent node (e.g. jewellery, home.bedroom): a parent matches the node and its whole subtree, so you can widen or narrow the search by moving up or down the tree. Use list_categories to browse the tree."
    },
    "brand": {
      "type": "string",
      "description": "Brand facet filter (normalized, e.g. \"nike\")"
    },
    "color": {
      "type": "string",
      "description": "Bridge color family (e.g. \"blue\"). Common aliases are resolved to a family available in the active index. A family match does not guarantee an exact shade; read filter_semantics.color and verify the chosen product via handoff.bridge_product_url."
    },
    "limit": {
      "type": "integer",
      "maximum": 25,
      "minimum": 1,
      "description": "Max offers per page (1-25, default 10). Use next_cursor for the next page."
    },
    "cursor": {
      "type": "string",
      "maxLength": 512,
      "description": "Opaque next_cursor from a previous global_search with the SAME arguments; returns the next page. A cursor from a different query is rejected."
    },
    "gender": {
      "enum": [
        "female",
        "male",
        "unisex"
      ],
      "type": "string",
      "description": "Canonical gender facet. Filtering is discovery-tolerant: untagged and unisex products can remain candidates, so verify the chosen product. Allowed values: female, male, unisex."
    },
    "variant": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "maxItems": 32
              }
            ]
          }
        },
        {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "values"
            ],
            "properties": {
              "keys": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "maxItems": 16
              },
              "values": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "maxItems": 32,
                "minItems": 1
              }
            },
            "additionalProperties": false
          },
          "maxItems": 4
        }
      ],
      "description": "Constraints that must ALL hold on the SAME variant. Keys and values are the merchant's own, in any language or script (read variant_vocabulary first): {\"pa_taglia\":\"L\"}, {\"size\":[\"L\",\"Large\"]}, {\"*\":[\"rouge\",\"rosso\"]} (* = any option), or [{\"keys\":[\"pa_taglia\",\"size\"],\"values\":[\"L\",\"Large\"]}] across merchants. KaliCart never translates: pass every value you accept. match.kind: exact (ignoring case, Latin accents, separators) or normalized (same number+unit symbol, NxN, size code). Indexed snapshot: verify on the merchant before quoting."
    },
    "in_stock": {
      "type": "boolean",
      "description": "true filters product-level stock in the indexed snapshot. Does not verify a selected variant or a booking slot."
    },
    "merchant": {
      "type": "string",
      "maxLength": 253,
      "description": "Restrict to one merchant: merchant_id as returned in result_facets.merchants or offers (e.g. \"duinshop-it\") or its domain."
    },
    "max_price": {
      "type": "number",
      "minimum": 0,
      "description": "Upper bound in major currency units (for example 1550 means EUR 1,550 for EUR offers). A matching range may include variants above this bound; verify the chosen variant. Per-offer currency, no FX conversion."
    },
    "min_price": {
      "type": "number",
      "minimum": 0,
      "description": "Lower bound in major currency units (for example 50 means EUR 50 for EUR offers). Matches overlapping variant price ranges in each offer currency; no FX conversion. Verify the chosen variant."
    },
    "result_facets": {
      "type": "boolean",
      "description": "true adds result_facets: counts over ALL matching offers (not just this page) by merchant, category leaf, brand, availability, and price quartiles per currency. Use them to narrow the next call."
    },
    "variant_limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max matching variants returned per offer (1-500, default 50); matching_variant_count is always the full count"
    },
    "price_currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "ISO 4217 currency of min_price/max_price (e.g. EUR). With it, only offers priced in that currency are returned; without it the bounds compare numbers in each offer's own currency. Needs min_price or max_price."
    },
    "variant_facets": {
      "type": "boolean",
      "description": "true adds variant_vocabulary: real option keys and values with variant and in-stock counts, for the offers returned or, with no q, for the merchant (or all merchants). Use it to choose the values to pass in variant."
    },
    "variant_in_stock": {
      "type": "boolean",
      "description": "true keeps only variants whose own availability is in_stock"
    },
    "variant_price_max": {
      "type": "number",
      "minimum": 0,
      "description": "Upper bound on the variant price (major units)"
    },
    "variant_price_min": {
      "type": "number",
      "minimum": 0,
      "description": "Lower bound on the variant price (major units)"
    },
    "variant_facets_limit": {
      "type": "integer",
      "maximum": 200,
      "minimum": 1,
      "description": "Max values per option key in variant_vocabulary (1-200, default 40); values_total is always the full count"
    },
    "variant_price_currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "ISO 4217 currency of variant_price_min/max (e.g. EUR). With it, only variants priced in that currency satisfy the bound; no FX conversion. Without it, bounds compare numbers in each variant's own currency."
    }
  },
  "additionalProperties": false
}
global_search output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "error": {
      "type": "string"
    },
    "scope": {
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "offers": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "p2209_id",
          "merchant_domain",
          "name"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "price": {},
          "handoff": {},
          "p2209_id": {
            "type": "string"
          },
          "provenance": {},
          "category_leaf": {
            "type": [
              "string",
              "null"
            ]
          },
          "merchant_domain": {
            "type": "string"
          },
          "availability_status": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": true
      }
    },
    "coverage": {
      "type": "object",
      "required": [
        "returned",
        "limit",
        "total_known",
        "more_results_possible"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "exclusiveMinimum": 0
        },
        "returned": {
          "type": "integer",
          "minimum": 0
        },
        "total_known": {
          "type": "boolean"
        },
        "more_results_possible": {
          "type": "boolean"
        }
      },
      "additionalProperties": true
    },
    "federated": {
      "type": "boolean"
    },
    "result_count": {
      "type": "integer",
      "minimum": 0
    },
    "guidance_code": {
      "type": "string"
    },
    "applied_filters": {
      "type": "object",
      "additionalProperties": {}
    }
  },
  "additionalProperties": true
}
global_search annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_offer_attestation — Portable merchant attestation for one offer
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Returns a cryptographic proof that this offer's product row is exactly the one the merchant signed in its catalog snapshot: the signed row, its bucket hashes, the Ed25519-signed manifest, the merchant public key and step-by-step verification. Trust is anchored on the merchant domain (key fingerprint published at key_anchor), not on KaliCart. It proves the row as signed at snapshot.generated_at, not the current price or stock: the checkout is authoritative. Independent verifier: https://global.kalicart.com/ucp/tools/verify-offer-attestation.js

get_offer_attestation input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "p2209_id"
  ],
  "properties": {
    "p2209_id": {
      "type": "string",
      "maxLength": 200,
      "description": "Offer id from global_search (e.g. prod_duinshop-it_446678)."
    }
  },
  "additionalProperties": false
}
get_offer_attestation annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
estimate_delivered_cost — Estimate the delivered cost of one offer to a destination
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Deterministic estimate from the merchant's own data: item price x quantity plus the shipping options the store declares for the destination (flat rate = declared base rate; free shipping with its threshold, whether this quantity reaches it and how much is missing). Lists what is not included (shipping classes, cost formulas, duties, taxes on shipping). Pass variation_id for variable products. Valid within max_age_seconds of the last merchant confirmation; live=true reads the merchant now. The checkout is the only authority.

estimate_delivered_cost input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "p2209_id",
    "destination"
  ],
  "properties": {
    "live": {
      "type": "boolean"
    },
    "p2209_id": {
      "type": "string",
      "maxLength": 200
    },
    "quantity": {
      "type": "integer",
      "maximum": 999,
      "minimum": 1
    },
    "destination": {
      "type": "string",
      "maxLength": 16,
      "description": "ISO 3166-1 country, optionally with region: \"IT\" or \"IT:CB\"."
    },
    "variation_id": {
      "type": "integer",
      "exclusiveMinimum": 0
    },
    "max_age_seconds": {
      "type": "integer",
      "maximum": 2592000,
      "minimum": 60
    }
  },
  "additionalProperties": false
}
estimate_delivered_cost annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
verify_basket — Verify a multi-merchant basket before handing it to checkout
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

For a multi-item request, collect p2209_id and any selected variation_id from global_search results and send all selected items in one call. For every variable product, include a variation_id from its selected variants_compact entry on the first call; without it the price and basket total may be unknown. Never substitute WooCommerce numeric product IDs for p2209_id. Set live=false for a snapshot-only check with no merchant request; live=true reads merchants. Checks a basket of offers (up to 40 lines, any merchants) against the merchants' own data. Per merchant: subtotal, declared shipping options, and checkout handoff. Optional quote=true requires live=true and destination_details; it makes one bounded merchant request per basket and returns a WooCommerce quote when the merchant enabled it, otherwise unknown alongside the estimate. A quote creates no checkout session or order; checkout may still change the total.

verify_basket input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "items"
  ],
  "properties": {
    "live": {
      "type": "boolean",
      "description": "false (default) uses saved Global data without contacting merchants; true reads each merchant now (at most 10 lines)."
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "p2209_id"
        ],
        "properties": {
          "p2209_id": {
            "type": "string",
            "maxLength": 200
          },
          "quantity": {
            "type": "integer",
            "maximum": 999,
            "minimum": 1
          },
          "variation_id": {
            "type": "integer",
            "description": "For a variable product, pass the chosen variant ID from global_search variants_compact; required to price that line and compute a complete basket total.",
            "exclusiveMinimum": 0
          },
          "expected_unit_price": {
            "type": "number",
            "minimum": 0,
            "description": "The unit price you showed the user; checked as price_unchanged."
          }
        },
        "additionalProperties": false
      },
      "maxItems": 40,
      "minItems": 1
    },
    "quote": {
      "type": "boolean",
      "description": "false by default. true requires live=true and destination_details, and may contact up to four merchants for WooCommerce quotes."
    },
    "destination": {
      "type": "string",
      "maxLength": 16,
      "description": "ISO 3166-1 country, optionally with region: \"IT\" or \"IT:CB\". Needed for shipping."
    },
    "max_age_seconds": {
      "type": "integer",
      "maximum": 2592000,
      "minimum": 60
    },
    "destination_details": {
      "type": "object",
      "required": [
        "country",
        "postcode"
      ],
      "properties": {
        "city": {
          "type": "string",
          "maxLength": 100
        },
        "state": {
          "type": "string",
          "maxLength": 16
        },
        "country": {
          "type": "string",
          "pattern": "^[A-Z]{2}$"
        },
        "postcode": {
          "type": "string",
          "maxLength": 20,
          "minLength": 1
        }
      },
      "description": "Postal destination for precise declared shipping zones even with quote=false and live=false; required for quote=true. Example: {country:\"IT\",state:\"CB\",postcode:\"86100\",city:\"Campobasso\"}.",
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
verify_basket annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
verify_offer — Verify constraints on one offer (true / false / unknown)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Checks ONE offer (optionally a selected variant) and returns true, false or unknown per constraint with evidence. Pass constraints as an ARRAY, for example [{"field":"available"},{"field":"price","max":300,"currency":"EUR"},{"field":"ships_to","value":"IT:CB"}]. available has no expected key: ask for the fact and read its result. For a merchant-declared variant option use {"field":"option","keys":["pa_color"],"values":["black"]}; use only native merchant values, with variation_id for a specific variant. Nothing is inferred or translated. Results are unknown outside max_age_seconds (default 86400); live=true reads the merchant now. Checkout is the final authority.

verify_offer input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "p2209_id",
    "constraints"
  ],
  "properties": {
    "live": {
      "type": "boolean",
      "description": "true reads the merchant Bridge now (one request)."
    },
    "p2209_id": {
      "type": "string",
      "maxLength": 200,
      "description": "Offer id from global_search (e.g. prod_duinshop-it_446678)."
    },
    "constraints": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "object",
            "required": [
              "field"
            ],
            "properties": {
              "max": {
                "type": "number",
                "minimum": 0
              },
              "min": {
                "type": "number",
                "minimum": 0
              },
              "field": {
                "type": "string",
                "const": "price"
              },
              "currency": {
                "type": "string",
                "pattern": "^[A-Z]{3}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "field"
            ],
            "properties": {
              "field": {
                "type": "string",
                "const": "available"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "field",
              "values"
            ],
            "properties": {
              "keys": {
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1
                },
                "maxItems": 16
              },
              "field": {
                "type": "string",
                "const": "option"
              },
              "values": {
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1
                },
                "maxItems": 32,
                "minItems": 1
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "field",
              "values"
            ],
            "properties": {
              "field": {
                "type": "string",
                "const": "brand"
              },
              "values": {
                "$ref": "#/properties/constraints/items/anyOf/2/properties/values"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "field",
              "values"
            ],
            "properties": {
              "field": {
                "type": "string",
                "const": "merchant"
              },
              "values": {
                "$ref": "#/properties/constraints/items/anyOf/2/properties/values"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "field",
              "values"
            ],
            "properties": {
              "keys": {
                "$ref": "#/properties/constraints/items/anyOf/2/properties/keys"
              },
              "field": {
                "type": "string",
                "const": "attribute"
              },
              "values": {
                "$ref": "#/properties/constraints/items/anyOf/2/properties/values"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "field",
              "values"
            ],
            "properties": {
              "field": {
                "type": "string",
                "const": "barcode"
              },
              "values": {
                "$ref": "#/properties/constraints/items/anyOf/2/properties/values"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "field",
              "value"
            ],
            "properties": {
              "field": {
                "type": "string",
                "const": "ships_to"
              },
              "value": {
                "type": "string",
                "pattern": "^[A-Z]{2}(:[A-Z0-9-]{1,10})?$"
              }
            },
            "additionalProperties": false
          }
        ]
      },
      "maxItems": 8,
      "minItems": 1,
      "description": "Required array of 1-8 objects. Each object has field and only the keys shown by its schema. Examples: [{\"field\":\"available\"}], [{\"field\":\"price\",\"max\":50,\"currency\":\"EUR\"}]."
    },
    "variation_id": {
      "type": "integer",
      "description": "Variant to check (from matching_variants or variants_compact). Without it, variant-dependent constraints may be unknown.",
      "exclusiveMinimum": 0
    },
    "max_age_seconds": {
      "type": "integer",
      "maximum": 2592000,
      "minimum": 60
    }
  },
  "additionalProperties": false
}
verify_offer annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
lookup_merchant — Check a merchant for KaliCart Bridge
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when the user already knows a merchant domain and needs to check whether it publishes a KaliCart Bridge catalog, its latest observed access state, or its federation consent. This tool only reads the Global registry and never probes or modifies the merchant. Do not use it to discover products; use global_search instead.

lookup_merchant input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "minLength": 4,
      "description": "Merchant domain, e.g. shop.example.com"
    }
  },
  "additionalProperties": false
}
lookup_merchant output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "registered",
    "domain"
  ],
  "properties": {
    "probe": {
      "type": "string"
    },
    "domain": {
      "type": "string"
    },
    "consent": {},
    "registered": {
      "type": "boolean"
    },
    "observed_at": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "string",
              "format": "date-time"
            }
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "bridge_access": {
      "type": "string"
    },
    "bridge_version": {
      "type": [
        "string",
        "null"
      ]
    },
    "bridge_detected": {
      "type": "boolean"
    },
    "federation_status": {
      "type": "string"
    },
    "merchant_discovery_url": {
      "anyOf": [
        {
          "type": "string",
          "format": "uri"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "additionalProperties": true
}
lookup_merchant annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_product — Get indexed product details
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this after global_search when the selected candidate needs indexed details that are not already on its search card. The p2209_id must come from global_search. Variant options and colors are merchant-declared snapshot evidence matched by variation ID. This remains a snapshot, not live merchant verification; follow the returned handoff before confirming variant, price, or stock. Skip this call when the search card already answers the question.

get_product input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "p2209_id"
  ],
  "properties": {
    "p2209_id": {
      "type": "string",
      "minLength": 1,
      "description": "KaliCart product ID (e.g. prod_duinshop-it_432395)"
    }
  },
  "additionalProperties": false
}
get_product output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "p2209_id"
  ],
  "properties": {
    "name": {
      "type": "string"
    },
    "error": {
      "type": "string"
    },
    "price": {},
    "scope": {
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "handoff": {},
    "category": {
      "type": [
        "string",
        "null"
      ]
    },
    "p2209_id": {
      "type": "string"
    },
    "variants": {},
    "attributes": {},
    "provenance": {},
    "updated_at": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "string",
              "format": "date-time"
            }
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "merchant_id": {
      "type": "string"
    },
    "product_url": {
      "anyOf": [
        {
          "type": "string",
          "format": "uri"
        },
        {
          "type": "null"
        }
      ]
    },
    "availability": {},
    "storefront_url": {
      "anyOf": [
        {
          "type": "string",
          "format": "uri"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "additionalProperties": true
}
get_product annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_merchants — List participating merchants
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this to inspect which WooCommerce merchants currently participate in the searchable KaliCart Global catalog and how much catalog coverage each contributes. It returns stable merchant identifiers, domains, storefront URLs, product counts, and sync time. Do not use it to find products; use global_search instead.

list_merchants input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 50,
      "minimum": 1,
      "description": "Max merchants to return (default 20, max 50), ordered by product count descending. No pagination"
    }
  },
  "additionalProperties": false
}
list_merchants output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "merchants",
    "total",
    "returned_count",
    "truncated"
  ],
  "properties": {
    "total": {
      "type": "integer",
      "minimum": 0
    },
    "merchants": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "merchant_id",
          "merchant_domain",
          "platform",
          "product_count",
          "last_sync"
        ],
        "properties": {
          "platform": {
            "type": "string"
          },
          "last_sync": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "string",
                    "format": "date-time"
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "merchant_id": {
            "type": "string"
          },
          "product_count": {
            "type": "integer",
            "minimum": 0
          },
          "storefront_url": {
            "type": "string",
            "format": "uri"
          },
          "merchant_domain": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": false
      }
    },
    "truncated": {
      "type": "boolean"
    },
    "returned_count": {
      "type": "integer",
      "minimum": 0
    }
  },
  "additionalProperties": false
}
list_merchants annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_categories — Browse canonical product categories
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this to discover the canonical category paths currently represented in KaliCart Global before calling global_search with leaf. An optional parent returns that node and its full subtree. This lists category vocabulary and counts; it does not return products.

list_categories input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "parent": {
      "type": "string",
      "description": "Optional canonical node to restrict results to that node and its subtree (for example apparel or home.bedroom)"
    }
  },
  "additionalProperties": false
}
list_categories output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "categories",
    "total",
    "returned_count",
    "truncated",
    "filtered_by"
  ],
  "properties": {
    "total": {
      "type": "integer",
      "minimum": 0
    },
    "next_step": {
      "type": "string"
    },
    "truncated": {
      "type": "boolean"
    },
    "categories": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "leaf",
          "product_count"
        ],
        "properties": {
          "leaf": {
            "type": "string"
          },
          "product_count": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": false
      }
    },
    "filtered_by": {
      "type": [
        "string",
        "null"
      ]
    },
    "complete_via": {
      "type": "string",
      "format": "uri"
    },
    "returned_count": {
      "type": "integer",
      "minimum": 0
    }
  },
  "additionalProperties": false
}
list_categories annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

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 (3 of 3 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 2 of 2 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
1050 ms
95th percentile latency
1050 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1050 ms · metadata changed · 9 tool(s)

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 kalicart-global-mcp https://dashboard.kalicart.com/mcp-public

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 kalicart-global-mcp --url https://dashboard.kalicart.com/mcp-public

Cursor

Merge this server into .cursor/mcp.json in your project, then enable kalicart-global-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "kalicart-global-mcp": {
      "url": "https://dashboard.kalicart.com/mcp-public"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "kalicart-global-mcp": {
      "type": "streamableHttp",
      "url": "https://dashboard.kalicart.com/mcp-public",
      "disabled": false
    }
  }
}

VS Code

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

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 kalicart-global-mcp https://dashboard.kalicart.com/mcp-public

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://dashboard.kalicart.com/mcp-public

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "kalicart-global-mcp": {
      "serverUrl": "https://dashboard.kalicart.com/mcp-public"
    }
  }
}

Let your agent find its tools

Find servers like KaliCart Global MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.