Skip to main content
Glama

gws-mcp

Servidor MCP local, em Python, para Google Workspace. Multi-conta por desenho: cada conta Google é um perfil nomeado (pessoal, trabalho, cliente) e toda ferramenta recebe qual perfil usar.

Feito porque os conectores oficiais do Google são por conta da Claude, não por projeto, e os servidores de terceiros não têm massa crítica para receber acesso a e-mail corporativo.

Estado atual — incremento 1 (somente leitura)

Serviço

Ferramentas

Testado com conta real

Contas

accounts_list, accounts_add, accounts_remove

sim, 2026-09-04, dois perfis (accounts_remove só em teste unitário)

Gmail

gmail_search, gmail_get_message, gmail_list_labels

sim, 2026-09-04

Calendar

calendar_list_events, calendar_free_busy

sim, 2026-09-04 (agenda vazia no período)

Drive

drive_search, drive_read_file

sim, 2026-09-04 (Sheets exportado como CSV)

Ainda não existe: Docs, Sheets, qualquer escrita (enviar e-mail, criar evento, editar planilha). Os escopos OAuth pedidos são só *.readonly; o servidor não tem como alterar nada no Google mesmo que uma ferramenta tentasse.

Related MCP server: google-workspace-mcp

Onde ficam os segredos

  • Refresh token de cada perfil: Credential Manager do Windows, entrada profile:<nome>@gws-mcp.

  • OAuth client (client_id/client_secret): Credential Manager, entrada oauth-client@gws-mcp.

  • Metadados sem segredo (nome do perfil, e-mail, escopos, data): %APPDATA%\gws-mcp\profiles.json.

Nada de token em arquivo de texto, em log ou em mensagem de erro. Nenhuma telemetria. O servidor só fala com googleapis.com e accounts.google.com.

Estado do setup nesta máquina

Feito em 2026-09-04: projeto gws-mcp-507701 na conta pessoal, três APIs ativas, consentimento Externo publicado (Em produção), cliente Desktop, perfis pessoal e trabalho autorizados e testados. Registrado no Claude Code com --scope local na pasta robo.

Para publicar, o Google exigiu página inicial e política de privacidade públicas. Por isso o repositório ficou público e existe o PRIVACY.md; github.com está nos domínios autorizados. Sem verificação do Google a tela "app não verificado" aparece no consentimento, e é esperado.

Armadilha: o "Salvar" de usuários de teste no console só gravou na segunda tentativa. Sem o e-mail na lista, em modo Testing, o consentimento devolve Erro 403: access_denied. Em produção a lista deixa de importar.

Setup (uma vez)

  1. Criar o OAuth client no Google Cloud Console:

    • projeto novo (ou existente) na conta pessoal;

    • APIs & Services → Library: ativar Gmail API, Google Calendar API, Google Drive API;

    • OAuth consent screen: tipo External, adicionar os três e-mails como test users (enquanto o app estiver em "Testing", só eles conseguem autorizar; nessa fase o refresh token expira em 7 dias — ver abaixo);

    • Credentials → Create → OAuth client ID → Desktop app.

  2. Guardar o client no Credential Manager. Ou por variáveis de ambiente:

    $env:GWS_CLIENT_ID = "..."; $env:GWS_CLIENT_SECRET = "..."
    uv run gws-mcp setup
    Remove-Item Env:GWS_CLIENT_ID, Env:GWS_CLIENT_SECRET

    ou pelo JSON baixado do console (apague o arquivo depois):

    uv run gws-mcp setup --from-file C:\caminho\client_secret_xxx.json
  3. Adicionar contas. Abre o navegador para o consentimento:

    uv run gws-mcp accounts add pessoal
    uv run gws-mcp accounts add trabalho
    uv run gws-mcp accounts list
  4. Conectar no Claude Code, na pasta onde deve valer:

    claude mcp add --scope local gws -- uv --directory C:\Users\Developer\Documents\Trabalho\Pessoal\gws-mcp run gws-mcp serve

Sobre "Testing" vs "In production"

Com o consent screen em Testing, o Google expira o refresh token em 7 dias. Para não repetir accounts add toda semana, publicar o app (Publish app). Sem verificação do Google aparece a tela "app não verificado" no consentimento, mas o token deixa de expirar. Como o client é seu e só você usa, é aceitável.

Uso

Toda ferramenta exige profile. Comece por accounts_list para ver os perfis e a qual e-mail cada um corresponde. Datas em RFC3339 (2026-09-04T09:00:00-03:00).

