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.
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.
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.
Settings → Connectors → Add custom connector, then paste the URL above.
claude mcp add --transport http vectelos https://mcp.vectelos.com/mcp
Then run /mcp inside Claude Code and choose vectelos to sign in.
In ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):
{ "mcpServers": { "vectelos": { "url": "https://mcp.vectelos.com/mcp" } } }
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" } } }
codex mcp add vectelos --url https://mcp.vectelos.com/mcp
codex mcp login vectelos
In ~/.gemini/settings.json. Use httpUrl; url selects the
older SSE transport:
{ "mcpServers": { "vectelos": { "httpUrl": "https://mcp.vectelos.com/mcp" } } }
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.
Your email is the account. Every client you sign in from, and the account page, share one balance.
| Tool | Does | Cost |
|---|---|---|
compute_entry_duty | A whole customs entry, up to 200 lines: each line's rate, base duty and stacked remedies, plus MPF, HMF and the total payable | 1 check per line |
compute_line_duties | Up to 2,000 lines without entry fees, for re-pricing a product list | 1 check per line |
lookup_tariff_line | One tariff line: the published rate, units, and the remedies that attach for an origin | Free |
get_schedule_revision | Which USITC schedule revision the engine holds, and when it was verified | Free |
get_balance | Your account email and checks left | Free |
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.
| Checks | Price | |
|---|---|---|
| Free | 100, once per verified email | $0 |
| Pack | 1,000 | $50 |
| Volume pack | 10,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.
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.
| Code | What to do |
|---|---|
QUANTITY_REQUIRED | The rate is charged per unit. Supply quantity and quantity_unit in the unit the note names |
QUANTITY_UNIT_MISMATCH | Supply the quantity in the named unit; for qualified bases such as drained weight, ask your broker |
UNPARSED_RATE | The rate splits across components the input does not carry; ask your broker |
RELATIVE_RATE | The rate is stated relative to another subheading; look that rate up |
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.
RATE_LIMITED and the seconds to wait, and nothing is charged.| Symptom | Likely cause |
|---|---|
| No sign-in page opens | The 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 server | The file uses mcpServers; VS Code needs servers |
| Gemini CLI connects over SSE, or fails | url was used; use httpUrl |
| Antigravity does not list the server | The key must be serverUrl; a snap install reads the file under ~/snap/antigravity-cli/ |
| A line shows no duty | It is a refusal; read duty_refusal_code and duty_note |
| The agent's balance differs from the account page | Different emails. Sign in with the same one everywhere |
| A token is refused | It was revoked or mistyped; create a new one |
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.