ツール: execute_sql
Cloud SQL インスタンスで、データ定義言語(DDL)、データ制御言語(DCL)、データクエリ言語(DQL)、データ操作言語(DML)のステートメントなど、有効な SQL ステートメントを実行します。
execute_sql ツールをサポートするには、Cloud SQL インスタンスが次の要件を満たしている必要があります。
data_api_accessの値はALLOW_DATA_APIに設定する必要があります。- MySQL インスタンスの場合、データベース フラグ
cloudsql_iam_authenticationはonに設定する必要があります。PostgreSQL インスタンスの場合、データベース フラグcloudsql.iam_authenticationはonに設定する必要があります。 execute_sqlツールを呼び出すには、IAM ユーザー アカウントまたは IAM サービス アカウント(CLOUD_IAM_USERまたはCLOUD_IAM_SERVICE_ACCOUNT)が必要です。このツールは、IAM データベース認証でログインしたデータベース ユーザーの権限を使用して SQL ステートメントを実行します。
create_instance ツールを使用してインスタンスを作成したら、create_user ツールを使用して、現在プロジェクトにログインしているユーザーの IAM ユーザー アカウントを作成できます。
execute_sql ツールには次の制限があります。
- SQL ステートメントが 10 MB を超えるレスポンスを返すと、レスポンスは切り捨てられます。
execute_sqlツールのデフォルトのタイムアウトは 30 秒です。クエリの実行時間が 30 秒を超えると、ツールはDEADLINE_EXCEEDEDエラーを返します。execute_sqlツールは SQL Server ではサポートされていません。
「IAM 認証がインスタンスで有効になっていません」のようなエラーが表示された場合は、get_instance ツールを使用して、インスタンスの IAM データベース認証フラグの値を確認できます。
「The instance doesn't allow using executeSql to access this instance」などのエラーが表示された場合は、get_instance ツールを使用して data_api_access 設定を確認できます。
認証エラーが発生した場合:
list_usersツールを使用して、現在ログインしているユーザー アカウントがインスタンスの IAM ユーザーとして存在するかどうかを確認します。- IAM ユーザー アカウントが存在しない場合は、
create_userツールを使用して、ログイン ユーザーの IAM ユーザー アカウントを作成します。 - 現在ログインしているユーザーに適切なデータベース ユーザーロールがない場合は、
update_userツールを使用してユーザーにデータベース ロールを付与できます。たとえば、cloudsqlsuperuserロールは、IAM ユーザーに必要な多くの権限を付与できます。 現在ログインしているユーザーに、プロジェクトに割り当てられている適切な IAM 権限があるかどうかを確認します。
gcloud projects get-iam-policy [PROJECT_ID]コマンドを使用して、ユーザーにプロジェクトに対する適切な IAM ロールまたは権限が割り当てられているかどうかを確認できます。- 自動 IAM データベース認証を行うには、ユーザーに
cloudsql.instance.login権限が必要です。 execute_sqlツールまたはexecuteSqlAPI を使用して SQL ステートメントを実行するには、cloudsql.instances.executeSql権限が必要です。- 必要な権限を含む一般的な IAM ロール: Cloud SQL インスタンス ユーザー(
roles/cloudsql.instanceUser)または Cloud SQL 管理者(roles/cloudsql.admin)
- 自動 IAM データベース認証を行うには、ユーザーに
ExecuteSqlResponse を受け取った場合は、レスポンスの本文内の message フィールドと status フィールドを必ず確認してください。HTTP ステータス コードが成功を示していても、すべての SQL ステートメントが完全に成功するとは限りません。message フィールドと status フィールドは、SQL ステートメントの実行中に部分的なエラーまたは警告が発生したかどうかを示します。
次のサンプルは、curl を使用して execute_sql MCP ツールを呼び出す方法を示しています。
| Curl リクエスト |
|---|
curl --location 'https://sqladmin.googleapis.com/mcp' \ --header 'content-type: application/json' \ --header 'accept: application/json, text/event-stream' \ --data '{ "method": "tools/call", "params": { "name": "execute_sql", "arguments": { // provide these details according to the tool's MCP specification } }, "jsonrpc": "2.0", "id": 1 }' |
入力スキーマ
MCP のインスタンス実行 SQL リクエスト。
SqlInstancesExecuteSqlMcpRequest
| JSON 表現 |
|---|
{ "instance": string, "project": string, "sqlStatement": string, "database": string } |
| フィールド | |
|---|---|
instance |
必須。データベース インスタンス ID。プロジェクト ID は含みません。 |
project |
必須。インスタンスを含むプロジェクトのプロジェクト ID。 |
sqlStatement |
必須。データベースで実行する SQL ステートメント。単一のステートメントまたはセミコロンで区切られたステートメントのシーケンスを指定できます。 |
database |
省略可。ステートメントが実行されるデータベースの名前。Postgres では必須ですが、MySQL では省略可能です。Postgres の場合、クエリが既存のデータベース(データベースのリスト表示、新しいデータベースの作成、ロールの付与など)にスコープ設定されていない場合は、デフォルト値として postgres を渡すことができます。 |
出力スキーマ
SQL ステートメントの実行のレスポンス。
SqlInstancesExecuteSqlResponse
| JSON 表現 |
|---|
{ "messages": [ { object ( |
| フィールド | |
|---|---|
messages[] |
クエリ実行中に生成された通知と警告のリスト。PostgreSQL の場合、これにはすべての通知と警告が含まれます。MySQL の場合、これには最後に実行されたステートメントによって生成された警告が含まれます。マルチステートメント クエリのすべての警告を取得するには、各ステートメントの後に |
metadata |
SQL ステートメントの実行に関する追加のメタデータ情報。 |
results[] |
すべての SQL ステートメントを実行した後の結果のリスト。 |
status |
SQL 実行が失敗した場合、データベースからのエラーが含まれます。 |
メッセージ
| JSON 表現 |
|---|
{ // Union field |
| フィールド | |
|---|---|
共用体フィールド
|
|
message |
メッセージ文字列の全文。PostgreSQL の場合、これは重大度、コード、通知/警告メッセージを含む書式設定された文字列です。MySQL の場合、これには警告メッセージが含まれます。 |
共用体フィールド
|
|
severity |
メッセージの重大度(PostgreSQL の場合は「NOTICE」、MySQL の場合は「WARNING」)。 |
メタデータ
| JSON 表現 |
|---|
{ "sqlStatementExecutionTime": string } |
| フィールド | |
|---|---|
sqlStatementExecutionTime |
SQL ステートメントの実行にかかった時間。
|
所要時間
| JSON 表現 |
|---|
{ "seconds": string, "nanos": integer } |
| フィールド | |
|---|---|
seconds |
期間の符号付き秒数。-315,576,000,000 ~+315,576,000,000 の範囲(両端を含む)にする必要があります。注: これらの境界は、60 秒/分 * 60 分/時間 * 24 時間/日 * 365.25 日/年 * 10,000 年から計算されます。 |
nanos |
期間のナノ秒分解能による、秒の符号付き小数以下部分。1 秒未満の期間は、0 の |
QueryResult
| JSON 表現 |
|---|
{ "columns": [ { object ( |
| フィールド | |
|---|---|
columns[] |
結果に含まれる列のリスト。これには、列のデータ型も含まれます。 |
rows[] |
SQL ステートメントによって返された行。 |
message |
SQL 実行結果に関連するメッセージ。 |
partialResult |
サイズ上限または結果の取得エラーにより SQL 実行の結果が切り捨てられた場合は true に設定します。 |
status |
エラーが原因で結果が切り捨てられた場合は、そのエラーの詳細。 |
列
| JSON 表現 |
|---|
{ "name": string, "type": string } |
| フィールド | |
|---|---|
name |
列の名前です。 |
type |
列のデータ型。 |
行
| JSON 表現 |
|---|
{
"values": [
{
object ( |
| フィールド | |
|---|---|
values[] |
行の値。 |
値
| JSON 表現 |
|---|
{ "value": string, "nullValue": boolean } |
| フィールド | |
|---|---|
value |
文字列形式のセル値。 |
nullValue |
セルの値が null の場合、このフラグは true に設定されます。 |
ステータス
| JSON 表現 |
|---|
{ "code": integer, "message": string, "details": [ { "@type": string, field1: ..., ... } ] } |
| フィールド | |
|---|---|
code |
ステータス コード。 |
message |
デベロッパー向けのエラー メッセージ。英語で記述します。ユーザー向けのエラー メッセージは、ローカライズして |
details[] |
エラーの詳細を保持するメッセージのリスト。API が使用する共通のメッセージ タイプのセットがあります。 任意のデータ型のフィールドを含むオブジェクトであり、型を識別する URI を含むフィールド |
すべて
| JSON 表現 |
|---|
{ "typeUrl": string, "value": string } |
| フィールド | |
|---|---|
typeUrl |
シリアル化されたプロトコル バッファ メッセージのタイプを一意に識別する URL またはリソース名。この文字列には、少なくとも 1 つの「/」文字を含める必要があります。URL のパスの最後のセグメントは、型の完全修飾名( 実際には、チームは通常、Any のコンテキストで使用されることが想定されるすべての型をバイナリにプリコンパイルします。ただし、スキーム
注: この機能は現在のところ公式の protobuf リリースでは利用できません。また、type.googleapis.com で始まるタイプ URL には使用されません。2023 年 5 月の時点で、広く使用されているタイプ サーバーの実装はなく、実装の予定もありません。
|
value |
上記の指定された型の有効なシリアル化されたプロトコル バッファである必要があります。 Base64 でエンコードされた文字列。 |
ツールのアノテーション
破壊的ヒント: ✅ | べき等ヒント: ❌ | 読み取り専用ヒント: ❌ | オープン ワールド ヒント: ❌