Desenvolvimento

uv sync
uv run gws-mcp --help

Estrutura em src/gws_mcp/:

Arquivo

Papel

store.py

Credential Manager + profiles.json

auth.py

escopos, fluxo OAuth, credenciais por perfil

gmail.py, gcal.py, drive.py

chamadas à API, sem lógica de MCP

server.py

ferramentas MCP e tratamento de erro sem segredos

cli.py

setup, accounts, serve

Próximos incrementos

Um de cada vez, só depois de o anterior rodar em uso real por alguns dias:

  1. Docs (leitura)

  2. Sheets (leitura)

  3. Escrita: enviar e-mail, criar evento, editar planilha. Exige novos escopos e novo consentimento em cada perfil.

Available Tools

10 tools
accounts_addA

Adiciona uma conta Google: abre o navegador para consentimento (somente leitura) e guarda o token no Credential Manager. profile e um apelido curto, ex.: 'pessoal', 'trabalho', 'cliente'.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses meaningful behavioral details beyond the annotations: it opens a browser for user consent, requests read-only access, and stores the token in Credential Manager. This aligns with annotations (readOnlyHint=false because it writes a token; openWorldHint=true because it launches an external browser flow). No contradiction found. It could additionally mention idempotency or duplicate-profile handling, but the key side effects are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the core action, and adds only relevant detail about the consent flow and the profile parameter. Every sentence earns its place with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, this description covers the purpose, the side-effectful flow, and the parameter meaning. It is reasonably complete for an agent to invoke it correctly. A short note about the interactive browser requirement or duplicate profiles could improve it, but nothing essential is missing for a basic call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only defines 'profile' with no description, and schema description coverage is 0%. The description compensates by explaining that profile is a short alias and provides concrete examples ('pessoal', 'trabalho', 'cliente'). It adds meaning beyond the raw schema, though it could clarify uniqueness or reuse implications.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'Adiciona uma conta Google' (adds a Google account). It also describes the mechanism (browser consent, token storage), which distinguishes it from sibling tools like accounts_list and accounts_remove.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when a Google account needs to be added and a profile alias assigned. However, it provides no explicit guidance on when not to use it or how it compares to alternatives such as accounts_list or accounts_remove. Usage context is inferable but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

accounts_listA
Read-only

Lista os perfis (contas Google) configurados, com e-mail e escopos.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, fully covering the safety profile. The description adds the output content (email and scopes) but discloses no further behavioral traits such as authentication requirements, rate limits, or response format. There is no contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with zero wasted words, front-loading the verb and resource and appending the returned fields. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only tool whose safety profile is carried by annotations, the description is nearly complete: it states the action, the resource, and the returned fields. It does not detail the response structure, but with no output schema and such a simple resource that is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description has nothing to add beyond what an empty schema already conveys, and it does not misrepresent any argument.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Lista' — lists) and a clear resource ('perfis (contas Google) configurados'), and specifies the output content (e-mail e escopos). It implicitly distinguishes itself from the sibling mutations accounts_add/accounts_remove by its read-only verb, though it does not explicitly name any sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a read-only enumeration use case — call this when you need the configured Google account profiles. It provides no explicit when/when-not guidance, exclusions, or references to alternatives like accounts_add/accounts_remove, leaving the selection logic to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

accounts_removeA
Destructive

Remove um perfil local e apaga o refresh token do Credential Manager. Nao altera nada no Google.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true; the description adds concrete detail about what gets destroyed (local profile, refresh token) and what remains untouched (Google data). This is exactly the behavioral context beyond the annotations that an agent needs before invoking a destructive tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler; the destructive action is front-loaded and the scope boundary is stated immediately after. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter destructive tool, the description covers what it does and what it does not do. It only misses guidance on where to get the profile value (e.g., from accounts_list), leaving a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not explain the 'profile' parameter's format or source. The phrase 'Remove um perfil local' hints that the parameter identifies the local profile, but the description fails to compensate for the missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (remove the local profile, delete the refresh token from Credential Manager) and a resource boundary (does not change anything in Google). This distinguishes it from sibling tools like accounts_add and accounts_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool by describing its scope, but it does not explicitly contrast with alternatives or state when-not-to-use. The phrase 'does not alter anything in Google' gives some exclusion context, but no sibling names or conditions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_free_busyB
Read-only

