MCP Reference: cloud-sql

Um servidor de Protocolo de Contexto de Modelo (MCP) atua como um proxy entre um serviço externo que fornece contexto, dados ou recursos a um modelo de linguagem grande (LLM) ou aplicativo de IA. Os servidores do MCP conectam aplicativos de IA a sistemas externos, como bancos de dados e serviços da Web, traduzindo as respostas em um formato que o aplicativo de IA possa entender.

Configuração do servidor

É preciso ativar os servidores MCP e configurar a autenticação antes de usar. Para mais informações sobre como usar servidores MCP remotos do Google e do Google Cloud, consulte Visão geral dos servidores MCP do Google Cloud.

API Cloud SQL Admin para MCP

Endpoints de servidor

Um endpoint de serviço do MCP é o endereço de rede e a interface de comunicação (geralmente um URL) do servidor MCP que um aplicativo de IA (o host do cliente MCP) usa para estabelecer uma conexão segura e padronizada. É o ponto de contato para o LLM solicitar contexto, chamar uma ferramenta ou acessar um recurso. Os endpoints do Google MCP podem ser globais ou regionais.

O servidor MCP do Cloud SQL tem o seguinte endpoint MCP:

  • https://sqladmin.googleapis.com/mcp

Ferramentas do MCP

Uma ferramenta do MCP é uma função ou capacidade executável que um servidor MCP expõe a um LLM ou aplicativo de IA para realizar uma ação no mundo real.

O servidor MCP do Cloud SQL tem as seguintes ferramentas:

Ferramentas do MCP
list_instances Liste todas as instâncias do Cloud SQL no projeto.
get_instance Receba os detalhes de uma instância do Cloud SQL.
create_instance

Inicia a criação de uma instância do Cloud SQL.

  • A ferramenta retorna uma operação de longa duração. Use a ferramenta get_operation para pesquisar o status até que a operação seja concluída.
  • A operação de criação da instância pode levar vários minutos. Use uma ferramenta de linha de comando para pausar por 30 segundos antes de verificar o status novamente.
  • Depois de usar a ferramenta create_instance para criar uma instância, use a ferramenta create_user para criar uma conta de usuário do IAM para o usuário conectado ao projeto.
  • O valor de data_api_access é definido como ALLOW_DATA_API por padrão. Essa configuração permite executar instruções SQL usando a ferramenta execute_sql e a API executeSql.

A menos que especificado de outra forma, uma instância recém-criada usa a configuração padrão de um ambiente de desenvolvimento.

Confira a configuração padrão de uma instância em um ambiente de desenvolvimento:

{
  "tier": "db-perf-optimized-N-2",
  "data_disk_size_gb": 100,
  "region": "us-central1",
  "database_version": "POSTGRES_18",
  "edition": "ENTERPRISE_PLUS",
  "availability_type": "ZONAL",
  "tags": [{"environment": "dev"}]
}

A configuração a seguir é recomendada para uma instância em um ambiente de produção:

{
  "tier": "db-perf-optimized-N-8",
  "data_disk_size_gb": 250,
  "region": "us-central1",
  "database_version": "POSTGRES_18",
  "edition": "ENTERPRISE_PLUS",
  "availability_type": "REGIONAL",
  "tags": [{"environment": "prod"}]
}

A seguinte configuração de instância é recomendada para o SQL Server:

{
  "tier": "db-perf-optimized-N-8",
  "data_disk_size_gb": 250,
  "region": "us-central1",
  "database_version": "SQLSERVER_2022_STANDARD",
  "edition": "ENTERPRISE_PLUS",
  "availability_type": "REGIONAL",
  "tags": [{"environment": "prod"}]
}
execute_sql

Execute qualquer instrução SQL válida, incluindo instruções de linguagem de definição de dados (DDL), linguagem de controle de dados (DCL), linguagem de consulta de dados (DQL) ou linguagem de manipulação de dados (DML), em uma instância do Cloud SQL.

Para oferecer suporte à ferramenta execute_sql, uma instância do Cloud SQL precisa atender aos seguintes requisitos:

  • O valor de data_api_access precisa ser definido como ALLOW_DATA_API.
  • Para uma instância do MySQL, a flag de banco de dados cloudsql_iam_authentication precisa ser definida como on. Para uma instância do PostgreSQL, a flag de banco de dados cloudsql.iam_authentication precisa ser definida como on.
  • Uma conta de usuário ou de serviço do IAM (CLOUD_IAM_USER ou CLOUD_IAM_SERVICE_ACCOUNT) é necessária para chamar a ferramenta execute_sql. A ferramenta executa as instruções SQL usando os privilégios do usuário do banco de dados conectado com a autenticação de banco de dados do IAM.

