@arcnautical/mcp
An MCP server for the ArcNautical API: screen any commercial vessel by IMO number for sanctions, ownership opacity and a vetting grade — from Claude, ChatGPT, Cursor, VS Code, Windsurf or any MCP client.
Two tools need no API key at all. Add it, ask "is IMO 9274446 sanctioned?", get the answer.
[Smithery] [npm] [Wellknown: live]
Two ways to use it: a remote endpoint at https://mcp.arcnautical.com/mcp (nothing to install — claude.ai, ChatGPT, Claude Code, Cursor) or a local server over stdio with npx -y @arcnautical/mcp (Claude Desktop and every other stdio client).
Remote endpoint (no install)
https://mcp.arcnautical.com/mcp — MCP Streamable HTTP, stateless, JSON responses. No authentication is required for check_vessel and find_port; the keyed tools take your API key as an Authorization: Bearer header on the MCP request (an X-API-Key or arcnautical-api-key header is accepted too, for gateways that name the header themselves — never a query parameter).
claude.ai — Settings → Connectors → Add custom connector → URL https://mcp.arcnautical.com/mcp, no authentication. The two keyless tools are available at once.
ChatGPT — Settings → Connectors → Create (developer mode) → server URL https://mcp.arcnautical.com/mcp, no authentication.
Claude Code
Cursor — .cursor/mcp.json:
Anything with curl — the endpoint is plain JSON-RPC over POST:
The remote endpoint is a thin client of the same public API: a keyless call counts against your 100-per-hour allowance (the caller's address is forwarded), and a keyed call is metered on your key exactly as a direct API call would be. GET /mcp answers 405 — there is no server-to-client stream to hold — and GET https://mcp.arcnautical.com/health reports the endpoint's version.
Local server (stdio)
Requires Node 18+. No install step — every client below runs it with npx.
Claude Desktop — claude_desktop_config.json:
Claude Code
Cursor / Windsurf / VS Code — same command / args shape in the client's MCP settings.
To unlock the full record, batches and voyage scoring, add an API key to the env block:
Keys are free and self-serve at https://arcnautical.com/get-a-key?from=mcp — no card, no approval step. A new key includes a one-time free allowance of vessel screenings and a monthly allowance of voyage assessments; get_usage reports both, and the current numbers are on arcnautical.com/developers.
Tools
Reading a verdict
- RED — confirmed match on the vessel identifier. AMBER — possible match, review it. GREEN — no match against the sources reached. INCOMPLETE — a core source could not be read; never present it as clear.
coverage_complete: false on a GREEN means one supplementary list was unavailable: re-screen before relying on it.
assessed: false means ownership and vetting are defaults, not findings.
- The keyless check matches the vessel's current name and identifiers only. A hull renamed after a designation can read GREEN there;
screen_vessel covers that case.
- Designations change daily. Quote the
checkedAt / screened_at time with any answer.
Idempotency
Every resource-creating call sends an Idempotency-Key derived from the question — the hull and the UTC day — not from the attempt. Asking about the same vessel twice in a day returns the stored record and spends nothing. The API's docs measured 42% of one integration's monthly screenings as same-day repeats billed only because their client generated a random key per call; this server does not do that.
Environment
Self-hosting the HTTP endpoint
npx -y @arcnautical/mcp --http serves POST /mcp on port 3005 — useful when your assistants run in a network that cannot spawn local processes but can reach one internal URL. The Dockerfile in this repository builds the same thing; it is what mcp.arcnautical.com runs.
Links
Development
MIT © ArcNautical