wai-quantum: the job service on the MCP Registry, and wai-quantum-cli 0.2.1 for the command line's listing #528

Merged
dcharlot merged 2 commits from wai/quantum-mcp-registry into main 2026-10-29 03:19:36 -04:00
10 changed files with 23 additions and 19 deletions

View file

@ -6,6 +6,18 @@ wire format may change and such changes are recorded here.
## Unreleased ## Unreleased
### wai-quantum-cli 0.2.1: the command line on the MCP Registry
This release changes no code; `wai-quantum-cli` 0.2.1 is 0.2.0 with the README line the MCP Registry reads.
- **The MCP Registry lists the job service** as `science.transaction.wai/quantum-jobs` 0.2.0, its endpoint
`https://wai.transaction.science/quantum-jobs/mcp`, under the namespace that
`https://wai.transaction.science/.well-known/mcp-registry-auth` proves.
- **The command line's README carries the `mcp-name` line** that the registry reads from a crate's README to
list `science.transaction.wai/quantum`. 0.2.0's README lacks it, and the registry refused that entry.
- **Both `server.json` files drop `repository`**, which the registry refuses for the forge's address.
- The desktop app requires 0.2.1, and both lockfiles that hold `wai-quantum-cli` move with it.
## v0.4.0 ## v0.4.0
### One catalogue of operations, the agent rules on every command, and the service binaries named `wai-*` ### One catalogue of operations, the agent rules on every command, and the service binaries named `wai-*`

View file

