MCP + HTTP · Base USDC

Small model?
Ask a stronger one.

One question. An available expert LLM. No model selection or payment details in your prompt.

Use an access token, or let your wallet client pay via x402.
Explicit spending limits. No automatic repayment after uncertainty.

One-tool MCP endpoint
https://router.paymentrequired.com/mcp/expert

Service status not checked. View /healthz.

Status reports service liveness, not model availability or payment success.

Start here / One tool

Ask. Get help. Continue.

The only tool call your model needs

ask_expert({"question":"Check my solution. Here are the task, code, and error: …"})

Have an access token?

Connect to the endpoint above with your token in the client’s Authorization header. You are not charged; our provider credits are used. Never put a token in your question.

codex mcp add nuri-expert --url https://router.paymentrequired.com/mcp/expert --bearer-token-env-var ASK_EXPERT_TOKEN

Set ASK_EXPERT_TOKEN through your host’s secret manager first. Invalid tokens stop the request; they never trigger a payment.

Prefer x402?

Use the included expert bridge with a dedicated wallet and explicit per-call and total spending limits. The bridge handles payment and recovery; your model only sees the question and answer.

A plain MCP connection cannot pay by itself. The owner configures the wallet once, outside the model’s context. No wallet connects from this website.

The router selects a configured expert with recent healthy observations. It can try one fallback before issuing an invoice. Unknown payment outcomes never trigger a new charge. No expert available? You receive a clear error, not a payment request.

01 / Find your model

A model for the work.

Raw model catalog ↗

Browse configured models, inspect rates, and test an actual text response. A configured model may be unavailable or out of credits; API discovery only lists models with recent healthy observations.

Rates are USDC per million tokens, plus the model’s request fee. The published authorization ceiling is 1 USDC per request, not the price. Review the exact invoice before signing.

02 / Advanced access

Choose a model yourself.

  1. Connect Codex or your MCP client

    Add the remote server for free model discovery and quotes.

    Codex CLI

    codex mcp add nuri-router --url https://router.paymentrequired.com/mcp

    Other MCP clients: HTTP connection config

    This SDK-neutral connection example uses a common MCP config shape. Adapt the wrapper to your client.

    {
      "mcpServers": {
        "nuri-router": {
          "type": "http",
          "url": "https://router.paymentrequired.com/mcp"
        }
      }
    }

    Connecting does not enable payment. Paid chat requires an x402-aware signer for direct Base USDC, including preservation of the exact invoice resource. A generic MCP client cannot pay on its own.

  2. Choose a model and inspect its price

    Call list_models, then quote with an exact model ID. Both are free. A quote is a non-payable estimate; it does not generate an answer.

    Or discover over HTTP — free, no wallet

    curl -sS https://router.paymentrequired.com/v1/models

  3. Prepare an answer, then review the invoice

    An unsigned chat request consumes provider compute to prepare and meter an answer. It does not charge the buyer or release the answer. Expect HTTP 402 with an exact invoice in PAYMENT-REQUIRED.

    Unsigned HTTP example — run only when ready

    Select a model above, or replace the placeholder with an ID from the current catalog. This Bash/zsh example needs Node.js to create a private UUID. Keep the same key and body for the paid retry and recovery.

    # Run once per NEW request. Keep this shell open.
    # Keep the key and returned invoice private.
    router_request_id="$(node -p 'crypto.randomUUID()')"
    curl -sS -i https://router.paymentrequired.com/v1/chat/completions \
      -H 'Content-Type: application/json' \
      -H "Idempotency-Key: $router_request_id" \
      --data-raw '{"model":"MODEL_ID_FROM_CATALOG","messages":[{"role":"user","content":"Say hello."}],"max_tokens":64,"stream":false}'

    This command has no payment signature. Do not use unsigned chat as a health check. Running the whole snippet again creates a new request key.

    Have your wallet client verify the invoice’s amount, Base network, USDC asset, recipient and expiry. Approve the exact amount, then retry the identical request with the signed payment and the private invoice resource intact.

03 / Payment & recovery

An invoice for actual usage.

  1. 1Prepare

    The provider generates an answer.

  2. 2Invoice

    Actual tokens determine the amount.

  3. 3Approve

    Your wallet signs the exact invoice.

  4. 4Paid retry

    Settlement releases the answer and receipt.

Direct USDC on Base

x402 v2 exact, EIP-3009, settled through PayAI. The 1 USDC ceiling limits the invoice; your wallet signs the actual amount. No Gateway deposit. No Lightning route.

Paid responses are buffered JSON, not streamed. The answer is prepared before you approve payment.

Keep your recovery key private

Use a fresh UUID for each new request: Idempotency-Key over HTTP, or request_id over MCP. Preserve it with the exact model, request body and private invoice resource.

A confirmed completed request can be recovered with its original key and body without a new payment. Payment and answer delivery are separate operations.

04 / Reference

Small surface. Explicit payment.

HTTP chat endpoint

https://router.paymentrequired.com/v1/chat/completions

POST /mcp/expert

One tool: ask_expert. Required argument: question. Native clients may supply a private UUIDv4 request_id; the bridge manages it automatically. Token access or the existing x402 payment flow. Answers request at most 2,048 output tokens.

POST /mcp

Stateless Streamable HTTP transport with JSON responses. list_models returns the catalog; quote returns non-payable pricing; chat prepares an invoice or completes a paid request.

Chat arguments: exact model, text messages with system, user or assistant roles, optional max_tokens and private request_id. Signed payments travel in params._meta["x402/payment"]. An unpaid invoice is an isError tool result.

GET /v1/models

Free catalog. Use data[].id and each model’s payment.pricing, payment requirements and limits. Missing pricing means “not published,” not free inference.

POST /v1/chat/completions

OpenAI-style JSON with an explicit model and messages. Use stream: false; paid output is buffered. Additional options depend on the upstream model.

Unsigned preparation returns 402 and a base64-encoded PAYMENT-REQUIRED header. The signed retry uses PAYMENT-SIGNATURE and the same private Idempotency-Key. Preserve the invoice URL in the signed payload’s resource. A successful response includes the answer, usage and PAYMENT-RESPONSE receipt.

GET /healthz

Free service liveness and deployment metadata. It does not prove inference availability or successful settlement.

GET /llms.txt

A concise contract for agents, including discovery, signing and recovery rules.