Skip to main content

MCP server for Qiskit documentation retrieval and search

Project description

qiskit-docs-mcp-server

MCP Registry

MCP server for querying and retrieving Qiskit documentation, guides, and API references.

Overview

The Qiskit Documentation MCP Server provides AI assistants and agents with seamless access to the complete Qiskit documentation ecosystem. It enables intelligent retrieval of SDK module documentation, implementation guides, and best practices through a standardized Model Context Protocol interface.

Key Features

  • 📚 Complete Documentation Access: Query all Qiskit SDK modules, addon packages, API references, guides, and tutorials
  • 🔄 Dynamic Content Discovery: Automatically discovers available documentation from the live sitemap — no manual updates needed when new content is published
  • 📖 Implementation Guides: Access best practices for optimization, error mitigation, dynamic circuits, and more
  • 🔍 Smart Search: Search across the entire Qiskit documentation with fuzzy matching
  • 🎯 No Authentication Required: Public documentation access without API tokens
  • 📝 Markdown Output: Clean, formatted documentation ready for AI consumption
  • ⚡ Fast Retrieval: Efficient HTTP-based documentation fetching with TTL caching and configurable timeouts

Components

Tools

The server implements three tools for documentation access:

Tool Description Parameters
search_docs_tool Search across the entire Qiskit documentation for relevant content query: Search query string
scope: Search scope filter — all (default), documentation, api, learning, tutorials
get_page_tool Fetch any Qiskit documentation page and return as markdown url: Full URL or relative path (e.g., guides/transpile, api/qiskit/circuit)
max_length: Max characters to return (default: 20000, 0 for unlimited)
offset: Character offset for pagination (default: 0)
lookup_error_code_tool Look up a Qiskit/IBM Quantum error code code: 4-digit error code (e.g., 1002, 7001, 8004)

Resources

The server provides six resources for listing available documentation. Content lists for modules, addons, guides, tutorials, and API packages are dynamically discovered from the documentation sitemap and cached, with hardcoded fallback values used when the sitemap is unreachable.

Resource URI Description
qiskit-docs://modules List of all Qiskit SDK modules with URL paths
qiskit-docs://addons List of Qiskit addon packages with URL paths
qiskit-docs://guides List of implementation guides and best practices
qiskit-docs://tutorials List of Qiskit tutorials with URL paths
qiskit-docs://api-packages List of API packages (runtime, transpiler, REST APIs, etc.)
qiskit-docs://error-codes List of Qiskit error code categories

Resource Templates

Resource URI Description
qiskit-docs://modules/{module_name} Documentation for a specific SDK module
qiskit-docs://guides/{guide_name} A specific implementation guide
qiskit-docs://addons/{addon_name} Documentation for a specific addon package

Prerequisites

Installation

Install from PyPI

The easiest way to install is via pip:

pip install qiskit-docs-mcp-server

Or using uvx (recommended):

uvx qiskit-docs-mcp-server

Install from Source

This project uses uv for virtual environments and dependencies management. If you don't have uv installed, check out the instructions in https://docs.astral.sh/uv/getting-started/installation/

Setting up the Project with uv

  1. Clone the repository:

    git clone https://github.com/Qiskit/mcp-servers.git
    cd mcp-servers/qiskit-docs-mcp-server
    
  2. Initialize or sync the project:

    # This will create a virtual environment and install dependencies
    uv sync
    

Configuration

Environment Variables

The server can be configured using environment variables:

Variable Description Default
QISKIT_DOCS_BASE Base URL for Qiskit documentation https://quantum.cloud.ibm.com/docs/
QISKIT_HTTP_TIMEOUT HTTP request timeout in seconds 10.0
QISKIT_DOCS_CACHE_TTL Page cache TTL in seconds 3600.0
QISKIT_SEARCH_CACHE_TTL Search/JSON cache TTL in seconds 300.0
QISKIT_SEARCH_BASE_URL Search API base URL https://quantum.cloud.ibm.com/

Optional Configuration

Create a .env file in the project directory:

