diff --git a/AGENTS.md b/AGENTS.md index a208f27..a150bcd 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -127,6 +127,7 @@ Each MCP server follows this standard structure: - `server.py`: FastMCP server with tool/resource definitions - `transpiler.py`: Qiskit transpilation functions (async) - `circuit_serialization.py`: QASM3/QPY conversion utilities +- `utils.py`: Basis gate presets and coupling map topologies **Tools Provided**: | Tool | Description | @@ -136,6 +137,8 @@ Each MCP server follows this standard structure: | `compare_optimization_levels_tool` | Compare all optimization levels (0-3) | | `convert_qpy_to_qasm3_tool` | Convert QPY to human-readable QASM3 | | `convert_qasm3_to_qpy_tool` | Convert QASM3 to base64-encoded QPY | +| `load_circuit_from_qasm_tool` | Load circuit from QASM 2.0 or 3.0 string, return QPY + metadata | +| `export_circuit_to_qasm_tool` | Export QPY circuit to QASM 2.0 or 3.0 format | **Resources Provided**: | Resource URI | Description | @@ -193,66 +196,43 @@ Each MCP server follows this standard structure: **Directory**: [`qiskit-docs-mcp-server/`](qiskit-docs-mcp-server/) **Core Files**: -- `server.py`: FastMCP server with tool/resource definitions -- `data_fetcher.py`: Documentation fetching and search functions (async) -- `constants.py`: Module/guide/addon lists, error code categories, URL configuration +- `server.py`: FastMCP server with tool/resource definitions and lifespan management +- `data_fetcher.py`: Documentation fetching, search, and listing functions (async) +- `constants.py`: URL configuration, HTTP timeout settings +- `html_processing.py`: HTML-to-Markdown conversion for documentation pages +- `http.py`: Shared httpx client management +- `sitemap.py`: Dynamic sitemap discovery (fetched at startup for module/guide/addon lists) **Tools Provided**: | Tool | Description | |------|-------------| -| `get_sdk_module_docs_tool` | Get documentation for Qiskit SDK modules (circuit, quantum_info, transpiler, synthesis, primitives, result, visualization, and more) | -| `get_addon_docs_tool` | Get documentation for Qiskit addon packages (sqd, cutting, mpf, obp, aqc-tensor, utils) | -| `get_guide_tool` | Get Qiskit guides and best practices (optimization, error-mitigation, dynamic-circuits, etc.) | -| `search_docs_tool` | Search Qiskit documentation for relevant content | -| `lookup_error_code_tool` | Look up a Qiskit/IBM Quantum error code (e.g., 1002, 7001, 8004) | +| `search_docs_tool` | Search across the entire Qiskit documentation. Supports scope filters: `all`, `documentation`, `api`, `learning`, `tutorials` | +| `get_page_tool` | Fetch any Qiskit documentation page by URL (full or relative path). Supports pagination via `max_length` and `offset` | +| `lookup_error_code_tool` | Look up a 4-digit Qiskit/IBM Quantum error code | **Resources Provided**: | Resource URI | Description | |--------------|-------------| -| `qiskit-docs://modules` | List of all Qiskit SDK modules | -| `qiskit-docs://addons` | List of all Qiskit addon modules and tutorials | +| `qiskit-docs://modules` | List of all Qiskit SDK modules (dynamically discovered from sitemap) | +| `qiskit-docs://addons` | List of all Qiskit addon packages | | `qiskit-docs://guides` | List of Qiskit guides and best practices | +| `qiskit-docs://tutorials` | List of Qiskit tutorials | +| `qiskit-docs://api-packages` | List of API packages (runtime, transpiler, REST API references) | | `qiskit-docs://error-codes` | List of Qiskit error code categories | +| `qiskit-docs://modules/{module_name}` | Fetch documentation for a specific SDK module | +| `qiskit-docs://guides/{guide_name}` | Fetch a specific implementation guide | +| `qiskit-docs://addons/{addon_name}` | Fetch documentation for a specific addon package | **Environment Variables**: - `QISKIT_DOCS_BASE`: Base URL for Qiskit documentation (default: https://quantum.cloud.ibm.com/docs/) - `QISKIT_HTTP_TIMEOUT`: HTTP request timeout in seconds (default: 10.0) - `QISKIT_SEARCH_BASE_URL`: Search API base URL (default: https://quantum.cloud.ibm.com/) -**Available Modules** (17 total, see `constants.py` for canonical list): -- `circuit`: Quantum circuit construction and manipulation -- `quantum_info`: Quantum information theory utilities -- `transpiler`: Circuit transpilation and optimization -- `synthesis`: Circuit synthesis algorithms -- `dagcircuit`: DAG representation of circuits -- `passmanager`: Pass manager framework -- `converters`: Circuit format converters -- `compiler`: High-level compilation functions -- `primitives`: Sampler and Estimator primitives -- `providers`: Backend provider interfaces -- `result`: Job result handling -- `visualization`: Circuit and result visualization -- `qasm2`: OpenQASM 2.0 import/export -- `qasm3`: OpenQASM 3.0 import/export -- `qpy`: Qiskit Python serialization format -- `utils`: Utility functions -- `exceptions`: Qiskit exception classes - -**Available Guides** (~40 total, see `constants.py` for canonical list, key categories): -- Getting started: `quick-start` -- Circuit building: `construct-circuits` -- Transpilation: `transpile`, `transpiler-stages`, `transpile-with-pass-managers`, `defaults-and-configuration-options`, `circuit-transpilation-settings`, `qiskit-transpiler-service` -- Error handling: `error-mitigation-and-suppression-techniques`, `configure-error-mitigation`, `configure-error-suppression` -- Execution: `primitives`, `execution-modes`, `runtime-options-overview`, `directed-execution-model` -- Dynamic circuits: `dynamic-circuits` -- Qiskit Functions: `functions`, `ibm-circuit-function`, `algorithmiq-tem`, `qedma-qesem`, `q-ctrl-performance-management`, and more -- Application functions: `colibritd-pde`, `global-data-quantum-optimizer`, `qunova-chemistry`, `kipu-optimization`, and more -- Security: `secure-data`, `support` - **Features**: -- Fuzzy matching for module/guide names (suggests corrections for typos) +- Sitemap-based dynamic discovery of modules, guides, addons, and tutorials at startup +- Generic `get_page_tool` replaces per-type tools — can fetch any page by URL - Converts HTML documentation to Markdown format -- Includes metadata (URLs, timestamps, content length) +- Pagination support for large pages - No authentication required (public documentation) --- @@ -266,26 +246,56 @@ Each MCP server follows this standard structure: **Core Files**: - `server.py`: FastMCP server with tool/resource definitions - `ibm_runtime.py`: Qiskit IBM Runtime integration (async) +- `utils.py`: Account setup and circuit format utilities **Tools Provided**: + +*Account Management*: | Tool | Description | |------|-------------| | `setup_ibm_quantum_account_tool` | Configure IBM Quantum account | +| `delete_saved_account_tool` | Delete a saved account from disk | +| `list_saved_accounts_tool` | List all saved IBM Quantum accounts | +| `active_account_info_tool` | Get info about the currently active account | +| `active_instance_info_tool` | Get the active instance CRN | +| `available_instances_tool` | List all accessible instances | +| `usage_info_tool` | Get usage statistics and quota information | + +*Backend Discovery & Analysis*: +| Tool | Description | +|------|-------------| | `list_backends_tool` | Get available quantum backends | | `least_busy_backend_tool` | Find least busy operational backend | -| `get_backend_properties_tool` | Get detailed backend properties | -| `get_backend_calibration_tool` | Get calibration data (T1, T2, error rates) | +| `get_backend_properties_tool` | Get static backend properties (processor type, basis gates, qubit count) | +| `get_backend_calibration_tool` | Get live calibration data (T1, T2, error rates, faulty qubits) | +| `get_coupling_map_tool` | Get qubit connectivity (supports real and fake backends) | +| `find_optimal_qubit_chains_tool` | Find best linear qubit chains by calibration quality | +| `find_optimal_qv_qubits_tool` | Find optimal qubit subgraphs for Quantum Volume experiments | + +*Job Execution & Management*: +| Tool | Description | +|------|-------------| +| `run_sampler_tool` | Run circuit with SamplerV2 (measurement counts). Includes dynamical decoupling and twirling | +| `run_estimator_tool` | Run circuit with EstimatorV2 (expectation values). Includes ZNE error mitigation | | `list_my_jobs_tool` | List recent jobs | | `get_job_status_tool` | Check job status | +| `get_job_results_tool` | Get measurement results from a completed job | | `cancel_job_tool` | Cancel a running/queued job | **Resources Provided**: | Resource URI | Description | |--------------|-------------| | `ibm://status` | Service status and connection info | +| `circuits://bell-state` | Ready-to-run Bell state (entanglement) circuit | +| `circuits://ghz-state` | Ready-to-run 3-qubit GHZ state circuit | +| `circuits://random` | Ready-to-run quantum random number generator circuit | +| `circuits://superposition` | Ready-to-run single-qubit superposition circuit | +| `ibm://backends/{backend_name}` | Properties for a specific backend | +| `ibm://jobs/{job_id}` | Status of a specific job | **Environment Variables**: - `QISKIT_IBM_TOKEN`: IBM Quantum API token (optional, can use saved credentials) +- `QISKIT_IBM_RUNTIME_MCP_INSTANCE`: IBM Quantum instance CRN (optional, speeds up startup) **Credential Resolution Priority**: 1. Explicit token passed to `setup_ibm_quantum_account()` @@ -316,6 +326,12 @@ Each MCP server follows this standard structure: | `ai_pauli_network_synthesis_tool` | AI synthesis for Pauli Network circuits (up to 6 qubits) | | `hybrid_ai_transpile_tool` | End-to-end hybrid transpilation combining Qiskit heuristics with AI passes | +**Resources Provided**: +| Resource URI | Description | +|--------------|-------------| +| `qiskit-ibm-transpiler://info` | Server capabilities and recommended workflow | +| `qiskit-ibm-transpiler://synthesis-types` | Documentation for all AI synthesis pass types (gates, qubit limits) | + **Environment Variables**: - `QISKIT_IBM_TOKEN`: IBM Quantum API token (required) @@ -332,28 +348,81 @@ Each MCP server follows this standard structure: **Directory**: [`qiskit-gym-mcp-server/`](qiskit-gym-mcp-server/) **Core Files**: -- `server.py`: FastMCP server with tool/resource definitions +- `server.py`: FastMCP server entry point +- `server_tools.py`: All MCP tool definitions +- `server_resources.py`: All MCP resource definitions +- `app.py`: Application setup and server initialization - `gym_core.py`: Environment creation (PermutationGym, LinearFunctionGym, CliffordGym) - `training.py`: RL training session management - `synthesis.py`: Circuit synthesis from trained models - `models.py`: Model persistence (save/load) - `coupling_maps.py`: Hardware presets and subtopology extraction - `state.py`: Singleton state manager +- `constants.py`: Configuration defaults +- `utils.py`: Utility functions **Tools Provided**: + +*Environment Management*: | Tool | Description | |------|-------------| | `create_permutation_env_tool` | Create environment for SWAP routing | | `create_linear_function_env_tool` | Create environment for CNOT synthesis | | `create_clifford_env_tool` | Create environment for Clifford synthesis | +| `list_environments_tool` | List all created environments | +| `get_environment_info_tool` | Get details of a specific environment | +| `delete_environment_tool` | Delete an environment | + +*Training*: +| Tool | Description | +|------|-------------| | `start_training_tool` | Start RL training (PPO/AlphaZero) | | `batch_train_environments_tool` | Train multiple environments | +| `get_training_status_tool` | Get status of a training session | +| `get_training_metrics_tool` | Get training metrics (rewards, episode lengths) | +| `wait_for_training_tool` | Wait for training to complete | +| `stop_training_tool` | Stop a running training session | +| `list_training_sessions_tool` | List all training sessions | + +*TensorBoard*: +| Tool | Description | +|------|-------------| +| `list_tensorboard_experiments_tool` | List TensorBoard experiments | +| `get_tensorboard_metrics_tool` | Get metrics from TensorBoard logs | +| `start_tensorboard_tool` | Start TensorBoard server | +| `stop_tensorboard_tool` | Stop TensorBoard server | +| `get_tensorboard_status_tool` | Check TensorBoard server status | + +*Synthesis*: +| Tool | Description | +|------|-------------| | `synthesize_permutation_tool` | Generate optimal SWAP circuit | | `synthesize_linear_function_tool` | Generate optimal CNOT circuit | | `synthesize_clifford_tool` | Generate optimal Clifford circuit | + +*Model Management*: +| Tool | Description | +|------|-------------| | `save_model_tool` | Save trained model to disk | | `load_model_tool` | Load model from disk | +| `list_saved_models_tool` | List models saved on disk | +| `list_loaded_models_tool` | List models loaded in memory | +| `delete_model_tool` | Delete a saved model | +| `get_model_info_tool` | Get detailed model information | + +*Coupling Maps & Utilities*: +| Tool | Description | +|------|-------------| +| `create_coupling_map_tool` | Create a coupling map from edges or topology | | `extract_subtopologies_tool` | Extract N-qubit subtopologies from hardware | +| `list_subtopology_shapes_tool` | List available subtopology shapes | +| `get_fake_backend_coupling_map_tool` | Get coupling map from a fake backend | +| `list_available_fake_backends_tool` | List available fake backends | +| `generate_random_permutation_tool` | Generate random permutation for testing | +| `generate_random_linear_function_tool` | Generate random linear function for testing | +| `generate_random_clifford_tool` | Generate random Clifford for testing | +| `convert_qpy_to_qasm3_tool` | Convert QPY to QASM3 | +| `convert_qasm3_to_qpy_tool` | Convert QASM3 to QPY | **Resources Provided**: | Resource URI | Description | @@ -362,9 +431,13 @@ Each MCP server follows this standard structure: | `qiskit-gym://algorithms` | PPO, AlphaZero documentation | | `qiskit-gym://policies` | BasicPolicy, Conv1dPolicy docs | | `qiskit-gym://environments` | Environment type documentation | +| `qiskit-gym://workflows` | End-to-end workflow documentation | | `qiskit-gym://training/sessions` | Active training sessions | | `qiskit-gym://models` | Loaded models | | `qiskit-gym://server/config` | Server configuration | +| `qiskit-gym://environments/{env_id}` | Specific environment info | +| `qiskit-gym://models/{model_name}` | Specific model info | +| `qiskit-gym://training/{session_id}` | Specific training session status | **Environment Variables**: - `QISKIT_GYM_MODEL_DIR`: Model storage directory (default: ~/.qiskit-gym/models) @@ -407,7 +480,7 @@ AI Assistant → MCP Client → get_completion_tool ### Qiskit Documentation Server ``` -AI Assistant → MCP Client → get_sdk_module_docs_tool / search_docs_tool +AI Assistant → MCP Client → search_docs_tool / get_page_tool ↓ data_fetcher.py (async functions) ↓ @@ -456,7 +529,7 @@ AI Assistant → MCP Client → create_*_env_tool → start_training_tool 1. **Prerequisites**: - Python 3.10+ (3.11+ recommended) - [uv](https://astral.sh/uv) package manager - - IBM Quantum account and API token + - IBM Quantum account and API token (for cloud servers) - Git 2. **Installation**: @@ -776,8 +849,8 @@ When adding a new MCP server, you must update the following GitHub configuration 7. **Create `server.json`** for MCP Registry: ```json { - "$schema": "https://static.modelcontextprotocol.io/schemas/draft/server.schema.json", - "name": "io.github.qiskit/qiskit--mcp-server", + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json", + "name": "io.github.Qiskit/qiskit--mcp-server", "title": "Qiskit MCP Server", "description": "Short description (max 100 chars)", "version": "0.1.0", @@ -919,7 +992,7 @@ gh workflow run "Publish to MCP Registry" -f package=qiskit **server.json configuration**: Each server has a `server.json` file that defines its MCP Registry metadata: -- `name`: Reverse-DNS format (`io.github.qiskit/server-name`) +- `name`: Reverse-DNS format (`io.github.Qiskit/server-name`) - `description`: Short description (max 100 characters) - `version`: Must match the version in `pyproject.toml` - `packages`: PyPI package configuration with environment variables @@ -1067,7 +1140,8 @@ qiskit-mcp-servers/ │ │ ├── __init__.py │ │ ├── server.py # FastMCP server │ │ ├── transpiler.py # Core transpilation -│ │ └── circuit_serialization.py # QASM3/QPY utilities +│ │ ├── circuit_serialization.py # QASM3/QPY utilities +│ │ └── utils.py # Basis gates & topology presets │ ├── tests/ │ │ ├── conftest.py │ │ ├── test_transpiler.py @@ -1100,14 +1174,38 @@ qiskit-mcp-servers/ │ ├── LICENSE │ ├── README.md │ └── run_tests.sh +├── qiskit-docs-mcp-server/ +│ ├── src/qiskit_docs_mcp_server/ +│ │ ├── __init__.py +│ │ ├── server.py # FastMCP server + lifespan +│ │ ├── data_fetcher.py # Documentation fetching & search +│ │ ├── constants.py # URL config, timeouts +│ │ ├── html_processing.py # HTML-to-Markdown conversion +│ │ ├── http.py # Shared httpx client +│ │ └── sitemap.py # Dynamic sitemap discovery +│ ├── tests/ +│ │ ├── conftest.py +│ │ ├── test_data_fetcher.py +│ │ └── test_server.py +│ ├── examples/ +│ │ ├── README.md +│ │ ├── langchain_agent.ipynb +│ │ └── langchain_agent.py +│ ├── pyproject.toml +│ ├── LICENSE +│ ├── README.md +│ └── run_tests.sh ├── qiskit-ibm-runtime-mcp-server/ │ ├── src/qiskit_ibm_runtime_mcp_server/ │ │ ├── __init__.py │ │ ├── server.py # FastMCP server -│ │ └── ibm_runtime.py # Core async functions +│ │ ├── ibm_runtime.py # Core async functions +│ │ └── utils.py # Account & circuit utilities │ ├── tests/ │ │ ├── conftest.py -│ │ └── test_*.py +│ │ ├── test_server.py +│ │ ├── test_integration.py +│ │ └── test_sync.py │ ├── examples/ │ │ ├── README.md │ │ ├── langchain_agent.ipynb @@ -1141,7 +1239,10 @@ qiskit-mcp-servers/ ├── qiskit-gym-mcp-server/ │ ├── src/qiskit_gym_mcp_server/ │ │ ├── __init__.py -│ │ ├── server.py # FastMCP server +│ │ ├── server.py # FastMCP server entry point +│ │ ├── server_tools.py # All MCP tool definitions +│ │ ├── server_resources.py # All MCP resource definitions +│ │ ├── app.py # Application setup │ │ ├── gym_core.py # Environment creation │ │ ├── training.py # RL training functions │ │ ├── synthesis.py # Circuit synthesis @@ -1153,9 +1254,19 @@ qiskit-mcp-servers/ │ ├── tests/ │ │ ├── conftest.py │ │ └── test_*.py +│ ├── examples/ +│ │ ├── README.md +│ │ ├── langchain_agent.ipynb +│ │ └── langchain_agent.py │ ├── pyproject.toml │ ├── README.md │ └── run_tests.sh +├── examples/ +│ ├── README.md +│ ├── quantum_volume_optimizer.ipynb +│ └── quantum_volume_optimizer.py +├── docs/ +│ └── videos/ # Demo videos for README ├── src/ │ └── qiskit_mcp_servers/ # Meta-package ├── pyproject.toml # Workspace config & meta-package diff --git a/README.md b/README.md index 219c88b..ed068d6 100644 --- a/README.md +++ b/README.md @@ -13,194 +13,140 @@ [![qiskit-docs-mcp-server](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fregistry.modelcontextprotocol.io%2Fv0.1%2Fservers%2Fio.github.Qiskit%252Fqiskit-docs-mcp-server%2Fversions%2Flatest&query=%24.server.version&label=qiskit-docs-mcp-server&logo=modelcontextprotocol)](https://registry.modelcontextprotocol.io/?q=io.github.Qiskit%2Fqiskit-docs-mcp-server) [![qiskit-gym-mcp-server](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fregistry.modelcontextprotocol.io%2Fv0.1%2Fservers%2Fio.github.Qiskit%252Fqiskit-gym-mcp-server%2Fversions%2Flatest&query=%24.server.version&label=qiskit-gym-mcp-server&logo=modelcontextprotocol)](https://registry.modelcontextprotocol.io/?q=io.github.Qiskit%2Fqiskit-gym-mcp-server) -A collection of **Model Context Protocol (MCP)** servers that provide AI assistants, LLMs, and agents with seamless access to IBM Quantum services and Qiskit libraries for quantum computing development and research. +A collection of [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) servers that give AI assistants, LLMs, and agents seamless access to IBM Quantum services and Qiskit libraries. Generate quantum code, connect to real hardware, analyze backends, execute circuits, and search Qiskit documentation — all through a standardized protocol that works with any MCP-compatible client. -## 🌟 What is This? - -This repository contains production-ready MCP servers that enable AI systems to interact with quantum computing resources through Qiskit. Instead of manually configuring quantum backends, writing boilerplate code, or managing IBM Quantum accounts, AI assistants can now: - -- 🤖 **Generate intelligent quantum code** with context-aware suggestions -- 🔌 **Connect to real quantum hardware** automatically -- 📊 **Analyze quantum backends** and find optimal resources -- 🚀 **Execute quantum circuits** and monitor job status -- 💡 **Provide quantum computing assistance** with expert knowledge - -## 🛠️ Available Servers - -### 🔬 Qiskit MCP Server -**Core Qiskit quantum computing capabilities** - -Provides quantum circuit creation, manipulation, transpilation, and serialization utilities (QASM3, QPY) for local quantum development using [Qiskit](https://github.com/Qiskit/qiskit) - -**📁 Directory**: [`./qiskit-mcp-server/`](./qiskit-mcp-server/) - ---- - -### 🧠 Qiskit Code Assistant MCP Server -**Intelligent quantum code completion and assistance** - -Provides access to [IBM's Qiskit Code Assistant](https://quantum.cloud.ibm.com/docs/en/guides/qiskit-code-assistant) for AI-assisted quantum programming - -**📁 Directory**: [`./qiskit-code-assistant-mcp-server/`](./qiskit-code-assistant-mcp-server/) - ---- - -### ⚙️ Qiskit IBM Runtime MCP Server -**Complete access to IBM Quantum cloud services** - -Comprehensive interface to IBM Quantum hardware via [Qiskit IBM Runtime](https://github.com/Qiskit/qiskit-ibm-runtime/) - -**📁 Directory**: [`./qiskit-ibm-runtime-mcp-server/`](./qiskit-ibm-runtime-mcp-server/) - ---- - -### 🚀 Qiskit IBM Transpiler MCP Server -**AI-powered circuit transpilation** - -Access to the [qiskit-ibm-transpiler](https://github.com/Qiskit/qiskit-ibm-transpiler) library for AI-optimized circuit routing and optimization. - -**📁 Directory**: [`./qiskit-ibm-transpiler-mcp-server/`](./qiskit-ibm-transpiler-mcp-server/) - ---- - -### 📚 Qiskit Documentation MCP Server -**Qiskit documentation retrieval and search** - -Query and retrieve [Qiskit documentation](https://quantum.cloud.ibm.com/docs/), guides, and API references. No authentication required. - -**📁 Directory**: [`./qiskit-docs-mcp-server/`](./qiskit-docs-mcp-server/) - ---- - -## 🏋️ Community Servers - -### 🏋️ Qiskit Gym MCP Server -**Reinforcement learning for quantum circuit synthesis** - -Uses [qiskit-gym](https://github.com/rl-institut/qiskit-gym) to train RL models for optimal quantum circuit synthesis, including permutation routing, linear function synthesis, and Clifford circuits. - -**📁 Directory**: [`./qiskit-gym-mcp-server/`](./qiskit-gym-mcp-server/) - -## 📚 Examples - -Each MCP server includes example code demonstrating how to build AI agents using LangChain: - -| Server | Examples | -|--------|----------| -| Qiskit MCP Server | [`qiskit-mcp-server/examples/`](./qiskit-mcp-server/examples/) | -| Qiskit Code Assistant MCP Server | [`qiskit-code-assistant-mcp-server/examples/`](./qiskit-code-assistant-mcp-server/examples/) | -| Qiskit IBM Runtime MCP Server | [`qiskit-ibm-runtime-mcp-server/examples/`](./qiskit-ibm-runtime-mcp-server/examples/) | -| Qiskit IBM Transpiler MCP Server | [`qiskit-ibm-transpiler-mcp-server/examples/`](./qiskit-ibm-transpiler-mcp-server/examples/) | -| Qiskit Documentation MCP Server | [`qiskit-docs-mcp-server/examples/`](./qiskit-docs-mcp-server/examples/) | -| Qiskit Gym MCP Server (Community) | [`qiskit-gym-mcp-server/examples/`](./qiskit-gym-mcp-server/examples/) | - -Each examples directory contains: -- **Jupyter Notebook** (`langchain_agent.ipynb`) - Interactive tutorial with step-by-step examples -- **Python Script** (`langchain_agent.py`) - Command-line agent with multiple LLM provider support - -### Advanced: Quantum Volume Finder - -The [`examples/`](./examples/) directory contains a multi-agent system that combines multiple MCP servers to **find the highest achievable Quantum Volume** for IBM Quantum backends through actual hardware execution. It demonstrates multi-server orchestration, local tool wrappers to keep large data out of the LLM context, and both single-circuit and full statistical protocol modes. See the [examples README](./examples/README.md) for details. - -## 🚀 Quick Start +## Quick Start ### Prerequisites - **Python 3.10+** (3.11+ recommended) -- **[uv](https://astral.sh/uv)** package manager (fastest Python package manager) -- **IBM Quantum account** and API token -- **Qiskit Code Assistant access** (for code assistant server) - -### Installation +- **IBM Quantum account** and [API token](https://quantum.ibm.com) (only required for IBM cloud servers: Runtime, Transpiler, Code Assistant) -#### Install from PyPI +### Install from PyPI ```bash -# Install all MCP servers (core + community) -pip install qiskit-mcp-servers[all] +# Install all servers (core + community) +pip install "qiskit-mcp-servers[all]" -# Install just the core servers (default) +# Install core servers only (default, excludes community) pip install qiskit-mcp-servers +``` -# Install individual servers -pip install qiskit-mcp-servers[qiskit] # Qiskit server only -pip install qiskit-mcp-servers[code-assistant] # Code Assistant server only -pip install qiskit-mcp-servers[runtime] # IBM Runtime server only -pip install qiskit-mcp-servers[transpiler] # IBM Transpiler server only -pip install qiskit-mcp-servers[docs] # Documentation server only -pip install qiskit-mcp-servers[gym] # Qiskit Gym server only (community) +
+Install individual servers -# Install community servers only -pip install qiskit-mcp-servers[community] +```bash +pip install "qiskit-mcp-servers[qiskit]" # Qiskit server only +pip install "qiskit-mcp-servers[code-assistant]" # Code Assistant server only +pip install "qiskit-mcp-servers[runtime]" # IBM Runtime server only +pip install "qiskit-mcp-servers[transpiler]" # IBM Transpiler server only +pip install "qiskit-mcp-servers[docs]" # Documentation server only +pip install "qiskit-mcp-servers[gym]" # Qiskit Gym server only (community) ``` -#### Install from Source +
-Each server is designed to run independently. Choose the server you need: +### Install from Source -#### 🔬 Qiskit Server -```bash -cd qiskit-mcp-server -uv run qiskit-mcp-server -``` +Each server runs independently — the directory name and command are the same: -#### 🧠 Qiskit Code Assistant Server ```bash -cd qiskit-code-assistant-mcp-server -uv run qiskit-code-assistant-mcp-server +cd qiskit-mcp-server # or any server directory +pip install -e . +qiskit-mcp-server ``` -#### ⚙️ IBM Runtime Server -```bash -cd qiskit-ibm-runtime-mcp-server -uv run qiskit-ibm-runtime-mcp-server -``` +### Configuration -#### 🚀 IBM Transpiler Server -```bash -cd qiskit-ibm-transpiler-mcp-server -uv run qiskit-ibm-transpiler-mcp-server -``` +Servers that connect to IBM Quantum cloud services require a `QISKIT_IBM_TOKEN` environment variable. See each server's README for the full list of environment variables and configuration options. -#### 📚 Documentation Server ```bash -cd qiskit-docs-mcp-server -uv run qiskit-docs-mcp-server +export QISKIT_IBM_TOKEN="your_ibm_quantum_token_here" ``` -#### 🏋️ Qiskit Gym Server (Community) -```bash -cd qiskit-gym-mcp-server -uv run qiskit-gym-mcp-server -``` +### Client Setup -### 🔧 Configuration +All servers are compatible with any MCP client. Pick your client below. -#### Environment Variables -```bash -# For IBM Runtime Server -export QISKIT_IBM_TOKEN="your_ibm_quantum_token_here" +#### Claude Code -# For Code Assistant Server -export QISKIT_IBM_TOKEN="your_ibm_quantum_token_here" -export QCA_TOOL_API_BASE="https://qiskit-code-assistant.quantum.ibm.com" + + +```bash +# No auth required +claude mcp add qiskit -- uvx qiskit-mcp-server +claude mcp add qiskit-docs -- uvx qiskit-docs-mcp-server +claude mcp add qiskit-gym -- uvx qiskit-gym-mcp-server + +# Require QISKIT_IBM_TOKEN (https://quantum.ibm.com) +claude mcp add qiskit-code-assistant -e QISKIT_IBM_TOKEN=$QISKIT_IBM_TOKEN -- uvx qiskit-code-assistant-mcp-server +claude mcp add qiskit-ibm-runtime -e QISKIT_IBM_TOKEN=$QISKIT_IBM_TOKEN -- uvx qiskit-ibm-runtime-mcp-server +claude mcp add qiskit-ibm-transpiler -e QISKIT_IBM_TOKEN=$QISKIT_IBM_TOKEN -- uvx qiskit-ibm-transpiler-mcp-server ``` -#### Using with MCP Clients +#### IBM Bob -All servers are compatible with any MCP client. Test interactively with MCP Inspector: + -```bash -# Replace with any server command -npx @modelcontextprotocol/inspector uv run qiskit-mcp-server -npx @modelcontextprotocol/inspector uv run qiskit-docs-mcp-server -npx @modelcontextprotocol/inspector uv run qiskit-ibm-runtime-mcp-server -# etc. +Add to your `~/.bob/settings/mcp_settings.json`: + +```json +{ + "mcpServers": { + "qiskit": { + "command": "uvx", + "args": ["qiskit-mcp-server"], + "alwaysAllow": [], + "disabled": false + }, + "qiskit-docs": { + "command": "uvx", + "args": ["qiskit-docs-mcp-server"], + "alwaysAllow": [], + "disabled": false + }, + "qiskit-gym": { + "command": "uvx", + "args": ["qiskit-gym-mcp-server"], + "alwaysAllow": [], + "disabled": false + }, + "qiskit-code-assistant": { + "command": "uvx", + "args": ["qiskit-code-assistant-mcp-server"], + "env": { + "QISKIT_IBM_TOKEN": "" + }, + "alwaysAllow": [], + "disabled": false + }, + "qiskit-ibm-runtime": { + "command": "uvx", + "args": ["qiskit-ibm-runtime-mcp-server"], + "env": { + "QISKIT_IBM_TOKEN": "", + "QISKIT_IBM_RUNTIME_MCP_INSTANCE": "" + }, + "alwaysAllow": [], + "disabled": false + }, + "qiskit-ibm-transpiler": { + "command": "uvx", + "args": ["qiskit-ibm-transpiler-mcp-server"], + "env": { + "QISKIT_IBM_TOKEN": "" + }, + "alwaysAllow": [], + "disabled": false + } + } +} ``` -#### Claude Desktop / Cline Configuration +
+Claude Desktop / Cline -Add to your MCP client configuration (e.g., `claude_desktop_config.json`): +Add to your `claude_desktop_config.json`: ```json { @@ -213,69 +159,110 @@ Add to your MCP client configuration (e.g., `claude_desktop_config.json`): "command": "uvx", "args": ["qiskit-docs-mcp-server"] }, - "qiskit-runtime": { + "qiskit-gym": { + "command": "uvx", + "args": ["qiskit-gym-mcp-server"] + }, + "qiskit-code-assistant": { + "command": "uvx", + "args": ["qiskit-code-assistant-mcp-server"], + "env": { + "QISKIT_IBM_TOKEN": "your_ibm_quantum_token_here" + } + }, + "qiskit-ibm-runtime": { "command": "uvx", "args": ["qiskit-ibm-runtime-mcp-server"], "env": { "QISKIT_IBM_TOKEN": "your_ibm_quantum_token_here" } + }, + "qiskit-ibm-transpiler": { + "command": "uvx", + "args": ["qiskit-ibm-transpiler-mcp-server"], + "env": { + "QISKIT_IBM_TOKEN": "your_ibm_quantum_token_here" + } } } } ``` -See each server's README for the full list of environment variables and configuration options. +
+ +
+MCP Inspector (interactive testing) + +```bash +npx @modelcontextprotocol/inspector uvx qiskit-mcp-server +npx @modelcontextprotocol/inspector uvx qiskit-docs-mcp-server +npx @modelcontextprotocol/inspector uvx qiskit-ibm-runtime-mcp-server +# etc. +``` + +
+ +## Available Servers + +### Core Servers + +| Server | Description | Directory | +|--------|-------------|-----------| +| **Qiskit MCP Server** | Circuit creation, transpilation, and serialization (QASM3, QPY) using [Qiskit](https://github.com/Qiskit/qiskit) | [`qiskit-mcp-server/`](./qiskit-mcp-server/) | +| **Qiskit Code Assistant** | AI-assisted quantum programming via [IBM Qiskit Code Assistant](https://quantum.cloud.ibm.com/docs/en/guides/qiskit-code-assistant) | [`qiskit-code-assistant-mcp-server/`](./qiskit-code-assistant-mcp-server/) | +| **Qiskit IBM Runtime** | Full access to IBM Quantum hardware via [Qiskit IBM Runtime](https://github.com/Qiskit/qiskit-ibm-runtime/) | [`qiskit-ibm-runtime-mcp-server/`](./qiskit-ibm-runtime-mcp-server/) | +| **Qiskit IBM Transpiler** | AI-optimized circuit routing and optimization via [qiskit-ibm-transpiler](https://github.com/Qiskit/qiskit-ibm-transpiler) | [`qiskit-ibm-transpiler-mcp-server/`](./qiskit-ibm-transpiler-mcp-server/) | +| **Qiskit Docs** | Search and retrieve [Qiskit documentation](https://quantum.cloud.ibm.com/docs/), guides, and API references. No auth required. | [`qiskit-docs-mcp-server/`](./qiskit-docs-mcp-server/) | + +### Community Servers -## 🏗️ Architecture & Design +| Server | Description | Directory | +|--------|-------------|-----------| +| **Qiskit Gym** | RL-based quantum circuit synthesis using [qiskit-gym](https://github.com/rl-institut/qiskit-gym) (permutation routing, linear functions, Clifford circuits) | [`qiskit-gym-mcp-server/`](./qiskit-gym-mcp-server/) | -### 🎯 Unified Design Principles +## Examples -All servers follow a **consistent, production-ready architecture**: +Each server includes an `examples/` directory with a **Jupyter notebook** (`langchain_agent.ipynb`) and a **Python script** (`langchain_agent.py`) showing how to build AI agents with LangChain. -- **🔄 Async-first**: Built with FastMCP for high-performance async operations -- **🧪 Test-driven**: Comprehensive test suites with 65%+ coverage -- **🛡️ Type-safe**: Full mypy type checking and validation -- **📦 Modern packaging**: Standard `pyproject.toml` with hatchling build system -- **🔧 Developer-friendly**: Automated formatting (ruff), linting, and CI/CD +The root [`examples/`](./examples/) directory contains a multi-agent **Quantum Volume Finder** that orchestrates multiple MCP servers to find the highest achievable Quantum Volume on IBM Quantum hardware. See the [examples README](./examples/README.md) for details. -### 🔌 MCP Protocol Support +## Architecture -All servers implement the full **Model Context Protocol specification**: +All servers are built on [FastMCP](https://github.com/jlowin/fastmcp) and share a consistent structure: -- **🛠️ Tools**: Execute quantum operations (code completion, job submission, backend queries) -- **📚 Resources**: Access quantum data (service status, backend information, model details) -- **⚡ Real-time**: Async operations for responsive AI interactions -- **🔒 Secure**: Proper authentication and error handling +- **Async-first** — all tool and resource handlers are async, using FastMCP's native async support +- **Standalone packages** — each server is an independent PyPI package with its own `pyproject.toml`, tests, and CI +- **MCP Registry** — every server ships a [`server.json`](https://registry.modelcontextprotocol.io/) manifest for automatic discovery +- **Unified meta-package** — `qiskit-mcp-servers` installs any combination via pip extras +- **Full MCP protocol** — tools (quantum operations), resources (backend info, service status), and stdio transport -## 🧪 Development +## Development -### 🏃‍♂️ Running Tests +### Running Tests ```bash -# Run tests for any server cd qiskit-code-assistant-mcp-server # or any server directory ./run_tests.sh ``` -### 🔍 Code Quality -All servers maintain high code quality standards: -- **✅ Linting**: `ruff check` and `ruff format` -- **🛡️ Type checking**: `mypy src/` -- **🧪 Testing**: `pytest` with async support and coverage reporting -- **🚀 CI/CD**: GitHub Actions for automated testing +### Code Quality +- **Linting**: `ruff check` and `ruff format` +- **Type checking**: `mypy src/` +- **Testing**: `pytest` with async support and coverage reporting +- **CI/CD**: GitHub Actions for automated testing -## 📖 Resources & Documentation +## Resources -### 🔗 Essential Links -- **[Model Context Protocol](https://modelcontextprotocol.io/introduction)** - Understanding MCP -- **[Qiskit IBM Runtime](https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime)** - Quantum cloud services -- **[Qiskit Code Assistant](https://quantum.cloud.ibm.com/docs/en/guides/qiskit-code-assistant)** - AI code assistance -- **[MCP Inspector](https://github.com/modelcontextprotocol/inspector)** - Interactive testing tool -- **[FastMCP](https://github.com/jlowin/fastmcp)** - High-performance MCP framework +- [Model Context Protocol](https://modelcontextprotocol.io/introduction) — understanding MCP +- [Qiskit IBM Runtime docs](https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime) — quantum cloud services +- [Qiskit Code Assistant docs](https://quantum.cloud.ibm.com/docs/en/guides/qiskit-code-assistant) — AI code assistance +- [MCP Inspector](https://github.com/modelcontextprotocol/inspector) — interactive testing tool +- [FastMCP](https://github.com/jlowin/fastmcp) — high-performance MCP framework +- [AGENTS.md](AGENTS.md) — guidance for AI coding assistants (IBM Bob, Claude Code, Copilot, Cursor, and others) -### AI Development Assistant Support +## Contributing -This repository includes AI-generated code and offers comprehensive guidance for AI coding assistants (like [IBM Bob](https://www.ibm.com/products/bob), Claude Code, GitHub Copilot, Cursor AI, and others) in [AGENTS.md](AGENTS.md). This helps AI assistants provide more accurate, context-aware suggestions when working with this codebase. +Contributions are welcome! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) guide for details. -## 📄 License +## License This project is licensed under the **Apache License 2.0**. diff --git a/docs/videos/QiskitMCPServers-ClaudeCode.mp4 b/docs/videos/QiskitMCPServers-ClaudeCode.mp4 new file mode 100644 index 0000000..ce107bb Binary files /dev/null and b/docs/videos/QiskitMCPServers-ClaudeCode.mp4 differ diff --git a/docs/videos/QiskitMCPServers-IBMBob.mp4 b/docs/videos/QiskitMCPServers-IBMBob.mp4 new file mode 100644 index 0000000..faae109 Binary files /dev/null and b/docs/videos/QiskitMCPServers-IBMBob.mp4 differ