Depois de usar a ferramenta create_instance para criar uma instância, use a ferramenta create_user para criar uma conta de usuário do IAM para o usuário conectado ao projeto.

A ferramenta execute_sql tem as seguintes limitações:

  • Se uma instrução SQL retornar uma resposta maior que 10 MB, ela será truncada.
  • A ferramenta execute_sql tem um tempo limite padrão de 30 segundos. Se uma consulta levar mais de 30 segundos, a ferramenta vai retornar um erro DEADLINE_EXCEEDED.
  • A ferramenta execute_sql não é compatível com o SQL Server.

Se você receber erros semelhantes a "A autenticação do IAM não está ativada para a instância", use a ferramenta get_instance para verificar o valor da flag de autenticação do banco de dados do IAM para a instância.

Se você receber erros como "A instância não permite o uso de executeSql para acessar esta instância", use a ferramenta get_instance para verificar a configuração data_api_access.

Quando você recebe erros de autenticação:

  1. Verifique se a conta de usuário conectada no momento existe como um usuário do IAM na instância usando a ferramenta list_users.
  2. Se a conta de usuário do IAM não existir, use a ferramenta create_user para criar a conta de usuário do IAM para o usuário conectado.
  3. Se o usuário conectado no momento não tiver as funções de usuário do banco de dados adequadas, use a ferramenta update_user para conceder funções de banco de dados ao usuário. Por exemplo, a função cloudsqlsuperuser pode fornecer a um usuário do IAM muitas permissões necessárias.
  4. Verifique se o usuário conectado no momento tem as permissões corretas do IAM atribuídas ao projeto. Use o comando gcloud projects get-iam-policy [PROJECT_ID] para verificar se o usuário tem as permissões ou os papéis do IAM adequados atribuídos ao projeto.

    • O usuário precisa ter a permissão cloudsql.instance.login para fazer a autenticação automática de banco de dados do IAM.
    • O usuário precisa ter a permissão cloudsql.instances.executeSql para executar instruções SQL usando a ferramenta execute_sql ou a API executeSql.
    • Papéis comuns do IAM que contêm as permissões necessárias: usuário da instância do Cloud SQL (roles/cloudsql.instanceUser) ou administrador do Cloud SQL (roles/cloudsql.admin)

Ao receber um ExecuteSqlResponse, sempre verifique os campos message e status no corpo da resposta. Um código de status HTTP bem-sucedido não garante o sucesso total de todas as instruções SQL. Os campos message e status indicam se houve erros ou avisos parciais durante a execução da instrução SQL.

get_operation Receber o status de uma operação de longa duração. Uma operação de longa duração pode levar vários minutos para ser concluída. Se uma operação levar muito tempo, use uma ferramenta de linha de comando para pausar por 30 segundos antes de verificar novamente o status da operação.
create_user

Crie um usuário de banco de dados para uma instância do Cloud SQL.

  • Essa ferramenta retorna uma operação de longa duração. Use a ferramenta get_operation para pesquisar o status até que a operação seja concluída.
  • Ao usar a ferramenta create_user, especifique o tipo de usuário: CLOUD_IAM_USER ou CLOUD_IAM_SERVICE_ACCOUNT.
  • Por padrão, o usuário recém-criado recebe a função cloudsqlsuperuser, a menos que você especifique outras funções de banco de dados explicitamente na solicitação.
  • É possível usar um usuário recém-criado com a ferramenta execute_sql se ele for um usuário do IAM conectado no momento. A ferramenta execute_sql executa as instruções SQL usando os privilégios do usuário do banco de dados conectado com a autenticação de banco de dados do IAM.

A ferramenta create_user tem as seguintes limitações:

  • Não é possível criar um usuário integrado com uma senha.
  • A ferramenta create_user não aceita a criação de um usuário para o SQL Server.

Para criar um usuário do IAM no PostgreSQL:

  • O nome de usuário do banco de dados precisa ser o endereço de e-mail do usuário do IAM e estar todo em letras minúsculas. Por exemplo, para criar um usuário para o usuário do IAM do PostgreSQL example-user@example.com, use a seguinte solicitação:
{
  "name": "example-user@example.com",
  "type": "CLOUD_IAM_USER",
  "instance":"test-instance",
  "project": "test-project"
}

