Ultimate Google Docs & Drive MCP Server

Interaja com Google Docs e Google Drive para criação, edição de documentos e gerenciamento de arquivos.

Documentação

Google Docs, Sheets, Drive, Gmail & Calendar MCP Server

MCP Toplist

Demo Animation

Conecte o Claude Desktop, Cursor ou qualquer cliente MCP aos seus Google Docs, Google Sheets, Google Drive, Gmail e Google Calendar.


Início Rápido

1. Criar um Cliente OAuth do Google Cloud

  1. Acesse o Google Cloud Console
  2. Crie ou selecione um projeto
  3. Ative as APIs Google Docs API, Google Sheets API, Google Drive API, Gmail API e Google Calendar API
  4. Configure a tela de consentimento OAuth (Externa, adicione seu e-mail como usuário de teste e adicione os escopos gmail.modify e calendar.events junto com os escopos de Docs/Sheets/Drive)
  5. Crie um ID de cliente OAuth (tipo aplicativo de desktop)
  6. Copie o Client ID e o Client Secret da tela de confirmação

Precisa de mais detalhes? Veja as instruções passo a passo no final desta página.

2. Autorizar

GOOGLE_CLIENT_ID="your-client-id" \
GOOGLE_CLIENT_SECRET="your-client-secret" \
npx -y @a-bonus/google-docs-mcp auth

Isso abre seu navegador para autorização do Google. Após aprovar, o token de atualização é salvo em ~/.config/google-docs-mcp/token.json.

3. Adicionar ao Seu Cliente MCP

Claude Desktop / Cursor / Windsurf:

