VectelosUS customs tariff & landed cost engine

Vectelos Duty: a US import duty MCP server for AI agents

Give your agent an HTS code, a country of origin and a customs value. It gets back the published duty rate, every Chapter 99 trade remedy that stacks on it (Section 301, Section 232 and U.S. note 52), the merchandise processing and harbor maintenance fees, and the total payable. When a line cannot be computed honestly, it is refused with a reason, never reported as zero.

https://mcp.vectelos.com/mcp

One URL for every client. The first call opens a browser to sign you in by email; there is no API key to copy. 100 free duty checks per verified email.

No HTS code yet? Start from the document. This server computes duty for a code you already have; it does not classify goods. Classification needs a person to review each suggested code, so it lives in the Vectelos app: upload a commercial invoice or supplier quotation (PDF, JPG or PNG), and it suggests an HTS code for every line with the classification rationale and legal authority, stacks the duty, and produces an advisory PDF for your broker. You review each line before relying on it. Free for 25 invoice analyses a month. The app has its own account, separate from this server.

Add the server to your agent

Sign-in has been tested end to end in Claude (web), Claude Code and Antigravity CLI. The other configurations follow each client's documented format for remote MCP servers.

Claude (web, desktop, mobile)

Settings → Connectors → Add custom connector, then paste the URL above.

Claude Code

claude mcp add --transport http vectelos https://mcp.vectelos.com/mcp

Then run /mcp inside Claude Code and choose vectelos to sign in.

Cursor

In ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):

{ "mcpServers": { "vectelos": { "url": "https://mcp.vectelos.com/mcp" } } }

VS Code (GitHub Copilot)

In .vscode/mcp.json. The top-level key is servers, not mcpServers; VS Code silently ignores the file otherwise:

{ "servers": { "vectelos": { "type": "http", "url": "https://mcp.vectelos.com/mcp" } } }

OpenAI Codex (CLI and IDE)

codex mcp add vectelos --url https://mcp.vectelos.com/mcp
codex mcp login vectelos

Gemini CLI

In ~/.gemini/settings.json. Use httpUrl; url selects the older SSE transport:

{ "mcpServers": { "vectelos": { "httpUrl": "https://mcp.vectelos.com/mcp" } } }

Antigravity CLI

In ~/.gemini/config/mcp_config.json (a snap install on Ubuntu or WSL reads ~/snap/antigravity-cli/common/.gemini/config/mcp_config.json). The key is serverUrl:

{ "mcpServers": { "vectelos": { "serverUrl": "https://mcp.vectelos.com/mcp" } } }

In agy, type /mcp, select the server and choose Authenticate.

Sign in

  1. Make the first call. Your agent asks the server for something, and the server asks it to sign you in.
  2. Prove your email. A Vectelos sign-in page opens in your browser. Enter your email and type the code we send, or continue with Google.
  3. Approve access for Vectelos Duty to compute duty on your behalf.
  4. Go back to your agent. Your balance is 100 checks. Ask it to show your balance to confirm.

Your email is the account. Every client you sign in from, and the account page, share one balance.

What your agent can ask

ToolDoesCost
compute_entry_dutyA whole customs entry, up to 200 lines: each line's rate, base duty and stacked remedies, plus MPF, HMF and the total payable1 check per line
compute_line_dutiesUp to 2,000 lines without entry fees, for re-pricing a product list1 check per line
lookup_tariff_lineOne tariff line: the published rate, units, and the remedies that attach for an originFree
get_schedule_revisionWhich USITC schedule revision the engine holds, and when it was verifiedFree
get_balanceYour account email and checks leftFree

Repeating an identical request within 24 hours is free. A worked example, step by step, is in How to compute US import duty from an AI agent.

Pricing

ChecksPrice
Free100, once per verified email$0
Pack1,000$50
Volume pack10,000$200

Packs open soon. Today the server runs on the free 100 checks. When packs open, you will buy them on the account page, by card, in your browser. Your agent can never buy checks. Purchased checks expire 12 months after purchase.

A check is one line computed. A refused line costs a check, because the refusal is a correct answer. A request rejected before computing (a malformed code, for example) costs nothing.

When a line is refused

A refusal means the duty cannot be computed from what was supplied without guessing. The line comes back with base_duty_usd empty, a duty_refusal_code, and a duty_note saying what to supply.

CodeWhat to do
QUANTITY_REQUIREDThe rate is charged per unit. Supply quantity and quantity_unit in the unit the note names
QUANTITY_UNIT_MISMATCHSupply the quantity in the named unit; for qualified bases such as drained weight, ask your broker
UNPARSED_RATEThe rate splits across components the input does not carry; ask your broker
RELATIVE_RATEThe rate is stated relative to another subheading; look that rate up

Scripts and CI without a browser

On the account page, create a personal access token (it starts vxd_). It is shown once, spends the same balance, and stops working within a minute of being revoked. Send it as a bearer token:

claude mcp add --transport http vectelos https://mcp.vectelos.com/mcp \
  --header "Authorization: Bearer $VECTELOS_TOKEN"

Keep tokens out of source control, logs and chat transcripts.

Limits

Troubleshooting

SymptomLikely cause
No sign-in page opensThe client needs a browser on the same machine. Use an access token instead
After signing in, the browser shows "localhost ... can't be reached"The agent runs on another machine (over SSH). Sign-in worked: copy the whole address-bar URL and, within a few minutes, run curl "<that URL>" on the machine where the agent runs
VS Code shows no serverThe file uses mcpServers; VS Code needs servers
Gemini CLI connects over SSE, or failsurl was used; use httpUrl
Antigravity does not list the serverThe key must be serverUrl; a snap install reads the file under ~/snap/antigravity-cli/
A line shows no dutyIt is a refusal; read duty_refusal_code and duty_note
The agent's balance differs from the account pageDifferent emails. Sign in with the same one everywhere
A token is refusedIt was revoked or mistyped; create a new one

What it does not do

Privacy

We keep your email, your balance and a record of each charge (tool, number of lines, checks, outcome). We do not keep the codes, values, quantities or duties you send, beyond a 24-hour key that makes a repeated request free. Operational logs carry counts and outcomes only. See the privacy policy. Questions: support@vectelos.com.

Vectelos Duty returns an advisory estimate for planning. It is not customs advice, not a customs ruling and not a CBP filing, and Vectelos is not a licensed customs broker. The importer of record remains responsible for the accuracy of each entry. Every response names the schedule revision it was computed against; when the revision changes, re-run cached figures.