O nome de usuário do banco de dados criado para o usuário do IAM é example-user@example.com.

Para criar uma conta de serviço do IAM no PostgreSQL:

  • O nome de usuário do banco de dados precisa ser criado sem o sufixo .gserviceaccount.com, mesmo que o endereço de e-mail completo da conta seja service-account-name@project-id.iam.gserviceaccount.com. Por exemplo, para criar uma conta de serviço do IAM para PostgreSQL, use o seguinte formato de solicitação:
{
   "name": "test@test-project.iam",
   "type": "CLOUD_IAM_SERVICE_ACCOUNT",
   "instance": "test-instance",
   "project": "test-project"
}

O nome de usuário do banco de dados criado para a conta de serviço do IAM é test@test-project.iam.

Para criar um usuário ou uma conta de serviço do IAM no MySQL:

  • Quando o Cloud SQL para MySQL armazena um nome de usuário, ele trunca o @ e o nome de domínio do endereço de e-mail do usuário ou da conta de serviço. Por exemplo, example-user@example.com torna-se example-user.
  • Por esse motivo, não é possível adicionar dois usuários do IAM ou contas de serviço com o mesmo nome de usuário, mas nomes de domínio diferentes à mesma instância do Cloud SQL.
  • Por exemplo, para criar um usuário para o usuário do IAM do MySQL example-user@example.com, use a seguinte solicitação:
{
   "name": "example-user@example.com",
   "type": "CLOUD_IAM_USER",
   "instance": "test-instance",
   "project": "test-project"
}

O nome de usuário do banco de dados criado para o usuário do IAM é example-user.

  • Por exemplo, para criar a conta de serviço do IAM do MySQL service-account-name@project-id.iam.gserviceaccount.com, use a seguinte solicitação:
{
   "name": "service-account-name@project-id.iam.gserviceaccount.com",
   "type": "CLOUD_IAM_SERVICE_ACCOUNT",
   "instance": "test-instance",
   "project": "test-project"
}

O nome de usuário do banco de dados criado para a conta de serviço do IAM é service-account-name.

update_user

Atualize um usuário de banco de dados para uma instância do Cloud SQL. Um caso de uso comum para o update_user é conceder a um usuário a função cloudsqlsuperuser, que pode fornecer a ele muitas permissões necessárias.

Essa ferramenta só aceita a atualização de usuários para atribuir papéis de banco de dados.

  • Essa ferramenta retorna uma operação de longa duração. Use a ferramenta get_operation para pesquisar o status até que a operação seja concluída.
  • Antes de chamar a ferramenta update_user, sempre verifique a configuração atual do usuário, como o tipo de usuário, com a ferramenta list_users.
  • Como um caso especial para o MySQL, se a ferramenta list_users retornar um endereço de e-mail completo para o campo iamEmail, por exemplo, {name=test-account, iamEmail=test-account@project-id.iam.gserviceaccount.com}, na solicitação update_user, use o endereço de e-mail completo no campo iamEmail do campo name do toolrequest. Exemplo: name=test-account@project-id.iam.gserviceaccount.com.

Parâmetros principais para atualizar as funções dos usuários:

  • database_roles: uma lista de papéis de banco de dados a serem atribuídos ao usuário.
  • revokeExistingRoles: um campo booleano (padrão: "false") que controla como as funções atuais são processadas.

Como as atualizações de função funcionam:

  1. Se revokeExistingRoles for verdadeiro:

    • Todas as funções concedidas ao usuário, mas NÃO na lista database_roles fornecida, serão REVOGADAS.
    • A revogação se aplica apenas a papéis que não são do sistema. Funções do sistema, como cloudsqliamuser, não serão revogadas.
    • Todas as funções na lista database_roles que o usuário ainda NÃO tem serão CONCEDIDAS.
    • Se database_roles estiver vazio, TODOS os papéis não relacionados ao sistema serão revogados.
  2. Se revokeExistingRoles for "false" (padrão):

    • Todas as funções na lista database_roles que o usuário ainda NÃO tem serão CONCEDIDAS.
    • Os papéis atuais que NÃO estão na lista database_roles são MANTIDOS.
    • Se database_roles estiver vazio, não haverá mudança nos papéis do usuário.