# Optional: Customize documentation URLs
QISKIT_DOCS_BASE=https://quantum.cloud.ibm.com/docs/
QISKIT_HTTP_TIMEOUT=15.0
QISKIT_DOCS_CACHE_TTL=3600.0
QISKIT_SEARCH_CACHE_TTL=300.0

Quick Start

Running the Server

uv run qiskit-docs-mcp-server

The server will start and listen for MCP connections.

Using with MCP Clients

Claude Desktop Configuration

Add to your Claude Desktop configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "qiskit-docs": {
      "command": "uvx",
      "args": ["qiskit-docs-mcp-server"]
    }
  }
}

Cline Configuration

Add to your Cline MCP settings:

{
  "mcpServers": {
    "qiskit-docs": {
      "command": "uvx",
      "args": ["qiskit-docs-mcp-server"]
    }
  }
}

LangChain Integration Example

Note: To run LangChain examples you will need to install the dependencies:

pip install langchain-mcp-adapters langchain-openai langgraph
import asyncio

from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent

async def main():
    # Configure MCP client
    async with MultiServerMCPClient(
        {
            "qiskit-docs": {
                "command": "qiskit-docs-mcp-server",
                "args": [],
                "transport": "stdio",
            }
        }
    ) as client:
        # Create agent with LLM and MCP tools
        agent = create_react_agent(
            ChatOpenAI(model="gpt-4o"),
            client.get_tools(),
        )

        # Query documentation
        response = await agent.ainvoke(
            {"messages": [("user", "How do I create a quantum circuit in Qiskit?")]}
        )
        print(response["messages"][-1].content)

asyncio.run(main())

Usage Examples

Search Documentation

# Search for transpiler information
result = await search_docs_tool("transpiler optimization")
print(f"Found {result['total_results']} results")
for item in result["results"]:
    print(f"- {item['title']}: {item['url']}")

Fetch a Documentation Page

# Fetch circuit module API reference
result = await get_page_tool("api/qiskit/circuit")
print(result["documentation"])

# Fetch with pagination for large pages
result = await get_page_tool("api/qiskit/circuit", max_length=5000)
if result["has_more"]:
    next_page = await get_page_tool("api/qiskit/circuit", offset=result["next_offset"])

Look Up an Error Code

# Look up error code 1002
result = await lookup_error_code_tool("1002")
print(result["details"])

Available Documentation

SDK Modules

Module Description
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 quantum circuits
passmanager Transpiler pass manager framework
converters Circuit format converters
compiler High-level compilation routines
primitives Sampler and Estimator primitives
providers Backend providers and job management
result Job result handling and analysis
visualization Circuit and result visualization
qasm2 OpenQASM 2.0 support
qasm3 OpenQASM 3.0 support
qpy Qiskit Python serialization format
utils General utility functions
exceptions Qiskit exception classes

Implementation Guides

Guide Description
quick-start Get started with Qiskit
construct-circuits Build and manipulate quantum circuits
transpile Transpile circuits for target backends
transpiler-stages Understand transpiler pipeline stages
configure-error-mitigation Configure error mitigation for primitives
configure-error-suppression Configure error suppression techniques
primitives Use Sampler and Estimator primitives
execution-modes Job, session, and batch execution modes
dynamic-circuits Mid-circuit measurements and classical control
functions Overview of Qiskit Functions

See the qiskit-docs://guides resource for the complete list of 30+ available guides.

Features

Pagination Support

Large documentation pages are automatically paginated. Use max_length and offset to control content retrieval:

# Fetch first 5000 characters
result = await get_page_tool("api/qiskit/circuit", max_length=5000)
# result["has_more"] == True, result["next_offset"] == 5000

# Fetch unlimited content
result = await get_page_tool("api/qiskit/circuit", max_length=0)

Metadata Inclusion

All responses include rich metadata:

{
    "status": "success",
    "url": "https://quantum.cloud.ibm.com/docs/api/qiskit/circuit",
    "documentation": "...",
    "has_more": False,
    "total_length": 15420,
    "metadata": {
        "url": "https://quantum.cloud.ibm.com/docs/api/qiskit/circuit",
        "timestamp": "2026-03-03T03:00:00Z",
        "content_type": "markdown",
        "content_length": 15420
    }
}

Dynamic Sitemap Discovery

Resource lists (modules, addons, guides, tutorials, API packages) are automatically discovered from the live documentation sitemap at startup. This means the server adapts to new content without code changes. If the sitemap is unreachable, the server falls back to hardcoded values in constants.py.

To update the hardcoded fallback values from the live sitemap:

cd qiskit-docs-mcp-server
uv run python scripts/update_fallback_constants.py

This prints updated constant lists that can be copied into constants.py.

HTML to Markdown Conversion

Documentation is automatically converted from HTML to clean Markdown format, optimized for AI consumption and human readability.

Development

Project Structure

src/qiskit_docs_mcp_server/
├── server.py           # MCP server definition (tools, resources, prompts)
├── data_fetcher.py     # Business logic for fetching and processing documentation
├── http.py             # HTTP infrastructure: client management, caching, retries
├── sitemap.py          # Dynamic sitemap discovery and page classification
├── html_processing.py  # HTML content extraction and markdown conversion
└── constants.py        # Configuration constants and hardcoded fallback values

scripts/
└── update_fallback_constants.py  # Regenerate fallback values from live sitemap

Running Tests

# Run all tests
./run_tests.sh

# Or use pytest directly
uv run pytest tests/ -v

# Run with coverage
uv run pytest tests/ --cov=src --cov-report=html

Code Quality

# Format code
uv run ruff format src/ tests/

# Lint code
uv run ruff check src/ tests/

# Type check
uv run mypy src/

Examples

See the examples/ directory for complete working examples:

Troubleshooting

Connection Issues

Problem: "Failed to fetch documentation" Solution: Check your internet connection and verify access to https://quantum.cloud.ibm.com/docs/

Timeout Errors

Problem: "Request timed out" Solution: Increase the timeout value:

export QISKIT_HTTP_TIMEOUT=30.0

Page Not Found

Problem: "Failed to fetch" error from get_page_tool Solution: Use search_docs_tool to find the correct URL, or check the qiskit-docs://modules and qiskit-docs://guides resources for valid paths

Contributing

Contributions are welcome! Please see the CONTRIBUTING.md file in the repository root for guidelines.

License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

Links

Support

For issues and questions:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qiskit_docs_mcp_server-0.2.0.tar.gz (295.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

qiskit_docs_mcp_server-0.2.0-py3-none-any.whl (28.2 kB view details)

Uploaded Python 3

File details

Details for the file qiskit_docs_mcp_server-0.2.0.tar.gz.

File metadata

  • Download URL: qiskit_docs_mcp_server-0.2.0.tar.gz
  • Upload date:
  • Size: 295.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for qiskit_docs_mcp_server-0.2.0.tar.gz
Algorithm Hash digest
SHA256 1f5edd7e08c67f2c82b9427b105c367cbacceb2531bd8e197c69c5cbfc55ac5c
MD5 dce2a46286c88c5fdb1854ab307c19c5
BLAKE2b-256 03bf2bb885b9de5023cf8fedba8fa7b98e9c2836f8018e539698aecf62bf3eca

See more details on using hashes here.

Provenance

The following attestation bundles were made for qiskit_docs_mcp_server-0.2.0.tar.gz:

Publisher: publish-pypi.yml on Qiskit/mcp-servers

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file qiskit_docs_mcp_server-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for qiskit_docs_mcp_server-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f0e849426cb76dd8121eee75e1cf9a1728c521f36d0fc5826f89685ef160bd04
MD5 b71b490daaafc77191e999770d96214b
BLAKE2b-256 260cf064a015670c1ee599b57ad7496f2ce5ea94588b9a2d26775f72ecbae1e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for qiskit_docs_mcp_server-0.2.0-py3-none-any.whl:

Publisher: publish-pypi.yml on Qiskit/mcp-servers

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page