Blocos ocupados por calendario no intervalo (RFC3339). Sem datas: proximas 24h. Calendario padrao: 'primary'.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileYes
time_maxNo
time_minNo
calendar_idsNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

As annotations já indicam readOnlyHint=true, openWorldHint=true e destructiveHint=false, cobrindo a segurança da operação. A descrição acrescenta comportamento relevante sobre o intervalo padrão e calendário padrão, mas não detalha o formato exato do retorno, limites de intervalo ou tratamento de timezone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A descrição é curta, direta e cada frase carrega informação útil: o recurso, o formato de data, o default temporal e o default de calendário. Não há palavras desnecessárias e a informação principal vem primeiro.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Para uma ferramenta com 4 parâmetros, 0% de cobertura no schema, sem output schema e com um parâmetro obrigatório 'profile' inexplicado, a descrição é insuficiente. Ela cobre os defaults, mas não permite que um agente entenda completamente como preencher todos os argumentos nem o que receberá de volta.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Com schema_description_coverage de 0%, a descrição precisa compensar. Ela acrescenta significado para time_min/time_max (RFC3339, default 24h) e calendar_ids (default 'primary'), mas deixa o parâmetro obrigatório 'profile' sem explicação e não esclarece como calendar_ids deve ser estruturado.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

A descrição informa que a ferramenta retorna blocos ocupados do calendário em um intervalo RFC3339, o que é específico o suficiente para indicar o recurso e o tipo de resultado. No entanto, não usa um verbo explícito e não diferencia diretamente de siblings como calendar_list_events, embora o recurso 'busy blocks' seja distinto.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

A descrição fornece defaults úteis ('Sem datas: próximas 24h', 'Calendário padrão: primary'), mas não diz quando usar esta ferramenta em vez de alternativas, nem menciona exclusions ou pré-requisitos como a necessidade do profile.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_list_eventsA
Read-only

Lista eventos entre time_min e time_max (RFC3339). Sem datas: proximos 7 dias. Recorrentes vem expandidos.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
profileYes
time_maxNo
time_minNo
calendar_idNoprimary
max_resultsNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/non-destructive, so the safety profile is covered. The description adds useful behavioral details not in the annotations: recurring events are expanded and the default time window is the next 7 days.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, information-dense sentences with no filler. The most important behavior (date range and default) is front-loaded, and every sentence contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Core invocation logic is present: event listing, date range, default window, and recurrence behavior. However, there is no output schema and no mention of return shape, pagination, max_results implications, or query filtering, so an agent might still be uncertain about result handling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate. It explains time_min/time_max format (RFC3339) and the default range when empty, but it does not clarify query, profile, calendar_id, or max_results semantics, leaving several parameters under-specified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the specific action (list events), the resource (calendar events), and the scope (between time_min and time_max). The default behavior and recurrence expansion further disambiguate it from siblings like calendar_free_busy.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly states the common date-range usage and what happens when no dates are provided (next 7 days). It does not explicitly discuss when to prefer calendar_free_busy or drive_search, but the core usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

drive_read_fileA
Read-only

Le o conteudo de um arquivo como texto. Docs vira texto, Sheets vira CSV, Slides vira texto. Binarios devolvem so metadados.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes
profileYes
max_charsNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

As annotations já indicam readOnlyHint=true e destructiveHint=false, e a descrição acrescenta comportamento relevante: conversão por tipo de arquivo (Docs para texto, Sheets para CSV, Slides para texto) e o fallback de binários para metadados. Não contradiz as annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A descrição é curta, direta e bem estruturada: a ação principal vem na primeira frase, seguida por detalhes de conversão e comportamento de binários. Não há palavras desnecessárias.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A descrição informa o formato de retorno para diferentes tipos de arquivo, o que é útil sem output schema. Porém, não cobre parâmetros essenciais como profile e max_chars, nem detalha o que exatamente compõe os metadados de binários, deixando lacunas para o agente invocar corretamente.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

A cobertura do schema é 0% e a descrição não explica nenhum parâmetro. file_id e max_chars são parcialmente inferíveis pelo nome e contexto, mas 'profile' não é explicado, nem o efeito do limite de max_chars na saída. A descrição não compensa a falta de documentação dos parâmetros.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

A descrição usa verbo específico ('Le') e recurso claro ('conteudo de um arquivo'), definindo exatamente o que a ferramenta faz. A diferenciação entre Docs/Sheets/Slides/binários ajuda a distinguir a operação das ferramentas irmãs, como drive_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

