MCP: Claude Desktop, ChatGPT, Cursor
The ImportOS Data remote MCP server: tools, connecting Claude Desktop, Cursor, Claude Code and ChatGPT, a curl check.
ImportOS Data has a remote Model Context Protocol server for AI agents. It calculates the turnkey cost of cars from US auctions cleared in Ukraine, Poland, Lithuania, Germany and Georgia, estimates market price, decodes VINs, searches listings and returns customs rules.
- Address:
https://api.importos.app/mcp(streamable HTTP, stateless: one JSON-RPC message perPOST). Waiting on the owner A placeholder domain until the owner confirms it. - Authentication:
Authorization: Bearer rv_live_..., the same API key as for REST. OAuth is not implemented yet (see below). - Tool results match the REST responses.
Tools
| Tool | Extra scopes (besides mcp) | What it does |
|---|---|---|
calculate_landed_cost | read:pricing | Turnkey cost of a car: auction fees, US inland, ocean freight, port, duty, VAT, excise, certification, registration, services. Every item has an explanation, a formula and a source |
estimate_market_price | read:pricing | p25 / median / p75 of listing prices on the UA or PL market over 90 days |
decode_vin | read:listings | VIN decoding (NHTSA vPIC + WMI) plus every known lot and listing with this VIN, including sold ones |
search_listings | read:listings | Normalized search across dozens of sources: natural language (q) or structured filters |
get_customs_rules | read:pricing | Customs duty, VAT, excise and registration parameters in force, with sources, effective date and a verified flag |
Tools the key has no permission for are not listed. All five are read-only (readOnlyHint: true).
Planned but unavailable: create_lead (for seller agents) and get_deal_status (for client assistants). They need the deal service and the write:deals scope In development.
Each tool description is written for the model: when to call, an example input and the limits. The main limits the tools repeat to the model:
- Parameters with
verified: falseare indicative only; the response haswarnings(for examplerule_unverified,tariffs_typical) and aconfidencebelow 1. Pass them on to the user. - Market price is built from listing prices, not transactions.
sample_size: 0means "no data" (null, not zero). - Search results are prices at the time of retrieval. Failing or blocked sources end up in
errorsand the call does not fail.
calculate_landed_cost input fields
Note: the field names here differ from REST (POST /v1/landed-cost).
| Field | Description |
|---|---|
lot_price_usd | bid on the lot in USD, before auction fees |
auction | copart, iaai, manheim, other (default copart) |
vehicle.year, vehicle.fuel | required; fuel: petrol, diesel, hybrid, phev, ev, lpg, cng, hydrogen, other |
vehicle.engine_cc | engine displacement in cm³; required for everything except ev |
vehicle.kwh | battery in kWh; required for ev |
vehicle.vin, vehicle.make, vehicle.model, vehicle.damage, vehicle.mileage_km | optional; the VIN is needed to detect US origin (0 % EU duty), damage adds a repair estimate |
us_state, auction_yard, zip | where the car is (state, yard name such as NJ - TRENTON, or ZIP) |
destination_country | UA, PL, LT, GE, DE |
destination_city | delivery city (for UA) |
our_fee_usd | your fee in USD (fixed) |
insurance | none, basic, full |
target_currency | result currency (ISO-4217), default USD |
date | yyyy-mm-dd for FX rates and rule version, default today |
locale | uk, pl, en: the language of item explanations |
Connecting
First create an API key in Desk with mcp, read:pricing, read:listings (quick start).
Claude Desktop
Claude Desktop connects remote servers with a static key through mcp-remote. Open Settings → Developer → Edit Config (Windows: %APPDATA%\Claude\claude_desktop_config.json):
{
"mcpServers": {
"importos": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.importos.app/mcp",
"--header",
"Authorization:${IMPORTOS_AUTH}"
],
"env": { "IMPORTOS_AUTH": "Bearer rv_live_YOUR_KEY" }
}
}
}The Authorization:${...} form with no space after the colon and the value in env avoids a known Windows quoting bug. Fully quit and restart Claude Desktop, then ask, for example: "What will a 2018 Toyota Camry 2.5 from Copart NJ cost in Ukraine, a bid of $8000?"

Cursor
The file ~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{
"mcpServers": {
"importos": {
"url": "https://api.importos.app/mcp",
"headers": { "Authorization": "Bearer rv_live_YOUR_KEY" }
}
}
}Claude Code
claude mcp add --transport http importos https://api.importos.app/mcp --header "Authorization: Bearer rv_live_YOUR_KEY"ChatGPT
OAuth is not implemented yet
ChatGPT custom connectors (developer mode, remote servers only) are built around OAuth: the token comes from an OAuth flow and the connector dialog has no field for arbitrary headers. Whether a static-key or bearer option is offered depends on the plan and the current ChatGPT release.
- If your dialog has a bearer/API-key field, enter
https://api.importos.app/mcpand yourrv_live_...key. - If not, ChatGPT cannot connect until we add OAuth 2.1 with dynamic client registration Waiting on the owner. It is planned, not done, and we will not claim otherwise.
Any other client
Use the Streamable HTTP transport, the URL and the Authorization header. A quick check with curl:
curl -s https://api.importos.app/mcp \
-H "Authorization: Bearer rv_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'or the official TypeScript client:
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
const client = new Client({ name: 'my-agent', version: '1.0.0' });
await client.connect(
new StreamableHTTPClientTransport(new URL('https://api.importos.app/mcp'), {
requestInit: { headers: { Authorization: `Bearer ${process.env.IMPORTOS_API_KEY}` } },
}),
);
const result = await client.callTool({
name: 'calculate_landed_cost',
arguments: {
lot_price_usd: 8000,
auction: 'copart',
vehicle: { year: 2018, fuel: 'petrol', engine_cc: 2487 },
us_state: 'NJ',
destination_country: 'UA',
our_fee_usd: 700,
},
});
console.log(result.structuredContent);The result is JSON (structuredContent, duplicated in the text content): items[], total, total_range, warnings[], assumptions[], rulesVersion, fx[], confidence.
Limitations
- No sessions: no server stream;
GET /mcpandDELETE /mcpreturn405. All Streamable HTTP clients work. - No OAuth: access by a static key. OAuth 2.1 (needed by ChatGPT connectors) is Waiting on the owner.
- Estimates, not offers: unverified rates are flagged, not hidden.
- MCP Registry: the
mcp/server.jsonmanifest (MCP Registry format) is ready, but publishing needs domain verification Waiting on the owner. - Windows and Norton: a network filter may corrupt loopback responses on
/mcp, see the quick start.