Quickstart

Install DataCork in 60 seconds and make your first agent request via Claude Code or Cursor.

Install the CLI

curl -sSL https://get.datacork.com | sh
powershell -Command "irm https://get.datacork.com/install.ps1 | iex"
docker pull ghcr.io/datacork/conduit-cli:latest

The installer adds the datacork binary to your PATH and runs a post-install check. Expected output:

DataCork Conduit v0.1.0
Architecture: arm64 / amd64
Rosenpass: available
WireGuard: available
All checks passed.

Authenticate

Run the OAuth flow. This opens your browser and writes a short-lived credential to ~/.datacork/auth.json.

datacork auth login

For headless environments (CI, agents without a browser), use device flow:

datacork auth login --headless

This prints a verification code and URL. Visit the URL, enter the code, and the CLI polls until authorized.

Note: DataCork uses PKCE S256 OAuth 2.0. No password is stored. The credential file contains a short-lived access token and a refresh token — rotate via datacork auth rotate.

Add to Claude Code

# One-liner MCP registration
claude mcp add --transport http datacork https://mcp.datacork.com/mcp

Verify it registered:

claude mcp list
# datacork  https://mcp.datacork.com/mcp  http  connected

Add to Cursor

cursor mcp add datacork

Or manually add to .cursor/mcp.json:

{
  "mcpServers": {
    "datacork": {
      "transport": "http",
      "url": "https://mcp.datacork.com/mcp",
      "auth": {
        "type": "bearer",
        "tokenEnvVar": "DATACORK_API_KEY"
      }
    }
  }
}

Make your first request

In Claude Code, ask your agent to route a request through DataCork:

# Prompt to Claude Code:
"Connect to DataCork and route the next HTTP request through a German exit node."

# Claude Code will call:
# datacork.connect_vpn({ country: "DE" })
# datacork.get_exit_ip()
# ... route your request ...
import requests

# Connect via REST API
resp = requests.post(
    "https://api.datacork.com/v1/vpn/connect",
    headers={"Authorization": f"Bearer {DATACORK_API_KEY}"},
    json={"country": "DE"}
)
session = resp.json()
print(f"Connected. Exit IP: {session['exit_ip']}")
print(f"WireGuard config: {session['wireguard_config']}")
const resp = await fetch('https://api.datacork.com/v1/vpn/connect', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.DATACORK_API_KEY}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ country: 'DE' })
});
const session = await resp.json();
console.log('Exit IP:', session.exit_ip);
curl -sX POST https://api.datacork.com/v1/vpn/connect \
  -H "Authorization: Bearer $DATACORK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"country":"DE"}' | jq

Check your first x402 receipt

After your first paid request, an x402 receipt is emitted. View receipts:

datacork receipts list --limit 10
[
  {
    "id": "rcpt_01hx...",
    "timestamp": "2026-04-27T18:30:00Z",
    "amount_usdc": "0.001",
    "tx_hash": "0xabc123...",
    "session_id": "sess_01hx...",
    "exit_node": "de-fra-01",
    "bytes_egress": 14320
  }
]
Checkpoint: You should see a receipt entry with a real USDC transaction hash. If the Free tier quota is active (no wallet connected), the receipt shows payment_method: "quota" instead.

Next steps