Documentation

MCP key with spending limits

An MCP key with the owner’s limits.

An MCP key with the owner’s limits

Give an agent access to SingIt without giving it a wallet. The key's daily and per-request caps are enforced by SingIt's server for calls made with that key to SingIt's MCP and the same key's /v1 endpoint. They do not limit what an agent spends anywhere else. SingIt's contracts do not protect other people's agents' own wallets.

1. Set up the allowance and make a key

Open the app. Set up a SingIt allowance from your wallet: a Base limiter or Solana delegation. Paid MCP search and data tools need it. Without it, the tool says “Set up your allowance first.” Then open Settings → API keys. Your wallet signs the name, daily limit, per-request limit and duration. Example terms: $1 a day, $0.05 a request, 7 days.

The daily limit is $0.01–$1000 (default $5). The per-request default is $0.25 and cannot exceed the daily limit. Duration is 1–365 days (default 90). Up to 10 active keys per account. The key is shown once and stored only as a hash. Read it from SINGIT_API_KEY in your client environment. Never put it in chat or logs.

2. Add the server to your client

Use Streamable HTTP. Choose your client. Set SINGIT_API_KEY securely before launching it.

Claude Code

Verification: Repository configuration example; not run live.

claude mcp add --transport http singit https://app.singitai.app/mcp --header 'Authorization: Bearer ${SINGIT_API_KEY}'

Single quotes keep ${SINGIT_API_KEY} as a reference so the key is not written into Claude Code's configuration.

Codex

Verification: Repository configuration example; not run live.

codex mcp add singit --url https://app.singitai.app/mcp --bearer-token-env-var SINGIT_API_KEY

Cursor

Add this to ~/.cursor/mcp.json, then restart Cursor.

Verification: Repository configuration example; not run live.

{
  "mcpServers": {
    "singit": {
      "url": "https://app.singitai.app/mcp",
      "headers": {
        "Authorization": "Bearer ${env:SINGIT_API_KEY}"
      }
    }
  }
}

3. Read the limits

Call get_limits. It is free with a key. Read today’s spend, held amounts for calls still running, remaining daily budget and expiry. get_receipts reports receipts.

4. Search

Call web_search with a query. Search and read_page are paid per call, need the search scope, and work on Base or Solana. Data tools need the tools scope and are Base only for now. New keys include both scopes; keys made before data tools existed need a new key. MCP allows 60 requests a minute per key.

See it refuse

Make a demo key with a $0.01 daily limit and a $0.01 per-request limit. The first web_search goes through: a search costs about a cent or less; the receipt shows the exact amount. The next search is refused once the daily limit would be exceeded. The demo costs under a cent. Before a paid call, the server adds today’s spend, what calls still running may cost, and the most this call may cost. If that exceeds the daily cap, the tool returns isError true. Nothing is bought or charged for the refused call.

For the $0.01 key, the exact refusal is:

This key's daily limit of 0.01 USDC is used up, counting requests still running. It starts again at 00:00 UTC, or raise it with a new key.

Verification: derived from the code and its unit tests; not run live.

Revoke the key

In the app, Settings → API keys, revoke the key. Revocation needs no wallet signature and is immediate. A wrong or revoked key gets HTTP 401. A missing, empty or unexpanded-variable header is keyless: free tools only. The key cannot move funds or change limits.

Base and Solana

On Base the owner’s allowance limiter is an on-chain contract the owner can pause. On Solana the key caps are checked by SingIt’s server and the owner’s control is revoking the delegation. There is no on-chain emergency stop. A paused Solana account is unpaused only by a new grant signed after the pause. See Limits and Security.

What it does not do

The key's daily and per-request caps are enforced by SingIt's server for calls made with that key to SingIt's MCP and the same key's /v1 endpoint. They do not limit what an agent spends anywhere else. SingIt's contracts do not protect other people's agents' own wallets.

The key does not impose a budget on another service or on an agent’s own wallet. Start without a key using get_price, list_price_symbols or list_models.