{
  "serverInfo": {
    "name": "WhiteMagic Hosted Recall",
    "version": "9.3.0"
  },
  "description": "Read-only recall over a curated public corpus — the hosted evaluation lane for WhiteMagic. Keyless discovery; free evaluation keys (50 recalls/day, no account), OAuth 2.1, pay-per-call x402 in USDC on Base. No user memories: the corpus is deliberately published material.",
  "authentication": {
    "schemes": [
      {
        "type": "bearer",
        "description": "Free evaluation key (50 recalls/day, no account) at https://mcp.whitemagic.dev/keys — or an invoiced key. Authorization: Bearer <key> or X-WM-Key."
      },
      {
        "type": "oauth2",
        "description": "OAuth 2.1 + PKCE with dynamic client registration: discover at https://mcp.whitemagic.dev/.well-known/oauth-protected-resource (50 recalls/day per grant, no account).",
        "status": "live"
      },
      {
        "type": "x402",
        "description": "Multi-tier session leases in USDC on Base mainnet: $0.002 for a 1-minute call, $0.01 for a 5-minute task lease, $0.05 for a 15-minute swarm lease, $0.50 for a 24-hour day pass. Rate limit: 10,000 RPM on a session pass. Free paths, no account required: POST /faucet for a 10-minute trial pass (1/day per IP/address), a free evaluation key (50 recalls/day) at https://mcp.whitemagic.dev/keys, or header X-WM-Trial: 1 for 10 calls/day.",
        "status": "live"
      },
      {
        "type": "session_pass",
        "description": "Stateless HMAC session pass (Authorization: Bearer <wm_pass_...> or X-Session-Pass). Issued on x402 payment, valid for high-throughput calls (10,000 RPM).",
        "status": "live"
      }
    ]
  },
  "capabilities": {
    "tools": {
      "listChanged": false
    }
  },
  "transport": {
    "type": "streamable-http",
    "url": "https://mcp.whitemagic.dev/mcp"
  },
  "tools": [
    {
      "name": "wm",
      "description": "WhiteMagic meta-tool: governed recall and session continuity over the curated public corpus (route=<exact tool id> or thought=<natural language>)."
    },
    {
      "name": "memory.search_batch",
      "description": "Execute multiple memory search queries concurrently in a single turn. Unpacks up to 10 queries, searches the curated corpus, and returns consolidated results."
    },
    {
      "name": "memory.search",
      "description": "Search and recall memories using hybrid semantic, BM25, and associative retrieval."
    },
    {
      "name": "memory.read",
      "description": "Retrieve a specific memory by ID."
    },
    {
      "name": "memory.list",
      "description": "List memories with filters (galaxy, tags, limit, offset)."
    },
    {
      "name": "memory.hybrid_recall",
      "description": "Fused recall across full-text, vector, graph, and coordinate lookup."
    },
    {
      "name": "session.continuity",
      "description": "Recall where the previous session left off."
    },
    {
      "name": "memory.revisions",
      "description": "List or verify a memory's content revision chain (tamper evidence)."
    },
    {
      "name": "receipts.verify",
      "description": "Verify a stored receipt id or a bundle offline; fail-closed without an anchor (verdict PROVISIONAL)."
    },
    {
      "name": "memory.count",
      "description": "Count memories matching optional filters without returning content."
    },
    {
      "name": "memory.stats",
      "description": "Memory-store statistics: totals, galaxy spread, and index health."
    },
    {
      "name": "memory.tags",
      "description": "List the tag vocabulary with usage counts."
    },
    {
      "name": "memory.aggregate",
      "description": "Aggregate a field over matched memories (count/sum/avg/min/max)."
    },
    {
      "name": "memory.associations",
      "description": "Associative neighbours of a memory (spreading activation)."
    },
    {
      "name": "memory.batch_read",
      "description": "Read several memories by id in one call."
    },
    {
      "name": "memory.query",
      "description": "Structured query over memories with filters and ordering."
    },
    {
      "name": "memory.filter",
      "description": "Filter memories by metadata (tags, importance, recency)."
    },
    {
      "name": "memory.nearby",
      "description": "Memories near a coordinate address (5D neighbourhood)."
    },
    {
      "name": "memory.vector.search",
      "description": "Vector-similarity search over memory embeddings."
    },
    {
      "name": "session.list",
      "description": "List sessions with titles and summaries."
    },
    {
      "name": "session.recall",
      "description": "Recall a session's turns without continuity packaging."
    },
    {
      "name": "session.replay",
      "description": "Replay a session's recorded turns in order."
    },
    {
      "name": "gnosis.status",
      "description": "Knowledge-surface status: galaxies, counts, and index health."
    },
    {
      "name": "gnosis.explain",
      "description": "Explain why a memory or route was selected (provenance)."
    }
  ],
  "policy": {
    "readOnly": true,
    "corpus": "curated public corpus only — no user stores and no personal memories; write-class tools are advertised for parity with the lifecycle catalog but refuse on this read-only lane",
    "rateLimit": "session passes: 10,000 RPM ($0.002/1m call, $0.01/5m task lease, $0.05/15m swarm lease, $0.50/24h day pass); free evaluation keys 50/day; POST /faucet for a 10-minute trial pass (1/day per IP/address); keyless discovery + 10/day no-key trial (X-WM-Trial: 1)",
    "governance": "content-free audit lines per request; keyless discovery methods: initialize, tools/list, prompts/list, resources/list, ping"
  }
}
