Qiskit IBM Runtime MCP Server について
Qiskit IBM Runtime MCP Server は、AI アシスタントが Qiskit IBM Runtime を通じて IBM Quantum サービスを利用できるようにする MCP サーバーです。AI との会話から量子回路の作成、実行、管理を行いたいユーザー向けです。
主な機能
- 01EstimatorV2 と SamplerV2 によるプリミティブ実行
- 02量子バックエンドの一覧、プロパティ、キャリブレーションの取得
- 03キャリブレーションデータに基づく量子ビット鎖の探索
- 04ジョブの監視、キャンセル、結果取得
- 05IBM Quantum アカウントの設定と認証情報の管理
活用シーン
- 01AI との会話から IBM 量子バックエンドの状態とキャリブレーションを確認する
- 02VQE や QAOA などの変分アルゴリズム向けに低誤差の量子ビットを選定する
- 03送信済みの量子ジョブを監視し、結果を取得する
MCP 対応
本プロジェクトは MCP サーバーであり、バックエンド照会、回路実行、量子ビット最適化、ジョブ管理をツールとして MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx qiskit-ibm-runtime-mcp-serverQISKIT_IBM_TOKENシークレットYour IBM Quantum API token for authenticationQISKIT_IBM_RUNTIME_MCP_INSTANCEIBM Quantum instance CRN for faster startup (skips instance lookup)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
20掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| token | string | いいえ | |
| channel | string | いいえ |
詳細
Qiskit IBM Runtime MCP サーバー
Qiskit IBM Runtime を通じて、AI アシスタントが IBM Quantum のコンピューティングサービスを利用できるようにする、包括的な Model Context Protocol(MCP)サーバーです。このサーバーにより、AI との会話から量子回路を直接作成、実行、管理できます。
特長
- プリミティブを使用した回路の実行:EstimatorV2(期待値)と SamplerV2(測定サンプリング)を使用して回路を実行します。エラー緩和機能が組み込まれています。
- 量子バックエンドの管理:量子バックエンドの一覧表示、詳細の確認、キャリブレーションデータの取得ができます。
- 量子ビットの最適化:リアルタイムのキャリブレーションデータに基づいて、最適な量子ビットのチェーンとサブグラフを検索します。
- ジョブの管理:ジョブの監視、キャンセル、結果の取得ができます。
- アカウント管理:IBM Quantum アカウントを簡単にセットアップして設定できます。
前提条件
- Python 3.10 以降
- IBM Quantum アカウント(quantum.cloud.ibm.comで無料作成できます)
- IBM Quantum API トークン
インストール
PyPI からインストール
最も簡単なインストール方法は pip を使用することです。
pip install qiskit-ibm-runtime-mcp-server
ソースからインストール
このプロジェクトでは、仮想環境と依存関係の管理にuvを使用することを推奨します。uvがインストールされていない場合は、https://docs.astral.sh/uv/getting-started/installation/の手順を確認してください。
uv を使用したプロジェクトのセットアップ
-
プロジェクトを初期化または同期します:
# This will create a virtual environment and install dependencies uv sync -
IBM Quantum トークンを取得します(認証情報を保存していない場合):
- IBM Quantumにアクセスします。
- API キーを確認します。ダッシュボードから API キーを作成し、認証に使用できるよう安全な場所にコピーします。詳細情報
-
認証情報を設定します(いずれかの方法を選択してください):
オプション A:環境変数(推奨)
# Copy the example environment file cp .env.example .env # Edit .env and add your IBM Quantum API token export QISKIT_IBM_TOKEN="your_token_here" # Optional: Set instance for faster startup (skips instance lookup) export QISKIT_IBM_RUNTIME_MCP_INSTANCE="your-instance-crn"オプション B:認証情報をローカルに保存
from qiskit_ibm_runtime import QiskitRuntimeService # Save your credentials (one-time setup) QiskitRuntimeService.save_account( channel="ibm_quantum_platform", token="your_token_here", overwrite=True )これにより、認証情報が
~/.qiskit/qiskit-ibm.jsonに保存されます。オプション C:トークンを直接渡す
# Provide token when setting up the account await setup_ibm_quantum_account_tool(token="your_token_here")認証情報の優先順位: サーバーは次の順序で認証情報を確認します。
setup_ibm_quantum_account_tool()に明示的に渡されたトークンQISKIT_IBM_TOKEN環境変数~/.qiskit/qiskit-ibm.jsonに保存された認証情報
インスタンスの設定(任意): サービスの初期化を高速化するには、IBM Quantum インスタンスを指定します。
QISKIT_IBM_RUNTIME_MCP_INSTANCE環境変数にインスタンスの CRN を設定します。- 時間がかかる自動インスタンス検索を省略できます。
- インスタンスの CRN はIBM Quantum Platformで確認できます。
インスタンスの優先順位:
- インスタンスを指定して認証情報を保存している場合(
save_account(instance="...")経由)、SDK はそのインスタンスを自動的に使用します。 QISKIT_IBM_RUNTIME_MCP_INSTANCEは、認証情報に保存されたインスタンスより優先されます。- どちらも設定されていない場合、SDK はすべてのインスタンスを対象に時間のかかる検索を実行します。
注:
QISKIT_IBM_RUNTIME_MCP_INSTANCEはこの MCP サーバー固有の変数であり、標準の Qiskit SDK 環境変数ではありません。
クイックスタート
サーバーの実行
uv run qiskit-ibm-runtime-mcp-server
サーバーが起動し、MCP 接続を待ち受けます。
基本的な使用例
非同期での使用(ライブラリ)
# 1. Setup IBM Quantum Account (optional if credentials already configured)
# Will use saved credentials or environment variable if token not provided
await setup_ibm_quantum_account() # Uses saved credentials/env var
# OR
await setup_ibm_quantum_account(token="your_token_here") # Explicit token
# 2. List Available Backends (no setup needed if credentials are saved)
backends = await list_backends()
print(f"Available backends: {len(backends['backends'])}")
# 3. Get the least busy backend
backend = await least_busy_backend()
print(f"Least busy backend: {backend}")
# 4. Get backend's properties
backend_props = await get_backend_properties("backend_name")
print(f"Backend_name properties: {backend_props}")
# 5. List recent jobs
jobs = await list_my_jobs(10)
print(f"Last 10 jobs: {jobs}")
# 6. Get job status
job_status = await get_job_status("job_id")
print(f"Job status: {job_status}")
# 7. Get job results (when job is DONE)
results = await get_job_results("job_id")
print(f"Counts: {results['counts']}")
# 8. Cancel job
cancelled_job = await cancel_job("job_id")
print(f"Cancelled job: {cancelled_job}")
同期使用(スクリプト、Jupyter)
非同期操作をサポートしていないフレームワークでは、すべての非同期関数に .sync 属性があります。
from qiskit_ibm_runtime_mcp_server.ibm_runtime import (
setup_ibm_quantum_account,
list_backends,
least_busy_backend,
get_backend_properties,
get_backend_calibration,
get_coupling_map,
find_optimal_qubit_chains,
find_optimal_qv_qubits,
run_estimator,
run_sampler,
list_my_jobs,
get_job_status,
get_job_results,
cancel_job
)
# Optional: Setup account if not already configured
# Will automatically use QISKIT_IBM_TOKEN env var or saved credentials
setup_ibm_quantum_account.sync() # No token needed if already configured
# Use .sync for synchronous execution - no setup needed if credentials saved
backends = list_backends.sync()
print(f"Available backends: {backends['total_backends']}")
# Get least busy backend
backend = least_busy_backend.sync()
print(f"Least busy: {backend['backend_name']}")
# Find optimal qubit chains for linear experiments
chains = find_optimal_qubit_chains.sync(backend['backend_name'], chain_length=5)
print(f"Best chain: {chains['chains'][0]['qubits']}")
# Find optimal qubits for Quantum Volume experiments
qv_qubits = find_optimal_qv_qubits.sync(backend['backend_name'], num_qubits=5)
print(f"Best QV subgraph: {qv_qubits['subgraphs'][0]['qubits']}")
# Works in Jupyter notebooks (handles nested event loops automatically)
jobs = list_my_jobs.sync(limit=5)
print(f"Recent jobs: {len(jobs['jobs'])}")
LangChain との連携例:
注: LangChain の例を実行するには、依存関係をインストールする必要があります。
pip install langchain langchain-mcp-adapters langchain-openai python-dotenv
import asyncio
import os
from langchain.agents import create_agent
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain_mcp_adapters.tools import load_mcp_tools
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
# Load environment variables (QISKIT_IBM_TOKEN, OPENAI_API_KEY, etc.)
load_dotenv()
async def main():
# Configure MCP client
mcp_client = MultiServerMCPClient({
"qiskit-ibm-runtime": {
"transport": "stdio",
"command": "qiskit-ibm-runtime-mcp-server",
"args": [],
"env": {
"QISKIT_IBM_TOKEN": os.getenv("QISKIT_IBM_TOKEN", ""),
"QISKIT_IBM_RUNTIME_MCP_INSTANCE": os.getenv("QISKIT_IBM_RUNTIME_MCP_INSTANCE", ""),
},
}
})
# Use persistent session for efficient tool calls
async with mcp_client.session("qiskit-ibm-runtime") as session:
tools = await load_mcp_tools(session)
# Create agent with LLM
llm = ChatOpenAI(model="gpt-5.2", temperature=0)
agent = create_agent(llm, tools)
# Run a query
response = await agent.ainvoke("What QPUs are available and which one is least busy?")
print(response)
asyncio.run(main())
その他の LLM プロバイダー(Anthropic、Google、Ollama、Watsonx)や、Jupyter ノートブックを含む詳しい例については、examples/ ディレクトリを参照してください。
API リファレンス
ツール
これらは、MCP クライアントが tools/list で参照する名前です。ホストによっては、名前にプレフィックスが追加されることがあります(例:mcp__<server>__<tool>)。許可リストや権限ルールを設定する前に、クライアントでの名前の表示方法を確認してください。Sync Usage で説明している qiskit_ibm_runtime_mcp_server.ibm_runtime の Python 関数は、_tool サフィックスを除いた同じ名前です。
setup_ibm_quantum_account_tool(token: str = "", channel: str = "ibm_quantum_platform")
API トークンを使用して IBM Quantum アカウントを設定します。
パラメーター:
token(任意):IBM Quantum API トークンです。指定されていない場合、この関数は次の処理を行います。QISKIT_IBM_TOKEN環境変数を確認します~/.qiskit/qiskit-ibm.jsonに保存された認証情報を使用します
channel:サービスチャネル(デフォルト:"ibm_quantum_platform")
戻り値: 設定状態とアカウント情報
注: 認証情報をすでに保存している場合、または QISKIT_IBM_TOKEN 環境変数を設定している場合は、パラメーターなしでこの関数を呼び出すか、この関数を省略して他の関数を直接使用できます。
list_backends_tool()
利用可能な量子バックエンドの一覧を取得します。
戻り値: 次の情報を含むバックエンド情報の配列:
- 名前、ステータス、キューの長さ
- 量子ビット数、結合マップ
- シミュレーターかハードウェアかの区分
least_busy_backend_tool()
現在利用可能な IBM Quantum バックエンドのうち、最も空いているものを取得します。
戻り値: 実行待ちジョブ数が最も少ないバックエンド
get_backend_properties_tool(backend_name: str)
指定したバックエンドの詳細なプロパティを取得します。
戻り値: 次の情報を含むバックエンド設定一式:
- ハードウェア仕様
- ゲートセットと結合マップ
- 現在の稼働状況
- キュー情報
get_coupling_map_tool(backend_name: str)
バックエンドの結合マップ(量子ビットの接続性)を、詳細な分析とともに取得します。
実際のバックエンド(認証情報が必要)とフェイクバックエンド(認証情報不要)の両方をサポートしています。
オフラインテストには fake_ プレフィックスを使用します(例:fake_sherbrooke、fake_brisbane)。
パラメーター:
backend_name:バックエンド名(例:ibm_brisbaneまたはfake_sherbrooke)
戻り値: 次の情報を含む接続情報:
edges:[制御、ターゲット]量子ビット接続ペアの一覧adjacency_list:各量子ビットの隣接量子ビットの対応表bidirectional:すべての接続が双方向に動作するかどうかnum_qubits:量子ビットの総数
用途:
- 回路の最適化と量子ビットのマッピング
- SWAP ゲートの最小化計画
- フェイクバックエンドを使用したオフラインテスト
get_backend_calibration_tool(backend_name: str, qubit_indices: list[int] | None = None)
T1、T2 コヒーレンス時間、エラー率など、バックエンドのキャリブレーションデータを取得します。
パラメーター:
backend_name:バックエンド名(例:ibm_brisbane)qubit_indices(任意):特定の量子ビットインデックスの一覧です。指定されていない場合、最初の 10 個の量子ビットのデータを返します。
戻り値: 次の情報を含むキャリブレーションデータ:
- T1 および T2 コヒーレンス時間(マイクロ秒単位)
- 量子ビット周波数(GHz 単位)
- 各量子ビットの読み出しエラー
- 一般的なゲート(x、sx、cx など)のゲートエラー
faulty_qubits:動作していない量子ビットインデックスの一覧faulty_gates:影響を受ける量子ビットを含む、動作していないゲートの一覧- 最終キャリブレーションのタイムスタンプ
注: 静的なバックエンド情報(processor_type、backend_version、quantum_volume)には、代わりに get_backend_properties_tool を使用してください。
find_optimal_qubit_chains_tool(backend_name, chain_length, num_results, metric)
接続性とキャリブレーションデータに基づいて、量子実験に最適な線形量子ビットチェーンを見つけます。
結合マップの接続性とリアルタイムのキャリブレーションデータを組み合わせて、最適な量子ビットチェーンをアルゴリズムで特定します。線形の量子ビット配置が必要な実験に不可欠です。
パラメーター:
backend_name:バックエンドの名前(例:ibm_brisbane)chain_length:チェーン内の量子ビット数(デフォルト:5、範囲:2~20)num_results:返す上位チェーンの数(デフォルト:5、最大:20)metric:最適化するスコアリング指標:two_qubit_error:CX/ECR ゲートエラーの合計を最小化(デフォルト)readout_error:測定エラーの合計を最小化combined:ゲートエラー、読み出しエラー、コヒーレンスを加重して組み合わせた指標
**戻り値:**詳細な指標を含む、順位付けされたチェーン:
qubits:チェーン内の量子ビットインデックスの順序付きリストscore:合計スコア(低いほど良好)qubit_details:各量子ビットの T1、T2、readout_erroredge_errors:各接続の2量子ビットゲートエラー
ユースケース:
- 変分量子アルゴリズム(VQE、QAOA)用の量子ビットを選択
- 誤り訂正実験向けの線形量子ビット配置を計画
- 状態転送用の高忠実度な量子ビット経路を特定
- 1D 物理シミュレーション向けに量子ビット選択を最適化
find_optimal_qv_qubits_tool(backend_name, num_qubits, num_results, metric)
Quantum Volume 実験に最適な量子ビット部分グラフを見つけます。
線形チェーンとは異なり、Quantum Volume では、量子ビット間の相互作用に必要な SWAP 操作が最小限となる、高密度に接続された量子ビット集合が適しています。このツールは連結部分グラフを見つけ、接続性とキャリブレーション品質に基づいて順位付けします。
パラメーター:
backend_name:バックエンドの名前(例:ibm_brisbane)num_qubits:部分グラフ内の量子ビット数(デフォルト:5、範囲:2~10)num_results:返す上位部分グラフの数(デフォルト:5、最大:20)metric:最適化するスコアリング指標:qv_optimized:QV 向けのバランスの取れたスコアリング(接続性+エラー+コヒーレンス)(デフォルト)connectivity:内部エッジを最大化し、経路長を最小化gate_error:内部エッジ上の2量子ビットゲートエラーの合計を最小化
**戻り値:**詳細な指標を含む、順位付けされた部分グラフ:
qubits:部分グラフ内の量子ビットインデックスのリスト(ソート済み)score:合計スコア(低いほど良好)internal_edges:部分グラフ内のエッジ数connectivity_ratio:internal_edges / max_possible_edgesaverage_path_length:量子ビットのペア間の最短経路長の平均qubit_details:各量子ビットの T1、T2、readout_erroredge_errors:各内部エッジの2量子ビットゲートエラー
ユースケース:
- Quantum Volume 実験に最適な量子ビットを選択
- ランダム回路サンプリング用に高密度接続領域を検索
- 変分アルゴリズム用の高品質な量子ビットクラスターを特定
- 全対全接続が必要なアルゴリズム向けに量子ビットの割り当てを計画
list_my_jobs_tool(limit: int = 10)
アカウントの最近のジョブ一覧を取得します。
パラメーター:
limit:取得するジョブの数
get_job_status_tool(job_id: str)
送信済みジョブのステータスを確認します。
パラメーター:
job_id:ステータスを取得するジョブの ID
**戻り値:**現在のジョブステータス、作成日、バックエンド情報
ジョブステータスの値:
INITIALIZING:ジョブを準備中ですQUEUED:ジョブはキューで待機中ですRUNNING:ジョブを実行中ですDONE:ジョブは正常に完了しましたCANCELLED:ジョブはキャンセルされましたERROR:ジョブはエラーで失敗しました
get_job_results_tool(job_id: str)
完了した量子ジョブの測定結果を取得します。
パラメーター:
job_id:完了したジョブの ID
戻り値: 次の内容を含む辞書:
status:「success」、「pending」、または「error」job_id:ジョブ IDjob_status:ジョブの現在のステータスcounts:測定結果とそのカウント数を含む辞書(例:{"00": 2048, "11": 2048})shots:実行したショットの合計数backend:使用したバックエンドの名前execution_time:量子実行時間(秒)(取得可能な場合)message:ステータスメッセージ
ワークフローの例:
# 1. Submit job
result = await run_sampler_tool(circuit, backend_name)
job_id = result["job_id"]
# 2. Check status (poll until DONE)
status = await get_job_status_tool(job_id)
print(f"Status: {status['job_status']}")
# 3. When DONE, retrieve results
if status['job_status'] == 'DONE':
results = await get_job_results_tool(job_id)
print(f"Counts: {results['counts']}")
cancel_job_tool(job_id: str)
実行中またはキューに登録されているジョブをキャンセルします。
パラメーター:
job_id:キャンセルするジョブの ID
run_estimator_tool(circuit, observables, ...)
Qiskit Runtime EstimatorV2 プリミティブを使用して量子回路を実行します。組み込みの誤り軽減機能を用いて、観測量の期待値を計算します。
パラメーター:
circuit:量子回路(OpenQASM 3.0/2.0 文字列、または base64 でエンコードされた QPY)observables:測定する観測量。次の形式を指定できます:- 単一のパウリ文字列:
"ZZ" - パウリ文字列のリスト:
["IIXY", "ZZII"] - 重み付きハミルトニアン:
[("XX", 0.5), ("ZZ", -0.3)]
- 単一のパウリ文字列:
parameter_values(任意):パラメーター化された回路の値backend_name(任意):バックエンド名。指定しない場合は、最も混雑していないバックエンドを使用します。circuit_format:"auto"(デフォルト)、"qasm3"、または"qpy"optimization_level:トランスパイルのレベル 0~3(デフォルト:1)resilience_level:誤り軽減のレベル 0~2(デフォルト:1)zne_mitigation:Zero Noise Extrapolation を有効にするかどうか(デフォルト:True)zne_noise_factors(任意):ZNE のノイズ係数(デフォルト:(1, 1.5, 2))
戻り値: job_id、backend、および error_mitigation の概要を含むジョブ送信ステータス。
注: ジョブは非同期で実行されます。get_job_status_tool で監視し、get_job_results_tool で期待値を取得してください。
run_sampler_tool(circuit, ...)
Qiskit Runtime SamplerV2 プリミティブを使用して量子回路を実行します。組み込みの誤り軽減機能を用いて、測定結果のサンプルを返します。
パラメーター:
circuit:量子回路(OpenQASM 3.0/2.0 文字列、または base64 でエンコードされた QPY)。測定操作を含める必要があります。backend_name(任意):バックエンド名。指定しない場合は、最も混雑していないバックエンドを使用します。shots:測定の繰り返し回数(デフォルト:4096)circuit_format:"auto"(デフォルト)、"qasm3"、または"qpy"dynamical_decoupling:アイドル期間中のデコヒーレンスを抑制するかどうか(デフォルト:True)dd_sequence:DD パルスシーケンス:"XX"、"XpXm"、または"XY4"(デフォルト)twirling:2 量子ビットゲートに対するパウリ・トワリング(デフォルト:True)measure_twirling:読み出し誤り軽減のための測定トワリング(デフォルト:True)
戻り値: job_id、backend、shots、および error_mitigation の概要を含むジョブ送信ステータス。
注: ジョブは非同期で実行されます。get_job_status_tool で監視し、get_job_results_tool で測定カウントを取得してください。
list_saved_accounts_tool()
ディスクに保存されている IBM Quantum アカウントをすべて一覧表示します。
戻り値: 次の内容を含む辞書:
status:「success」または「error」accounts:保存されたアカウントの辞書(アカウント名をキーとします)- 各アカウントに含まれるもの:channel、url、token(セキュリティのためマスクされます)
message:ステータスメッセージ
注: レスポンスではトークンがマスクされ、末尾の 4 文字のみが表示されます。
delete_saved_account_tool(account_name: str)
保存されている IBM Quantum アカウントをディスクから削除します。
警告: これにより、~/.qiskit/qiskit-ibm.json から認証情報が完全に削除されます。この操作は取り消せません。
パラメーター:
account_name:削除する保存済みアカウントの名前。利用可能な名前を確認するには、list_saved_accounts_tool()を使用してください。
戻り値: 次の内容を含む辞書:
status:「success」または「error」deleted:削除が成功したかどうかを示すブール値message:ステータスメッセージ
active_account_info_tool()
現在アクティブな IBM Quantum アカウントの情報を取得します。
戻り値: 以下を含む辞書です。
status:「success」または「error」account_info:チャネル、URL、トークン(セキュリティのためマスク済み)などのアカウント詳細
注: トークンはレスポンス内でマスクされ、末尾の4文字のみが表示されます。
active_instance_info_tool()
現在アクティブなインスタンスの Cloud Resource Name(CRN)を取得します。
戻り値: 以下を含む辞書です。
status:「success」または「error」instance_crn:アクティブなインスタンスを識別する CRN 文字列
available_instances_tool()
アクティブなアカウントで利用可能な IBM Quantum インスタンスをすべて一覧表示します。
戻り値: 以下を含む辞書です。
status:「success」または「error」instances:CRN、プラン、名前、料金情報を含む、利用可能なインスタンスの一覧total_instances:利用可能なインスタンス数
usage_info_tool()
アクティブなインスタンスの使用統計とクォータ情報を取得します。
戻り値: 以下を含む辞書です。
status:「success」または「error」usage:以下を含む使用状況の指標usage_consumed_seconds:この期間に消費した時間usage_limit_seconds:期間全体のクォータusage_remaining_seconds:残りのクォータusage_limit_reached:上限に達したかどうかを示すブール値usage_period:現在の請求期間
リソース
ibm://status
現在の IBM Quantum サービスのステータスと接続情報を取得します。
circuits://bell-state
|Phi+> = (|00> + |11>)/sqrt(2) を生成する、事前構築済みの2量子ビットのベル状態回路です。返された circuit フィールドをそのまま run_sampler_tool に渡します。予想される結果:約50%が「00」、約50%が「11」です。
circuits://ghz-state
(|000> + |111>)/sqrt(2) を生成する、事前構築済みの3量子ビットの GHZ 状態回路です。予想される結果:約50%が「000」、約50%が「111」です。
circuits://random
事前構築済みの4量子ビットの量子乱数生成回路です。各量子ビットを重ね合わせ状態にして測定します。予想される結果:16通りすべての結果が、それぞれ約6.25%の確率で得られます。
circuits://superposition
最も単純な量子回路です。単一量子ビットにアダマールゲートを適用して、(|0> + |1>)/sqrt(2) を生成します。予想される結果:約50%が「0」、約50%が「1」です。
セキュリティに関する考慮事項
- IBM Quantum トークンを安全に保管する:トークンをバージョン管理に絶対にコミットしないでください。
- 本番環境へのデプロイでは環境変数を使用する:
QISKIT_IBM_TOKEN環境変数を設定します。 - 認証情報の優先順位:サーバーは次の順序で認証情報を自動的に解決します。
- 明示的に指定されたトークンパラメーター(最優先)
QISKIT_IBM_TOKEN環境変数~/.qiskit/qiskit-ibm.jsonに保存された認証情報(最も優先度が低い)
- トークンの検証:認証情報の誤った破損を防ぐため、サーバーは
<PASSWORD>、<TOKEN>などのプレースホルダー値を拒否します。 - 本番環境で使用する場合はレート制限を実装する:API リクエストの頻度を監視します。
- 量子リソースの消費を監視する:ジョブの送信とバックエンドの使用状況を追跡します。
コントリビューション
コントリビューションを歓迎します。改善が期待できる分野は次のとおりです。
- エラー緩和/訂正手法の追加
- その他の qiskit-ibm-runtime の機能
サーバーのテストとデバッグのその他の方法
注:MCP Inspector を起動するには、
nodeandnpmが必要です。
-
ターミナルで、クローンしたリポジトリのディレクトリに移動します。
-
仮想環境に切り替えます。
source .venv/bin/activate -
MCP Inspector を実行します。
npx @modelcontextprotocol/inspector uv run qiskit-ibm-runtime-mcp-server -
コンソールメッセージに表示された URL をブラウザーで開きます。例:
MCP Inspector is up and running at http://localhost:5173
テスト
このプロジェクトには、包括的な単体テストと統合テストが含まれています。
テストの実行
簡単なテストの実行:
./run_tests.sh
手動でのテストコマンド:
# Install test dependencies
uv sync --group dev --group test
# Run all tests
uv run pytest
# Run only unit tests
uv run pytest -m "not integration"
# Run only integration tests
uv run pytest -m "integration"
# Run tests with coverage
uv run pytest --cov=src --cov-report=html
# Run specific test file
uv run pytest tests/test_server.py -v
テスト構成
tests/test_server.py- サーバー関数の単体テストtests/test_sync.py- 同期実行の単体テストtests/test_integration.py- 統合テストtests/conftest.py- テストフィクスチャと設定
テストカバレッジ
テストスイートでは、以下をカバーしています。
- ✅ サービスの初期化とアカウントの設定
- ✅ バックエンドの一覧表示、キャリブレーション、分析
- ✅ EstimatorV2 と SamplerV2 のプリミティブを使用した回路実行
- ✅ ジョブの管理と監視
- ✅ 同期実行(
.syncメソッド) - ✅ エラー処理と入力検証
- ✅ 統合シナリオ
- ✅ リソースハンドラーとツールハンドラー
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。