Give your agent every model.
One install. 229 models at list price, on one key. Every prompt buys back a token you pick.
- 11 clients Claude Code, Codex, Cursor and more
- 1 key one sign-in, a daily cap you pick
- 229 models text, image, video and audio
- x402 media paid per call in USDC, from a wallet with limits
One command. Every model.
Pick your client, paste one line. Source: github.com/xavadao/xinf-plugin.
Paste this in your terminal.
claude plugin marketplace add xavadao/xinf-plugin && claude plugin install xinf@xinf --config base_url=https://zinf.ai && claude mcp login plugin:xinf:xinf
Then sign in: The command ends by opening your browser: sign in, pick a daily cap, Allow. Done. If Claude Code ever says the server needs authentication: /mcp, pick plugin:xinf:xinf, Authenticate.
In Claude Desktop, open Settings > Connectors > Add custom connector and paste this URL.
https://zinf.ai/mcp/account
Then sign in: Click Connect: sign in in the browser, pick a daily cap, Allow. Team and Enterprise plans: an owner adds it under Organization settings > Connectors.
Paste this in your terminal.
codex plugin marketplace add xavadao/xinf-plugin && codex plugin add xinf@xinf && codex mcp login xinf
Then sign in: The command ends by opening your browser: sign in, pick a daily cap, Allow. Done. To sign in again later: codex mcp login xinf.
Paste this in your terminal.
curl -fsSL https://raw.githubusercontent.com/xavadao/xinf-plugin/main/scripts/add-mcp.mjs | node --input-type=module - cursor --login
Then sign in: With the Cursor CLI installed, the command ends by opening your browser: sign in, pick a daily cap, Allow. Only the app: Settings > MCP, click "Needs login" next to xinf, then Allow. Later: cursor-agent mcp login xinf.
Paste this in your terminal.
gemini extensions install https://github.com/xavadao/xinf-plugin --consent && gemini
Then sign in: Gemini asks "Authentication required for MCP Server: xinf ... Do you want to continue?": press Enter, sign in in the browser, pick a daily cap, Allow. Later: /mcp auth xinf.
Paste this in your terminal.
curl -fsSL https://raw.githubusercontent.com/xavadao/xinf-plugin/main/scripts/install-opencode.sh | sh && opencode mcp auth xinf
Then sign in: The command ends by opening your browser (opencode mcp auth xinf): sign in, pick a daily cap, Allow.
Paste this in Kimi Code chat.
/plugins install https://github.com/xavadao/xinf-plugin
Then sign in: Choose "Trust and install", run /new, then /mcp-config login plugin-xinf:xinf: sign in in the browser, pick a daily cap, Allow. Kimi Code must be signed in (its model runs the login).
Paste this in your terminal.
pi install git:github.com/xavadao/xinf-plugin@v0.1.1 && pi "/mcp-auth xinf"
Then sign in: The command ends by opening your browser (pi "/mcp-auth xinf"): sign in, pick a daily cap, Allow. Later, inside Pi: /mcp-auth xinf.
Paste this into Cline's MCP settings.
{
"mcpServers": {
"xinf": {
"type": "streamableHttp",
"url": "https://zinf.ai/mcp/account"
}
}
}Then sign in: In the MCP Servers panel, xinf shows Authenticate: click it, sign in in the browser, Allow (VS Code asks once to open the link back).
Paste this into Windsurf's MCP settings.
{
"mcpServers": {
"xinf": {
"serverUrl": "https://zinf.ai/mcp/account"
}
}
}Then sign in: Refresh the MCP servers in Cascade and sign in to xinf when it asks (browser, daily cap, Allow). If Windsurf offers no sign-in, use the device login and the key config below.
Add these two lines to your app's settings.
OPENAI_BASE_URL=https://zinf.ai/v1 OPENAI_API_KEY=xk_live_...
Use Claude Code with your key.
Point the agent itself at us: every request runs on our models at list price, from your balance. Two lines, no plugin needed.
Claude Code
export ANTHROPIC_BASE_URL=https://zinf.ai export ANTHROPIC_AUTH_TOKEN=$XINF_API_KEY claude
Claude Code sends its usual model ids (claude-opus-..., claude-sonnet-..., claude-haiku-..., dated or -latest): each maps to the same model in our catalog, billed at list price. Pick one with ANTHROPIC_MODEL (and ANTHROPIC_DEFAULT_HAIKU_MODEL for background tasks), e.g. claude-haiku-4-5. ANTHROPIC_API_KEY works too.
Codex
[model_providers.xinf] name = "Xava Inference" base_url = "https://zinf.ai/v1" env_key = "XINF_API_KEY" wire_api = "responses" [profiles.xinf] model_provider = "xinf" model = "openai/gpt-5.4-mini" # then: codex --profile xinf
OpenAI models only on this API; bare ids such as gpt-5.4-mini work too.
Gemini CLI
export GOOGLE_GEMINI_BASE_URL=https://zinf.ai export GEMINI_API_KEY=$XINF_API_KEY gemini -m gemini-2.5-flash
Choose "Use Gemini API key" when Gemini CLI asks how to sign in. Gemini model ids map to our catalog; any other chat model works by its full id. Token counts are estimates; cached content and the file API are not supported.
No key yet? Create one, or run the device login from your agent's setup above: it saves one to ~/.xinf/credentials. Details: agent docs.
Pay per call, from a wallet with limits.
For agents that already have a wallet provider with spending policies, such as a hosted agent wallet.
- 01Your agent asks
For an image, a clip or a voice.
- 02It gets a price
One exact price, in USDC.
- 03It pays and gets it
Through its wallet provider, within its limits.
Using Claude Code, Codex, Cursor or another coding agent? Sign in instead (the step under your agent above): it covers images, video and audio too, paid from your balance within the daily cap you pick. We never ask you to create a wallet or keep a private key on your computer.
Building an agent that already pays through a wallet service with spending limits? Point its x402 client at our media endpoints: it gets one exact price in USDC per request, its wallet provider signs within its limits, and the result comes back with a receipt.
Works for 117 media models. soon Endpoints and headers: x402 docs.
Build agentic apps with one key.
Your own code, any OpenAI-compatible SDK.
from openai import OpenAI
client = OpenAI(
base_url="https://zinf.ai/v1",
api_key="xk_live_...", # your Xava Inference key
)
r = client.chat.completions.create(
model="openai/gpt-5.4",
messages=[{"role": "user", "content": "Hello!"}],
)
print(r.choices[0].message.content)