EveryAPI docs everyapi.ai

The MCP server

The everyapi binary is also a Model Context Protocol server. Run it as everyapi mcp and an AI agent — Claude Code, Cursor, Codex CLI, any MCP client — can check your balance, list seller channels, mount a channel, or withdraw earnings, without you opening a terminal.

Registering it

everyapi mcp install [client]    Register with claude / codex / gemini
everyapi mcp uninstall [client]  Remove the registration
everyapi mcp status              Which clients have everyapi registered
everyapi mcp                     Run the stdio server

everyapi mcp with no arguments does the right thing for both callers: an MCP client that spawned it through a pipe gets the JSON-RPC server, and a human who typed it at a prompt gets the install / uninstall picker instead of a dead cursor.

Manual wiring, for a client mcp install does not cover — point command at the binary with args: ["mcp"]:

{
  "mcpServers": {
    "everyapi": {
      "command": "/abs/path/to/everyapi",
      "args": ["mcp"]
    }
  }
}

Auth model, stated up front

Tools exposed

ToolPurpose
everyapi_statusBalance, used, request count
everyapi_topupReturns the web top-up URL
everyapi_seller_listYour marketplace channels
everyapi_seller_withdrawSeller quota to main balance
everyapi_seller_eligibilityRead-only mount-gate checklist
everyapi_seller_add_keyMount a channel from plain keys
everyapi_seller_add_oauth_codex_startStart the Codex device flow
everyapi_seller_add_oauth_codex_pollPoll it
everyapi_seller_add_oauth_claude_startStart the Anthropic OAuth flow
everyapi_seller_add_oauth_claude_completeSubmit the pasted code#state
everyapi_edge_listBYO-GPU nodes and their state
everyapi_edge_statusOne node in detail
everyapi_edge_removeDelete a node
everyapi_admin_marketplace_statusMarketplace flag (admin)
everyapi_admin_marketplace_setOpen or close it (admin)

Inputs: everyapi_seller_withdraw takes confirm: "yes" and an optional quota; everyapi_seller_add_key takes name, type, keys[], models, and optional key_remarks[] and remark; the OAuth start calls take name and models, and the poll and complete calls take the flow_id or input the start call handed back; everyapi_edge_status and everyapi_edge_remove take a node_id; everyapi_edge_remove and everyapi_admin_marketplace_set also require confirm: "yes".

Call everyapi_seller_eligibility before asking a user for an API key: it reports the mount gates (marketplace open, account active, email verified, account age, prior usage, channel cap) so a failing account is told why up front instead of after submitting a credential.

Gemini's seller OAuth is not exposed over MCP. Its loopback listener's lifetime does not match a cross-tool-call lifecycle, so it stays a CLI-only flow: everyapi seller add-oauth gemini.

What an OAuth conversation looks like

User: Add a ChatGPT seller channel, my-chatgpt, models gpt-4
AI   -> everyapi_seller_add_oauth_codex_start(
          {name: "my-chatgpt", models: "gpt-4"})
     <- "Go to the verification URI, enter USR-789, then say when done"
User: Done
AI   -> everyapi_seller_add_oauth_codex_poll({flow_id: "…"})
     <- "status=pending"
     … keep polling …
     <- "status=authorized — channel #314 mounted"

Smoke test

everyapi mcp <<'EOF'
{"jsonrpc":"2.0","id":1,"method":"initialize"}
{"jsonrpc":"2.0","id":2,"method":"tools/list"}
{"jsonrpc":"2.0","id":3,"method":"tools/call",
 "params":{"name":"everyapi_status","arguments":{}}}
EOF

Three JSON lines back: the initialize result, the tool list, and either your status or a not-logged-in isError.