AnalyticDB for MySQL MCP Server について
AnalyticDB for MySQL MCP Server は、AI エージェントと AnalyticDB MySQL を接続する汎用インターフェースです。クエリ、実行計画、メタデータ参照を行う SQL ツール群と、Alibaba Cloud OpenAPI によるクラスター管理ツール群を提供します。execute_sql は既定で読み取り専用であり、全 SQL 実行には明示的な設定が必要です。
主な機能
- 01SQL 実行、実行計画の確認、メタデータ参照
- 02既定で読み取り専用の execute_sql
- 03OpenAPI によるクラスター、アカウント、ホワイトリスト管理
- 04監視、診断、監査ログ関連のツール
- 05readOnlyHint を付与した読み取り専用ツール
活用シーン
- 01MCP クライアントからの読み取り専用クエリと ADB MySQL のトラブルシューティング
- 02EXPLAIN による実行計画の確認と SQL パフォーマンス分析
- 03管理された環境での OpenAPI によるクラスターとアクセス制御の管理
MCP 対応
本プロジェクトは MCP サーバーであり、SQL ツール、リソース、OpenAPI 管理ツールを MCP クライアントに公開します。stdio、SSE、Streamable HTTP の各トランスポートに対応しています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
AnalyticDB for MySQL MCP サーバー
English | 中文
AnalyticDB for MySQL MCP サーバーは、AI エージェントと AnalyticDB MySQL をつなぐ汎用インターフェースです。次の 2 つのツールグループを提供します。
- SQL ツールとリソース(
sqlグループ):ADB MySQL クラスターに直接接続して、SQL の実行、実行プランの表示、データベースメタデータの参照を行います。sqlグループはツールグループを切り替えるためのもので、execute_sqlはデフォルトで読み取り専用モードで動作します。SQL の完全実行モードを使用するには、追加で明示的にENABLE_SQL_WRITE_TOOLS=trueを設定する必要があります。 - OpenAPI ツール(
openapiグループ):Alibaba Cloud OpenAPI を通じて、クラスター、ホワイトリスト、アカウント、ネットワーク、監視、診断、監査ログを管理します。
読み取り専用ツールには、MCP プロトコルに従って ToolAnnotations(readOnlyHint=True) の注釈が付けられており、クライアントが変更操作と区別できます。
一、前提条件
- Python >= 3.13
- uv(推奨パッケージマネージャー兼ランナー)
- Alibaba Cloud AccessKey(OpenAPI ツールに必要)
- 任意:ADB MySQL 接続認証情報(直接接続モードで SQL ツールを使用する場合)
二、クイックスタート
2.0 構成を選択する
クライアント構成をコピーする前に、用途に合わせてツールグループと追加の設定項目を選択してください。
| シナリオ | ツールグループ | 追加の設定項目 | 最適な用途 |
|---|---|---|---|
| 読み取り専用の SQL クエリ、EXPLAIN、メタデータの参照 | sql | なし | クエリ、トラブルシューティング、読み取り専用の分析に推奨されるデフォルト構成 |
execute_sql による SQL の完全実行 | sql | ENABLE_SQL_WRITE_TOOLS=true | MCP クライアントが信頼できる場合の INSERT/UPDATE/DELETE/DDL/複数ステートメント SQL |
| OpenAPI によるクラスター管理ツールと SQL 読み取りツール | openapi,sql | Alibaba Cloud AK/SK + ADB_MYSQL_* の直接接続設定 | SQL の読み取りアクセスを維持しながら、クラスター、アカウント、ホワイトリスト、診断、監視を操作する場合 |
| OpenAPI と SQL の完全実行 | openapi,sql | Alibaba Cloud AK/SK + ADB_MYSQL_* の直接接続設定 + ENABLE_SQL_WRITE_TOOLS=true | 管理操作と SQL の完全実行 |
MCP_TOOLSETS=sqlは SQL ツールグループのみを有効にします。SQL の完全実行は独立したツールグループではなく、sql_writeツールグループもありません。ENABLE_SQL_WRITE_TOOLS=trueを別途設定して有効にする必要があります。
クライアントを構成する前に、次の点を確認してください。
- データベースへの直接接続モード:
ADB_MYSQL_HOST、ADB_MYSQL_PORT、ADB_MYSQL_USER、ADB_MYSQL_PASSWORDを設定し、必要に応じてADB_MYSQL_DATABASEも設定します。 - 一時アカウントモード:
ADB_MYSQL_USER/ADB_MYSQL_PASSWORDが設定されていないものの AK/SK が利用できる場合、サーバーは OpenAPI を通じて一時的なデータベースアカウントを作成します。SQL ツールの呼び出し時にはregion_idとdb_cluster_idを指定する必要があります。 - リモート SSE / Streamable HTTP:
SERVER_HOSTがループバックアドレスでない場合は、サーバーでAPI_KEYを設定し、クライアントでAuthorization: Bearer <API_KEY>を設定します。 - SQL の完全実行:信頼できるユーザーおよび MCP クライアントに対してのみ有効にし、最小権限のデータベースアカウントを使用してください。
2.1 cherry-studio の使用(推奨)
- cherry-studio をダウンロードしてインストールします
- MCP 環境に必要な
uvをインストールするには、ドキュメントに従ってください - ドキュメントに従って ADB MySQL MCP を設定して使用します。以下の JSON を使って設定をすばやくインポートできます。

