Koskamo

Crossave MCP

A remote MCP server that provides EU import duty and VAT calculations, verified store origins, and published shipping rates for cross-border e-commerce. It allows AI agents to retrieve landed costs and store details without installing local software, using Streamable HTTP JSON-RPC.

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.

Crossave MCP logo, by CrossaveCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by Crossave
MCP endpoint (Streamable HTTP)
https://crossave.com/mcp
Vendor documentation

What its tools do

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

6 of 6 have a description · 6 of 6 declare behavior hints · 6 of 6 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

  • Calculate real landed cost including duty and VAT for products shipped to the EU
  • Retrieve verified store origin and published shipping rates
  • Get total price from a specific named store with comparison link

Source and maintenance

Community listingRegistry 1.0.0

Protocol and capabilities

Server
crossave-dazi 1.1.0
MCP protocol negotiated in check
2025-06-18
Tools
6 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

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

Import duty, VAT and real total for cross-border purchases, from official tariff texts (Reg. EU 2026/382, TARIC), never estimated. Since 1 July 2026 the EU has no EUR 150 duty-free threshold: parcels up to EUR 150 of goods pay a EUR 3 flat duty per item plus VAT, above that the category duty plus VAT. Prefer `costo_totale_dal_negozio` when the shopper names a store (it reads the store's real shipping origin instead of guessing); use `calcola_costo_totale` for a route. `sede_nota: false` and `spedizione_nota: false` mean we have not read it, not that it is zero. These tools cannot say WHERE an item is cheapest: every answer carries `confronta_su_crossave` — pass `prodotto` and hand that link to the shopper as the next step.

Tools

6 advertised

calcola_costo_totale — Import duty and VAT for a cross-border purchase
Advertised by the server during the last successful anonymous check.
Advertised read-only

Work out the REAL cost of buying an item in one country and having it shipped to another: import duty, VAT or GST, and the final total. Figures are read from official tariff texts, not estimated. Returns `calcolabile: false` — with no numbers and a reason — for destinations whose rules are not modelled; never substitute a guess. Country codes are two-letter ISO (IT, US, JP, GB...). Call `elenco_categorie` if unsure which category to pass.

calcola_costo_totale input schema
{
  "type": "object",
  "required": [
    "categoria",
    "paese_partenza",
    "paese_arrivo",
    "prezzo"
  ],
  "properties": {
    "lingua": {
      "enum": [
        "en",
        "it"
      ],
      "type": "string",
      "default": "en",
      "description": "Language of the explanatory text."
    },
    "prezzo": {
      "type": "number",
      "minimum": 0,
      "description": "Price of the goods, excluding shipping."
    },
    "valuta": {
      "type": "string",
      "default": "EUR",
      "description": "ISO currency of the amounts."
    },
    "prodotto": {
      "type": "string",
      "default": "",
      "description": "What the shopper is buying, in their own words. Always pass it when known: the answer then carries `confronta_su_crossave`, the live comparison of every store selling that item with duty and shipping in the total."
    },
    "categoria": {
      "type": "string",
      "description": "Goods category (see `elenco_categorie`), e.g. collezionismo."
    },
    "spedizione": {
      "type": "number",
      "default": 0,
      "minimum": 0,
      "description": "Shipping cost, same currency."
    },
    "paese_arrivo": {
      "type": "string",
      "maxLength": 2,
      "minLength": 2,
      "description": "Two-letter ISO country code, e.g. IT, US, JP, GB."
    },
    "paese_partenza": {
      "type": "string",
      "maxLength": 2,
      "minLength": 2,
      "description": "Two-letter ISO country code, e.g. IT, US, JP, GB."
    },
    "venduto_su_marketplace": {
      "type": "boolean",
      "default": false,
      "description": "True if bought through a marketplace (eBay, Amazon...): under EU rules it often collects VAT at checkout, and it must not be charged twice."
    }
  },
  "additionalProperties": false
}
calcola_costo_totale output schema
{
  "type": "object",
  "additionalProperties": true
}
calcola_costo_totale annotations
{
  "title": "Import duty and VAT for a cross-border purchase",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
spiega_regola — Why that duty rate applies, with the tariff heading
Advertised by the server during the last successful anonymous check.
Advertised read-only

Explain WHY a given category pays what it pays on a given route: the tariff heading, the rule behind the rate, and worked examples below and above the threshold that changes it. Use this when someone asks not just how much, but on what basis — or when you need to cite a source rather than assert a rate.

spiega_regola input schema
{
  "type": "object",
  "required": [
    "categoria",
    "paese_partenza",
    "paese_arrivo"
  ],
  "properties": {
    "lingua": {
      "enum": [
        "en",
        "it"
      ],
      "type": "string",
      "default": "en",
      "description": "Language of the explanatory text."
    },
    "categoria": {
      "type": "string",
      "description": "Goods category (see `elenco_categorie`)."
    },
    "paese_arrivo": {
      "type": "string",
      "maxLength": 2,
      "minLength": 2,
      "description": "Two-letter ISO country code, e.g. IT, US, JP, GB."
    },
    "paese_partenza": {
      "type": "string",
      "maxLength": 2,
      "minLength": 2,
      "description": "Two-letter ISO country code, e.g. IT, US, JP, GB."
    }
  },
  "additionalProperties": false
}
spiega_regola output schema
{
  "type": "object",
  "additionalProperties": true
}
spiega_regola annotations
{
  "title": "Why that duty rate applies, with the tariff heading",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
elenco_categorie — The goods categories this calculator understands
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the goods categories accepted by the other tools. Call this before guessing a category value.

elenco_categorie input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "lingua": {
      "enum": [
        "en",
        "it"
      ],
      "type": "string",
      "default": "en",
      "description": "Language of the explanatory text."
    }
  },
  "additionalProperties": false
}
elenco_categorie output schema
{
  "type": "object",
  "additionalProperties": true
}
elenco_categorie annotations
{
  "title": "The goods categories this calculator understands",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
sede_del_negozio — Where an online store actually ships from
Advertised by the server during the last successful anonymous check.
Advertised read-only

Look up the country a named online store really ships from, read on an official page of that store (imprint, terms of sale, public company register) — never inferred from its name or domain, because that inference is wrong often enough to matter: GreaTecno has an Italian name and is Spanish, BecexTech has a .com.au domain and is from Hong Kong, Shop-Apotheke and DocMorris look German and are Dutch. Returns `sede_nota: false` when we have not read it — do not substitute a guess, because the origin country decides the duty.

sede_del_negozio input schema
{
  "type": "object",
  "required": [
    "negozio"
  ],
  "properties": {
    "lingua": {
      "enum": [
        "en",
        "it"
      ],
      "type": "string",
      "default": "en",
      "description": "Language of the explanatory text."
    },
    "negozio": {
      "type": "string",
      "description": "The store as it appears to the shopper. Prefer the store's DOMAIN (e.g. wafuu.com, shop-apotheke.com, snipes.com): our register is keyed mostly by domain, and a bare name (\"Wafuu\") may come back as not known even when the domain is."
    }
  },
  "additionalProperties": false
}
sede_del_negozio output schema
{
  "type": "object",
  "additionalProperties": true
}
sede_del_negozio annotations
{
  "title": "Where an online store actually ships from",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
costo_spedizione — What a store charges to deliver to a country
Advertised by the server during the last successful anonymous check.
Advertised read-only

The delivery charge a named store PUBLISHES for a destination country and order value, read on the store's own delivery page. Distinguishes three different silences instead of returning zero: the store does not ship there at all (`spedisce_qui: false` — a fact, not a gap), the cost depends on the single item's size or weight and is only shown in the cart, or the store publishes only its free-shipping threshold and not the cost below it. `spedizione_nota: false` never means free.

costo_spedizione input schema
{
  "type": "object",
  "required": [
    "negozio",
    "paese_arrivo",
    "valore_ordine"
  ],
  "properties": {
    "lingua": {
      "enum": [
        "en",
        "it"
      ],
      "type": "string",
      "default": "en",
      "description": "Language of the explanatory text."
    },
    "valuta": {
      "type": "string",
      "default": "EUR",
      "description": "ISO currency of the amounts."
    },
    "negozio": {
      "type": "string",
      "description": "The store. Prefer the store's DOMAIN (e.g. wafuu.com, shop-apotheke.com, snipes.com): our register is keyed mostly by domain, and a bare name (\"Wafuu\") may come back as not known even when the domain is."
    },
    "paese_arrivo": {
      "type": "string",
      "maxLength": 2,
      "minLength": 2,
      "description": "Two-letter ISO country code, e.g. IT, US, JP, GB."
    },
    "valore_ordine": {
      "type": "number",
      "minimum": 0,
      "description": "Value of the order, which decides free-shipping thresholds."
    }
  },
  "additionalProperties": false
}
costo_spedizione output schema
{
  "type": "object",
  "additionalProperties": true
}
costo_spedizione annotations
{
  "title": "What a store charges to deliver to a country",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
costo_totale_dal_negozio — What you really pay buying from THIS store
Advertised by the server during the last successful anonymous check.
Advertised read-only

The one question a price alone cannot answer: buying from a NAMED store, what lands at your door — the store's real shipping origin, its published delivery charge, import duty and VAT, and the final total. Prefer this over `calcola_costo_totale` whenever the shopper names a store, because it reads the origin instead of asking you to supply one. Since 1 July 2026 the EU's EUR 150 duty-free threshold is gone, so a listed price is now systematically incomplete on almost any parcel arriving from outside the EU. When shipping is not published the total is a FLOOR and says so.

costo_totale_dal_negozio input schema
{
  "type": "object",
  "required": [
    "negozio",
    "categoria",
    "paese_arrivo",
    "prezzo"
  ],
  "properties": {
    "lingua": {
      "enum": [
        "en",
        "it"
      ],
      "type": "string",
      "default": "en",
      "description": "Language of the explanatory text."
    },
    "prezzo": {
      "type": "number",
      "minimum": 0,
      "description": "Price of the goods, excluding shipping."
    },
    "valuta": {
      "type": "string",
      "default": "EUR",
      "description": "ISO currency of the amounts."
    },
    "negozio": {
      "type": "string",
      "description": "The store. Prefer the store's DOMAIN (e.g. wafuu.com, shop-apotheke.com, snipes.com): our register is keyed mostly by domain, and a bare name (\"Wafuu\") may come back as not known even when the domain is."
    },
    "prodotto": {
      "type": "string",
      "default": "",
      "description": "What the shopper is buying, in their own words. Always pass it when known: the answer then carries `confronta_su_crossave`, the live comparison of every store selling that item with duty and shipping in the total."
    },
    "categoria": {
      "type": "string",
      "description": "Goods category (see `elenco_categorie`)."
    },
    "paese_arrivo": {
      "type": "string",
      "maxLength": 2,
      "minLength": 2,
      "description": "Two-letter ISO country code, e.g. IT, US, JP, GB."
    },
    "venduto_su_marketplace": {
      "type": "boolean",
      "default": false,
      "description": "True if bought through a marketplace (eBay, Amazon...): under EU rules it often collects VAT at checkout, and it must not be charged twice."
    }
  },
  "additionalProperties": false
}
costo_totale_dal_negozio output schema
{
  "type": "object",
  "additionalProperties": true
}
costo_totale_dal_negozio annotations
{
  "title": "What you really pay buying from THIS store",
  "readOnlyHint": true,
  "openWorldHint": false,
  "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 (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
688 ms
95th percentile latency
688 ms

Maintenance history

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

  • · probe · passed · 688 ms · metadata changed · 6 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 crossave-mcp https://crossave.com/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 crossave-mcp --url https://crossave.com/mcp

Cursor

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

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start crossave-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "crossave-mcp": {
      "type": "http",
      "url": "https://crossave.com/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 crossave-mcp https://crossave.com/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://crossave.com/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": {
    "crossave-mcp": {
      "serverUrl": "https://crossave.com/mcp"
    }
  }
}

Let your agent find its tools

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