Exemplos:

  • Funções atuais: [roleA, roleB]

    • Solicitação: database_roles: [roleB, roleC], revokeExistingRoles: true
    • Resultado: revoga roleA e concede roleC. As funções de usuário se tornam [roleB, roleC].
    • Solicitação: database_roles: [roleB, roleC], revokeExistingRoles: false
    • Resultado: concede roleC. As funções de usuário se tornam [roleA, roleB, roleC].
    • Solicitação: database_roles: [], revokeExistingRoles: true
    • Resultado: revoga roleA e roleB. As funções de usuário se tornam [].
    • Solicitação: database_roles: [], revokeExistingRoles: false
    • Resultado: nenhuma mudança. As funções de usuário permanecem [roleA, roleB].
clone_instance

Crie uma instância do Cloud SQL como um clone de uma instância de origem.

  • Essa ferramenta retorna uma operação de longa duração. Use a ferramenta get_operation para pesquisar o status até que a operação seja concluída.
  • A operação de clonagem pode levar vários minutos. Use uma ferramenta de linha de comando para pausar por 30 segundos antes de verificar o status novamente.
update_instance

Atualiza parcialmente as configurações de configuração de uma instância do Cloud SQL.

  • Essa ferramenta retorna uma operação de longa duração. Use a ferramenta get_operation para pesquisar o status até que a operação seja concluída.
list_users Listar todos os usuários de banco de dados de uma instância do Cloud SQL.
import_data

Importar dados para uma instância do Cloud SQL.

Se o arquivo não começar com gs://, a suposição é que ele está armazenado localmente. Se o arquivo for local, ele precisará ser enviado para o Cloud Storage antes de você fazer a chamada import_data. Para fazer upload do arquivo no Cloud Storage, use os comandos gcloud ou gsutil.

Antes de fazer upload do arquivo para o Cloud Storage, considere se você quer usar um bucket atual ou criar um novo no projeto fornecido.

Depois que o arquivo é enviado para o Cloud Storage, a conta de serviço da instância precisa ter permissões suficientes para ler o arquivo enviado do bucket do Cloud Storage.

Isso pode ser feito da seguinte forma:

  1. Use a ferramenta get_instance para receber o endereço de e-mail da conta de serviço da instância. Na saída da ferramenta, acesse o valor do campo serviceAccountEmailAddress.
  2. Conceda à conta de serviço da instância o papel storage.objectAdmin no bucket do Cloud Storage fornecido. Use um comando como gcloud storage buckets add-iam-policy-binding ou uma solicitação para a API Cloud Storage. Pode levar de dois a sete minutos ou mais para que a função seja concedida e as permissões sejam propagadas para a conta de serviço no Cloud Storage. Se você encontrar um erro de permissões após atualizar a política do IAM, aguarde alguns minutos e tente de novo.

Depois que as permissões forem concedidas, você poderá importar os dados. Recomendamos que você deixe os parâmetros opcionais vazios e use os padrões do sistema. O tipo de arquivo geralmente é determinado pela extensão. Por exemplo, se o arquivo for SQL, .sql ou .csv para arquivo CSV.

Confira a seguir um exemplo de importContext SQL para MySQL.

{
  "uri": "gs://sample-gcs-bucket/sample-file.sql",
  "kind": "sql#importContext",
  "fileType": "SQL"
}

Não há um parâmetro database para o MySQL, já que o nome do banco de dados precisa estar presente no arquivo SQL. Especifique apenas um URI. Nenhum outro campo é obrigatório além de importContext.

Para o PostgreSQL, o campo database é obrigatório. Confira a seguir um exemplo de importContext do PostgreSQL com o campo database especificado.

{
  "uri": "gs://sample-gcs-bucket/sample-file.sql",
  "kind": "sql#importContext",
  "fileType": "SQL",
  "database": "sample-db"
}

A ferramenta import_data retorna uma operação de longa duração. Use a ferramenta get_operation para pesquisar o status até que a operação seja concluída.

Receber especificações da ferramenta MCP

Para receber as especificações de todas as ferramentas em um servidor MCP, use o método tools/list. O exemplo a seguir demonstra como usar curl para listar todas as ferramentas e especificações disponíveis no servidor MCP.

Solicitação curl
                      
curl --location 'https://sqladmin.googleapis.com/mcp' \
--header 'content-type: application/json' \
--header 'accept: application/json, text/event-stream' \
--data '{
    "method": "tools/list",
    "jsonrpc": "2.0",
    "id": 1
}'