API overview
Generated by npm run next through configure { kind: 'api' } on 2026-10-25: what this tree serves, as platform.claude.com's overview is for the Claude API — one endpoint and every surface around it, read from the handler and the Worker, never written by hand.
Version 1.4.0 · https://qpu.uuidna.com · https://qpu.psg.bg · https://qpu.ceci.workers.dev
Architecture
Everything goes through one MCP endpoint: POST /mcp takes JSON-RPC 2.0 (initialize, tools/list, tools/call); every tools/call result is a block addressed by its content, and every other surface serves or carries blocks. No hardware, no network inside the tools, nothing factored beyond N ≤ 21.
Endpoints
| Method | Path | Takes | Answers | Authorization |
|---|---|---|---|---|
| POST | /mcp | JSON-RPC 2.0: initialize, tools/list, tools/call { name, arguments } | the result with structuredContent and _meta (widget, block, theme, jsonLd, payload, license); ETag the content hash, X-Qpu-Address the block address, X-Qpu-Version — errors: JSON-RPC -32601 (no such tool or method), -32602 (invalid params, with the bound the schema names), -32700 (parse error) | none for every pure tool; a tenant's tokens only for the docket |
| GET | /.well-known/qpu.json | nothing | the discovery document: mcp, docket, methods, tools, bounds, version, tenants, mcpHosts, roles, licence, the reverse (the unit) | none |
| GET | / | accept: application/json for the discovery document; otherwise the web OS | the discovery document or the site | none |
| GET | /<uuid> or /u/<uuid> | a content-addressed v8 UUID | the block's page (the widget, prev and next, the theme from the UUID); immutable, ETag the address, 304 to If-None-Match | none |
| GET | /docket | ?kind=&since= | the tenant's entries (one docket per tenant host) | none to read |
| GET | /docket/<id> | an entry id; ?cheap, ?heal | the entry, healed from a mirror by address when missing | none to read |
| POST | /docket | { kind, from, body, links? } or a commitment { kind, from, address, sha256 } | 201 with the entry id (content address); 400 on shape, 413 above the entry bound | Bearer: the tenant's writer token (QPU_WRITE_TOKEN_<TENANT>) or the RBAC MCP host's role |
| DELETE | /docket/<id> | an entry id | the entry gone | Bearer: the tenant's admin token |
| POST | /docket/stripe | a Stripe webhook, signed | the event as an entry, idempotent | STRIPE_WEBHOOK_SECRET_<TENANT> |
| GET | /health | nothing | status, tenant, licence and the metrics computed now | none |
Headers
| Request | Response |
|---|---|
| content-type: application/json | etag: the content hash of the result (the clock masked) |
| accept: application/json or text/event-stream | x-qpu-address: the block address (uuidOf(tool + arguments)) |
| if-none-match: "<content hash>" — a 304 answers with no body when the block is the one held | x-qpu-version |
| authorization: Bearer <tenant token> (the docket's writes only) | cache-control: public, max-age=31536000, immutable on addressed replies |
| link: <https://uuidna.com/license>; rel="license" |
Authorization
- pure: every tool answers without a credential: the tools are pure functions of their arguments
- docket: roles reader, writer, admin per tenant: the RBAC MCP host first (QPU_RBAC_MCP, QPU_RBAC_TOOL), else the tenant's tokens by name; a token at another tenant's host holds no role there
- never: no key, token or secret travels through a tool; the client sends them, the tools name them
Content addressing and the involution
- address: uuidOf(tool + JSON(arguments)): the same arguments at any host give the same address
- hash: the content hash of the result with the clock masked: the same code gives the same hash at any host
- involution: a request naming the hash with If-None-Match is answered 304: the analog is verified digitally at the destination, nothing computed or sent
- versions: versions coexist: an earlier version's addresses answer beside the new one's
Tools
42 tools in 12 toolboxes; every tool's schema is in the MCP reference and every example in the textbook.
| Tool | Toolbox | What it answers |
|---|---|---|
processor | A Google Quantum AI processor as its spec sheet states it: qubits, the grid, the two chips, and the magic-state figures. | |
circuit | Compile a circuit from its operations, placed by an insert strategy, and simulate it. Without noise or observables: the | |
echo | Quantum Echoes: run the operations forward, perturb once, run them back, and return the probability that every qubit ret | |
echo_benchmark | The Quantum Echoes result as Google states it: the processor, its qubits, the speedup, and the molecules. | |
roadmap | The Google Quantum AI roadmap: its six milestones, their physical-qubit scale, and which are achieved or in progress. Wi | |
algorithm | The textbook algorithms of the Cirq page: qft and inverse_qft (on 1 to 6 qubits, from input x), phase_estimation (of θ w | |
software | The open-source tools of the Google Quantum AI Software page, as the page describes them. Only Cirq is implemented in th | |
statements | The statements quantumai.google, its PDFs and the quantumlib repositories make, each as the page states it: Cirq, the de | |
repositories | The repositories of the quantumlib GitHub organization, as its list states them: name, description and primary language. | |
quantumlib | The fifteen repositories of the quantumlib GitHub organization, each with what this repository implements of it: the exp | |
quantum-error-correction | The three-qubit repetition code, simulated on the density matrix: a logical qubit encoded, a channel (bit_flip, phase_fl | |
chemistry-simulation | Molecular hydrogen in STO-3G as a variational energy evaluation on the simulator: the integrals are computed here from t | |
fault-tolerant-design | Resource counts read from the circuits this repository builds: the QFT on n qubits, Grover, teleportation, Shor for N up | |
leads | tree | Every lead on quantumai.google (every page of its sitemap, read whole), its PDFs and the quantumlib repositories, with i |
audit | tree | The surface audits itself through tools/call: every tool has a schema and an example, every documented example replays a |
match | tree | Any statement, matched against everything the surface can do. served: a call answers it and is returned. impossible: the |
clay | tree | The Clay register recomputed in exact integer arithmetic: the Lean definitions of Qpu/Clay.lean and its imports ported o |
verify | tree | Cheap verification of one UUID: its seal (the version nibble the other 31 nibbles decide, one modular power, no content |
metrics | tree | The computable metrics of this tree in real time: tools and toolboxes, examples and how many name the kernel-accepted th |
textbook | tree | The QPU textbook as an adapter: every example categorised for reuse — by toolbox, by tool, by the kernel-accepted theore |
css | tree | The quantum UI as CSS alone: the stylesheet derived from the key 432 (the harmonics, and the rules that draw every block |
dashboard | tree | A bounded tool laid out whole, so the user's decision in the UI is final: every value each property admits (an enum, a b |
clone | tree | A toolbox cloned whole: its toolset (every tool's name, description and schema), its skillset (idea, instructions, direc |
discover | flow | Discovery before use. Without answers: every request the client must make for the contracts of the hosts this tree talks |
wave | flow | The verification wave. Without results: every request the surface's leads and tree facts need, once per URL with the lea |
readiness | flow | The unit judges the tree. Phase one (verification, discovery, present, ledger): every lead judged by measurement into se |
imagine | flow | Imagination leads all leads: every lead (or the subset named) matched with the reflection on — hidden factors, angles, m |
e2e | flow | The end-to-end gate as a repetition code. Without answers: every combination the dashboards lay out and every example of |
shard | flow | A long single task split into short multitasks: the share of a list among n shards (index, count) is every item whose po |
translate | language | Translation by vocabulary, offline, both ways: text, from, to. A word no table knows stays as it is and is reported, nev |
prose | language | Programmable prose: call a tool with its arguments and render its result as sentences in a locale — the toolbox's idea, |
mongo | raid | The ported MongoDB over the docket, pure. find: {collection, docs, filter, sort, skip, limit} → the matching documents ( |
stripe | billing | Stripe per tenant, pure, the QPU as a product with its variants. catalogue: every product and variant (domain, tenant, s |
legal | legal | The full legal and security audit with forensic analysis, through MCP. Phase one (texts, discovery, agents?, theoremKeys |
repository | repository | Workspaces, branches, tags and releases watched and verified online, pure. Phase one (local): the requests to GitHub (br |
jsonld | standards | schema.org JSON-LD, pure: for a block (tool, id, description), a page (url, title, description, uuid?) or an offer of th |
codes | standards | The tree's ISO codes validated against the CLDR lists a client fetched (languages ISO 639, currencies ISO 4217, territor |
payload | payload | Any tool's result as the document Payload's default plugins hold, no custom collection: a lexical document whose one blo |
configure | payload | MCP configures Payload and the rest: Payload's default plugins (lexical with the one qpu block, nested-docs, seo, search |
extend | extension | QPU as the natural extension of every MCP and every MCP of QPU. Inward (host, tools): the host's tools/list read into do |
fold | crypto | The split folds: a payload larger than a place can hold is folded into pieces under the bound (bytes), each addressed by |
seal | crypto | SHA-256 of a text, and HMAC-SHA256 under a key the caller gives (a test key; a tenant's secret never travels here), pure |
The MCP connector
A Claude request mounts this catalogue through the Messages API's MCP connector (both halves, the server and its toolset):
{
"endpoint": "https://api.anthropic.com/v1/messages",
"betas": [
"mcp-client-2025-11-20"
],
"mcp_servers": [
{
"type": "url",
"url": "https://qpu.uuidna.com/mcp",
"name": "qpu"
}
],
"tools": [
{
"type": "mcp_toolset",
"mcp_server_name": "qpu"
}
]
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Any other MCP client mounts it as:
{
"mcpServers": {
"qpu": {
"url": "https://qpu.uuidna.com/mcp"
}
}
}2
3
4
5
6
7
Quick tests
list the tools:
curl -s https://qpu.uuidna.com/mcp -X POST -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'the Clay register read by reflection:
curl -s https://qpu.uuidna.com/mcp -X POST -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"clay","arguments":{"technique":"reflection"}}}'the involution: ask with the hash and receive 304:
curl -si https://qpu.uuidna.com/mcp -X POST -H 'content-type: application/json' -H 'if-none-match: "<etag of the reply above>"' -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"clay","arguments":{"technique":"reflection"}}}'the discovery document:
curl -s https://qpu.uuidna.com/.well-known/qpu.jsonLimits
- shorN: 21
- qubits: 6
- entry: the docket's entry bound (413 above it; fold splits what a place cannot hold)
- quantum: a client's run stops at QPU_QUANTUM_MS and keeps what it settled
Errors
| Code | Means |
|---|---|
| -32601 | no such tool or method; the answer names the tools |
| -32602 | invalid params; the answer names the bound the schema sets |
| -32700 | parse error |
| HTTP 304 | the block held is the block asked: nothing sent |
| HTTP 400 | an entry's shape refused, named |
| HTTP 401 | a token with no role at this tenant |
| HTTP 413 | an entry above the bound: fold it |