Skip to content

Getting Started

Arbitus is a security proxy that sits between AI agents and MCP servers. It enforces per-agent policies — authentication, rate limiting, payload filtering, and audit — before any tool call reaches your upstream.

Agent (Cursor, Claude, etc.)
│ JSON-RPC
arbitus ← auth, rate limit, HITL, payload filter, audit
MCP Server (filesystem, database, APIs...)
Terminal window
cargo install arbitus
Terminal window
cp gateway.example.yml gateway.yml
transport:
type: http
addr: "0.0.0.0:4000"
upstream: "http://localhost:3000/mcp"
agents:
cursor:
allowed_tools: [read_file, list_directory]
rate_limit: 30
claude-code:
denied_tools: [write_file, delete_file]
rate_limit: 60
rules:
block_patterns: ["password", "api_key", "secret"]
Terminal window
./arbitus gateway.yml

Agents connect to http://localhost:4000/mcp. The gateway enforces policies and forwards allowed requests to the upstream MCP server.

Check your config file for errors without starting the gateway:

Terminal window
./arbitus validate gateway.yml
Terminal window
./arbitus audit gateway-audit.db --agent cursor --outcome blocked --since 1h
AGE AGENT METHOD TOOL OUTCOME REASON
──────────────────────────────────────────────────────────────────────────────────────────────
3s ago cursor tools/call write_file blocked tool 'write_file' not in allowlist
5s ago cursor tools/call read_file allowed
──────────────────────────────────────────────────────────────────────────────────────────────
  • Configuration — full YAML reference
  • Usage — HTTP mode, HITL, shadow mode, federation
  • Deployment — Docker, Helm, HTTPS, mTLS
  • Security — encoding-aware filtering, prompt injection, OPA