{
  "mcpServers": {
    "google-docs": {
      "command": "npx",
      "args": ["-y", "@a-bonus/google-docs-mcp"],
      "env": {
        "GOOGLE_CLIENT_ID": "your-client-id",
        "GOOGLE_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

O servidor inicia automaticamente quando seu cliente MCP precisa dele.

Implantação Remota (Cloud Run)

Implante uma vez para sua equipe — sem necessidade de instalações locais. O servidor usa MCP OAuth 2.1, então seu cliente MCP lida com a autenticação automaticamente.

gcloud run deploy google-docs-mcp \
  --source . \
  --region europe-west3 \
  --port 8080 \
  --allow-unauthenticated \
  --set-env-vars "^|^MCP_TRANSPORT=httpStream|BASE_URL=https://your-service.run.app|GOOGLE_CLIENT_ID=...|GOOGLE_CLIENT_SECRET=...|TOKEN_STORE=firestore|JWT_SIGNING_KEY=your-secret-key"

Depois, cada usuário apenas adiciona a URL ao seu cliente MCP — sem npx, sem tokens, sem configuração local:

{
  "mcpServers": {
    "google-docs": {
      "type": "streamableHttp",
      "url": "https://your-service.run.app/mcp"
    }
  }
}

Seu cliente MCP solicitará o login do Google na primeira conexão. Veja Implantação Remota para detalhes.


O Que Ele Pode Fazer?

Ferramentas para Google Docs, Sheets e Drive:

Google Docs

FerramentaDescrição
readDocumentLer conteúdo como texto simples, JSON ou markdown
appendTextAdicionar texto a um documento
insertTextInserir texto em uma posição específica
deleteRangeRemover conteúdo por intervalo de índice
modifyTextSubstituir, prefixar ou transformar texto em um documento
findAndReplaceLocalizar e substituir texto em um documento
findElementLocalizar ocorrências de texto (com intervalos de índice) ou listar parágrafos/tabelas
listTabsListar todas as guias em um documento com várias guias
addTabAdicionar uma nova guia a um documento
renameTabRenomear uma guia do documento
replaceDocumentWithMarkdownSubstituir todo o conteúdo do documento a partir de markdown
replaceRangeWithMarkdownSubstituir um intervalo específico com conteúdo markdown
appendMarkdownAdicionar conteúdo formatado em markdown
applyTextStyleNegrito, itálico, cores, tamanho da fonte, links
applyParagraphStyleAlinhamento, espaçamento, recuo
insertTableCriar uma tabela vazia
insertTableWithDataCriar uma tabela pré-preenchida com dados
insertPageBreakInserir quebras de página
insertSectionBreakInserir quebra de seção (NEXT_PAGE ou CONTINUOUS)
updateSectionStyleAtualizar estilo da seção: inverter orientação, margens
insertImageInserir imagens de URLs ou arquivos locais

Comentários

FerramentaDescrição
listCommentsVer todos os comentários com autor e data
getCommentObter um comentário específico com respostas
addCommentCriar um comentário ancorado a um texto
replyToCommentResponder a um comentário existente
resolveCommentMarcar um comentário como resolvido
deleteCommentRemover um comentário

Google Sheets

FerramentaDescrição
readSpreadsheetLer dados de um intervalo (notação A1)
writeSpreadsheetEscrever dados em um intervalo
batchWriteEscrever em vários intervalos em uma única chamada
appendRowsAdicionar linhas a uma planilha
clearRangeLimpar valores de células
createSpreadsheetCriar uma nova planilha
addSheetAdicionar uma planilha/aba
deleteSheetRemover uma planilha/aba
duplicateSheetDuplicar uma planilha dentro da mesma pasta de trabalho
copySheetToCopiar uma planilha para outra pasta de trabalho
renameSheetRenomear uma planilha/aba
getSpreadsheetInfoObter metadados e lista de planilhas
listSpreadsheetsLocalizar planilhas
formatCellsNegrito, cores, alinhamento, alinhamento vertical, estratégia de quebra em intervalos
copyFormattingCopiar formatação de um intervalo para outro
readCellFormatLer detalhes de formatação de um intervalo de células
setCellBordersDefinir bordas por lado (superior/inferior/esquerda/direita/interna) com estilo e cor
freezeRowsAndColumnsFixar linhas/colunas de cabeçalho
setDropdownValidationAdicionar/remover listas suspensas em células
setColumnWidthsDefinir larguras de colunas em pixels
setRowHeightsDefinir alturas de linhas em pixels
autoResizeColumnsAjustar automaticamente larguras de colunas ao conteúdo
autoResizeRowsAjustar automaticamente alturas de linhas ao conteúdo
protectRangeBloquear um intervalo ou planilha inteira (somente aviso ou bloqueio total)
addConditionalFormattingAdicionar uma regra de formatação condicional
getConditionalFormattingListar regras de formatação condicional com seu índice (JSON)
deleteConditionalFormattingExcluir regras de formatação condicional por índice
groupRowsAgrupar linhas para seções recolhíveis
ungroupAllRowsRemover todos os agrupamentos de linhas
createSheetsCommentCriar um comentário na planilha, opcionalmente com link direto para célula
createSheetsCellNoteCriar uma nota nativa de célula anexada a uma célula ou intervalo
insertChartCriar um gráfico a partir de dados
deleteChartRemover um gráfico

Tabelas do Google Sheets

FerramentaDescrição
createTableCriar uma nova tabela nomeada com tipos de coluna
listTablesListar todas as tabelas em uma planilha ou aba
getTableObter metadados detalhados da tabela por nome ou ID
deleteTableExcluir uma tabela (opcionalmente limpar dados)
updateTableRangeModificar dimensões da tabela (adicionar/remover linhas/colunas)
appendTableRowsAdicionar linhas a uma tabela (inserção ciente da tabela)

Google Drive

FerramentaDescrição
listDocumentsListar documentos, opcionalmente filtrados por data
searchDocumentsPesquisar por nome ou conteúdo
getDocumentInfoObter metadados do documento
createDocumentCriar um novo documento
createDocumentFromTemplateCriar a partir de um modelo existente
createFolderCriar uma pasta
listFolderContentsListar conteúdos da pasta
getFolderInfoObter metadados da pasta
moveFileMover um arquivo para outra pasta
copyFileDuplicar um arquivo
renameFileRenomear um arquivo
deleteFileMover para a lixeira ou excluir permanentemente
listDriveFilesListar qualquer tipo de arquivo no Drive com filtros
searchDriveFilesPesquisar todos os arquivos do Drive por nome ou conteúdo
downloadFileBaixar o conteúdo de um arquivo

Gmail

FerramentaDescrição
listMessagesListar ou pesquisar mensagens usando a sintaxe de consulta do Gmail (is:unread, from:, newer_than:, etc.)
getMessageBuscar uma única mensagem com cabeçalhos decodificados, corpo em texto simples, corpo em HTML e metadados de anexos
sendEmailEnviar um e-mail em texto simples. Suporta cc/bcc e respostas em thread via replyToMessageId
trashMessageMover uma mensagem para a Lixeira (reversível, igual a clicar em Excluir na interface do Gmail)
modifyMessageLabelsAdicionar ou remover rótulos em uma mensagem — use para favoritar, arquivar (remover INBOX), marcar como lida (remover UNREAD)
listLabelsListar todos os rótulos do sistema e personalizados com seus IDs
createDraftCriar um rascunho em vez de enviar imediatamente — para fluxos de criar/revisar/enviar
listDraftsListar rascunhos existentes com destinatário, assunto e resumo
getDraftBuscar um único rascunho com cabeçalhos e corpo completos
updateDraftSubstituir o conteúdo de um rascunho existente (substituição completa, não um patch)
sendDraftEnviar um rascunho existente pelo ID
deleteDraftExcluir permanentemente um rascunho (não vai para a Lixeira — é removido)
triageInboxComposto: buscar mensagens não lidas com conteúdo + sinalizadores heurísticos (newsletter, reunião, ação) para triagem de caixa de entrada em uma única etapa

Google Calendar

FerramentaDescrição
listEventsListar ou pesquisar eventos com q, timeMin, timeMax, maxResults (o padrão é o calendário principal)
createEventCriar um evento com título, início/fim, descrição, local, participantes, link opcional do Google Meet
updateEventAtualização estilo PATCH — apenas os campos que você enviar são alterados. Use para remarcar, renomear, alterar participantes
deleteEventExcluir permanentemente um evento. O sendUpdates opcional envia cancelamentos por e-mail aos participantes
quickAddEventCriação de eventos em linguagem natural: "Lunch with Sarah tomorrow 12pm" — o Google interpreta o restante

Apps Script

Automatize a automação: crie e edite o Apps Script por trás de um Documento ou Planilha — onEdit gatilhos, menus personalizados, tarefas agendadas — em vez de pedir ao usuário para colar código no editor manualmente.

FerramentaDescrição
createAppsScriptProjectCriar um projeto, opcionalmente vinculado a um Documento/Planilha/Apresentação/Formulário via parentId, e gravar seus arquivos iniciais na mesma chamada
getAppsScriptContentLer os arquivos de um projeto — passe includeSource: false para uma listagem rápida, ou versionNumber para ler uma versão salva
updateAppsScriptContentGravar arquivos. merge (padrão) substitui arquivos com o mesmo nome e mantém os demais; replace faz o projeto ficar exatamente com os arquivos que você enviar

Exige duas coisas além da configuração usual:

  1. A API Apps Script deve estar ativada por conta Google em https://script.google.com/home/usersettings — ela fica desativada por padrão, e um erro 403 com "Apps Script API" na mensagem significa que esta etapa foi ignorada.
  2. O escopo script.projects, que está incluído em SCOPES. Instalações existentes precisam autorizar novamente uma vez para ativá-lo.

Exemplos de Uso

Google Docs

"Read document ABC123 as markdown"
"Append 'Meeting notes for today' to document ABC123"
"Make the text 'Important' bold and red in document ABC123"
"Replace the entire document with this markdown: # Title\n\nNew content here"
"Insert a 3x4 table at index 50 in document ABC123"

Google Sheets

"Read range A1:D10 from spreadsheet XYZ789"
"Write [[Name, Score], [Alice, 95], [Bob, 87]] to range A1 in spreadsheet XYZ789"
"Create a new spreadsheet titled 'Q1 Report'"
"Format row 1 as bold with a light blue background in spreadsheet XYZ789"
"Freeze the first row in spreadsheet XYZ789"
"Add a dropdown with options [Open, In Progress, Done] to range C2:C100"
"Create a table named 'Tasks' in range A1:D10 with columns: Task (TEXT), Status (DROPDOWN: 'Not Started','In Progress','Done'), Priority (NUMBER)"
"Add a medium solid border around A1:D10 in spreadsheet XYZ789"
"Protect the header row so collaborators can't accidentally edit it"
"Auto-fit row heights for rows 2–50 after wrapping text"

Google Drive

"List my 10 most recent Google Docs"
"Search for documents containing 'project proposal'"
"Create a folder called 'Meeting Notes' and move document ABC123 into it"

Gmail

"Show me my 20 most recent unread emails"
"Search Gmail for messages from alice@example.com in the last 7 days"
"Read the full body of message ID 18c3f4a2b1d9"
"Send an email to bob@example.com with the subject 'Weekly update' and this body..."
"Reply to message 18c3f4a2b1d9 with 'Thanks, confirmed.'"
"Star message 18c3f4a2b1d9 and archive it"
"Move message 18c3f4a2b1d9 to Trash"
"List all my Gmail labels"
"Draft a reply to that email but don't send it yet — let me review first"
"Show me my drafts, then send the one to bob@"
"Triage my unread inbox: tell me which 20 emails need attention and which are noise"

Google Calendar

"What's on my calendar this week?"
"Create an event titled 'Project review' tomorrow from 2pm to 3pm Pacific time"
"Quick add: lunch with Alex Friday 12:30"
"Reschedule event abc123 to next Monday at 10am"
"Delete the 'Standup' event tomorrow"
"List all events on my calendar between April 15 and April 22"
"Schedule a 30-minute meeting with bob@example.com next Wednesday at 11am with a Google Meet link"

Fluxo de Trabalho com Markdown

O servidor suporta um fluxo de trabalho completo de ida e volta com markdown:

  1. Ler um documento como markdown: readDocument com format='markdown'
  2. Editar o markdown localmente
  3. Enviar as alterações de volta: replaceDocumentWithMarkdown

Suportados: títulos, negrito, itálico, tachado, links, listas com marcadores/numeradas, linhas horizontais.

Verificação ao Vivo de Documentos

O repositório inclui um teste de integração ao vivo opcional para cloneTable contra a API real do Google Docs. Ele é ignorado por padrão.

Requisitos:

  • GOOGLE_CLIENT_ID e GOOGLE_CLIENT_SECRET válidos
  • um token autorizado já armazenado via npx -y @a-bonus/google-docs-mcp auth

Execute com:

GOOGLE_DOCS_LIVE_TESTS=1 npm run test:live:docs

Este teste cria Documentos Google de origem/destino temporários, verifica cloneTable e depois exclui os arquivos de teste.


Implantação Remota

Implante o servidor centralmente no Google Cloud Run (ou em qualquer host de contêiner) para que sua equipe possa usá-lo sem instalações locais. O servidor usa MCP OAuth 2.1 com o GoogleProvider integrado do FastMCP — os clientes MCP lidam com o fluxo de autenticação automaticamente.

Visite a URL raiz do servidor (/) para instruções de configuração e uma configuração de cliente pronta para copiar.

Variáveis de Ambiente

VariávelDescrição
MCP_TRANSPORTDefina como httpStream para ativar o modo remoto (padrão: stdio)
BASE_URLURL pública do servidor implantado (necessária para redirecionamentos OAuth)
GOOGLE_CLIENT_IDID do cliente OAuth (tipo Aplicativo Web)
GOOGLE_CLIENT_SECRETSegredo do cliente OAuth
MCP_TOOL_GROUPSGrupos de ferramentas opcionais separados por vírgula para registrar: docs, drive, sheets, utils, gmail, calendar, script ou all
ALLOWED_DOMAINSLista separada por vírgulas de domínios permitidos do Google Workspace (opcional)
PORTPorta HTTP (padrão: 8080)
TOKEN_STOREDefina como firestore para armazenamento persistente de tokens (padrão: em memória)
JWT_SIGNING_KEYChave de assinatura fixa para que os tokens sobrevivam a reinicializações (gerada automaticamente se não definida)
REFRESH_TOKEN_TTLTempo de vida do token de atualização em segundos (padrão: 2592000 / 30 dias)
GCLOUD_PROJECTID do projeto GCP para Firestore (necessário quando TOKEN_STORE=firestore)
MCP_STATELESSDefina como true para implantações sem servidor (Cloud Run, etc.) — desativa o rastreamento de sessão para sobreviver ao scale-to-zero

Configuração

  1. Crie um projeto GCP e ative as APIs Docs, Sheets e Drive
  2. Crie um cliente OAuth (tipo Aplicativo Web, não Desktop)
  3. Defina o URI de redirecionamento autorizado como {BASE_URL}/oauth/callback
  4. Implante no Cloud Run:
gcloud run deploy google-docs-mcp \
  --source . \
  --region europe-west3 \
  --port 8080 \
  --allow-unauthenticated \
  --set-env-vars "^|^MCP_TRANSPORT=httpStream|BASE_URL=https://your-service.run.app|ALLOWED_DOMAINS=yourdomain.com|GOOGLE_CLIENT_ID=...|GOOGLE_CLIENT_SECRET=...|TOKEN_STORE=firestore|JWT_SIGNING_KEY=your-secret-key"

Observação: O prefixo ^|^ altera o delimitador da variável de ambiente de , para | porque ALLOWED_DOMAINS contém vírgulas.

Como Funciona

  • Por padrão, as sessões OAuth são armazenadas em memória e perdidas ao reiniciar
  • Para produção, defina TOKEN_STORE=firestore e JWT_SIGNING_KEY para autenticação persistente entre implantações e inicializações a frio
  • Em plataformas sem servidor (Cloud Run, etc.), defina MCP_STATELESS=true — as sessões MCP ficam em memória, então o scale-to-zero as apaga. O modo sem estado desativa completamente o rastreamento de sessão; cada solicitação autentica de forma independente via fluxo de token JWT/Firestore
  • ALLOWED_DOMAINS restringe o acesso a domínios específicos do Google Workspace
  • Os tokens de acesso são atualizados automaticamente; sessões inativas expiram após 30 dias
  • Os usuários podem revogar o acesso a qualquer momento via Permissões da conta Google

Atualizando Sua Implantação

Mesclar alterações em main não atualiza automaticamente seu serviço no Cloud Run. Cada implantação é independente — você precisa reimplantar manualmente quando quiser novos recursos ou correções.

Para atualizar:

  1. Baixe o código mais recente:

    git pull origin main
    
  2. Reimplante no Cloud Run:

    gcloud run deploy your-service-name --source . --region your-region
    

    Suas variáveis de ambiente existentes são preservadas — não é necessário passar --set-env-vars novamente.

Quando reimplantar:

  • Correções de bugs e patches de segurança — reimplante o mais rápido possível
  • Novos recursos — reimplante quando for conveniente
  • Alterações que quebram compatibilidade — verifique as notas de versão antes de reimplantar

Você pode verificar sua versão atual em relação ao lançamento mais recente na página de versões.


Opções de Autenticação

OAuth (Padrão)

Passe as credenciais do cliente OAuth do Google Cloud como variáveis de ambiente:

VariávelDescrição
GOOGLE_CLIENT_IDID do cliente OAuth do Google Cloud Console
GOOGLE_CLIENT_SECRETSegredo do cliente OAuth do Google Cloud Console

Conta de Serviço (Empresarial)

Para Google Workspace com delegação em todo o domínio:

VariávelDescrição
SERVICE_ACCOUNT_PATHCaminho para o arquivo JSON da chave da conta de serviço
GOOGLE_IMPERSONATE_USERE-mail do usuário a personificar (opcional)
{
  "mcpServers": {
    "google-docs": {
      "command": "npx",
      "args": ["-y", "@a-bonus/google-docs-mcp"],
      "env": {
        "SERVICE_ACCOUNT_PATH": "/path/to/service-account-key.json",
        "GOOGLE_IMPERSONATE_USER": "user@yourdomain.com"
      }
    }
  }
}

Armazenamento de Tokens

Os tokens de atualização OAuth são armazenados em ~/.config/google-docs-mcp/token.json (respeita XDG_CONFIG_HOME). IDs de cliente OAuth e segredos de cliente não são armazenados no arquivo de token. Para reautorizar, execute o comando auth novamente ou exclua o arquivo de token.

Várias Contas Google

Defina GOOGLE_MCP_PROFILE para armazenar tokens em um subdiretório específico do perfil. Isso permite usar diferentes contas Google para diferentes projetos:

VariávelDescrição
GOOGLE_MCP_PROFILENome do perfil para armazenamento isolado de tokens (opcional)
{
  "mcpServers": {
    "google-docs": {
      "command": "npx",
      "args": ["-y", "@a-bonus/google-docs-mcp"],
      "env": {
        "GOOGLE_CLIENT_ID": "...",
        "GOOGLE_CLIENT_SECRET": "...",
        "GOOGLE_MCP_PROFILE": "work"
      }
    }
  }
}

Os tokens são armazenados por perfil:

~/.config/google-docs-mcp/
├── token.json              # default (no profile)
├── work/token.json         # GOOGLE_MCP_PROFILE=work
├── personal/token.json     # GOOGLE_MCP_PROFILE=personal

Sem GOOGLE_MCP_PROFILE, o comportamento permanece inalterado.


Limitações Conhecidas

  • Ancoragem de comentários: Comentários criados programaticamente aparecem na lista de comentários, mas não ficam visivelmente ancorados ao texto na interface do Google Docs. Isso é uma limitação da API do Google Drive.
  • Ancoragem de comentários em planilhas: Comentários criados via API em planilhas podem armazenar metadados de âncora, mas os editores do Google Workspace tratam âncoras da API do Drive como comentários não ancorados. Use createSheetsComment com includeCellLink=true para um link clicável para a célula de destino, ou createSheetsCellNote quando o texto da revisão precisar estar anexado à própria célula.
  • Resolução de comentários: O status de resolvido pode não persistir na interface do Google Docs.
  • Documentos convertidos: Documentos convertidos do Word podem não suportar todas as operações da API.
  • Imagens Markdown: Ainda não suportadas na conversão de Markdown para Docs.
  • Listas profundamente aninhadas: Listas com 3 ou mais níveis de aninhamento podem apresentar peculiaridades de formatação.
  • Exclusão definitiva do Gmail: trashMessage move mensagens para a Lixeira (reversível). A exclusão permanente requer o escopo mais amplo https://mail.google.com/ e não está exposta na v0.1.
  • Anexos do Gmail: getMessage retorna metadados de anexos, mas ainda não baixa os bytes dos anexos.
  • Envio de e-mail HTML no Gmail: sendEmail envia apenas texto simples. Para corpos HTML, cole o HTML no campo body — ele será entregue como texto, não renderizado.
  • Escopo do Calendar: calendar.events permite operações CRUD de eventos em calendários existentes, mas não pode criar ou excluir calendários inteiros.
  • Apps Script API desativada por padrão: toda conta precisa habilitá-la uma vez em https://script.google.com/home/usersettings. As ferramentas não podem ativá-la por você.
  • Implantação do Apps Script: as ferramentas editam o código-fonte do projeto. Criar versões, implantações e gatilhos instaláveis ainda não é exposto — gatilhos simples como onEdit e onOpen funcionam sem nada disso.
  • Eventos recorrentes do Calendar: updateEvent e deleteEvent modificam toda a série recorrente, a menos que você direcione um ID de instância específico retornado por listEvents com singleEvents=true.

Solução de problemas

  • O servidor não inicia:
    • Verifique se GOOGLE_CLIENT_ID e GOOGLE_CLIENT_SECRET estão definidos no bloco env da sua configuração MCP.
    • Tente executar manualmente: npx @a-bonus/google-docs-mcp e verifique o stderr para erros.
  • Erros de autorização:
    • Garanta que as APIs Docs, Sheets, Drive, Gmail e Calendar estejam habilitadas no Google Cloud Console.
    • Confirme que seu e-mail está listado como Usuário de Teste na tela de consentimento OAuth e que todos os escopos necessários (Docs, Sheets, Drive, gmail.modify, calendar.events) foram adicionados à tela de consentimento.
    • Reautorize: npx @a-bonus/google-docs-mcp auth
    • Exclua ~/.config/google-docs-mcp/token.json e reautorize ao atualizar — os escopos do Gmail e Calendar foram adicionados em versões posteriores, então os tokens existentes precisam ser atualizados.
    • Usuários remotos (Cloud Run) devem sair e entrar novamente no cliente MCP para que o Google reemita o consentimento com a nova lista de escopos.
  • Erros de abas:
    • Use listTabs para ver os IDs de abas disponíveis.
    • Omita tabId para documentos de aba única.
  • "Página não encontrada" no claude.ai durante o login OAuth (implantações remotas):
    • Sintoma: clicar em Conectar em um conector MCP personalizado leva à página "Página não encontrada" do Claude em vez da tela de login do Google.
    • Causa: inicialização a frio do Cloud Run. A primeira solicitação a um serviço ocioso expira antes que o contêiner termine de iniciar, e o Claude roteia o redirecionamento falho para sua página 404.
    • Solução alternativa: atualize a página com força (Cmd+Shift+R no macOS, Ctrl+Shift+R no Windows/Linux). A segunda solicitação atinge uma instância já ativa e o fluxo OAuth prossegue normalmente.
    • Correção permanente: defina --min-instances=1 no seu serviço Cloud Run para manter uma instância sempre ativa (gcloud run services update <service> --region <region> --min-instances=1). Custa cerca de US$ 2–3/mês pela reserva de memória.
  • Reautenticação inesperada após uma reimplantação (implantações remotas):
    • Causa: JWT_SIGNING_KEY é gerado automaticamente a cada inicialização do contêiner, então reimplantações invalidam todas as sessões emitidas anteriormente.
    • Correção: defina uma variável de ambiente JWT_SIGNING_KEY estável no serviço Cloud Run para que ela sobreviva a reinicializações: gcloud run services update <service> --region <region> --update-env-vars JWT_SIGNING_KEY=$(openssl rand -hex 32). Sessões emitidas após essa alteração sobreviverão a futuras reimplantações.
  • Alto uso de CPU com múltiplas sessões MCP: Alguns clientes chamam tools/list com muita frequência. Caso contrário, o FastMCP recalcula o JSON Schema para cada ferramenta em cada solicitação, o que pode fixar um núcleo de CPU por processo. Este servidor pré-computa o payload uma vez antes do início do stdio e substitui o manipulador tools/list por um snapshot em cache. Se você ainda observar carga sustentada, capture alguns segundos com sample <pid> 1 10 (macOS) ou node --cpu-prof e relate.

Detalhes da Configuração do Google Cloud

Instruções passo a passo do Google Cloud Console

Para implantação remota, crie um cliente OAuth do tipo Aplicativo web (não Aplicativo de desktop). Use Aplicativo de desktop apenas para uso local via stdio.

  1. Acesse o Google Cloud Console: Abra console.cloud.google.com
  2. Crie ou Selecione um Projeto: Clique no menu suspenso do projeto > "NOVO PROJETO". Dê um nome (ex.: "MCP Docs Server") e clique em "CRIAR".
  3. Habilite as APIs:
    • Navegue até "APIs e serviços" > "Biblioteca"
    • Pesquise e habilite: Google Docs API, Google Sheets API, Google Drive API, Gmail API, Google Calendar API
  4. Configure a Tela de Consentimento OAuth:
    • Vá para "APIs e serviços" > "Tela de consentimento OAuth"
    • Escolha "Externo" e clique em "CRIAR"
    • Preencha: Nome do aplicativo, E-mail de suporte ao usuário, E-mail de contato do desenvolvedor
    • Clique em "SALVAR E CONTINUAR"
    • Adicione escopos: documents, spreadsheets, drive, gmail.modify, calendar.events
    • Clique em "SALVAR E CONTINUAR"
    • Adicione seu e-mail do Google como Usuário de Teste
    • Clique em "SALVAR E CONTINUAR"
  5. Crie Credenciais:
    • Vá para "APIs e serviços" > "Credenciais"
    • Clique em "+ CRIAR CREDENCIAIS" > "ID do cliente OAuth"
    • Tipo de aplicativo: "Aplicativo de desktop"
    • Clique em "CRIAR"
    • Copie o ID do cliente e o Segredo do cliente

Contribuindo

Contribuições são bem-vindas! Veja CONTRIBUTING.md para configuração de desenvolvimento, visão geral da arquitetura e diretrizes.

Licença

MIT — veja LICENSE para detalhes.