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.
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.
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.
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.
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 guideMigration 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