設定 A — SQL 読み取りツールのみ(読み取り専用クエリの実行、実行計画の表示、メタデータの参照):
{
"mcpServers": {
"adb-mysql-mcp-server": {
"name": "adb-mysql-mcp-server",
"type": "stdio",
"isActive": true,
"command": "uv",
"args": [
"--directory",
"/path/to/alibabacloud-adb-mysql-mcp-server",
"run",
"adb-mysql-mcp-server"
],
"env": {
"ADB_MYSQL_HOST": "your_adb_mysql_host",
"ADB_MYSQL_PORT": "3306",
"ADB_MYSQL_USER": "your_username",
"ADB_MYSQL_PASSWORD": "your_password",
"ADB_MYSQL_DATABASE": "your_database",
"MCP_TOOLSETS": "sql"
}
}
}
}
設定 B — OpenAPI ツール + SQL 読み取りツール:
注:OpenAPI ツールには、アカウント作成、ホワイトリストの変更、クエリの終了など、変更を伴う管理機能が含まれます。管理操作が意図的に必要な場合にのみ有効にしてください。以下の例では
sqlツールグループも有効にしているため、データベースへの直接接続設定が含まれます。
{
"mcpServers": {
"adb-mysql-mcp-server": {
"name": "adb-mysql-mcp-server",
"type": "stdio",
"isActive": true,
"command": "uv",
"args": [
"--directory",
"/path/to/alibabacloud-adb-mysql-mcp-server",
"run",
"adb-mysql-mcp-server"
],
"env": {
"ALIBABA_CLOUD_ACCESS_KEY_ID": "your_access_key_id",
"ALIBABA_CLOUD_ACCESS_KEY_SECRET": "your_access_key_secret",
"ADB_MYSQL_HOST": "your_adb_mysql_host",
"ADB_MYSQL_PORT": "3306",
"ADB_MYSQL_USER": "your_username",
"ADB_MYSQL_PASSWORD": "your_password",
"ADB_MYSQL_DATABASE": "your_database",
"MCP_TOOLSETS": "openapi,sql"
}
}
}
}
OpenAPI 管理ツールのみを使用し、SQL ツールやリソースが不要な場合は、MCP_TOOLSETS を openapi に変更し、ADB_MYSQL_* の直接データベース設定を削除してください。
設定 C — execute_sql による完全な SQL 実行:
警告:
ENABLE_SQL_WRITE_TOOLS=trueにすると、execute_sqlで完全な SQL 実行が可能になります。サーバーが行うのは基本的な入力検証のみで、ステートメントの種類、コメント、セミコロン、複数ステートメントの SQL、DDL、DML、DCL、TCL は制限されません。信頼できるユーザーに対してのみ有効にし、最小権限のデータベースアカウントを使用してください。
{
"mcpServers": {
"adb-mysql-mcp-server": {
"name": "adb-mysql-mcp-server",
"type": "stdio",
"isActive": true,
"command": "uv",
"args": [
"--directory",
"/path/to/alibabacloud-adb-mysql-mcp-server",
"run",
"adb-mysql-mcp-server"
],
"env": {
"ADB_MYSQL_HOST": "your_adb_mysql_host",
"ADB_MYSQL_PORT": "3306",
"ADB_MYSQL_USER": "your_username",
"ADB_MYSQL_PASSWORD": "your_password",
"ADB_MYSQL_DATABASE": "your_database",
"MCP_TOOLSETS": "sql",
"ENABLE_SQL_WRITE_TOOLS": "true"
}
}
}
}
設定 D — OpenAPI ツール + 完全な SQL 実行:
警告:この設定では、OpenAPI 管理機能と
execute_sqlによる完全な SQL 実行の両方が有効になります。信頼できるクライアント、信頼できるユーザー、および最小権限のデータベースアカウントを使用する場合にのみ有効にしてください。
{
"mcpServers": {
"adb-mysql-mcp-server": {
"name": "adb-mysql-mcp-server",
"type": "stdio",
"isActive": true,
"command": "uv",
"args": [
"--directory",
"/path/to/alibabacloud-adb-mysql-mcp-server",
"run",
"adb-mysql-mcp-server"
],
"env": {
"ALIBABA_CLOUD_ACCESS_KEY_ID": "your_access_key_id",
"ALIBABA_CLOUD_ACCESS_KEY_SECRET": "your_access_key_secret",
"ADB_MYSQL_HOST": "your_adb_mysql_host",
"ADB_MYSQL_PORT": "3306",
"ADB_MYSQL_USER": "your_username",
"ADB_MYSQL_PASSWORD": "your_password",
"ADB_MYSQL_DATABASE": "your_database",
"MCP_TOOLSETS": "openapi,sql",
"ENABLE_SQL_WRITE_TOOLS": "true"
}
}
}
}
MCP_TOOLSETSが設定されていない場合、有効になるのはsqlグループのみで、execute_sqlは引き続きデフォルトで読み取り専用モードで実行されます。AK/SK が設定されていない場合、要求されていても OpenAPI ツールは自動的に無効になります。
2.2 Claude Code の使用
GitHub からダウンロードし、依存関係を同期します。
git clone https://github.com/aliyun/alibabacloud-adb-mysql-mcp-server
cd alibabacloud-adb-mysql-mcp-server
uv sync
次の設定を Claude Code の MCP 設定ファイルに追加します(プロジェクトレベル:プロジェクトのルートにある .mcp.json、またはユーザーレベル:~/.claude/settings.json)。
stdio トランスポート:
{
"mcpServers": {
"adb-mysql-mcp-server": {
"command": "uv",
"args": [
"--directory",
"/path/to/alibabacloud-adb-mysql-mcp-server",
"run",
"adb-mysql-mcp-server"
],
"env": {
"MCP_TOOLSETS": "sql",
"ADB_MYSQL_HOST": "your_adb_mysql_host",
"ADB_MYSQL_PORT": "3306",
"ADB_MYSQL_USER": "your_username",
"ADB_MYSQL_PASSWORD": "your_password",
"ADB_MYSQL_DATABASE": "your_database"
}
}
}
}
OpenAPI 管理ツールを使用するには、ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET を追加し、MCP_TOOLSETS に openapi を明示的に含めます。以下の例では、一般的な設定 MCP_TOOLSETS=openapi,sql を使用しているため、直接データベース接続の設定も含まれています。設定をコピーすると、SQL 読み取りツールも使用できます。
{
"mcpServers": {
"adb-mysql-mcp-server": {
"command": "uv",
"args": [
"--directory",
"/path/to/alibabacloud-adb-mysql-mcp-server",
"run",
"adb-mysql-mcp-server"
],
"env": {
"ALIBABA_CLOUD_ACCESS_KEY_ID": "your_access_key_id",
"ALIBABA_CLOUD_ACCESS_KEY_SECRET": "your_access_key_secret",
"MCP_TOOLSETS": "openapi,sql",
"ADB_MYSQL_HOST": "your_adb_mysql_host",
"ADB_MYSQL_PORT": "3306",
"ADB_MYSQL_USER": "your_username",
"ADB_MYSQL_PASSWORD": "your_password",
"ADB_MYSQL_DATABASE": "your_database"
}
}
}
}
OpenAPI 管理ツールのみを使用し、SQL ツールやリソースが不要な場合は、MCP_TOOLSETS を openapi に変更し、ADB_MYSQL_* の直接データベース設定を削除します。
execute_sql で SQL を完全に実行するには、MCP_TOOLSETS=sql を維持し、ENABLE_SQL_WRITE_TOOLS=true を設定します。MCP_TOOLSETS=sql または MCP_TOOLSETS=all だけでは、SQL の完全な実行は有効にならないことに注意してください。
{
"mcpServers": {
"adb-mysql-mcp-server": {
"command": "uv",
"args": [
"--directory",
"/path/to/alibabacloud-adb-mysql-mcp-server",
"run",
"adb-mysql-mcp-server"
],
"env": {
"MCP_TOOLSETS": "sql",
"ENABLE_SQL_WRITE_TOOLS": "true",
"ADB_MYSQL_HOST": "your_adb_mysql_host",
"ADB_MYSQL_PORT": "3306",
"ADB_MYSQL_USER": "your_username",
"ADB_MYSQL_PASSWORD": "your_password",
"ADB_MYSQL_DATABASE": "your_database"
}
}
}
}
OpenAPI 管理と SQL の完全な実行の両方が必要な場合は、MCP_TOOLSETS=openapi,sql を使用し、ENABLE_SQL_WRITE_TOOLS=true を設定します。
{
"mcpServers": {
"adb-mysql-mcp-server": {
"command": "uv",
"args": [
"--directory",
"/path/to/alibabacloud-adb-mysql-mcp-server",
"run",
"adb-mysql-mcp-server"
],
"env": {
"ALIBABA_CLOUD_ACCESS_KEY_ID": "your_access_key_id",
"ALIBABA_CLOUD_ACCESS_KEY_SECRET": "your_access_key_secret",
"MCP_TOOLSETS": "openapi,sql",
"ENABLE_SQL_WRITE_TOOLS": "true",
"ADB_MYSQL_HOST": "your_adb_mysql_host",
"ADB_MYSQL_PORT": "3306",
"ADB_MYSQL_USER": "your_username",
"ADB_MYSQL_PASSWORD": "your_password",
"ADB_MYSQL_DATABASE": "your_database"
}
}
}
}
SSE トランスポート — 先にサーバーを起動してから、クライアントを設定します。
export MCP_TOOLSETS=sql
export ADB_MYSQL_HOST="your_adb_mysql_host"
export ADB_MYSQL_PORT="3306"
export ADB_MYSQL_USER="your_username"
export ADB_MYSQL_PASSWORD="your_password"
export ADB_MYSQL_DATABASE="your_database"
export SERVER_TRANSPORT=sse
export SERVER_HOST=127.0.0.1
export SERVER_PORT=8000
# API_KEY is required when SERVER_HOST is not a loopback address. Use at least 32 characters.
# export API_KEY="replace-with-a-random-token-at-least-32-chars"
# To enable OpenAPI management tools, add AK/SK and explicitly include openapi:
# export ALIBABA_CLOUD_ACCESS_KEY_ID="your_access_key_id"
# export ALIBABA_CLOUD_ACCESS_KEY_SECRET="your_access_key_secret"
# export MCP_TOOLSETS=openapi,sql
# To enable full SQL execution through execute_sql, explicitly set:
# export ENABLE_SQL_WRITE_TOOLS=true
uv --directory /path/to/alibabacloud-adb-mysql-mcp-server run adb-mysql-mcp-server
{
"mcpServers": {
"adb-mysql-mcp-server": {
"url": "http://localhost:8000/sse"
}
}
}
サーバーがループバック以外のホストにバインドされている場合は、サーバー側で API_KEY を設定し、クライアント側から HTTP ヘッダーとして送信します。つまり、API_KEY はサーバー側のトークンで、Authorization: Bearer <API_KEY> はクライアント側のリクエストヘッダーです。
# Server side
export SERVER_TRANSPORT=sse
export SERVER_HOST=0.0.0.0
export API_KEY="replace-with-a-random-token-at-least-32-chars"
uv --directory /path/to/alibabacloud-adb-mysql-mcp-server run adb-mysql-mcp-server
{
"mcpServers": {
"adb-mysql-mcp-server": {
"url": "http://your-server-host:8000/sse",
"headers": {
"Authorization": "Bearer replace-with-a-random-token-at-least-32-chars"
}
}
}
}
Streamable HTTP トランスポート — 先にサーバーを起動してから、クライアントを設定します。
export MCP_TOOLSETS=sql
export ADB_MYSQL_HOST="your_adb_mysql_host"
export ADB_MYSQL_PORT="3306"
export ADB_MYSQL_USER="your_username"
export ADB_MYSQL_PASSWORD="your_password"
export ADB_MYSQL_DATABASE="your_database"
export SERVER_TRANSPORT=streamable_http
export SERVER_HOST=127.0.0.1
export SERVER_PORT=8000
# API_KEY is required when SERVER_HOST is not a loopback address. Use at least 32 characters.
# export API_KEY="replace-with-a-random-token-at-least-32-chars"
# To enable OpenAPI management tools, add AK/SK and explicitly include openapi:
# export ALIBABA_CLOUD_ACCESS_KEY_ID="your_access_key_id"
# export ALIBABA_CLOUD_ACCESS_KEY_SECRET="your_access_key_secret"
# export MCP_TOOLSETS=openapi,sql
# To enable full SQL execution through execute_sql, explicitly set:
# export ENABLE_SQL_WRITE_TOOLS=true
uv --directory /path/to/alibabacloud-adb-mysql-mcp-server run adb-mysql-mcp-server
{
"mcpServers": {
"adb-mysql-mcp-server": {
"url": "http://localhost:8000/mcp"
}
}
}
ループバック以外のホストで streamable_http を使用する場合は、上記と同じく、サーバー側の API_KEY とクライアント側の Authorization: Bearer <API_KEY> ヘッダーを使用します。クライアントの完全な JSON 設定例:
{
"mcpServers": {
"adb-mysql-mcp-server": {
"url": "http://your-server-host:8000/mcp",
"headers": {
"Authorization": "Bearer replace-with-a-random-token-at-least-32-chars"
}
}
}
}
注:
ADB_MYSQL_USERとADB_MYSQL_PASSWORDが設定されておらず、AK/SK が使用可能な場合、SQL の実行時に OpenAPI 経由で一時的なデータベースアカウントが自動的に作成され、実行後に削除されます。
2.3 Cline の使用
環境変数を設定し、MCP サーバーを実行します。
export MCP_TOOLSETS=sql
export ADB_MYSQL_HOST="your_adb_mysql_host"
export ADB_MYSQL_PORT="3306"
export ADB_MYSQL_USER="your_username"
export ADB_MYSQL_PASSWORD="your_password"
export ADB_MYSQL_DATABASE="your_database"
export SERVER_TRANSPORT=sse
export SERVER_HOST=127.0.0.1
export SERVER_PORT=8000
# To enable OpenAPI management tools, add AK/SK and explicitly include openapi:
# export ALIBABA_CLOUD_ACCESS_KEY_ID="your_access_key_id"
# export ALIBABA_CLOUD_ACCESS_KEY_SECRET="your_access_key_secret"
# export MCP_TOOLSETS=openapi,sql
uv --directory /path/to/alibabacloud-adb-mysql-mcp-server run adb-mysql-mcp-server
次に、Cline のリモートサーバーを設定します。
remote_server = "http://127.0.0.1:8000/sse"
2.4 動作確認
サーバーを起動して MCP クライアントに接続したら、データを変更せずにセットアップを確認するため、次の読み取り専用ステートメントを実行します。
select 1 as ok;
select current_date as today, current_timestamp as now_time;
get_query_plan または get_execution_plan を使用して、クエリプランツールをテストすることもできます。
select 1 as plan_test;
デフォルトの読み取り専用モードでは、次の複数ステートメント SQL は拒否されます。これにより、単一ステートメント保護が有効であることを確認できます。
select 1; select 2;
書き込み保護をさらに確認するには、テスト用データベースで実行するか、テーブル名を確認してから、次のステートメントを実行してください。デフォルトの読み取り専用モードでは拒否されます。
update your_table set id = id where 1 = 0;
実際のテーブル名がまだわからない場合は、テーブルを指定した SQL を実行しないでください。show databases;、MCP リソース adbmysql:///databases、または adbmysql:///{database}/tables から始めて、メタデータを確認してください。
三、環境変数
| 変数 | 必須 | 説明 |
|---|---|---|
ALIBABA_CLOUD_ACCESS_KEY_ID | はい(OpenAPI ツール) | Alibaba Cloud AccessKey ID |
ALIBABA_CLOUD_ACCESS_KEY_SECRET | はい(OpenAPI ツール) | Alibaba Cloud AccessKey Secret |
ALIBABA_CLOUD_SECURITY_TOKEN | いいえ | STS 一時セキュリティトークン |
ADB_MYSQL_HOST | いいえ | データベースのホスト(直接接続モード) |
ADB_MYSQL_PORT | いいえ | データベースのポート。デフォルトは 3306(直接接続モード) |
ADB_MYSQL_USER | いいえ | データベースのユーザー名(直接接続モード) |
ADB_MYSQL_PASSWORD | いいえ | データベースのパスワード(直接接続モード) |
ADB_MYSQL_DATABASE | いいえ | デフォルトのデータベース名(直接接続モード) |
ADB_MYSQL_CONNECT_TIMEOUT | いいえ | データベース接続のタイムアウト秒数。デフォルトは 2 |
ADB_MYSQL_MAX_SQL_LENGTH | いいえ | 受け付ける SQL 文の最大長。デフォルトは 10000。正の整数である必要があります |
ADB_API_CONNECT_TIMEOUT | いいえ | OpenAPI 接続のタイムアウト時間(ミリ秒)。デフォルトは 10000(10 秒) |
ADB_API_READ_TIMEOUT | いいえ | OpenAPI 読み取りのタイムアウト時間(ミリ秒)。デフォルトは 300000(5 分) |
MCP_TOOLSETS | いいえ | 有効にするツールグループをカンマ区切りで指定します。デフォルト:sql。サポートされているグループ:sql、openapi。ショートカット:all は openapi,sql に展開されます。この変数はツールグループの公開のみを制御し、SQL の完全実行権限は制御しません |
SERVER_TRANSPORT | いいえ | トランスポートプロトコル:stdio(デフォルト)、sse、streamable_http |
SERVER_HOST | いいえ | SSE/HTTP のバインド先ホスト。デフォルトは 127.0.0.1。ループバック以外のホストでは API_KEY が必要です |
SERVER_PORT | いいえ | SSE/HTTP サーバーのポート。デフォルトは 8000 |
API_KEY | いいえ | MCP HTTP 認証トークン。設定されている場合、クライアントは Authorization: Bearer <API_KEY> を送信する必要があります。ループバック以外のホストでは必須です。32 文字以上を使用してください |
ENABLE_SQL_WRITE_TOOLS | いいえ | execute_sql を SQL 完全実行モードにするかどうかを制御します。デフォルト:false。SQL 完全実行モードにするには、明示的に true に設定する必要があります。実際に実行できる範囲は、データベースアカウントの権限、データベースドライバー、SQL の最大長による制限も受けます |
四、ツール一覧
デフォルトでは sql グループのみが有効で、execute_sql では読み取り専用の SQL のみ実行できます。openapi グループは、MCP_TOOLSETS に openapi が明示的に含まれている場合にのみ有効になります。MCP_TOOLSETS はツールグループの公開のみを制御します。execute_sql による SQL の完全実行は、別途 ENABLE_SQL_WRITE_TOOLS=true で有効にする必要があります。
4.1 クラスター管理(グループ:openapi)
| ツール | 説明 |
|---|---|
describe_db_clusters | リージョン内の ADB MySQL クラスターを一覧表示します |
describe_db_cluster_attribute | クラスターの詳細な属性を取得します |
describe_cluster_access_whitelist | クラスターの IP ホワイトリストを取得します |
modify_cluster_access_whitelist | クラスターの IP ホワイトリストを変更します |
describe_accounts | クラスター内のデータベースアカウントを一覧表示します |
describe_cluster_net_info | クラスターのネットワーク接続情報を取得します |
get_current_time | 現在のサーバー時刻を取得します |
4.2 診断とモニタリング(グループ:openapi)
| ツール | 説明 |
|---|---|
describe_db_cluster_performance | クラスターのパフォーマンス指標(CPU、メモリ、QPS など)を照会します |
describe_db_cluster_health_status | クラスターのヘルスステータスを照会します |
describe_diagnosis_records | SQL 診断の概要レコードを照会します |
describe_diagnosis_sql_info | SQL の実行詳細(プラン、実行時情報)を取得します |
describe_bad_sql_detection | クラスターの安定性に影響する問題のある SQL を検出します |
describe_sql_patterns | SQL パターンの一覧を照会します |
describe_table_statistics | テーブル単位の統計情報を照会します |
4.3 管理と監査(グループ:openapi)
| ツール | 説明 |
|---|---|
create_account | データベースアカウントを作成します |
modify_db_cluster_description | クラスターの説明を変更します |
describe_db_cluster_space_summary | クラスターのストレージ容量の概要を取得します |
describe_audit_log_records | SQL 監査ログのレコードを照会します |
4.4 高度な診断(グループ:openapi)
| ツール | 説明 |
|---|---|
describe_executor_detection | コンピュートノードの診断 |
describe_worker_detection | ストレージノードの診断 |
describe_controller_detection | アクセスノードの診断 |
describe_available_advices | 最適化に関する推奨事項を取得 |
kill_process | 実行中のクエリプロセスを終了 |
describe_db_resource_group | リソースグループの設定を取得 |
describe_excessive_primary_keys | 主キーが過剰なテーブルを検出 |
describe_oversize_non_partition_table_infos | サイズが過大な非パーティションテーブルを検出 |
describe_table_partition_diagnose | テーブルのパーティション分割に関する問題を診断 |
describe_inclined_tables | データが偏っているテーブルを検出 |
4.5 SQL ツール(グループ:sql)
| ツール | 説明 |
|---|---|
execute_sql | ADB MySQL クラスターで SQL を実行します。デフォルトでは読み取り専用 SQL が許可されます。すべての SQL の実行には ENABLE_SQL_WRITE_TOOLS=true が必要です |
get_query_plan | 単一の SELECT 文または読み取り専用の WITH CTE 文の EXPLAIN 実行計画を取得 |
get_execution_plan | 単一の SELECT 文または読み取り専用の WITH CTE 文の EXPLAIN ANALYZE 実行時実行計画を取得 |
4.6 MCP リソース(グループ:sql)
MCP リソースは sql グループに割り当てられています。SQL 接続を通じて、SHOW DATABASES、SHOW TABLES、SHOW CREATE TABLE、SHOW adb_config などのデータベースメタデータを読み取るためです。これらは読み取り専用のメタデータリソースであり、デフォルトの SQL 読み取りグループと合わせて利用できます。
| リソース URI | 説明 |
|---|---|
adbmysql:///databases | すべてのデータベースを一覧表示 |
adbmysql:///{database}/tables | データベース内のすべてのテーブルを一覧表示 |
adbmysql:///{database}/{table}/ddl | テーブルの DDL を取得 |
adbmysql:///config/{key}/value | 設定キーの値を取得 |
五、セキュリティポリシー
5.1 読み取り専用 SQL モード
ENABLE_SQL_WRITE_TOOLS が true に設定されていない場合、execute_sql は読み取り専用モードで実行されます。サーバーはデータベース接続を開く前に SQL を検証します。
SELECT、SHOW、DESCRIBE、DESC、EXPLAIN、読み取り専用のWITHCTE 文などの読み取り専用 SQL を許可します。- 末尾のセミコロンを 1 つだけ任意で許可し、実行前に取り除きます。
- 複数の SQL 文を拒否します。
- 文字列または引用符付き識別子の外側にある SQL コメントを拒否します。
- 閉じられていない文字列または引用符付き識別子を拒否します。
- ネストされた書き込み操作を含め、
SELECTまたはWITH本体内の書き込みキーワードを拒否します。 SELECT ... INTO OUTFILEおよびSELECT ... INTO DUMPFILEを拒否します。
このモードは、AI クライアントによる偶発的または許可されていない変更を減らすことを目的としています。
5.2 すべての SQL を実行するモード
リスクに関する注意: すべての SQL を実行するモードでは、MCP サーバーが汎用の SQL 実行エントリーポイントを提供します。有効にすると、サーバーは SQL が読み取り用か書き込み用かを判定しなくなり、複数文の SQL、コメント、DDL、DML、DCL、TCL をブロックしません。信頼できるユーザー、信頼できる MCP クライアント、および最小権限のデータベースアカウントに対してのみ有効にしてください。
ENABLE_SQL_WRITE_TOOLS=true の場合、execute_sql はすべての SQL を実行するエントリーポイントになります。サーバーが行うのは基本的な入力検証のみです。値が文字列であること、前後の空白を除去した後に空でないこと、および ADB_MYSQL_MAX_SQL_LENGTH を超えないことを確認します。
このモードを有効にすると、サーバーは文の種類、コメント、セミコロン、複数文の SQL、DDL、DML、DCL、TCL を制限せず、SQL 構文の検証も行いません。設定されたデータベースアカウントおよびデータベースドライバーが受け付ける SQL は、いずれも実行される可能性があります。
get_query_plan と get_execution_plan は、すべての SQL を実行するツールではありません。ENABLE_SQL_WRITE_TOOLS=true の場合でも、入力を単一の読み取り専用 SELECT 文または読み取り専用の WITH CTE 文として常に検証します。
5.3 運用上の推奨事項
- 強力な
API_KEYを設定しないまま、SSE または Streamable HTTP をパブリックネットワークや共有ネットワークに公開しないでください。 - エントロピーの高い API キーを使用し、共有された可能性がある場合はローテーションしてください。
- 読み取り専用のデプロイでは、読み取り専用のデータベースアカウントを使用してください。
- SQL の完全な実行を有効にする場合は、最小権限のデータベースアカウントを使用してください。
- OpenAPI ツールは、信頼できる管理シナリオでのみ有効にしてください。
七、ローカル開発
git clone https://github.com/aliyun/alibabacloud-adb-mysql-mcp-server
cd alibabacloud-adb-mysql-mcp-server
uv sync
テストを実行します:
uv run python -m pytest test/ -v
MCP Inspector でデバッグします:
npx @modelcontextprotocol/inspector \
-e ALIBABA_CLOUD_ACCESS_KEY_ID=your_ak \
-e ALIBABA_CLOUD_ACCESS_KEY_SECRET=your_sk \
-e ADB_MYSQL_HOST=your_adb_mysql_host \
-e ADB_MYSQL_PORT=3306 \
-e ADB_MYSQL_USER=your_username \
-e ADB_MYSQL_PASSWORD=your_password \
-e ADB_MYSQL_DATABASE=your_database \
-e MCP_TOOLSETS=openapi,sql \
uv --directory /path/to/alibabacloud-adb-mysql-mcp-server run adb-mysql-mcp-server
七、SKILL
上記の MCP サーバーに加えて、このプロジェクトでは skill/ ディレクトリに独立した SKILL も用意しています。この Skill は、この MCP サーバーに依存せず、Claude Code に直接デプロイできます(SKILL ディレクトリ内の call_adb_api.py を通じて ADB MySQL OpenAPI を呼び出します)。
この Skill では、クラスター情報の照会、パフォーマンス監視、スロークエリの診断、SQL Pattern の分析、SQL の実行に対応しており、一般的なシナリオ向けのガイド付き診断ワークフローも組み込まれています。
セットアップと使用方法の詳細については、skill/skill_readme.md を参照してください。
注:この Skill は、今後、次世代 Agent と連携して進化させる予定です。ご期待ください。
ライセンス
Apache License 2.0
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。