# quantum-bridge-mcp A zero-dependency MCP server for local OpenQASM 3.0 quantum circuit simulation. Runs as a single Rust binary — no Python, no cloud account required. Includes an interactive quantum-computing tutor with a built-in curriculum. ## Tools ### Simulation | Tool | Description | |------|-------------| | `list_backends` | List available simulation backends and their capabilities | | `validate_circuit` | Parse and validate an OpenQASM 3.0 circuit, returning structured diagnostics with line/column | | `run_circuit` | Execute a circuit on the local statevector simulator, returning measurement counts and optionally the full statevector | ### Tutor | Tool | Description | |------|-------------| | `get_lesson` | Get a quantum-computing lesson with concept, example circuit, and the next pending exercise | | `check_exercise` | Verify a submitted circuit against a curriculum exercise; returns pass/fail with feedback and records progress on success | | `explain_result` | Analyze a circuit and its measurement results into structured pedagogical data (gate breakdown, key concept, outcome stats) | | `get_progress` | Report the learner's progress through the curriculum (module status, current lesson, percent complete) | ## Usage with Claude Desktop Add to `~/.config/claude/claude_desktop_config.json`: ```json { "mcpServers": { "quantum-bridge": { "command": "/path/to/quantum-bridge-mcp" } } } ``` Then ask Claude things like: > "Simulate a Bell state circuit and show me the measurement counts." > "Validate this OpenQASM circuit and explain any errors." > "What backends are available for quantum simulation?" > "Give me the next quantum-computing lesson and an exercise to try." > "Check my circuit against the exercise and tell me how I did." ## Example circuit ```qasm OPENQASM 3.0; include "stdgates.inc"; qubit[2] q; bit[2] c; h q[0]; cx q[0], q[1]; c = measure q; ``` ## Supported gates `h`, `x`, `y`, `z`, `s`, `t`, `sdg`, `tdg`, `rx`, `ry`, `rz`, `cx`, `cz`, `swap`, `ccx`, `measure` Maximum: **28 qubits** (statevector memory = 2ⁿ × 16 bytes; 25 qubits ≈ 512 MB). ## Build Requires Rust stable (1.70+). ```bash cargo build --release ``` The binary is at `target/release/quantum-bridge-mcp`. ### Optional: f32 mode 30% faster, supports one extra qubit at equal RAM, negligible precision loss: ```bash cargo run --release -- --f32 ``` ## Test ```bash # Unit + integration tests cargo test # Property-based tests (slow — runs 256 cases per property) cargo test --test proptest_invariants # All checks (required before commit) cargo fmt --check && cargo clippy -- -D warnings && cargo test ``` ## Benchmark ```bash cargo bench ``` Baseline timings on a modern x86_64 (Criterion median): - `bell_1024_shots` — ~74 µs - `10_qubits_1k_shots` — ~169 µs - `20_qubits_100_shots` — ~18.7 ms All comfortably within the SLA targets (Bell < 5 ms, 20 qubits < 500 ms). ## Architecture ``` src/ main.rs — tokio async entry point, rmcp stdio server lib.rs — public crate API error.rs — BridgeError (thiserror) types.rs — QubitIndex, ShotCount, CircuitSource, ValidationResult, SimulationResult executor.rs — Backend traits + LocalSimulator (spinoza statevector engine) validator.rs — CircuitValidator (oq3_semantics OpenQASM 3 parser) circuit_analyzer.rs — AST-based gate breakdown + concept extraction for explain_result tutor.rs — CurriculumLoader, lesson/exercise model (curriculum/curriculum.json) progress.rs — ProgressStore (sandboxed JSON, QB_PROGRESS_PATH override) tools/ mod.rs — QuantumBridgeServer (rmcp tool_router) list_backends.rs validate_circuit.rs run_circuit.rs tutor_tools.rs — get_lesson / check_exercise / explain_result / get_progress handlers curriculum/ curriculum.json — 7 modules of lessons + exercises (embedded at compile time) tests/ mcp_protocol.rs — JSON-RPC roundtrip integration tests proptest_invariants.rs — quantum invariants (normalisation, statevector norm, bitstring length) tutor_integration.rs — tutor tool roundtrips, progress persistence reference/tutor/ — golden pass/fail exercise submissions (JSONL) benches/ simulation.rs — Criterion benchmarks ``` **Backend trait:** `executor.rs` defines `CanIntrospect + CanValidate + CanExecute`. Tools depend on `&dyn Backend`, never on `LocalSimulator` directly — adding an IBM backend in V1.5 requires no changes to tool code. ## Tech stack - [`rmcp`](https://github.com/modelcontextprotocol/rust-sdk) — MCP SDK (stdio transport) - [`oq3_semantics`](https://crates.io/crates/oq3_semantics) — Official Qiskit OpenQASM 3 parser in Rust - [`spinoza`](https://github.com/QuState/spinoza) — Pure Rust statevector simulator (vendored, stable Rust patch) - `tokio`, `serde`, `thiserror`, `tracing` ## Environment variables | Variable | Description | |----------|-------------| | `RUST_LOG=debug` | Enable debug tracing to stderr | | `QB_PROGRESS_PATH` | Override the tutor progress file (default: `~/.config/quantum-bridge-mcp/progress.json`) | | `IBM_QUANTUM_TOKEN` | IBM Quantum token (V1.5 only, unused in V1) | ## License MIT