Product — Integrations

Three paths.
Same router.

The same endpoint underneath. Pick the surface that matches your stack — pure HTTP for portability, our typed SDK for batteries-included wallet handling, or an MCP server when you live inside Claude Code.

Three ways to integrate

Drop in. Pick your path.

Same OpenAI-compatible endpoint underneath. Pick the path that matches the surface you already work in — pure HTTP, our typed SDK, or an MCP server for AI coding tools.

Path A

OpenAI SDK drop-in

Use the openai package you already have. Change the base URL. Done.

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.arcrouter.com/v1",
  apiKey: "mpp-handled-via-mppx",
});

const res = await client.chat.completions.create({
  messages: [{ role: "user", content: "..." }],
  model: "auto",
});

Same shape OpenAI returns, plus a routing object with model picked, cost, savings.

Path B

TypeScript SDK

@arcrouter/sdk wraps openai. Auto-handles x402 wallet signing + retry.

import { ArcRouter } from "@arcrouter/sdk";

const arc = new ArcRouter({
  wallet: { privateKey: process.env.X402_KEY },
  budget: "auto",
});

const res = await arc.chat("...");
const verified = await arc.council("...");

Same SDK supports streaming, council, workflow budgets, model aliases.

Path C

MCP for Claude Code / Cursor

One command. Adds three tools to any MCP client: chat, models, health.

claude mcp add arcrouter \
  --transport http \
  https://api.arcrouter.com/mcp

# Then ask Claude Code:
#   "route this prompt to the best model"
# It calls arcrouter_chat automatically.

Works in Claude Code, Cursor, Cline, Windsurf, and any HTTP MCP host.

All three paths hit the same OpenAI-compatible endpoint. Switch between them as your stack changes — no lock-in to any single integration.

See full guide
Already an OpenAI shop?

Migration is a one-line diff.

Change baseURL to https://api.arcrouter.com/v1. Use model: "auto" and let the router decide, or pass an alias like "claude" / "gpt" / "gemini" and it resolves to whichever model currently benchmarks best.

- const client = new OpenAI({ apiKey: process.env.OPENAI_KEY });
+ const client = new OpenAI({
+   baseURL: "https://api.arcrouter.com/v1",
+   apiKey: "mpp-handled-via-mppx",
+ });

const res = await client.chat.completions.create({
  messages: [{ role: "user", content: prompt }],
- model: "gpt-4o",
+ model: "auto",  // or "claude" / "gpt" / "gemini" / "deepseek"
});

- console.log(res.choices[0].message.content);
+ console.log(res.choices[0].message.content);
+ console.log(res.routing);  // model picked, cost, savings