O contexto de uso (ler conteúdo de um arquivo) está implícito, mas não há orientação explícita sobre quando usar versus alternativas, nem exclusões como 'use drive_search para localizar arquivos'. A descrição não guia ativamente a decisão entre ferramentas.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gmail_get_messageA
Read-only

Le uma mensagem pelo id: cabecalhos, corpo em texto e lista de anexos (nome/tamanho, sem conteudo).

ParametersJSON Schema
NameRequiredDescriptionDefault
profileYes
max_charsNo
message_idYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds value beyond the annotations by disclosing exactly what the read returns and, crucially, what it does NOT return ('sem conteudo' — attachment content is excluded). The 'corpo em texto' disclosure (text body only) also sets expectations about format. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single Portuguese sentence packs the retrieval key, the return structure, and an explicit exclusion with zero wasted words. Every phrase earns its place: 'pelo id', 'cabecalhos, corpo em texto', 'lista de anexos (nome/tamanho, sem conteudo)'.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with safety covered by annotations, the description is largely complete: it defines inputs (id), outputs (headers, body, attachment metadata), and an exclusion. The main gaps are the unexplained max_chars truncation behavior and the meaning of profile, which an agent would need to correctly size or filter requests. No output schema exists, so the return-scope description carries the full burden and mostly succeeds.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is effectively 0% — the schema provides only bare titles ('Profile', 'Max Chars', 'Message Id') with no descriptions. The description clarifies message_id's role ('pelo id') but says nothing about max_chars (presumably a body truncation limit, default 20000) or profile (which account context to use). With zero schema descriptions, the description must compensate and only covers one of three parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Lê uma mensagem pelo id' — reads a message by id) and goes further to enumerate the exact return scope: headers, text body, and attachment list with name/size. It naturally distinguishes itself from siblings like gmail_search (finding messages) and gmail_list_labels (listing labels) by clarifying this is an id-based retrieval returning message content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is implied rather than stated: the phrase 'pelo id' signals the agent must already possess a message_id, implying gmail_search is the precursor. However, there is no explicit when-to-use guidance, no mention of alternatives, and no statement of when not to use this tool (e.g., if attachment content is needed).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gmail_list_labelsB
Read-only

Lista os rotulos (labels) da conta.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe-read nature is covered. The description adds no behavioral detail beyond the tool name, such as whether all labels are returned, ordering, or account-scoping semantics. It does not contradict the annotations, but it contributes little extra transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every word contributes to stating the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool, the description is minimally adequate: it names the resource returned. However, with no output schema and no parameter explanation, the agent lacks detail about the profile argument and the shape of the returned label list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the required 'profile' parameter beyond the phrase 'da conta'. An agent must infer that profile identifies which account's labels to list; no format, allowed values, or default behavior is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Lista') and resource ('os rotulos/labels') and specifies scope ('da conta'), so an agent knows exactly what the tool does. It is clearly distinct from sibling tools such as gmail_search and gmail_get_message, which operate on messages rather than labels.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states the action but gives no guidance about when to choose this tool over alternatives, nor any exclusions or prerequisites. There is no mention that this is the way to discover available labels before searching/filtering messages, which would help route the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 10 tool updatesv0.1.0
    • First observedaccounts_add
    • First observedaccounts_list
    • First observedaccounts_remove
    • First observedcalendar_free_busy
    • First observedcalendar_list_events
    • First observeddrive_read_file
    • First observeddrive_search
    • First observedgmail_get_message
    • First observedgmail_list_labels
    • First observedgmail_search

TDQS

A3.9/5.0
Disambiguation5/5

Each tool maps to a distinct resource/action combination: accounts, Gmail messages/labels, calendar availability, and Drive files/search. There is no meaningful overlap between search, read, and list operations.

Naming Consistency5/5

All tool names follow a consistent snake_case resource_action pattern (accounts_list, gmail_search, calendar_list_events, drive_read_file). Verb placement and object nouns are uniform across the set.

Tool Count5/5

Ten tools cover four Google Workspace areas without bloat. Each tool serves a non-redundant purpose, and the count is within the ideal 3-15 range for an MCP server.

Completeness4/5

The read/query workflows for Gmail, Calendar, and Drive are well represented, and account lifecycle is complete. Gaps such as sending email, creating calendar events, or writing Drive files appear intentional given the read-only consent, but would limit broader workspace management.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/TarcioDiniz/gws-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server