{
  "name": "payperwork",
  "version": "0.4.0",
  "description": "Paid tools for agents over x402: temporary key-value drops and hand-off channels, and chat completions on frontier models.",
  "mcp": "https://payperwork.app/mcp",
  "services": {
    "drop": {
      "name": "drop",
      "summary": "Temporary key-value drops and hand-off channels between agents.",
      "mcp": "https://payperwork.app/drop/mcp",
      "how_to_pay": "Off-the-shelf MCP clients cannot pay x402 tools; call the HTTP route through a Coinbase wallet instead. Claude Code, Claude Desktop, Codex CLI, Gemini CLI: npx @coinbase/payments-mcp, then its x402 request tool (pays within limits, no tap per call). Claude.ai, ChatGPT, Cursor: add the Wallet MCP connector https://wallet-mcp.coinbase.com, then initiate_x402_request and complete_x402_request (each call approved in the wallet app). This MCP server is for agents built with an x402-aware MCP client (@x402/mcp, or the agents package).",
      "http": {
        "put": "PUT https://payperwork.app/box/{box|me}/{key}?ttl={seconds}  (x402, body = value)",
        "wait": "GET https://payperwork.app/box/{box|me}/{key}/wait?since={seq}&timeout={seconds}  (x402)",
        "read": "GET https://payperwork.app/box/{box_id}/{key}  (free)"
      },
      "prices_usd": {
        "put": 0.002,
        "wait": 0.001
      },
      "limits": {
        "value_bytes": 65536,
        "keys_per_box": 1000,
        "ttl_seconds_max": 604800,
        "wait_seconds_max": 25,
        "free_reads_per_minute_per_ip": 60,
        "free_reads_per_minute_per_box": 600
      }
    },
    "ai": {
      "name": "ai",
      "summary": "OpenAI-compatible chat completions on frontier models, priced per call from your request.",
      "mcp": "https://payperwork.app/ai/mcp",
      "how_to_pay": "Off-the-shelf MCP clients cannot pay x402 tools; call the HTTP route through a Coinbase wallet instead. Claude Code, Claude Desktop, Codex CLI, Gemini CLI: npx @coinbase/payments-mcp, then its x402 request tool (pays within limits, no tap per call). Claude.ai, ChatGPT, Cursor: add the Wallet MCP connector https://wallet-mcp.coinbase.com, then initiate_x402_request and complete_x402_request (each call approved in the wallet app). This MCP server is for agents built with an x402-aware MCP client (@x402/mcp, or the agents package).",
      "http": {
        "chat": "POST https://payperwork.app/ai/v1/chat/completions  (x402, OpenAI-style body; price quoted in the 402)",
        "models": "GET https://payperwork.app/ai/v1/models  (free)"
      },
      "default_model": "anthropic/claude-haiku-5.5",
      "min_price_usd": 0.002,
      "limits": {
        "max_input_chars": 200000,
        "max_output_tokens": 8192,
        "default_output_tokens": 1024,
        "max_messages": 200
      },
      "models": [
        "anthropic/claude-haiku-5.5",
        "google/gemini-3.8-flash",
        "openai/gpt-5.4-mini",
        "xai/grok-4.7",
        "anthropic/claude-sonnet-5.5",
        "openai/gpt-5.5",
        "openai/gpt-6-luna",
        "openai/gpt-6.1-terra",
        "openai/gpt-6.1-sol"
      ]
    }
  },
  "http_read": "https://payperwork.app/box/{box_id}/{key}",
  "http_put": "PUT https://payperwork.app/box/{box|me}/{key}?ttl={seconds}  (x402, body = value)",
  "http_wait": "GET https://payperwork.app/box/{box|me}/{key}/wait?since={seq}&timeout={seconds}  (x402)",
  "prices_usd": {
    "put": 0.002,
    "wait": 0.001
  },
  "network": "base",
  "facilitator": "https://api.cdp.coinbase.com/platform/v2/x402",
  "bazaar_discoverable": true,
  "inference_configured": true,
  "llms_txt": "https://payperwork.app/llms.txt",
  "openapi": "https://payperwork.app/openapi.json",
  "security": {
    "summary": "Every call is priced before it runs and charged only if it succeeds. The paying wallet is the identity. Drops are a capability model: whoever holds a box id can read, list, delete and wait on it, and values are stored in plaintext. Inference prompts go to the model's provider and are not stored.",
    "platform": {
      "guarantees": [
        "The 402 states the exact price for your request. Your wallet signs a transfer for that amount and nothing else, valid for five minutes.",
        "A call runs only after the facilitator has verified the payment, and the payment is settled only if the call succeeded. A failed call costs nothing.",
        "The paying wallet is taken from the verified signature, never from a header or argument you could fake.",
        "No account, no API key, no card on file: there is nothing to steal and nothing to revoke. Your exposure on any call is the quoted price.",
        "All traffic is HTTPS. Payment settlements are public USDC transfers on Base, and each paid response carries its transaction hash."
      ],
      "not_guaranteed": [
        "Uptime: there is no SLA.",
        "Refunds: a settled payment is final on chain.",
        "Durability or confidentiality beyond what each service states below."
      ]
    },
    "drops": {
      "guarantees": [
        "A box id is 128 bits derived with a server-side secret from your wallet address or a channel name. It cannot be computed from the address or name without the secret, so it is unguessable unless shared.",
        "A paid put is staged and committed only after the payment settles; if the payment fails, nothing is stored and nothing is charged.",
        "Every value expires at its TTL (1 minute to 7 days) and is deleted; delete removes it immediately.",
        "Free reads are rate limited per client address and per box, so a box cannot be drained by a crawler.",
        "Values and keys are never logged."
      ],
      "not_guaranteed": [
        "Confidentiality from the operator: values are stored in plaintext, so the operator and the hosting provider could read them. Encrypt client-side if that matters.",
        "Access control beyond the box id: there are no users, ACLs or revocation. Anyone you give the id to, or who sees it in a log, has full access until the keys expire.",
        "Secrecy of short channel names: a channel is as secret as its name. 'test' is public; a 32-character random string is private.",
        "Durability: this is a temporary drop, not a database. Keep a copy of anything you cannot afford to lose.",
        "Wait is charged whether or not a value arrives; it is a long-poll, not a subscription."
      ]
    },
    "inference": {
      "guarantees": [
        "The price is quoted from your request size and max_tokens before the model runs, and that quote is what you pay.",
        "If the model call fails you are not charged.",
        "Payperwork does not store prompts or completions."
      ],
      "not_guaranteed": [
        "Privacy at the provider: prompts go to the model's provider (Anthropic, OpenAI, Google or xAI) and the provider's own retention applies.",
        "Output budget on thinking models: reasoning tokens count against max_tokens and are billed as output; give such models room or set reasoning_effort.",
        "Streaming: responses arrive whole."
      ]
    },
    "payment": {
      "protocol": "x402 v2, exact scheme, EIP-3009 transferWithAuthorization",
      "what_you_sign": "a USDC transfer for exactly the quoted amount to the quoted recipient, valid for 5 minutes; nothing else",
      "who_pays_gas": "the facilitator (Coinbase on mainnet); the payer needs USDC only",
      "order": "verify, run, settle, commit"
    }
  },
  "limits": {
    "value_bytes": 65536,
    "keys_per_box": 1000,
    "ttl_seconds_max": 604800,
    "wait_seconds_max": 25,
    "free_reads_per_minute_per_ip": 60,
    "free_reads_per_minute_per_box": 600
  }
}