FlagQuantum MCP Server
PYPI · FLAGQUANTUM-MCP-SERVER
Build, compile, run and export FlagQuantum circuits locally. No credentials or outbound network.
Available components
Last scanned (18 hours ago)
Scores higher than 78% of PyPI servers
Category Developer Tools
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
- 1 of 37 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to FlagQuantum/mcp-servers). View diagnostics → Pass
- Clear OSI-approved license (Apache-2.0).Pass
- Actively maintained (last published 8 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability74
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 7349 tokens (~237/item across 31 items; 27 tools + 4 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage95
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 83% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "execute_local_capability_tool" implies "execute" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Fail
- An AI judge read all 29 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 28 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- 27 Oct 26 +15
- Malware scan: pass → unverified ▼ security
- Injection markers: unverified → pass ▲ security
- First check of Judged manipulation: pass security
- Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
- Tool coverage: unverified → 100 ▲ functional
- MCP protocol: unverified → pass ▲ functional
- Schema quality: unverified → 100 ▲ functional
- First check of Schema quality: fail functional
- First check of Tool coverage: 83 functional
- First check of Schema quality: fail functional
- First check of Destructive annotations: 0 functional
- First check of Schema quality: good functional
- First check of Tool coverage: 100 functional
- Package version: 0.3.1 → 0.3.2 functional
- 17 Oct 26 0
- Stability: Stability not yet verified: our sandbox could not run this package, so we have no schema to compare. security
- Tool safety: Tool safety not yet verified: our sandbox could not run this package, so we have no tool text to scan. security
- Schema quality: Schema quality not yet verified: our sandbox could not run this package, so we have no schema to assess. functional
- Capabilities: Protocol version not yet verified: our sandbox could not run this package, so we never saw its MCP handshake. functional
- Tool coverage: Tool coverage not yet verified: our sandbox could not run this package, so we have no tool definitions to assess. functional
- 16 Oct 26 0
- Tool safety: Tool safety not yet verified: we do not have a sandbox capture of the tool definitions this version of the package serves yet. security
- Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. security
- Capabilities: Protocol version not yet verified: we do not have a sandbox capture of the MCP handshake this version of the package performs yet. functional
- Tool coverage: Tool coverage not yet verified: we do not have a sandbox capture of the tool definitions this version of the package serves yet. functional
- Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. functional
- Package version: 0.3.0 → 0.3.1 functional
- 12 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- 8 Oct 26 −15
- Malware scan: pass → unverified ▼ security
- 28 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 4 Nov 2026 · Analysed pypi/flagquantum-mcp-server@0.3.2
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | pypi |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | FlagQuantum/mcp-servers |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/FlagQuantum/mcp-servers/.github/workflows/publish-pypi.yml@refs/heads/main |
| Rekor log index | 3512969706 |
| Predicate type | PyPI publish attestation https://docs.pypi.org/attestations/publish/v1 |
| Subject digest | sha256:3f52453418e1139134afe984f1286ba8933c1820d925d12b6ccb2c552734d74d |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 37 packages
| Packages resolved | 37 |
|---|---|
| Stale | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
analyze_circuit_tool ~302
Report gate counts, depth and wire usage for one circuit. Gate counts and depth are self-explanatory; the rest of the analysis is worth stating. wire_usage has one entry per wire, counting the instructions that touch it, so a two-qubit gate counts on both of its wires. two_qubit_gates counts width-2 instructions and multi_qubit_gates counts width-3-and-up, so a cx is two-qubit and not multi. max_gate_width is the widest single instruction, and channel_count counts instructions marked as channels in metadata, with has_noise being channel_count > 0.
| Name | Type | Req | Description |
|---|---|---|---|
| circuit | string | yes | Circuit payload. With circuit_format="qir" pass a gate list such as '[{"name": "h", "index": [0]}, {"name": "cx", "index": [0, 1]}]'. A gate carries its arguments under "parameters", so a rotation is… |
| circuit_format | string | – | "ir" for FlagQuantum IR JSON, "qir" for a gate list. |
Structured output declared, but exposes no named fields.
No examples provided.
bind_parameters_tool ~318
Substitute values for a circuit's parameters. The result is no longer parameterized, so it can be exported. Export is the only step that needed this: analysis, optimization, routing, drawing and plan_execution_tool all accept a parameterized circuit as-is, because none of them reads a parameter value. The values are yours to choose, and a chosen value is not a result: say which gates carry parameters and what values you assumed, whenever a number downstream depends on them. inspect_parameters_tool reports which gates carry a parameter and what it is named, so nothing has to be inferred.
| Name | Type | Req | Description |
|---|---|---|---|
| circuit | string | yes | Circuit payload. With circuit_format="qir" pass a gate list such as '[{"name": "h", "index": [0]}, {"name": "cx", "index": [0, 1]}]'. A gate carries its arguments under "parameters", so a rotation is… |
| circuit_format | string | – | "ir" for FlagQuantum IR JSON, "qir" for a gate list. |
| values | object | yes | One number per parameter name, for example {"theta": 0.5}. |
Structured output declared, but exposes no named fields.
No examples provided.
compare_topologies_tool ~261
Route one circuit onto several topologies and compare the cost. One entry per topology, each with its routed gate count, depth and SWAP overhead, plus which topology was cheapest on those measures.
| Name | Type | Req | Description |
|---|---|---|---|
| circuit | string | yes | Circuit payload. With circuit_format="qir" pass a gate list such as '[{"name": "h", "index": [0]}, {"name": "cx", "index": [0, 1]}]'. A gate carries its arguments under "parameters", so a rotation is… |
| circuit_format | string | – | "ir" for FlagQuantum IR JSON, "qir" for a gate list. |
| optimize_first | boolean | – | Optimize before routing. |
| strategy | string | – | "restore_after_each_gate" or "persistent_layout". |
| topologies | – | – | Topology kinds to compare; defaults to line, ring and grid. |
Structured output declared, but exposes no named fields.
No examples provided.
compile_circuit_tool ~273
Compile and optionally route a circuit through the complete SDK pipeline. Use this when the desired result is one deployable circuit rather than a topology comparison. With topology="none" the SDK only performs target-independent compilation. Choose line, ring, grid or custom to make every two-qubit gate legal on that connectivity in the same call.
| Name | Type | Req | Description |
|---|---|---|---|
| circuit | string | yes | Circuit payload. With circuit_format="qir" pass a gate list such as '[{"name": "h", "index": [0]}, {"name": "cx", "index": [0, 1]}]'. With circuit_format="ir" pass FlagQuantum IR JSON. OpenQASM is no… |
| circuit_format | string | – | "ir" for FlagQuantum IR JSON, "qir" for a gate list. |
| cols | – | – | Grid columns; see rows. |
| edges | – | – | Explicit wire pairs required by topology="custom". |
| optimize | boolean | – | Run target-independent optimization before routing. |
| routing_strategy | string | – | "restore_after_each_gate" or "persistent_layout". |
| rows | – | – | Grid rows; provide together with cols, or omit both to derive them. |
| topology | string | – | "none", "line", "ring", "grid" or "custom". |
Structured output declared, but exposes no named fields.
No examples provided.
describe_capability_tool ~69
Describe one exact installed research capability. Use the returned request, result, validator, target, limitation and schema identities; do not infer support from this tool description.
| Name | Type | Req | Description |
|---|---|---|---|
| capability_id | string | yes | Exact ID returned by search_capabilities_tool. |
| version | – | – | Optional exact capability version. |
Structured output declared, but exposes no named fields.
No examples provided.
describe_gate_set_tool ~92
Describe gates: wire count, parameter names, aliases and kind. Call this before writing a gate list by hand. A gate's signature is not part of the circuit format, so this is the only place to learn that ``rz`` takes one parameter named ``theta`` while ``u3`` takes three.
| Name | Type | Req | Description |
|---|---|---|---|
| gates | – | – | Gate names or aliases to describe. Omit to describe every gate. |
Structured output declared, but exposes no named fields.
No examples provided.
describe_layers_tool ~205
Decompose a circuit into the layers it can execute in. Gates in one returned layer run concurrently, so n_layers is the circuit's depth: it is the longest chain of gates that cannot be reordered.
| Name | Type | Req | Description |
|---|---|---|---|
| circuit | string | yes | Circuit payload. With circuit_format="qir" pass a gate list such as '[{"name": "h", "index": [0]}, {"name": "cx", "index": [0, 1]}]'. A gate carries its arguments under "parameters", so a rotation is… |
| circuit_format | string | – | "ir" or "qir". |
Structured output declared, but exposes no named fields.
No examples provided.
describe_topology_tool ~171
Describe a coupling map before routing onto it. For each requested pair the result gives the shortest path and its distance, where distance is the number of edges on that path — the number of SWAPs a naive route would need, so adjacent wires are distance 1. Omit ``pairs`` to measure adjacent wires.
| Name | Type | Req | Description |
|---|---|---|---|
| cols | – | – | Grid columns; see rows. |
| edges | – | – | Explicit wire pairs; required for "custom". |
| n_qubits | integer | yes | Number of wires the topology must hold. |
| pairs | – | – | Specific wire pairs to measure. Omit to measure adjacent wires. |
| rows | – | – | Grid rows; required for "grid", or derived when both are omitted. |
| topology | string | – | "line", "ring", "grid" or "custom". |
Structured output declared, but exposes no named fields.
No examples provided.
deserialize_circuit_tool ~95
Validate IR JSON and report whether it round-trips unchanged. ``round_trip_stable`` compares the text you sent against FlagQuantum's canonical serialization, which is compact. It is about your input, not about ``indent``: asking for indented output does not change it.
| Name | Type | Req | Description |
|---|---|---|---|
| indent | – | – | Optional indentation width for the canonical re-serialization. |
| ir_json | string | yes | FlagQuantum IR JSON text. |
Structured output declared, but exposes no named fields.
No examples provided.
draw_circuit_tool ~284
Draw a circuit as text. A symbol is rendered as the SDK's repr of it, so ``RY(theta)`` appears as ``RY(Parameter(name='theta'))``. That is the symbol, not a broken value: FlagQuantum's ``Parameter`` defines no ``__str__``.
| Name | Type | Req | Description |
|---|---|---|---|
| circuit | string | yes | Circuit payload. With circuit_format="qir" pass a gate list such as '[{"name": "h", "index": [0]}, {"name": "cx", "index": [0, 1]}]'. A gate carries its arguments under "parameters", so a rotation is… |
| circuit_format | string | – | "ir" or "qir". |
| decimals | integer | – | Digits shown per parameter. |
| line_width | integer | – | Maximum characters per wire line before the drawer wraps. |
| show_all_wires | boolean | – | Keep wires that carry no gate. |
| show_initial_state | boolean | – | Annotate each wire's initial state. |
Structured output declared, but exposes no named fields.
No examples provided.
emit_openqasm_tool ~273
Render a circuit as OpenQASM 2.0 or 3.0 text. The result measures every wire unless ``result_wires`` says otherwise, so the emitted text usually carries measurements that the source circuit does not. ``content_hash`` identifies that source circuit, not the text.
| Name | Type | Req | Description |
|---|---|---|---|
| circuit | string | yes | Circuit payload. With circuit_format="qir" pass a gate list such as '[{"name": "h", "index": [0]}, {"name": "cx", "index": [0, 1]}]'. A gate carries its arguments under "parameters", so a rotation is… |
| circuit_format | string | – | "ir" for FlagQuantum IR JSON, "qir" for a gate list. |
| result_wires | – | – | Wires to measure; omit to measure every wire. |
| version | number | – | OpenQASM version, 2.0 or 3.0. |
Structured output declared, but exposes no named fields.
No examples provided.
emit_qcis_tool ~251
Render a circuit as QCIS text. A circuit containing an arbitrary matrix gate comes back as an error rather than as text, because QCIS has no way to express one. Report that refusal rather than silently substituting a different gate: a circuit that exports successfully because a gate was swapped is not the circuit the caller wrote, and nothing in the text would say so.
| Name | Type | Req | Description |
|---|---|---|---|
| circuit | string | yes | Circuit payload. With circuit_format="qir" pass a gate list such as '[{"name": "h", "index": [0]}, {"name": "cx", "index": [0, 1]}]'. A gate carries its arguments under "parameters", so a rotation is… |
| circuit_format | string | – | "ir" for FlagQuantum IR JSON, "qir" for a gate list. |
Structured output declared, but exposes no named fields.
No examples provided.
estimate_capability_tool ~88
Estimate a bounded request with FlagQuantum before execution. The upstream estimate is authoritative; this adapter adds no quantum cost model. Stop if the returned estimate is not supported.
| Name | Type | Req | Description |
|---|---|---|---|
| capability_id | string | yes | Exact installed capability ID. |
| request | object | yes | Request object conforming to the installed input schema. |
| target | – | – | Optional target; the approved slice supports local-cpu only. |
Structured output declared, but exposes no named fields.
No examples provided.
evolve_dynamics_tool ~166
Return a time-resolved local Lindblad density-matrix trajectory. Uses the same contract as ``plan_evolution_tool``. The response has exactly one population row per requested time, requested observable trajectories, optional density matrices, maximum trace drift, a population-bound check, and honest numerical method/order/step-size/precision metadata. Execution is deterministic and local to this CPU process; it never contacts hardware or a provider.
| Name | Type | Req | Description |
|---|---|---|---|
| collapse_operators | array | yes | – |
| device | string | – | – |
| hamiltonian | array | yes | – |
| initial_state | – | yes | – |
| n_wires | integer | yes | – |
| observables | – | – | – |
| precision | string | – | – |
| return_density_matrices | boolean | – | – |
| times | array | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
execute_local_capability_tool ~126
Execute one validated capability on the bounded local CPU path. Pass provider_order exactly and explicitly authorize unavailable-only fallback when requesting more than one provider. This tool never reads credentials, submits hardware or accesses paid resources. Inspect the Evidence Bundle status and validators, then call validate_evidence_tool; transport success is not scientific success.
| Name | Type | Req | Description |
|---|---|---|---|
| capability_id | string | yes | Exact installed capability ID. |
| options | object | – | Upstream local execution options, including explicit provider order and fallback authorization. |
| request | object | yes | Request object conforming to the installed input schema. |
Structured output declared, but exposes no named fields.
No examples provided.
import_openqasm_tool ~190
Import OpenQASM 2 or 3 text as FlagQuantum IR. This is the inverse of emit_openqasm_tool: it turns OpenQASM text back into the ``ir`` form that compile_circuit_tool, route_circuit_tool and the other circuit tools accept, so an exported circuit can be fed back in without being rebuilt by hand. It reads the canonical subset FlagQuantum's own emitters write, which is why a round trip is exact. Text from another toolchain may be refused with code UNSUPPORTED_FORMAT and the importer's own message naming the statement and line; that is a property of the input, not a server fault, and the text is not silently rewritten to fit.
| Name | Type | Req | Description |
|---|---|---|---|
| indent | – | – | Optional indentation width for the returned IR JSON. |
| source | string | yes | The complete text of one OpenQASM program. |
Structured output declared, but exposes no named fields.
No examples provided.
inspect_parameters_tool ~239
Report whether a circuit is parameterized, and where each symbol sits. A symbol is written ``{"theta": {"$parameter": "theta"}}`` in either input format. A bare string is not a symbol: it is a value, and the circuit would report itself as unparameterized, so it is rejected instead.
| Name | Type | Req | Description |
|---|---|---|---|
| circuit | string | yes | Circuit payload. With circuit_format="qir" pass a gate list such as '[{"name": "h", "index": [0]}, {"name": "cx", "index": [0, 1]}]'. A gate carries its arguments under "parameters", so a rotation is… |
| circuit_format | string | – | "ir" for FlagQuantum IR JSON, "qir" for a gate list. |
Structured output declared, but exposes no named fields.
No examples provided.
optimize_circuit_tool ~183
Apply target-independent optimizations and report what changed.
| Name | Type | Req | Description |
|---|---|---|---|
| circuit | string | yes | Circuit payload. With circuit_format="qir" pass a gate list such as '[{"name": "h", "index": [0]}, {"name": "cx", "index": [0, 1]}]'. A gate carries its arguments under "parameters", so a rotation is… |
| circuit_format | string | – | "ir" for FlagQuantum IR JSON, "qir" for a gate list. |
Structured output declared, but exposes no named fields.
No examples provided.
plan_evolution_tool ~275
Validate and size a deterministic continuous-time Lindblad evolution. Hamiltonian terms and observables use Pauli descriptors such as ``{"pauli": "X", "coefficient": 0.5, "wires": [0]}``. The initial state may be a basis bitstring such as ``"1"`` or a dense statevector or density matrix. Collapse entries name ``"amplitude_damping"`` (or ``"sigma_minus"``), a non-negative physical rate, and one wire. Rates, Hamiltonian coefficients and time values share one inverse-time unit; rates are not per-instruction probabilities. Times must be finite and strictly increasing. This tool validates only and performs no evolution. It runs locally on CPU with no network, credentials, provider or hardware access. Returns: Matrix dimension, trajectory memory, time-point count, numerical method, order, integration step size, precision and local provenance.
| Name | Type | Req | Description |
|---|---|---|---|
| collapse_operators | array | yes | – |
| device | string | – | – |
| hamiltonian | array | yes | – |
| initial_state | – | yes | – |
| n_wires | integer | yes | – |
| observables | – | – | – |
| precision | string | – | – |
| return_density_matrices | boolean | – | – |
| times | array | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
plan_execution_tool ~460
Plan execution without running anything. Nothing is executed and no state is allocated: the result is the resolved execution contract (mode, backend, device, precision) plus a summary carrying depth, state_bytes, shardable_wires and the claim fields (claim_evidence_type, scalability_claim_allowed, release_gate_allowed) that say what this plan does and does not license. To actually run the circuit locally, call simulate_circuit_tool with the same options and outputs.
| Name | Type | Req | Description |
|---|---|---|---|
| circuit | string | yes | Circuit payload. With circuit_format="qir" pass a gate list such as '[{"name": "h", "index": [0]}, {"name": "cx", "index": [0, 1]}]'. A gate carries its arguments under "parameters", so a rotation is… |
| circuit_format | string | – | "ir" for FlagQuantum IR JSON, "qir" for a gate list. |
| options | – | – | Partial execution options. Supported keys: mode, backend, device, target, batch_size, precision, shots, seed, memory_limit_bytes, require_gradients, allow_approximate, allow_backend_fallback. |
| outputs | – | – | Requested outputs; each has a "kind" of "counts", "expectation", "probabilities" or "samples", plus either a "wires" list or, for "expectation", a "pauli" string such as "ZZI". For a weighted sum—a H… |
Structured output declared, but exposes no named fields.
No examples provided.
route_circuit_tool ~320
Route a circuit onto a coupling map, inserting SWAPs where needed. The SWAP overhead is reported as ``instruction_delta``: a non-zero delta means the routed circuit is not the same size as the source, so it should not be described as equivalent to it.
| Name | Type | Req | Description |
|---|---|---|---|
| circuit | string | yes | Circuit payload. With circuit_format="qir" pass a gate list such as '[{"name": "h", "index": [0]}, {"name": "cx", "index": [0, 1]}]'. A gate carries its arguments under "parameters", so a rotation is… |
| circuit_format | string | – | "ir" for FlagQuantum IR JSON, "qir" for a gate list. |
| cols | – | – | Grid columns; required when topology is "grid". |
| edges | – | – | Explicit wire pairs; required when topology is "custom". |
| optimize_first | boolean | – | Optimize before routing. |
| rows | – | – | Grid rows; required when topology is "grid". |
| strategy | string | – | "restore_after_each_gate" or "persistent_layout". |
| topology | string | – | "line", "ring", "grid" or "custom". |
Structured output declared, but exposes no named fields.
No examples provided.
search_capabilities_tool ~70
Search the installed structured research capability catalog. Start here; an empty query lists the bounded local candidates. This tool discovers capabilities only and does not execute quantum work.
| Name | Type | Req | Description |
|---|---|---|---|
| query | object | – | Structured capability filters. Read the returned manifest and schema resources rather than inferring scientific request fields. |
Structured output declared, but exposes no named fields.
No examples provided.
serialize_circuit_tool ~229
Canonicalize a circuit into FlagQuantum IR JSON. Accepts either input format and always answers with the canonical "ir" form, so a circuit written as a gate list gains a version and a content hash.
| Name | Type | Req | Description |
|---|---|---|---|
| circuit | string | yes | Circuit payload. With circuit_format="qir" pass a gate list such as '[{"name": "h", "index": [0]}, {"name": "cx", "index": [0, 1]}]'. A gate carries its arguments under "parameters", so a rotation is… |
| circuit_format | string | – | "ir" for FlagQuantum IR JSON, "qir" for a gate list. |
| indent | – | – | Optional indentation width for the returned JSON. |
Structured output declared, but exposes no named fields.
No examples provided.
simulate_circuit_tool ~887
Run a circuit locally and return the outputs it was asked for. This is the only tool here that executes anything, and it executes in this process on CPU: no network, no credentials, no provider. The engine is chosen by options["mode"], and all five default-install engines are reachable — "statevector" (the default), "mps", "tensor_network", "density_matrix" and "auto". The SDK also accepts "stabilizer", which requires the optional `flagquantum[stim]` dependency and supports shot-based counts or samples, not exact probabilities. These are engines of one local run rather than different places to run, so none of them leaves this process — but they are not interchangeable in cost, and the spread is wider than the circuit's width suggests. Measured at 20 wires on a product state, plan_execution_tool's summary reports 8 MB of state for "statevector" and 8.8 TB for "density_matrix". Ask the plan before choosing a non-default mode. The result's "execution" block records the engine that ran, alongside "simulation_engine", "device" and the accuracy contract whose metric is "not_measured" — an ideal simulation is not evidence about any hardware, and this tool does not present it as such. That field holds the engine, not the request: "auto" comes back as whatever the SDK settled on — "statevector", since this tool passes no noise model — rather than as the word "auto". "execution_path" and "platform_provider" read "local_statevector" and "pytorch_cpu" for a statevector run and are empty strings for "mps", "tensor_network", "density_matrix" and "stabilizer", which is how the SDK reports those engines rather than a failure. What is returned, in order of precedence: the outputs you pass; otherwise the circuit's own "measurements" field, which the SDK reads and which carries its own shot count; otherwise probabilities over every wire. Widths that the SDK will not compute a marginal for are refused with the alternatives named. Refused rather than guessed at: a circuit with unbou…
| Name | Type | Req | Description |
|---|---|---|---|
| circuit | string | yes | Circuit payload. With circuit_format="qir" pass a gate list such as '[{"name": "h", "index": [0]}, {"name": "cx", "index": [0, 1]}]'. A gate carries its arguments under "parameters", so a rotation is… |
| circuit_format | string | – | "ir" for FlagQuantum IR JSON, "qir" for a gate list. |
| options | – | – | Partial execution options. Supported keys: mode, backend, device, target, batch_size, precision, shots, seed, memory_limit_bytes, require_gradients, allow_approximate, allow_backend_fallback. A "shot… |
| outputs | – | – | Requested outputs; each has a "kind" of "counts", "expectation", "probabilities" or "samples", plus either a "wires" list or, for "expectation", a "pauli" string such as "ZZI". For a weighted sum—a H… |
Structured output declared, but exposes no named fields.
No examples provided.
train_parameters_tool ~817
Optimize a parameterized circuit's angles against a Pauli-sum energy. This is the gradient step that simulate_circuit_tool cannot take. That tool evaluates an energy; this one improves it. Fifty calls to simulate, each one a guess, is a manual scan; one call here is a descent, because the SDK reports exact gradients for a statevector simulation and this tool uses them. The objective is the Hamiltonian expectation, and it has to be given: the "hamiltonian" argument takes the same term list an "expectation" output takes, one letter per wire. There is no default, because without an objective the number being minimised is not an energy. Runs in this process: a statevector simulation on CPU, no network, no credentials, no provider. The result carries the SDK's provenance and its accuracy contract, which reports metric "not_measured" — an ideal simulation is not evidence about hardware. Refused before starting: a circuit with no parameters, a missing or malformed objective, a starting value that names a parameter the circuit does not have or omits one it does, a step count that is not a positive whole number or a learning rate that is not a positive finite number (either of them too large for a float included), a circuit carrying "observables" (never read — put the objective in "hamiltonian"), and any run whose predicted cost is past the budget. The prediction is an estimate, not a measurement of your machine. A learning rate that is finite and positive but larger than the optimizer's own arithmetic can hold is not caught before the run — it fails inside the SDK's first update, and the refusal that comes back names "learning_rate" and the rate it overflowed on rather than the circuit. Measured on the SDK installed here, 3.4e37 trains and 4e37 does not, at every width tried; that boundary is float32's maximum divided by ten. Adam at the learning rate you set. Losses are reported one per step, so a caller can see whether the run is still moving; whether it has conver…
| Name | Type | Req | Description |
|---|---|---|---|
| circuit | string | yes | Circuit payload carrying parameters. With circuit_format="qir" pass a gate list such as '[{"name": "h", "index": [0]}, {"name": "ry", "index": [0], "parameters": {"theta": {"$parameter": "t0"}}}]'. A… |
| circuit_format | string | – | "ir" for FlagQuantum IR JSON, "qir" for a gate list. |
| hamiltonian | array | yes | The objective, as a list of {"pauli": ..., "coefficient": ...} objects, one letter per wire: [{"pauli": "Z", "coefficient": 1.0}, {"pauli": "X", "coefficient": -0.5}]. The circuit example above is on… |
| learning_rate | number | – | Adam's learning rate. Default 0.1. |
| steps | integer | – | Number of optimizer updates. Default 50. |
| values | – | – | Starting value for each parameter, by name: {"t0": 0.1}. Every parameter needs one, and no others are accepted. Defaults to zeros. |
Structured output declared, but exposes no named fields.
No examples provided.
validate_capability_input_tool ~66
Validate a complete typed research request before execution. Continue only when the upstream report passes. MCP transport success is not an applicability decision.
| Name | Type | Req | Description |
|---|---|---|---|
| capability_id | string | yes | Exact installed capability ID. |
| request | object | yes | Request object conforming to the installed input schema. |
Structured output declared, but exposes no named fields.
No examples provided.
validate_evidence_tool ~71
Validate an Evidence Bundle with the installed FlagQuantum validator. Preserve this report for independent client or researcher acceptance. The operation does not turn transport completion into a scientific conclusion.
| Name | Type | Req | Description |
|---|---|---|---|
| evidence | object | yes | Complete Evidence Bundle returned by local execution. |
| validator_id | string | yes | Exact validator capability ID. |
Structured output declared, but exposes no named fields.
No examples provided.
How do I install the FlagQuantum MCP Server server?
FlagQuantum MCP Server runs locally as a PyPI package, launched with uvx flagquantum-mcp-server. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · flagquantum-mcp-server
claude mcp add flagquantum-flagquantum-mcp-server -- uvx flagquantum-mcp-server
What is the FlagQuantum MCP Server server?
FlagQuantum MCP Server is listed in the public MCP registry as io.github.FlagQuantum/flagquantum-mcp-server. Build, compile, run and export FlagQuantum circuits locally. No credentials or outbound network. This page covers its PyPI package (flagquantum-mcp-server).
Is the FlagQuantum MCP Server server safe to use?
FlagQuantum MCP Server scores 79 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the FlagQuantum MCP Server server expose?
FlagQuantum MCP Server exposes 27 tools: analyze_circuit_tool, serialize_circuit_tool, deserialize_circuit_tool, optimize_circuit_tool, compile_circuit_tool, and 22 more. Their descriptions and schemas cost roughly 6,781 tokens of context every time the server is loaded.
Is the FlagQuantum MCP Server server still maintained?
FlagQuantum MCP Server is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the FlagQuantum MCP Server server under?
FlagQuantum MCP Server declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.