Getting Started - Complete Beginner's Guide

April 16, 2026 ยท View on GitHub

Welcome to QPanda3 Runtime MCP Server! This guide will help you get started from scratch, even if you're new to quantum computing or MCP servers.

What is This?

QPanda3 Runtime MCP Server is a bridge that connects AI assistants (like Claude, ChatGPT, or custom AI agents) to Origin Quantum's quantum computing services. With this server, you can:

  • Ask an AI assistant to run quantum circuits on real quantum computers
  • Let AI manage your quantum computing tasks
  • Build AI-powered quantum computing applications

Setup

If you haven't installed the server yet, follow these guides first:

  1. Installation Guide - Install dependencies and configure your API key
  2. Configuration Guide - Connect to your AI coding platform (Claude, Cline, Cursor, etc.)

Your First Quantum Circuit

Once connected to an AI assistant, try these prompts:

Example 1: List Available Devices

List all available QPU devices

The AI will call list_qpu_devices_tool and show you available quantum computers.

Example 2: Run a Bell State Circuit

Run a Bell state circuit on device 20 with 1000 shots

The AI will:

  1. Use the Bell state circuit (creates quantum entanglement)
  2. Submit it to the specified device
  3. Return the measurement results

Expected results: ~50% 00 and ~50% 11 (quantum entanglement!)

Example 3: Check Task Status

Check the status of my last task

Understanding the Tools

Account Management

ToolWhat It DoesWhen to Use
setup_origin_quantum_account_toolConfigure your credentialsFirst time setup
list_saved_accounts_toolList session accountsCheck authentication
active_account_info_toolGet current account infoVerify connection

Device Management

ToolWhat It DoesWhen to Use
list_qpu_devices_toolList all quantum devicesFind available QPUs
get_qpu_properties_toolGet device detailsCheck device capabilities

Task Execution

ToolWhat It DoesWhen to Use
sample_toolRun circuit with measurementsGet measurement outcomes
estimate_toolCalculate expectation valueQuantum chemistry, VQE
batch_sample_toolRun multiple circuitsCompare circuits
batch_estimate_toolEstimate multiple circuitsOptimization tasks

Task Management

ToolWhat It DoesWhen to Use
get_task_status_toolCheck if task is doneMonitor progress
get_task_results_toolGet task resultsRetrieve output
cancel_task_toolCancel a taskStop execution
list_my_tasks_toolList recent tasksReview history

Multi-Objective Decisions

ToolWhat It DoesWhen to Use
create_circuit_observable_binding_toolCreate bindingMulti-objective optimization
add_product_rule_toolAdd all combinationsTest all pairs
add_zip_rule_toolAdd specific pairsCustom combinations
estimate_with_binding_toolExecute bindingRun estimation
list_bindings_toolList bindingsManage bindings
delete_binding_toolDelete bindingCleanup

Pre-Built Circuit Resources

The server provides ready-to-use quantum circuits:

ResourceDescriptionQubitsExpected Results
circuits://bell-stateQuantum entanglement250% 00, 50% 11
circuits://ghz-stateMulti-qubit entanglement350% 000, 50% 111
circuits://randomRandom number generator4Equal distribution
circuits://superpositionSingle qubit demo150% 0, 50% 1

Writing Your Own Circuits

Circuits use the OriginIR format:

QINIT <number_of_qubits>
CREG <number_of_classical_bits>
<gate_operations>
MEASURE q[i],c[i]

Common Gates

GateSyntaxDescription
HadamardH q[0]Superposition
Pauli-XX q[0]Bit flip
Pauli-YY q[0]Bit+Phase flip
Pauli-ZZ q[0]Phase flip
CNOTCNOT q[0],q[1]Controlled-NOT
CZCZ q[0],q[1]Controlled-Z
MeasureMEASURE q[0],c[0]Measure to classical bit

Example: Custom Circuit

# A 3-qubit GHZ-like circuit
circuit = """QINIT 3
CREG 3
H q[0]
CNOT q[0],q[1]
CNOT q[1],q[2]
MEASURE q[0],c[0]
MEASURE q[1],c[1]
MEASURE q[2],c[2]"""

Understanding Observables

For estimation tasks, you need to define observables (what to measure):

Dictionary Format

observable = {
    "Z0 Z1": 1.0,   # Measure Z on qubits 0 and 1
    "X0": 0.5       # Measure X on qubit 0
}

Pauli String Format

observable = "IIXY"  # 4-qubit observable

Task Workflow

graph LR
    A[Submit Task] --> B[Check Status]
    B --> C{Status?}
    C -->|PENDING| B
    C -->|RUNNING| B
    C -->|DONE| D[Get Results]
    C -->|FAILED| E[Handle Error]

Complete Example

# 1. Submit task
result = await sample_tool(
    circuit=bell_state_circuit,
    device_id="20",
    shots=1000
)
task_id = result["task_id"]

# 2. Poll for completion
import asyncio
while True:
    status = await get_task_status_tool(task_id)
    if status["task_status"] == "DONE":
        break
    elif status["task_status"] == "FAILED":
        raise Exception("Task failed!")
    await asyncio.sleep(2)

# 3. Get results
results = await get_task_results_tool(task_id)
print(f"Results: {results['results']}")

Security Tips

  1. Never commit .env files - Add to .gitignore
  2. Use environment variables for credentials in production
  3. Restrict file permissions: chmod 600 .env

Next Steps

Getting Help