Files
Vincent Bourdon 9af114e391 Initial import
2026-06-09 16:14:55 +02:00

158 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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