@ -1133,7 +1133,7 @@ dependencies = [
[[package]] [[package]]
name = "wai-quantum-cli" name = "wai-quantum-cli"
version = "0.2.0" version = "0.2.1"
dependencies = [ dependencies = [
"clap", "clap",
"clap_complete", "clap_complete",

View file

@ -1,6 +1,6 @@
[package] [package]
name = "wai-quantum-cli" name = "wai-quantum-cli"
version = "0.2.0" version = "0.2.1"
edition = "2024" edition = "2024"
rust-version = "1.97" rust-version = "1.97"
license = "Apache-2.0" license = "Apache-2.0"

View file

@ -1,5 +1,7 @@
# wai-quantum # wai-quantum
<!-- The MCP Registry reads this line from the crate's README to list the server: mcp-name: science.transaction.wai/quantum -->
The command line of the WAI quantum stack. It runs OpenQASM programs on this machine, planned and run by the same engine as the quantum job service ([`wai_quantum::engine`](../wai-quantum/src/engine/mod.rs)), so a job gives the same result here as there. It also sends programs to the service, checks and draws them, verifies receipts, and serves its tools to agents over MCP. The command line of the WAI quantum stack. It runs OpenQASM programs on this machine, planned and run by the same engine as the quantum job service ([`wai_quantum::engine`](../wai-quantum/src/engine/mod.rs)), so a job gives the same result here as there. It also sends programs to the service, checks and draws them, verifies receipts, and serves its tools to agents over MCP.
## Installing it ## Installing it
@ -394,7 +396,7 @@ wai-quantum mcp install --file PATH # merged into the JSON configura
{ "mcpServers": { "wai-quantum": { "command": "wai-quantum", "args": ["mcp"] } } } { "mcpServers": { "wai-quantum": { "command": "wai-quantum", "args": ["mcp"] } } }
``` ```
`install` keeps every other entry and key, in its order, and writes the file whole or not at all. It refuses a file that is not a JSON object (one with comments included), and refuses to replace a different `wai-quantum` entry unless you pass `--force`. `--command` gives the full path of `wai-quantum` for a client that does not search your PATH, and `--name`, `--memory-gb` and `--key` shape the entry. [`server.json`](server.json) describes the server in the MCP registry's format; it has not been submitted. `install` keeps every other entry and key, in its order, and writes the file whole or not at all. It refuses a file that is not a JSON object (one with comments included), and refuses to replace a different `wai-quantum` entry unless you pass `--force`. `--command` gives the full path of `wai-quantum` for a client that does not search your PATH, and `--name`, `--memory-gb` and `--key` shape the entry. [`server.json`](server.json) describes the server in the MCP Registry's format, as `science.transaction.wai/quantum`.
### Instructions for coding agents ### Instructions for coding agents

View file

@ -387,7 +387,7 @@ wai-quantum mcp install --file PATH # 合并到客户端读取的 JS
{ "mcpServers": { "wai-quantum": { "command": "wai-quantum", "args": ["mcp"] } } } { "mcpServers": { "wai-quantum": { "command": "wai-quantum", "args": ["mcp"] } } }
``` ```
`install` 保留其他所有条目和键及其顺序,并且要么完整写入文件,要么完全不写。它拒绝不是 JSON 对象的文件(包括带注释的文件),并且除非你传入 `--force`,否则拒绝替换另一个不同的 `wai-quantum` 条目。对于不搜索你的 PATH 的客户端,`--command` 给出 `wai-quantum` 的完整路径;`--name`、`--memory-gb` 和 `--key` 用于定制该条目。[`server.json`](server.json) 以 MCP 注册表的格式描述该服务器;它尚未提交。 `install` 保留其他所有条目和键及其顺序,并且要么完整写入文件,要么完全不写。它拒绝不是 JSON 对象的文件(包括带注释的文件),并且除非你传入 `--force`,否则拒绝替换另一个不同的 `wai-quantum` 条目。对于不搜索你的 PATH 的客户端,`--command` 给出 `wai-quantum` 的完整路径;`--name`、`--memory-gb` 和 `--key` 用于定制该条目。[`server.json`](server.json) 以 MCP 注册表的格式描述该服务器,名称为 `science.transaction.wai/quantum`。
### 给编程智能体的说明 ### 给编程智能体的说明

View file

@ -3,19 +3,14 @@
"name": "science.transaction.wai/quantum", "name": "science.transaction.wai/quantum",
"title": "WAI Quantum", "title": "WAI Quantum",
"description": "OpenQASM 3 programs run, checked against their intent and signed on this machine.", "description": "OpenQASM 3 programs run, checked against their intent and signed on this machine.",
"version": "0.2.0", "version": "0.2.1",
"websiteUrl": "https://wai.transaction.science/quantum-run/", "websiteUrl": "https://wai.transaction.science/quantum-run/",
"repository": {
"url": "https://git.transaction.science/Transaction-Science/open-standards",
"source": "forgejo",
"subfolder": "wai/wai-quantum-cli"
},
"packages": [ "packages": [
{ {
"registryType": "cargo", "registryType": "cargo",
"registryBaseUrl": "https://crates.io", "registryBaseUrl": "https://crates.io",
"identifier": "wai-quantum-cli", "identifier": "wai-quantum-cli",
"version": "0.2.0", "version": "0.2.1",
"transport": { "transport": {
"type": "stdio" "type": "stdio"
}, },

View file

@ -4143,7 +4143,7 @@ dependencies = [
[[package]] [[package]]
name = "wai-quantum-cli" name = "wai-quantum-cli"
version = "0.2.0" version = "0.2.1"
dependencies = [ dependencies = [
"clap", "clap",
"clap_complete", "clap_complete",

View file

@ -17,7 +17,7 @@ serde_json = { version = "1", features = ["float_roundtrip"] }
# The assistant's model server, called by the app (a local one by default). # The assistant's model server, called by the app (a local one by default).
ureq = { version = "3", features = ["json"] } ureq = { version = "3", features = ["json"] }
wai-quantum = { version = "0.7.0", path = "../wai-quantum", default-features = false, features = ["quantum_engine", "quantum_receipt", "quantum_toolchain", "quantum_qec", "quantum_noise"] } wai-quantum = { version = "0.7.0", path = "../wai-quantum", default-features = false, features = ["quantum_engine", "quantum_receipt", "quantum_toolchain", "quantum_qec", "quantum_noise"] }
wai-quantum-cli = { version = "0.2.0", path = "../wai-quantum-cli", default-features = false } wai-quantum-cli = { version = "0.2.1", path = "../wai-quantum-cli", default-features = false }
# The person's own providers: their registry, their credentials in the # The person's own providers: their registry, their credentials in the
# operating system's keychain, and runs on them sealed with the app's key. # operating system's keychain, and runs on them sealed with the app's key.
wai-quantum-qpu = { version = "0.3.0", path = "../wai-quantum-qpu" } wai-quantum-qpu = { version = "0.3.0", path = "../wai-quantum-qpu" }

View file

@ -198,7 +198,7 @@ The six checks answer at once, in the service's own process. Each counts against
A client whose `initialize` says its host draws interactive views (the extension `io.modelcontextprotocol/ui`, version 2026-01-26) gets the engine's answers as views, as from the command line's server: each tool that has one names its `ui://wai-quantum/*` resource, the six views are listed and read, and each answer carries what its view draws in its `_meta`. The service keeps no session, so the client's word is carried in the session id it is given at `initialize` (`wq-views-` and 32 random hex digits, kept nowhere), which a client sends back with every request (`Mcp-Session-Id`); a client that draws no views gets no session id and none of this. For a job still running when the run's wait ends, the result view follows it with `poll_quantum_job`, which the host keeps from the model (`visibility: ["app"]`); a model reads a job with `get_quantum_job`. A client whose `initialize` says its host draws interactive views (the extension `io.modelcontextprotocol/ui`, version 2026-01-26) gets the engine's answers as views, as from the command line's server: each tool that has one names its `ui://wai-quantum/*` resource, the six views are listed and read, and each answer carries what its view draws in its `_meta`. The service keeps no session, so the client's word is carried in the session id it is given at `initialize` (`wq-views-` and 32 random hex digits, kept nowhere), which a client sends back with every request (`Mcp-Session-Id`); a client that draws no views gets no session id and none of this. For a job still running when the run's wait ends, the result view follows it with `poll_quantum_job`, which the host keeps from the model (`visibility: ["app"]`); a model reads a job with `get_quantum_job`.
`server.json` beside this README describes the endpoint in the MCP registry's format; it has not been submitted. The command line's agent docs (`llms.txt`, `AGENTS.md`, the Agent Skill) list these tools from `wai/wai-quantum-cli/docs/service-mcp.json`, which this crate's tests hold to the live list. After changing a tool, run `WAI_QUANTUM_BLESS=1 cargo test mcp::` here, then regenerate the command line's docs (its README says how). `server.json` beside this README describes the endpoint in the MCP Registry's format; the registry lists it as `science.transaction.wai/quantum-jobs`. The command line's agent docs (`llms.txt`, `AGENTS.md`, the Agent Skill) list these tools from `wai/wai-quantum-cli/docs/service-mcp.json`, which this crate's tests hold to the live list. After changing a tool, run `WAI_QUANTUM_BLESS=1 cargo test mcp::` here, then regenerate the command line's docs (its README says how).
## Receipts ## Receipts

View file

@ -5,11 +5,6 @@
"description": "A free quantum job service: OpenQASM 3 run, checked and signed, with no account or key.", "description": "A free quantum job service: OpenQASM 3 run, checked and signed, with no account or key.",
"version": "0.2.0", "version": "0.2.0",
"websiteUrl": "https://wai.transaction.science/quantum-run/", "websiteUrl": "https://wai.transaction.science/quantum-run/",
"repository": {
"url": "https://git.transaction.science/Transaction-Science/open-standards",
"source": "forgejo",
"subfolder": "wai/wai-quantum-service"
},
"remotes": [ "remotes": [
{ {
"type": "streamable-http", "type": "streamable-http",