# QML-MCP: Quantum Machine Learning MCP Server
A Model Context Protocol (MCP) server for Quantum Machine Learning using Qiskit.
## Features
- **Quantum Circuit Execution**: Run quantum circuits with configurable shots
- **Quantum Kernel Computation**: Compute quantum kernels for ML tasks
- **Variational Quantum Classifier (VQC)**: Train quantum classifiers
- **Model Evaluation**: Evaluate trained quantum ML models
- **Safety Limits**: Configurable limits on qubits and shots
- **Structured Logging**: Comprehensive logging for debugging
- **Error Handling**: Detailed error messages with tracebacks
## Installation
```bash
pip install -e .
```
For development:
```bash
pip install -e ".[dev]"
```
## Requirements
- Python >= 3.10
- Qiskit >= 1.0.0, < 2.0.0 (Note: Qiskit Machine Learning 0.8.4 requires Qiskit 1.x)
- Qiskit Machine Learning >= 0.8.4
- MCP >= 0.9.0
**Note on Qiskit Version**: While Qiskit 2.0+ is available, Qiskit Machine Learning 0.8.4 (the latest stable version) requires Qiskit 1.x. This implementation uses Qiskit 1.4.5+ which provides all necessary quantum ML features.
## Configuration
The server can be configured via environment variables:
- `QML_MCP_QUANTUM_MAX_SHOTS`: Maximum shots per circuit (default: 100000)
- `QML_MCP_QUANTUM_MAX_QUBITS`: Maximum qubits allowed (default: 10)
- `QML_MCP_QUANTUM_DEFAULT_SHOTS`: Default shots for circuits (default: 1024)
- `QML_MCP_LOG_LEVEL`: Logging level (default: INFO)
- `QML_MCP_ENABLE_DETAILED_ERRORS`: Include detailed error traces (default: true)
## Usage
### Running the Server
```bash
python server.py
```
### Available Tools
#### 1. run_quantum_circuit
Execute a quantum circuit and get measurement results.
**Parameters:**
- `qasm` (required): Quantum circuit in QASM3 format
- `shots` (optional): Number of measurement shots (default: 1024)
**Example:**
```json
{
"qasm": "OPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc[0] = measure q[0];\nc[1] = measure q[1];",
"shots": 1000
}
```
#### 2. compute_quantum_kernel
Compute quantum kernel matrix for ML tasks using ZZ feature map.
**Parameters:**
- `train_data` (required): Training data as 2D array
- `test_data` (optional): Test data as 2D array
- `feature_dimension` (optional): Number of features
**Example:**
```json
{
"train_data": [[0.1, 0.2], [0.3, 0.4], [0.5, 0.6]],
"test_data": [[0.7, 0.8]]
}
```
#### 3. train_vqc
Train a Variational Quantum Classifier.
**Parameters:**
- `X_train` (required): Training features as 2D array
- `y_train` (required): Training labels as 1D array
- `feature_dimension` (optional): Number of features
- `max_iter` (optional): Maximum optimization iterations (default: 100)
**Example:**
```json
{
"X_train": [[0.1, 0.2], [0.2, 0.3], [0.8, 0.9], [0.9, 0.8]],
"y_train": [0, 0, 1, 1],
"max_iter": 50
}
```
Returns a base64-encoded trained model.
#### 4. evaluate_model
Evaluate a trained quantum ML model.
**Parameters:**
- `model` (required): Base64-encoded trained model
- `X_test` (required): Test features as 2D array
- `y_test` (optional): Test labels for accuracy computation
**Example:**
```json
{
"model": "gASVPAIAAA...",
"X_test": [[0.15, 0.25], [0.85, 0.95]],
"y_test": [0, 1]
}
```
## Testing
Run tests:
```bash
pytest tests/
```
Run with coverage:
```bash
pytest --cov=. --cov-report=html tests/
```
## Project Structure
```
qml-mcp/
├── server.py # Main MCP server
├── config.py # Configuration with Pydantic
├── qml/ # Quantum ML utilities
│ ├── __init__.py
│ └── utils.py # Core QML functions
├── tools/ # Additional tools
├── resources/ # MCP resources
├── prompts/ # Prompt templates
├── tests/ # Test suite
│ ├── test_config.py
│ └── test_qml_utils.py
└── pyproject.toml # Project metadata
```
## Safety and Limits
The server implements several safety mechanisms:
- **Qubit Limits**: Maximum number of qubits per circuit (default: 10)
- **Shot Limits**: Maximum measurement shots (default: 100000)
- **Input Validation**: All inputs are validated before processing
- **Error Handling**: Comprehensive error messages with optional tracebacks
## License
MIT License - see LICENSE file for details.