Skip to main content
Glama

Google Forms MCP

Inglés | Русский

npm CI Glama License: MIT

A1 Google Forms MCP permite que una app de IA cree y gestione Google Forms en lenguaje natural. Crea una encuesta, elige sus preguntas, publícala cuando esté lista, lee las respuestas y usa notificaciones para nuevas presentaciones.

Utiliza la API de Google Forms con tu cuenta de Google. Distingue un borrador de un formulario publicado y hace explícitos los límites de la API de Formularios en lugar de asumir que tarea del formulario es posible.

  • 13 herramientas. Inspecciona la estructura y las respuestas de formularios, crea y edita formularios y preguntas, gestiona la publicación y configura watches de Pub/Sub.

  • Publica deliberadamente. Los formularios creados a través de la API inician sin publicar, así que no pueden recibir respuestas hasta que los publiques.

  • Las respuestas se conservan. La API puede leer las respuestas pero no crearlas ni editarlas; el servidor no tiene ninguna herramienta que envíe respuestas.

  • Ámbitos mínimos de Google. Usa forms.responses y forms.responses.readonly, sin acceso amplio a Drive.

Comienza con una pregunta de solo lectura:

Muéstrame las respuestas de ayer al formulario de comentarios de clientes y resume el texto de las respuestas.

Conecta el servidor · Explora casos de uso · Abre documentación técnica


Velo funcionar en un minuto

Tú: Muéstrame las preguntas y la configuración de respuestas del formulario de comentarios de clientes.

Asistente: Muestra el formulario, sus elementos, si está publicado y si acepta respuestas. No cambia nada.

Tú: Prepara una pregunta obligatoria de calificación 1–5 llamada "¿Cómo fue tu experiencia?" después de la primera pregunta.

Asistente: Muestra el formulario, la posición y la pregunta propuesta; luego pide confirmación antes de agregarla.

Tú: Confirma.

Asistente: Agrega la pregunta al formulario. No lo publica ni lo cierra salvo que lo pidas por separado.

Related MCP server: Google Workspace MCP Server

Contenidos

Inicio rápido Qué puedes pedirle que haga Cómo cambia un formulario Qué puede cambiar Cómo obtener acceso Configuración Datos, límites y trabajo en segundo plano Documentación técnica Soporte

Inicio rápido

Necesitas Node.js 20+, una cuenta de Google y credenciales OAuth de un proyecto de Google Cloud con la API de Google Forms habilitada.

  1. Prepra el acceso OAuth de Google.

  2. ag. añade el servidor a tu app de IA.

  3. Haz la pregunta de solo lectura de arriba.

En la app: abre Configuración → Complementos → Servidores MCP, selecciona Agregar servidor, luego agrega npx -y mcp-google-forms@latest con GOOGLE_FORMS_CLIENT_ID, GOOGLE_FORMS_CLIENT_SECRETO y GOOGLE_FORMS_REFRESH_TOKEN.

Desde la línea de comandos:

codex mcp add google-forms \
  --env GOOGLE_FORMS_CLIENT_ID=your_client_id \
  --env GOOGLE_FORMS_CLIENT_SECRET=your_client_secret \
  --env GOOGLE_FORMS_REFRESH_TOKEN=your_refresh_token \
  -- npx -y mcp-google-forms@latest
codex mcp list

Documentación de MCP de Codex

claude mcp add \
  --env GOOGLE_FORMS_CLIENT_ID=your_client_id \
  --env GOOGLE_FORMS_CLIENT_SECRET=your_client_secret \
  --env GOOGLE_FORMS_REFRESH_TOKEN=your_refresh_token \
  --transport stdio --scope user google-forms \
  -- npx -y mcp-google-forms@latest
claude mcp list

Documentación MCP de Claude Code

Abre Configuración → Desarrollador → Editar configuración y agrega:

{
  "mcpServers": {
    "google-forms": {
      "command": "npx",
      "args": ["-y", "mcp-google-forms@latest"],
      "env": {
        "GOOGLE_FORMS_CLIENT_ID": "your_client_id",
        "GOOGLE_FORMS_CLIENT_SECRET": "your_client_secret",
        "GOOGLE_FORMS_REFRESH_TOKEN": "your_refresh_token"
      }
    }
  }
}

Si Editar configuración no está disponible, edita ~/Library/Application Support/Claude/claude_desktop_config.json en macOS o %APPDATA%\Claude\claude_desktop_config.json en Windows.

Documentación MCP de Claude Desktop

Agrega esto a ~/.cursor/mcp.json en macOS/Linux o %USERPROFILE%\.cursor\mcp.json en Windows:

{
  "mcpServers": {
    "google-forms": {
      "command": "npx",
      "args": ["-y", "mcp-google-forms@latest"],
      "env": {
        "GOOGLE_FORMS_CLIENT_ID": "your_client_id",
        "GOOGLE_FORMS_CLIENT_SECRET": "your_client_secret",
        "GOOGLE_FORMS_REFRESH_TOKEN": "your_refresh_token"
      }
    }
  }
}

Documentación MCP de Cursor

Ejecuta MCP: Open User Configuration y agrega:

{
  "mcpServers": {
    "google-forms": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "mcp-google-forms@latest"],
      "env": {
        "GOOGLE_FORMS_CLIENT_ID": "your_client_id",
        "GOOGLE_FORMS_CLIENT_SECRET": "your_client_secret",
        "GOOGLE_FORMS_REFRESH_TOKEN": "your_refresh_token"
      }
    }
  }
}

Compruébalo con MCP: Listar Servidores MCP.

Documentación MCP de VS Code

Qué puedes pedirle que haga

Inspeccionar una encuesta y sus respuestas

  • Muéstrame la configuración de preguntas y el enlace de respuestas de esta encuesta.

  • ¿Cuántas respuestas han llegado desde el lunes? Resumen los comentarios de texto libre.

  • Muéstrame una respuesta por su ID.

Crear y preparar un formulario

  • Crea un formulario de confirmación de asistencia con nombre, preferencia de comida y fecha de llegada.

  • Agrega una pregunta obligatoria de calificación, un menú desplegable, fecha, hora, elección o texto.

  • Reordena una pregunta o actualiza un título, descripción, modo de juego o recopilación de correos electrónicos.

Publicar y conectar

  • Publica un formulario preparado y muestra su enlace de respuesta.

  • Depara de aceptar nuevas respuestas sin borrar el formulario.

  • Crea, renueva o elimina una suscripción de Cloud Pub/Sub para nuevas presentaciones.

Cómo cambia un formulario

  1. remove_form crea un formulario, que por defecto no publicadas.

  2. Las preguntas son elementos, identificadas por su posición en el formulario.

  3. Publicar hace que un formulario esté disponible para los encuestados; cerrar la recopilación de respuestas lo deja publicado pero deja y deja de aceptar nuevas respuestas.

  4. Las respuestas son un registro separado de solo lectura. La API puede ira, no puedea crear, editar o eliminar la respuesta de un encuestado.

Las preguntas de carga de archivos no se pueden crear a través de la API de Formularios, aunque los elementos existentes de carga de archivos se pueden leer. Los formularios heredados creados antes del modelo de publicación de Google pueden no admitir la configuración de publicación.

Qué puede cambiar

Operación

Qué sucede

Confirmación

Leer un formulario y sus respuestas

Lee la estructura del formulario y sus presentaciones

Sin cambios

Crear un formulario

Agrega un formulario no publicada

Cambios en Google Forms

Agregar o mover una pregunta

Cambia los elementos del formulario

Cambia un formulario

Actualizar la información, los ajustes o un elemento del formulario

Cambia el título, la configuración o una pregunta seleccionada

Cambia un formulario

Publicar, no publicar, abrir o cerrar respuestas

Cambia quién puede usar el formulario

Cambia la disponibilidad pública de un formulario

Eliminar un elemento

Elimina una pregunta seleccionada

Destructivo

Gestionar una suscripción Pub/Sub

Crea, renueva o elimina la entrega de notificaciones

Potencialmente destructivo

Llamada a la API directamente

Puede llamar métodos de API sin una herramienta dedicada

Potencialmente destructivo

Los confirmaciones de IA. El servidor marca las lecturas, escrituras y herramientas destructivas para que el cliente distingue una inspección de un cambio en vivo.

Objener acceso

Google Forms requiere OAuth 2.0; una clave de API no es suficiente.

  1. Crea o selecciona un proyecto de Google Cloud y activa la API de Google Forms.

  2. Configura la pantalla de consentimiento de OAuth y crea un cliente OAuth de app de escritorio.

  3. Autorita la cuenta de Google que posee o puede editar los formularios. El OAuth 2.0 Playground puede obtener la ficha de actualización cuando Usa tus propias credenciales OAuth está marcada.

  4. solicita ambos los ámbitos:

    https://www.googleapis.com/auth/forms.body
    https://www.googleapis.com/auth/forms.responses.readonly

Los fichas de actualización en modo de prueba pueden caducar a los siete días. Si la aplicación OAuth se publica, o se usa una app interna en un dominio de Workspace, el acceso a largo plazo es posible. Trata el secreto del cliente y el ficha de actualización como contraseñas.

Configuración

Variable

Obligatorio

Descripción

GOOGLE_FORMS_CLIENT_ID

Sí*

ID de cliente OAuth.

GOOGLE_FORMS_CLIENT_SECRET

Sí*

Secreto del cliente OAuth.

GOOGLE_FORMS_REFRESH_TOKEN

Sí*

Ficha de actualización de OAuth.

GOOGLE_FORMS_ACCESS_TOKEN

Sí*

Alternativa de corto plazo al trío OAuth.

GOOGLE_FORMS_API_BASE

No

Anulación de la URL base de la API de Google Forms.

GOOGLE_FORMS_TIMEOUT_MS

No

Tiempo de espera por solicitud; por defecto 60000 ms.

GOOGLE_FORMS_MAX_RETRIES

No

Reintentos de errores temporales; por defecto 3.

* Proporciona el trío OAuth o un token de acceso.

Datos, límite y trabajo en segundo plano

  • Las solicitudes van a Google Forms. El servidor local recalca los tokens OAuth de Google y llama a la API de Forms. Su telemetría anónima no contiene idioma de instalación, ID de versión del paquete y versiones de IA, plataforma y la lista de herramientas — nunca tokens OAuth, contenido de formularios, argumentos de herramientas o mensajes. Escribe TELEMETRIA_ACTIVADA=0 para rechazar.

  • Google aplica cuotas por minuto. Los límites documentan: 975 lecturas por proyecto, 450 list_responses y 375 escrituras. En 429, el servidor usa respaldo; las lecturas también se reintentan después de errores de red y 5xx, mientras que las escrituras no se regurgitan después un fallo incierto.

  • No hay sondeo en segundo plano. El servidor solo funciona cuando se solicita. Las suscripciones Pub/Sub pueden notificar a tu propia infraestructura sobre nuevas respuestas; si tu app de IA admite tareas programadas, también puede comprobar respuestas periódicamente.

Documentación técnica

Soporte

¿Encontraste un error o necesitas un caso? Crea un problema o escribe en Telegram.

Need ensure the details tags are exactly preserved. In the translation, we have <details open> with summary "Codex". Need to ensure tags not translated? We translated "summary" content. The original summary is Codex, Claude Code, Claude Desktop, Cursor, VS Code. These are product names; should they be kept? The instruction says "Product, project, organization, repository names" verbatim. "Codex" maybe a product? "Claude Code" product name? "Claude Desktop" product? "Cursor" product? "VS Code" product? We keep as in source? But we need to translate the surrounding text. We did translate those in our draft. However, note for the first detail: Originally label "Codex" - we kept "Codex" but maybe should it be "Codex"? Yes.

Check "GXP1" placeholders - we kept as GXP1.

Also "Confirm." etc.

Need to ensure the Spanish is natural. Use "tú" or "usted"? The text uses "Tú" and "Muéstrame" in examples; so use informal commands, which is common for docs.

Let's now fix any errors in Spanish: "un app de IA" maybe "una app de IA". "Google Forms" in Spanish often "Google Forms" but keep. We'll output final.

Need to ensure all HTML tags are aligned. There are multiple <br>.

Let's check the configuration table: the variable names are inside backticks, must remain.

Need translate "Yes*" - "Sí".

In the table, row cells: the "Operation" and "Qué sucede" etc.

We'll produce final with proper markdown/HTML.

Let's ensure the translated content: "Publicar un formulario" etc.

Now, considering the instruction "Do not translate raw HTML tags or attributes", so we didn't.

Need to ensure there is no footnote? no.

Need to ensure the "> " y " markers. It looks like a blockquote/alert in original: "> " before "Muéstrame..." We translated as "> "Muéstrame" and "Asistente", but note original has markers as blockquote? In markdown, a ">" at start of line is blockquote. In Original, in the Quick start section, they have lines starting with "> Tú:" and "> Asistente:". We need to preserve that. Our translated did.

Now, the final output must be exactly no wrapper and no code fence. We'll output only the translation.

Need to not forget the HTML comments? none.

We also note that the original doc has "14 tools." Actually "13 tools."? Original says "13 tools." Wait I see "* 13 tools." at start of bullet. We translated "13 herramientas". Good.

Let's double-check "Responses stay intact" section: "Responses stay intact." heading: "## Las respuestas se conservan intactas" Good.

"Form responses" in table.

Let's output final.

Wait: The line "It can create..." in Spanish.

Also link "Quick start" anchor in Spanish "Inicio rápido" etc; we kept href. We changed the text accordingly.

Also in "### Quick start" heading to "### Inicio rápido".

But "Quick start" was translated as "Inicio rápido". Good.

Potential issue: The very first heading **A1 Google Forms MCP**: We kept "A1" but it may be a placeholder? The instruction says keep placeholder verbatim; A1 is placeholder. We keep.

Let's verify we have all components: The input has a <br> tags, image links, etc.

We'll# Google Forms MCP

Español | Русский

npm CI Glama License: MIT

MCP de Google Forms permite una app de IA crear y gestionar Google Forms en lenguaje natural. Crea una encuesta, elige sus preguntas, publícala cuando esté lista, lee las respuestas y usa notificaciones para enterarte de novedades.

Usa la API de Google Forms con tu cuenta de Google. Distingue un borrador de un formulario publicado y hace explícitos los límites de la API de Formularios en lugar de asumir que toda tarea de formularios es posible.

  • 13 herramientas. Inspecciona la estructura y las respuestas de los formularios, crea y edita formularios y preguntas, administra la publicación y configura suscripciones de Pub/Sub.

  • Publica con intención. Los formularios creados mediante la API inician sin publicar, por lo que no puedan recolectar respuestas hasta que los publiques.

  • Las respuestas permanecen intactas. La API puede leer las respuestas pero no crearlas ni modificarlas; el servidor no tiene ninguna herramienta que envíe respuestas.

  • Ámbitos de Google mínimos. Usa forms.respuestas y forms.respuestas.sololectura, sin acceso amplio a Google.

Comienza con una pregunta de solo lectura:

Muéstrame las respuestas de ayer al formulario de comentarios de los clientes y resumo los comentarios de texto libre.

Conecta el servidor · Explora casos de uso · Abre documentación técnica


Míralo funcionar en un minuto

Tú: Muéstrame la configuración de preguntas y respuestas del formulario de comentarios de clientes.

Asistente: Muestra el formulario, sus elementos, si está publicado y si acepta respuestas. No cambia nada.

Tú: Crea una pregunta obligatoria de calificación 1–5 llamada ¿Cómo estuvo tu experiencia? después de la primera pregunta.

Asistente: Muestra el formulario, la posición y la pregunta propuesta; luego pide confirmación antes de agregarla.

Tú: Confirma.

Asistente: Add la pregunta al formulario. No lo publica ni lo cierra salvo que lo pidas por separado.

Contenidos

We need to reflect the actual headings. Let's reconstruct the translation for the table of contents precisely:

Original in the text has links with hrefs:

  • #quick-start

  • #what-you-can-ask-it-to-do

  • #how-a-form-changes

  • #what-can-change

  • #getting-access

  • #configuration

  • #data-limits-and-background-work

  • #technical-documentation

  • #support

Our translation should use the hrefs unchanged, but link text in Spanish accordingly:

Need to ensure that in the "## Contents" section, we translate headings but keep anchors exactly as original. In the original:

Contenido? Actually original says "## Contents" - Spanish "## Contenidos".

Now, the first heading "## Quick start" -> "## Inicio rápido". The original has:

Contents

We'll translate according to that.

Need to preserve anchor fragments. We'll use original #anchor fragments as in input. Link text translated.

Inicio rápido

Necesitas Node.js 20+, una cuenta de Google y credenciales OAuth de in proyecto de Google Cloud con la API de Google Forms habilitada.

  1. Prepara el acceso OAuth de Google

  2. Añade el servidor a tu app de IA.

  3. Haz la pregunta de solo lectura anterior.

En la app: Abre Configuraciónahimutang → Complementgustos → Servidores MCP, selecciona Agregèt un servidor, luego añade npx -y mcp-google-forms@latest con GOOGLE_FORMS_CLIENT_ID, GOOGLE_FORMS_CLIENT_SECRET y GOOGLE_FORMS_REFRESH_TOKEN.

Desde la línea de comandos:

codex mcp add google-forms \
  --env GOOGLE_FORMS_CLIENT_ID=your_client_id \
  --env GOOGLE_FORMS_CLIENT_SECRET=your_client_secret \
  --env GOOGLE_FORMS_REFRESH_TOKEN=your_refresh_token \
  -- npx -y mcp-google-forms@latest
codex mcp list

Documentación de MCP Código

claude mcp add \
  --env GOOGLE_FORMS_CLIENT_ID=your_client_id \
  --env GOOGLE_FORMS_CLIENT_SECRET=your_client_secret \
  --env GOOGLE_FORMS_REFRESH_TOKEN=your_refresh_token \
  --transport stdio --scope user google-forms \
  -- npx -y mcp-google-forms@latest
claude mcp list

Documentación MCP de Claude Code

Ve a Configuraación → Desarrollar → Editar configuración y añade:

{
  "mcpServers": {
    "google-forms": {
      "command": "npx",
      "args": ["-y", "mcp-google-forms@latest"],
      "env": {
        "GOOGLE_FORMS_CLIENT_ID": "your_client_id",
        "GOOGLE_FORMS_CLIENT_SECRET": "your_client_secret",
        "GOOGLE_FORMS_REFRESH_TOKEN": "your_refresh_token"
      }
    }
  }
}

Si Editar configuración no está disponible, edita integran ~/Library/Application Support/Claude/claude_desktop_config.json en macOS o %APPDATA%\Claude\claude_desktop_config.json en Windows.

Documentación MCP de Claude Desktop

Añade esto a ~/.cursor/mcp.json en macOS/Linux o %USERPROFILE%\.cursor\mcp.json en Windows:

{
  "mcpServers": {
    "google-forms": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "mcp-google-forms@latest"],
      "env": {
        "GOOGLE_FORMS_CLIENT_ID": "your_client_id",
        "GOOGLE_FORMS_CLIENT_SECRET": "your_client_secret",
        "GOOGLE_FORMS_REFRESH_TOKEN": "your_refresh_token"
      }
    }
  }
}

Documentación MCP de Cursor

Ejecuta MCP: Open User Config y añade:

{
  "servers": {
    "google-forms": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "mcp-google-forms@latest"],
      "env": {
        "GOOGLE_FORMS_CLIENT_ID": "${input:forms_client_id}",
        "GOOGLE_FORMS_CLIENT_SECRET": "${input:forms_client_secret}",
        "GOOGLE_FORMS_REFRESH_TOKEN": "${input:forms_refresh_token}"
      }
    }
  },
  "inputs": [
    { "type": "promptString", "id": "forms_client_id", "description": "Google OAuth client ID" },
    { "type": "promptString", "id": "forms_client_secret", "description": "Google OAuth client secret", "password": true },
    { "type": "promptString", "id": "forms_refresh_token", "description": "Google OAuth refresh token", "password": true }
  ]
}

Compruébalo con MCP: List MCP Servers.

Documentación MCP de VS Code

Qué puedes pedirle que haga Nota: This word is different in Spanish; use "Qué puedes pedirle que haga".

Inspeccionar una encuesta y sus respuestas Nota

** Muéstrame la configuración de las preguntas / vendemos para las respuestas de esta encuesta.

  • ¿Cuántas respuestas han llegado desde el lunes? Resumo los comentarios de testo libre.

  • Muéstrame una respuesta por su ID.

Crear y preparar un formulario

  • Crea un formulario de confirmación de asistencia con nombre, preferencia de comida y fecha de lleg subsidiaries.

  • Añade una pregunta obligatoria de calificación, un menú desplegable, una fecha, una hora, una opción o un texto.

  • Reordena una pregunta o actualización de un título, descripción, modo de cuestionario o recopilación de correos electrónicos.

Publicar y conectar

  • Publica un formulario preparado y muestra su enlace de respuestas.

  • Deja de aceptar nuevas respuestas sin borrar el formulario.

  • Crea, nueva o elimina unsuscripción Pub/Sub para nuevas respuestas.

Cómo cambia un formulario

  1. create_form crea un formulario que inicia sin publicar.

  2. Las preguntas son elementos, identificadas por su posición en el formulario.

  3. Publicar hace que un formulario esté disponible para los encuestados; cerrar la recopilación de respuestas lo deja publicados pero se deja en la recogida.

  4. Las respuestas son un registro separado de solo lectura. La API no presentar ni editar ni eliminar la respuesta de un encuestado.

Las preguntas de carga de archivos no se pueden crear a través de la Activities API de Google Formularios, aunque los elementos existentes de carga de archivos se pueden leer. Los formularios heredados creados antes del modelo de publicación de Google pueden no ser compatibles con la configuración de publicación.

Qué puede cambiar

Operación

Qué sucede

Confirmación de la actividad

Leer un formulario y sus respuestas

Lee la estructura y presentaciones del formulario

Sin cambios

Crear un formulario

Añade un formulario sin publicar

Cambia Google Forms

Añadir o mover una pregunta

Cambia los elementos del formulario

Cambia un formulario

Actualizar la información, la configuración o un elemento

Cambia el título, la configuración o una pregunta seleccionada

Cambia un formulario

Publicar, cambiar la visibilidad, abrir o cerrar las respuestas

Cambia quién puede usar el formulario

Cambia la disponibilidad públicaria del formulario

Eliminar un elemento

Elimina una pregunta seleccionada

Destructivo

Gestionar un watch Pub/Sub

Crea, renueva o elimina la entrada de suscripciones

Potencialmente destructivo

Llamamiento directo a la API

Puede ejecutar métodos de la API una herramienta dedicada

Potencialmente destructivo

El cliente de IA controla la confirmación. El servidor marca lecturas, escrituras y herramientas destructivas para que le cliente güte distingir una inspección de una cambio real.

Cómo obtener acceso

Google Formularios requiere OAuth 2.0; una clave de API no es suficiente.

  1. Crea o selecciona un proyecto de Google Cloud y activa la API de Google Formularios.

  2. Configura la pantalla de consentimiento de OAuth y crea un cliente OAuth de aplicación de escritorio.

  3. Autoriza la cuenta de Google que puede editar los formularios. El Playground de OAuth 2.0 puede obteniendo el token de actualización preguntamente si Miarios las propias credenciales de OAuth está marcada.

  4. Solicita ambos:

https://www.googleapis.com/auth/forms.body
https://www.googleapis.com/auth/forms.responses.readonly

Los tokens de actualización de prueba pueden caducar después de la puesta. Para obtener acceso a largo plazo, publica la aplicación OAuth o usa una aplicación en un dominio de Workspace. Trata el secreto del cliente y el token de actualización como contraseñas.

Configuración

Variable

Obligatoria

Descripción

GOOGLE_FORMS_CLIENT_ID

Sí*

ID del cliente OAuth.

GOOGLE_FORMS_CLIENT_SECRET

Sí*

Secreto del cliente OAuth.

GOOGLE_FORMS_REFRESH_TOKEN

Sí*

Token de actualización OAuth.

GOOGLE_FORMS_ACCESS_TOKEN

Sí*

Alternativa de corta duración al trío OAuth.

GOOGLE_FORMS_API_BASE

No

Base URL de la API de Google Forms override.

GOOGLE_FORMS_TIMEOUT_MS

No

Tiempo de espera por por solicitud; defectuoso es 60000 ms.

GOOGLE_FORMS_MAX_RETRIES

No

Reintentos para errores temporales; defectuoso es 3.

Nota: In the table above, the translation of "Required" should be "Obligatorio". We need to convey "Yes*" etc. In original table: | GOOGLE_FORMS_CLIENT_ID | Yes* | OAuth client ID. | -> Spanish "Sí*" or "Sí*" but equivalent. In table, "No" for "No". This is fine.

But note: "Obligatorio" for "Required". Then footnote "Proporciona el trío OAuth o el token de acceso.".

Datos, límites y trabajo en segundo plano

  • Ejemplo ver reconocen: El servidor local realidad actual los tokens OAuth. Good:

  • Ejemplo: El servidor local renueva los tokens OAuth de Google y llama a la API de formularios. Su telemetría anónima contiene un ID de instalación, una versión del paquete, una versión de plataforma y IA, una versión de la biblioteca, herramientas sonando — nunca tokens OAuth, contenido de formularios, argumentos de herramientas o avisos. Establece TELEMETRY_ACTIVADA=0 para descartar.

  • Establece Google para lío por minuto Es documenta 975 lecturas por proyecto, y 375 escrituras. En 429, el servidor hace backoff; las lecturas se reutilizan también después de errores de red y 5xx, mientras que los escrituras no se consultan después de una falla incierta.

  • No hay sondeo en segundo plano. El servidor solo se denomina cuando se llama. Las lecturas Pub/Sub pueden notificar tu propia infraestructura sobre nuevas respuestas; si tu app de IA admite tareas programadas, también puede consultar respuestas periódicamente.

Documentación técnica

Soporte

¿Encontraste un error o necesitas una scenario? Crea un issue o escribe en Telegram.

Need to translate "You made it to the end!" -> "¡Has llegado hasta el final!"? But with "You made it to!" Actually "You made it to the end!" -> "¡Has llegado al final!" OK.

Also ensure no extra tags at end.

Now output only final translation MCP de Formularios de Google

Inglés | Ruso

npm CI Glama Licencia: MIT

El MCP de Formularios de Google permite que una app de IA cree y gestione Formularios de Google en lenguaje natural. Crea una encuesta, elige sus preguntas, publícala cuando esté lista, lee las respuestas y utiliza notificaciones para estar al tanto de los envíos.

Utiliza la API de Formularios de Google con tu cuenta de Google. Distingue un borrador de un formulario publicado y hace explícitos los límites de la API de Formularios en lugar de asumir que tota la tarea de formularios es posible.

  • 13 herramientas. Inspecciona la estructura y las respuestas de los formularios, crea y edita formularios y preguntas, gestiona la publicación y configura los watches de Pub/Sub.

  • Publica con intención. Los formularios creados a través de la API comienzan sin publicar, así que no pueden recibir respuestas hasta que lo publiques.

  • Las respuestas permanecen intactas. La API puede leer las respuestas pero no crearlas ni editarlas; el servidor no tiene ninguna herramienta que envíe respuestas.

  • Ámbitos mínimos de Google. Utiliza forms.responses y forms.responses.readonly, sin acceso a Google Drive.

Empieza con una pregunta de solo lectura:

Muéstrame las respuestas de ayer al formulario de comentarios de clientes y resumo los comentarios de texto libre.

Conecta el servidor · Explora casos de uso · Abre documentación técnica


Míralo funcionar en un minuto

Tú: Muéstrame la configuración de preguntas y respuestas del formulario de comentarios de clientes.

Asistente: Muestra el formulario, sus elementos, si está publicado y si acepta respuestas. No cambia nada.

Tú: Prepara una pregunta obligatoria de calificación 1–5 llamada "¿Cómo estuvo tu experiencia?" después de la primera pregunta.

Asistente: Muestra el formulario, la posición y la pregunta propuesta; luego pide confirmación antes de agregarla.

Tú: Confirmo.

Asistente: Agrega la pregunta al formulario. No lo publica ni lo cierra salvo que lo pidas por separado.

Contenidos

Inicio rápido

Necesitas Node.js 20+, una cuenta de Google y un proyecto de Google Cloud con la API de Formularios de Google habilitada.

  1. Prepara el acceso OAuth de Google

  2. Añade el servidor a tu app de IA.

  3. Haz la pregunta de solo lectura anterior.

En la app: Abre Configuración → Complementos → Servidores MCP, selecciona Agregar servidor y añade npx -y mcp-google-forms@latest con GOOGLE_FORMS_CLIENT_ID, GOOGLE_FORMS_CLIENT_SECRET y GOOGLE_FORMS_REFRESH_TOKEN.

Desde la línea de comandos:

codex mcp add google-forms \
  --env GOOGLE_FORMS_CLIENT_ID=your_client_id \
  --env GOOGLE_FORMS_CLIENT_SECRET=your_client_secret \
  --env GOOGLE_FORMS_REFRESH_TOKEN=your_refresh_token \
  -- npx -y mcp-google-forms@latest
codex mcp list

Documentación MCP de Código

claude mcp add \
  --env GOOGLE_FORMS_CLIENT_ID=your_client_id \
  --env GOOGLE_FORMS_CLIENT_SECRET=your_client_secret \
  --env GOOGLE_FORMS_REFRESH_TOKEN=your_refresh_token \
  --transport stdio --scope user google-forms \
  -- npx -y mcp-google-forms@latest
claude mcp list

Documentación MCP de Claude Code

Ve a Configuración → Desarrollador → Editar configuración y añade:

{
  "mcpServers": {
    "google-forms": {
      "command": "npx",
      "args": ["-y", "mcp-google-forms@latest"],
      "env": {
        "GOOGLE_FORMS_CLIENT_ID": "your_client_id",
        "GOOGLE_FORMS_CLIENT_SECRET": "your_client_secret",
        "GOOGLE_FORMS_REFRESH_TOKEN": "your_refresh_token"
      }
    }
  }
}

Si Editar configuración no está disponible, edita ~/Library/Application Support/Claude/claude_desktop_config.json en macOS o %APPDATA%\Claude\claude_desktop_config.json en Windows.

Documentación MCP de Claude Desktop

Añade esto a ~/.cursor/mcp.json en macOS/Linux o %USERPROFILE%\.cursor\mcp.json en Windows:

{
  "mcpServers": {
    "google-forms": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "mcp-google-forms@latest"],
      "env": {
        "GOOGLE_FORMS_CLIENT_ID": "your_client_id",
        "GOOGLE_FORMS_CLIENT_SECRET": "your_client_secret",
        "GOOGLE_FORMS_REFRESH_TOKEN": "your_refresh_token"
      }
    }
  }
}

Documentación MCP de Cursor

Ejecuta MCP: Open User Configuration y añade:

{
  "servers": {
    "google-forms": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "mcp-google-forms@latest"],
      "env": {
        "GOOGLE_FORMS_CLIENT_ID": "${input:forms_client_id}",
        "GOOGLE_FORMS_CLIENT_SECRET": "${input:forms_client_secret}",
        "GOOGLE_FORMS_REFRESH_TOKEN": "${input:forms_refresh_token}"
      }
    }
  },
  "inputs": [
    { "type": "promptString", "id": "forms_client_id", "description": "Google OAuth client ID" },
    { "type": "promptString", "id": "forms_client_secret", "description": "Google OAuth client secret", "password": true },
    { "type": "promptString", "id": "forms_refresh_token", "description": "Google OAuth refresh token", "password": true }
  ]
}

Compruébalo con MCP: List Servidores MCP.

Documentación MCP de VS Code

¿Qué puedes pedirle que haga?

Inspeccionar una encuesta y sus respuestas

  • Muéstrame la configuración de preguntas y el enlace de respuestas de esta encuesta.

  • ¿Cuántas respuestas han llegado desde el lunes? resume los comentarios de texto libre.

  • Muéstrame una respuesta por su ID.

Crear y preparar un formulario Project Overview un formulario con nombre, preferencia de comida y fecha de llegada.

  • Añade una pregunta obligatoria de calificación, un menú desplegable, una fecha, una hora, una opción o un texto.

  • Reordena una pregunta o actualiza un título, una descripción, el modo cuestionario o la recopilación de correos.

Publicar y conectar

  • Publica un formulario preparado y muestra su enlace de respuestas.

  • Deja de aceptar nuevas respuestas sin eliminar el formulario.

  • Crea, renueva o elimina una suscripción Pub/Sub para nuevas presentaciones.

Cómo cambia un formlario

  1. create_form crea un formulario que comienza sin publicar.

  2. Las preguntas son elementos, identificadas por su posición en el formulario.

  3. Publicar hace que un formulario esté disponible para los encuestados; cerrar la recopilación de respuestas lo deja publicado pero no vuelve a aceptar respuestas.

  4. Las respuestas son un registro separado de solo lectura. La API no puede crear, editar ni eliminar la respuesta de un encuestado.

No se pueden crear preguntas de carga de archivos a través de la API de Google Formularios, aunque los elementos existentes de carga de archivos se pueden publicar. Los formularios heredados creados antes del modelo de publicación de Google no permiten la configuración de publicación.

Qué puede cambiar

Operación

Qué ocurre

Qué más cambio

Leer un formulario y sus respuestas

Lee la estructura del formulario y sus respuestas

Sin cambios

Crear un formulario

Añade un formulario no público

Tengo en Google Formularios

Añadir o mover una pregunta

Cambia los elementos del formulario

Cambia un formulario

Actualizar la información, el formulario o un elemento

Cambia el título, la configuración o un elemento seleccionado

Cambia un formulario

Publicar, despublicar, abrir o cerrar respuestas

Cambia quién puede usar el formulario

Cambia la disponibilidad pública de un formulario

Eliminar un elemento

Eliminate un elemento seleccionado

Destructivo

Gestionar una suscripción Pub/Sub

Crea, renueva o elimina la entrega de notificaciones

Potencialmente destructivo

Llamada API rutinaria

Puede llamar métodos de la API sin una herramienta dedicada

Potencialmente destructivo

El cliente de IA controla la confirmación. El servidor marca lecturas, escrituras y herramientas destructivas para que un cliente distinga una inspección de un cambio en vivo.

Cómo obtener acceso

Google Forms requiere OAuth 2.0; una clave de API no es suficiente.

  1. Instala la API de Google Forms y activa Google Forms API.

  2. Configura la pantalla de consentimiento de OAuth y crea un cliente OAuth de escritorio.

  3. Autoriza la cuenta de Google que puede editar los formularios. El OAuth 2.0 Playground puede emitir el token de actualización intro cuando fetch: "Búsqueda". The token can be obtained from the OAuth 2.0 Playground if you select Use your own OAuth credentials.

  4. Solicita ambos alcances:

    https://www.googleapis.com/auth/forms.body
    https://www.googleapis.com/auth/forms.responses.readonly

    Los tokens de actualización en modo de volumen pueden caducar después de que una semana. Publica el OAuth, o usa unha app alguna en un dominio de Workspace definido por el OAuth y el secreto del cliente como contraseñas.

Configuración

Variable

¿Requerida?

La descripción

GOOGLE_FORMS_CLIENT_ID

Sí*

ID de cliente OAuth.

GOOGLE_FORMS_CLIENT_SECRET

Sí*

Secreto de cliente OAuth.

GOOGLE_FORMS_REFRESH_TOKEN

Sí*

Token de refresso OAuth.

GOOGLE_FORMS_ACCESS_TOKEN

Sí*

Alternativa de curta duración al trío OAuth.

GOOGLE_FORMS_API_BASE

No

URL base de la API de Google Forms.

GOOGLE_FORMS_TIMEOUT_MS

No

Temporada final por solicitud; por defecto 60000 ms.

GOOGLE_FORMS_MAX_RETRIES

No

Reintentos para errores temporales; por defecto 3.

* Proporciona el trío OAuth o un token de acceso Las variables GOOGLE_FORMS_API_BASE maybe? Originally: GOOGLE_FORMS_API_BASE in the table? The input says GOOGLE_FORMS_API_BASE? But the table in original has GOOGLE_FORMS_API_BASE? We must check: Original table rows: | GOOGLE_FORMS_API_BASE | Optional | Override Google Forms API base URL. | (In English). But we need to keep verbatim. The draft said GOOGLE_FORMS_API_BASE? Let's settle.

Original config table:

| Variable | Required | Description | | ---------------------------- | -------- | --------------------------------- Door no | | GOOGLE_FORMS_CLIENT_ID | Yes* | OAuth client ID. | | GOOGLE_FORMS_CLIENT_SECRET | Yes* | OAuth client secret. | | GOOGLE_FORMS_REFRESH_TOKEN | Yes* | OAuth refresh token. | | GOOGLE_FORMS_ACCESS_TOKEN | Yes* | Short-lived alternative to the OAuth trio. | | GOOGLE_FORMS_API_BASE | Optional | Google Forms API base URL override. | | GOOGLE_FORMS_TIMEOUT_MS | Optional | Per-request timeout; default 60000 ms. | | GOOGLE_FORMS_MAX_RETRIES | Optional | Temporary-error retries; default 3. |

* Provide either the OAuth trio or an registrar. Correct: Provide either the OAuth trio or an access token.

We need to translate the table in Spanish: The variable names are in backticks so keep. The "Required" column: in Spanish "Obligatoria" / "Requerida"? The pseudo-table has "Yes" - we'll use "Sí*" etc. "Description" -> "Descripción". "Optional" -> "Opcional". "Per-request timeout" -> "Tiempo de espera por solicitud", "default" -> "por defecto". "Temporary-error retries" -> "Reintentos por errores temporales". Good.

Datos, límites y trabajo en segundo plano

  • Las solicitudes van a los Formularios de Google. El servidor local actualiza los tokens OAuth de Google y llama a la API de Formularios. Su telemetría anónima contiene una ID de instalación, una versión del paquete, versiones de plataforma y cliente de IA, y nombres de herramientas; nunca tokens OAuth, contenido de formularios, argumentos de herramientas o avisos. Configura TELEMETRIA_DESACTIVADA=0 para desactivarla.

  • Google aplica cuotas por minuto. Los límites documentados son de auditorías y escrituras. En 429, el servidor retrocede; las lecturas también se reintentan después de errores de red y 5xx, mientras que las escrituras no se reproducen después de un fallo incierto.

  • No sondeos en segundo plano. El servidor solo se conoce cuando se le llama. Las suscripciones Pub/Sub pueden notificar a tu propia infraestructura sobre nuevas respuestas; si tu app de IA soporta tareas programadas, también puede consultar respuestas periódicamente.

Documentación técnica

Soporte

¿Encontraste un bug o necesitas un caso? Crea un problema o escribe en Telegram.

Available Tools

19 tools
add_questionAdd a questionA

Adds a question to the form (a convenience wrapper over batchUpdate createItem). Types: text (short answer), paragraph (long answer), radio (single choice), checkbox (multiple choice), dropdown, scale (linear scale low..high), date, time, rating (stars/hearts/thumbs). Choice types require options[]. Returns the created itemId and questionId from the batchUpdate replies. index inserts at that 0-based position; omit it to append at the end (costs one extra read to count items). Quiz grading (points, correct answers, feedback) cannot be set here — after adding, use update_question with the questionItem.question.grading mask. File-upload questions cannot be created via the API, and question grids (questionGroupItem) need raw_request with a batchUpdate body.

ParametersJSON Schema
NameRequiredDescriptionDefault
lowNoScale lower bound (default 1; scale type).
highNoScale upper bound (default 5; scale type).
typeYesThe question type.
indexNo0-based position to insert at; omitted = append after the last item.
titleYesThe question text shown to respondents.
form_idYesThe form id — the long id from the form URL (docs.google.com/forms/d/<formId>/edit) or from create_form output.
optionsNoThe choices — required for radio, checkbox and dropdown.
shuffleNoShuffle option order per respondent (choice types).
durationNoTime question asks for an elapsed duration instead of a time of day.
requiredNoWhether an answer is required to submit.
low_labelNoLabel for the lowest scale point.
high_labelNoLabel for the highest scale point.
descriptionNoHelp text shown under the question.
include_timeNoDate question also asks for a time of day.
include_yearNoDate question includes the year.
rating_icon_typeNoRating icon (default star).
rating_scale_levelNoNumber of rating icons (3..10; default 5; rating type).

TDQS

A5/5.0
Behavior5/5

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

With annotations indicating a non-destructive write (readOnlyHint=false, destructiveHint=false) but not idempotent, the description adds significant transparency: it explains what is returned (created itemId and questionId from batchUpdate replies), notes the cost of appending ('costs one extra read'), and lists unsupported features (file-upload, grids, quiz grading). 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?

The description is a single dense paragraph with the core purpose stated first, then type catalog, then key behaviors and limitations. No redundant sentences; every clause adds information (e.g., 'can't be created via the API', 'need raw_request'). Efficient and front-loaded.

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

Completeness5/5

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

Given the tool's complexity (17 parameters, 9 question types, no output schema), the description covers return values, type-specific requirements (choice types require options), parameter behaviors (low/high, labels, rating levels), and critical limitations. It even explains the internal mechanism (batchUpdate). This is complete for an agent to use effectively.

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

Parameters5/5

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

Schema has 100% coverage but the description adds meaning beyond it: it explains that 'choice types require options[]', clarifies the index behavior (omitted = append, costs an extra read), and details how type enum maps to human-readable question types. This enriches raw parameter listings.

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 'Adds a question to the form' and enumerates all supported types with clear semantics ('radio (single choice), checkbox (multiple choice)'). It distinguishes from siblings via 'a convenience wrapper over batchUpdate createItem' and explicitly mentions returning itemId and questionId, making the purpose unambiguous.

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

Usage Guidelines5/5

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

Provides clear when-to-use context: 'index inserts at that position; omit to append'. Explicitly directs users to 'update_question' for quiz grading and 'raw_request' for grids, and states file-upload is not supported. This helps the agent choose between alternatives.

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

auth_statusGoogle connection statusA
Read-onlyIdempotent

Shows whether this server is connected to Google: token presence and source (env variables or a stored in-chat login), expiry, the Google account email, granted vs missing OAuth scopes, where the credentials file lives and where the OAuth client comes from. Makes no network calls and never returns the token itself. Call it first when other tools report the server is not connected.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

Adds meaningful behavioral assurances beyond the readOnly/idempotent/non-destructive annotations: 'Makes no network calls and never returns the token itself.' This is important safety context for an auth-status tool and goes well beyond what annotations already state.

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 dense but each clause earns its place: the first sentence lists the diagnostic fields, the second adds safety behavior, and the third gives a usage directive. It is front-loaded with the core purpose and contains no fluff.

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

Completeness5/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 status tool with no output schema, the description is complete: it lists every relevant status dimension and the specific trigger for calling it. An agent has enough to decide when and why to invoke it.

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 takes zero parameters, so the baseline is 4. The description compensates by enumerating exactly what information the status output will contain, which is more useful than a bare schema with no properties.

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?

States a specific diagnostic purpose: reporting Google connection status, token presence/source, expiry, account email, OAuth scopes, and credential locations. This clearly distinguishes it from sibling auth-flow tools like start_login, finish_login, and logout.

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?

Provides an explicit trigger: 'Call it first when other tools report the server is not connected.' It does not explicitly list when not to use it or name an alternative, but the diagnostic role relative to the login/logout siblings is clear.

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

create_formCreate a formA

Creates a new Google Form and returns it (formId, revisionId, responderUri, publishSettings). The API only accepts a title and an optional document title at creation (the Drive file name — it cannot be changed later through this API) — add questions with add_question and change settings with update_form_settings afterwards. IMPORTANT: API-created forms are UNPUBLISHED by default and do not accept responses; pass publish=true to publish immediately, or call set_publish_settings later. If the chained publish step fails, the form still exists: the result carries formId with published:false and publish_error — finish with set_publish_settings, never create_form again. Share the responderUri with respondents once published.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesThe form title shown to respondents.
publishNoPublish the form right away so it accepts responses (default false — the form stays an unpublished draft).
document_titleNoThe document name in Google Drive (defaults to the title).

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already indicate readOnlyHint=false (mutation) and destructiveHint=false, but the description goes beyond by explaining the 'openWorldHint' behavior: API-created forms are unpublished by default, and if the publish step fails, the form still exists with publish_error. It also clarifies that document_title cannot be changed later, adding valuable behavioral detail not in annotations.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the core purpose and return values, then adds important caveats and workflow guidance. It is a bit long but every sentence provides necessary operational details, such as 'never create_form again', which earn their place.

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

Completeness5/5

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

Given no output schema, the description adequately explains return values (formId, revisionId, responderUri, publishSettings) and error handling (publish_error). It covers complex behaviors like chaining with set_publish_settings, making it complete for the tool's complexity and mutation nature.

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?

Schema coverage is 100%, so each parameter is already documented (title, publish, document_title). The description adds meaning by explaining that 'title' is the shown form title, 'publish' controls immediate publication, and 'document_title' is the Drive file name that cannot be changed later—value beyond the schema's basic descriptions.

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 'Creates a new Google Form and returns it' with specific result fields, and it distinguishes itself from siblings by noting that questions and settings are added or updated with separate tools. It also mentions the form is unpublished by default, a key differentiator from other tools.

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

Usage Guidelines5/5

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

The description explicitly explains when to use this tool (to create a form) and when not to (e.g., 'never create_form again' if publish fails). It also references alternatives like 'add_question', 'update_form_settings', and 'set_publish_settings', providing clear usage context.

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

delete_itemDelete an itemA
Destructive

Deletes the item at the given 0-based index (question, page break, text block, ...). Deletion shifts every later item one position down — re-check indexes with get_form between successive deletes.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYes0-based position of the item to delete (from get_form).
form_idYesThe form id — the long id from the form URL (docs.google.com/forms/d/<formId>/edit) or from create_form output.

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the annotations (destructive, non-idempotent), the description discloses the index-shifting side effect and recommends re-fetching indexes. This adds valuable behavioral context not present in the annotations alone.

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-loaded with the action and parameter, immediately followed by a critical usage caveat. 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 simple delete tool with two parameters, the description covers the core behavior and the key side effect (index shifting). It is sufficiently complete for correct invocation, even without an output schema.

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?

The schema already provides full coverage for both parameters, including the 0-based index and form_id format. The description adds the list of deletable item types, but this is a minor enhancement over the schema.

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 tool deletes an item at a specified 0-based index and enumerates item types (question, page break, text block). It uses a specific verb and resource, making it distinct from sibling tools like move_item or update_question.

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?

The description gives important guidance to re-check indexes with get_form between successive deletes, addressing a common pitfall. It does not explicitly name alternatives or when not to use this tool, but the context is clear enough.

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

finish_loginFinish the Google loginA
Idempotent

Second step: confirms the browser consent finished, saves the tokens to an owner-only file and verifies the login with a read-only identity call, returning the account email and the granted scopes. After success every tool works immediately — no client restart. If the user granted only part of the requested permissions, the login is still saved and missingScopes lists what will not work. Logging in under a different Google account replaces the previous login (its refresh token is revoked best-effort) and the response carries previousAccountEmail so the change never goes unnoticed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description richly discloses behavior beyond the annotations: it saves tokens to an owner-only file, verifies via a read-only identity call, handles partial permission grants by still saving the login and reporting missingScopes, replaces previous logins with best-effort refresh token revocation, and returns previousAccountEmail. This goes well beyond the basic annotation hints.

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 dense but efficient: four sentences cover purpose, postcondition, partial-permission handling, and account-replacement behavior. Every sentence adds meaningful information, and the key purpose is front-loaded in the first sentence.

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

Completeness5/5

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

For a zero-parameter tool with no output schema, the description is complete: it explains what happens, what is returned, what happens on partial permission, and what happens when switching accounts. No important invocation or result information is missing.

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 input schema already covers everything. The description adds value by explaining what the response contains and the side effects of invoking the tool, which is useful context even though no parameter documentation is needed.

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 tool finishes the second step of Google login, saves tokens to an owner-only file, verifies the login via a read-only identity call, and returns account email and granted scopes. This distinguishes it from the sibling start_login by explicitly labeling it as the second step and describing its specific outcome.

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?

The description gives clear context: this is the second step after browser consent, and after success every tool works immediately without restart. It also clarifies behavior under partial permission grants and account replacement, but it does not explicitly name alternatives or state when not to use it, so it falls short of full when/when-not guidance.

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

get_formGet a formA
Read-onlyIdempotent

Returns the full form: info (title, description), settings (quiz mode, email collection), items[] with their itemId/questionId and question definitions, publishSettings, responderUri and linkedSheetId. Items are returned in order — their 0-based positions are the indexes that update_question, delete_item and move_item address, so call this before mutating items.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYesThe form id — the long id from the form URL (docs.google.com/forms/d/<formId>/edit) or from create_form output.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive. The description adds useful behavioral context beyond annotations: the return structure, item ordering, and index semantics for mutations. It does not contradict annotations and provides meaningful extra insight.

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 with no redundant words. The first sentence lists the returned data structure, and the second delivers a crucial ordering/index note. Every sentence adds value.

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

Completeness5/5

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

Though there is no output schema, the description enumerates all major components of the returned form and highlights the important ordering property. For a read tool with strong annotations, this is complete and sufficient.

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?

The schema fully describes the only parameter (form_id) including its source from the form URL or create_form output. The description does not add further parameter detail, so baseline 3 for complete schema coverage is appropriate.

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 explicitly states the tool returns the full form with specific fields (info, settings, items, publishSettings, responderUri, linkedSheetId). This clearly distinguishes it from sibling tools like update_form_info or get_response, which operate on subsets or different resources.

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

Usage Guidelines5/5

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

The description includes explicit guidance: 'call this before mutating items' because the returned item order corresponds to indexes used by update_question, delete_item, and move_item. This gives a clear when-to-use and logically excludes alternatives for mutations.

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

get_responseGet one responseA
Read-onlyIdempotent

Fetches a single submission by its responseId (from list_responses): answers keyed by questionId, createTime, lastSubmittedTime, respondentEmail and totalScore when available. Map questionId to the question text via get_form.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYesThe form id — the long id from the form URL (docs.google.com/forms/d/<formId>/edit) or from create_form output.
response_idYesThe response id from list_responses.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds meaningful detail about the returned structure (answers keyed by questionId, createTime, lastSubmittedTime, respondentEmail, and totalScore 'when available'), which discloses conditional behavior not captured by 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?

The description is front-loaded with the primary action ('Fetches a single submission by its responseId') and then provides a compact list of return fields and a cross-tool hint. Two sentences with no filler, each sentence earning its place.

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

Completeness5/5

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

For a simple get-by-id tool with no output schema, the description fully covers the expected return values and the necessary mapping step for interpreting questionIds. Combined with good annotations and schema, the agent has all context needed to invoke and use the tool correctly.

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?

The input schema already provides comprehensive descriptions for both parameters (form_id and response_id), with 100% coverage. The description reinforces the response_id source ('from list_responses') but does not add substantial new meaning beyond the schema, so baseline 3 applies.

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 ('Fetches') and identifies the resource ('a single submission'), clearly distinguishing it from sibling tool list_responses which retrieves multiple responses. It also lists the fields returned, leaving no ambiguity about the tool's function.

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

Usage Guidelines5/5

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

The description explicitly states that the responseId comes from list_responses, indicating a clear call sequence, and advises using get_form to map questionIds to question text. This gives direct guidance on when to use this tool and how it relates to sibling tools.

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

list_responsesList form responsesA
Read-onlyIdempotent

Lists submitted responses: responseId, createTime, lastSubmittedTime, respondentEmail (only when email collection is on), answers keyed by questionId (map questionId → question via get_form), and totalScore for graded quizzes. submitted_after keeps only responses submitted strictly after that RFC3339 UTC timestamp — the API's only filter; there is no ordering or email filter, do that client-side. Paginate with page_token from nextPageToken. Note: this endpoint has a lower per-minute quota than other reads — poll incrementally with submitted_after rather than re-listing everything. The API is read-only for responses; submitting them programmatically is impossible.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYesThe form id — the long id from the form URL (docs.google.com/forms/d/<formId>/edit) or from create_form output.
page_sizeNoMax responses per page (1..5000; the API's default and max is 5000).
page_tokenNonextPageToken from the previous page.
submitted_afterNoOnly responses submitted after this RFC3339 UTC timestamp, e.g. 2026-08-01T00:00:00Z (exclusive).

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnlyHint/openWorldHint annotations, it discloses rate-limit behavior ('lower per-minute quota than other reads'), conditional email visibility, the absence of ordering/email filtering, and that programmatic submission is impossible. 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?

Every sentence is information-dense and earns its place: return value shape, filter caveats, pagination, quota warning. It is front-loaded with the key listing behavior and does not waste words.

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

Completeness5/5

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

For a paginated list tool with no output schema, it fully explains return fields (including conditional fields and totalScore), filtering limits, pagination mechanism, and rate limits. Combined with complete schema annotations, the agent has everything needed to invoke and interpret results.

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?

Schema covers all 4 params (100%), so baseline is 3; the description adds meaningful semantics for submitted_after (strictly after, exclusive) and page_token (from nextPageToken), plus warns that there is no ordering/email filter. It doesn't restate param names, making it a net positive.

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?

Opens with 'Lists submitted responses', a specific verb+resource that clearly distinguishes from sibling get_response (single) and get_form. It enumerates the exact returned fields (responseId, createTime, etc.), making the purpose unmistakable.

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

Usage Guidelines5/5

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

Provides explicit guidance: submitted_after is 'the API's only filter', 'there is no ordering or email filter, do that client-side', and 'Paginate with page_token from nextPageToken'. It also points to get_form for resolving questionIds and advises incremental polling due to lower quota.

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

logoutDisconnect from GoogleA
Destructive

Revokes the stored token at Google (oauth2.googleapis.com/revoke) and deletes the local credentials file. Tokens supplied via env variables are NOT touched — remove them from the MCP client config manually; envTokenStillSet in the response says whether any are still in effect.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description goes well beyond the annotations by naming the revocation endpoint, specifying that the local credentials file is deleted, clarifying that env-var tokens are unaffected, and mentioning the envTokenStillSet response field. This is exactly the kind of behavioral detail an agent needs for a destructive action.

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 compact sentences with the most critical action front-loaded. Every sentence adds important information, and there is no fluff or repetition of schema fields.

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

Completeness5/5

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

The description covers the action, side effects, exception case for env-var tokens, and a relevant response field. For a zero-parameter tool with no output schema, this is fully sufficient for an agent to use it correctly and predict its impact.

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 there is no parameter meaning to add. The description correctly focuses on the action and side effects rather than inventing parameter details. Baseline 4 is appropriate because the schema is trivially complete.

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 precise verb and resource: it revokes the stored Google token and deletes the local credentials file. The title 'Disconnect from Google' aligns with the behavior, and the description clearly distinguishes this from other auth-related sibling tools.

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?

The description gives clear context: use this to revoke and delete stored credentials. It also explicitly tells the user that env-var tokens are not touched and must be removed manually, which is a valuable usage caveat. It does not name alternatives, but no true alternative exists for this action.

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

manage_watchesManage push-notification watchesA
Destructive

Manages Cloud Pub/Sub push-notification watches on a form. action=create needs event_type (RESPONSES = new submissions, SCHEMA = form structure changes) and topic_name; the topic must live in your Cloud project and grant the Pub/Sub Publisher role to forms-notifications@system.gserviceaccount.com. action=list shows your watches; delete and renew need watch_id. Watches expire after 7 days — renew extends 7 days from now and reactivates a SUSPENDED watch. Notifications carry only formId/watchId/eventType attributes (no payload): on RESPONSES call list_responses with submitted_after, on SCHEMA call get_form. Limits: 1 watch per user per form+event type, 20 per Cloud project.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesWhat to do with the form's watches.
form_idYesThe form id — the long id from the form URL (docs.google.com/forms/d/<formId>/edit) or from create_form output.
watch_idNodelete/renew: the watch to target. create: optional custom id (auto-generated if omitted).
event_typeNocreate only: RESPONSES (new submissions) or SCHEMA (form structure/settings changes).
topic_nameNocreate only: the Cloud Pub/Sub topic, e.g. projects/my-project/topics/forms-events.

TDQS

A5/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint=true, openWorldHint=true), the description discloses many critical behavioral traits: watches expire after 7 days, renew reactivates SUSPENDED watches, notification payload is limited to formId/watchId/eventType, topic must grant Pub/Sub Publisher role, and specific limits (1 per user+form+event, 20 per project). This is rich, transparent context that helps the agent anticipate side effects and constraints.

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 information-dense yet well-structured: it opens with the purpose, then methodically covers actions, prerequisites, expiration/renewal behavior, notification payload, and limits. Every sentence adds value without redundancy, making it long but appropriately so for the tool's complexity.

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

Completeness5/5

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

Despite lacking an output schema, the description is remarkably complete for a multi-action tool. It covers all four actions, required setup, permissions, lifecycle behavior (expiry/renew), notification attributes, follow-up tool suggestions, and usage limits. The only minor omission is explicit return value structure, but 'list shows your watches' and the mention of watch_id for create implicitly cover it.

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

Parameters5/5

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

Although the schema already describes each parameter (100% coverage), the description adds deeper semantics: event_type values are explained (RESPONSES = new submissions, SCHEMA = form structure changes), topic_name requires a specific IAM role, watch_id can be custom for create, and actions have different parameter requirements. This adds substantial meaning beyond the schema fields.

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 it 'Manages Cloud Pub/Sub push-notification watches on a form' and enumerates four distinct actions (create, list, delete, renew), making the tool's purpose highly specific and distinguishable from sibling tools that handle form editing or response retrieval.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use each action, including required parameters per action, permission prerequisites, and even post-notification next steps (call list_responses or get_form based on event_type). This goes well beyond a simple usage statement and effectively guides the agent on alternative actions when notifications arrive.

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

move_itemMove an itemA

Moves the item at from_index to to_index (both 0-based, to_index is the position after removal). Use get_form to see the current order first.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYesThe form id — the long id from the form URL (docs.google.com/forms/d/<formId>/edit) or from create_form output.
to_indexYesTarget 0-based position.
from_indexYesCurrent 0-based position of the item.

TDQS

A4.4/5.0
Behavior4/5

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

The description adds critical behavioral context beyond annotations by explaining that 'to_index is the position after removal', preventing off-by-one errors. It also mentions that the operation depends on the current order, implying the need to fetch the form first. Annotations already indicate this is a mutation (readOnlyHint=false), and the description is consistent.

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 with no wasted words. The first sentence states the operation and the key index semantics; the second provides a practical prerequisite. Every sentence 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 reorder operation with three parameters and no output schema, the description covers the essential behavior, index semantics, and a prerequisite. It does not mention the return value, but given the low complexity and absence of an output schema, this is not a critical 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?

Schema coverage is 100%, so baseline is 3. The description adds significant meaning by clarifying that both indices are 0-based and, crucially, that to_index is interpreted after removing the item. This goes beyond the schema's 'Target 0-based position' and clarifies the parameter relationship.

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 action: 'Moves the item at from_index to to_index', with explicit indexing semantics. This distinguishes it from sibling tools like delete_item, add_question, and update_question by indicating a reorder operation.

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?

The description provides a clear prerequisite: 'Use get_form to see the current order first.' This tells the agent when to invoke the tool relative to other steps. It does not explicitly name alternatives or exclusions, but the context makes the intended use clear.

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

raw_requestRaw Google Forms API callA
Destructive

Escape hatch to call any Google Forms API v1 path directly, for requests the typed tools don't cover — e.g. a batchUpdate with questionGroupItem grids, writeControl/requiredRevisionId, includeFormInResponse, or several requests at once: path "v1/forms/:batchUpdate", method POST, body {"requests":[...]}. The path may carry a query string (e.g. "v1/forms//responses?filter=timestamp%20%3E%202026-08-01T00:00:00Z"). The Bearer token is added automatically; the method defaults to GET.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON request body (POST only).
pathYesAPI path relative to https://forms.googleapis.com, e.g. "v1/forms/<formId>:batchUpdate".
methodNoHTTP method (the Forms API uses only these three). Defaults to GET.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the risk of arbitrary calls is flagged. The description adds useful behavioral context beyond annotations: the Bearer token is added automatically, the method defaults to GET, and the path may include a query string. It does not contradict 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.

Conciseness4/5

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

The description is front-loaded with the core purpose and then provides illustrative examples. It is slightly verbose with multiple examples in one sentence, but each sentence earns its place by clarifying important usage nuances (query strings, automatic auth, method default). It strikes a reasonable balance between completeness and conciseness.

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?

Given the tool's open-ended and destructive nature, the description covers the essential invocation details: path format, method, body, query strings, and auth. There is no output schema, but for a raw API pass-through, the response format is inherently endpoint-dependent. The description could mention error handling or raw JSON response, but it is sufficient for an agent to select and invoke it correctly in most cases.

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?

Schema coverage is 100%, but the description adds practical meaning beyond field names: it gives a concrete path example with batchUpdate, shows how to format the body as {'requests':[...]}, and notes that the path can carry a query string. This enhances the schema's minimal descriptions, though much of the information is also already present in the schema's own examples.

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 explicitly identifies the tool as an 'escape hatch' for any Google Forms API v1 path, with a specific verb ('call') and resource ('any Google Forms API v1 path'). It distinguishes itself from typed siblings by stating it covers requests 'the typed tools don't cover', making its unique role clear.

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?

The description clearly states when to use this tool: 'for requests the typed tools don't cover'. It provides concrete examples of such cases (batchUpdate, writeControl, etc.). It does not explicitly enumerate alternatives or say 'don't use if a typed tool exists', but the 'typed tools don't cover' phrasing strongly implies that exclusion.

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

set_clientSave the OAuth clientA
Idempotent

Saves the OAuth client credentials from the JSON file downloaded from Google Cloud Console ('Download JSON' on a Desktop-app client). Pass the file PATH — the secret must never be pasted into the chat. The client is stored once in the shared ~/.config/mcp-google-auth/client.json (owner-only) and reused by every mcp-google-* server; tokens stay per-server. After this, call start_login.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute path to the client_secret_*.json file downloaded from Google Cloud Console.

TDQS

A4/5.0
Behavior4/5

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

Annotations indicate idempotentHint=true (safe to call again) and readOnlyHint=false (it's a write). The description adds valuable context: it stores the client once in a shared path, is reused by all mcp-google-* servers, and tokens stay per-server. It also warns against pasting secrets. This goes beyond annotation basics, though it does not mention any potential side effects like overwriting an old client.

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

Conciseness4/5

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

The description is three sentences, each earning its place: the first explains what and source, the second details storage scope, the third directs to start_login. The critical warning is naturally integrated. It is not overly verbose and the essential info is front-loaded.

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, the description covers key operational aspects: the source file, the storage path, the security precaution, and the follow-up step. The only minor gap is the absence of error conditions (e.g., if the file is invalid), but that is acceptable given the simplicity.

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?

Schema description coverage is 100%, so the baseline is 3. The description reinforces that the path is to the JSON file and adds the explicit 'must never be pasted into the chat' security guideline. It doesn't add much beyond the schema, but the security note is valuable enough to nudge to 4.

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 specifies a clear verb ('saves') and resource ('OAuth client credentials from the JSON file') and adds detail about the source and storage location. It does not explicitly distinguish from siblings, but the uniqueness of this tool among the listed siblings is implicit given its specific task.

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?

It provides clear guidance on when to use the tool: after downloading the JSON file and before starting login. It also mentions the prerequisite of calling start_login after. However, it does not explicitly state when not to use it or mention alternatives, though none are obvious.

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

set_publish_settingsPublish or unpublish a formA
DestructiveIdempotent

Publishes or unpublishes the form and opens/closes response collection. is_accepting_responses defaults to mirroring is_published (publish = start accepting, unpublish = stop). Use is_published=true with is_accepting_responses=false to keep a published form visible but closed. Fails on legacy forms created before the publish model existed — those are managed only in the Forms UI.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYesThe form id — the long id from the form URL (docs.google.com/forms/d/<formId>/edit) or from create_form output.
is_publishedYestrue = published (respondents can open it), false = unpublished draft.
is_accepting_responsesNoWhether the form accepts new responses (defaults to the value of is_published).

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already indicate destructive, idempotent, non-read-only behavior, but the description adds valuable context beyond that: the default mirroring of is_accepting_responses, the ability to keep a form visible but closed, and the failure mode for legacy forms. No contradictions 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?

The description is two sentences, front-loaded with the primary action, and every sentence adds unique information (default behavior, use case, legacy limitation). No wasted words.

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

Completeness5/5

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

For a mutation tool with no output schema, the description covers the essential context: default parameter behavior, a common use case, and an edge case failure. Combined with rich annotations, the agent has enough to select and invoke the tool correctly.

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 input schema already provides 100% coverage of parameter descriptions, so the baseline is 3. The description adds extra meaning by explaining that is_accepting_responses defaults to is_published, and by showing how the two boolean parameters interact. This enriches the schema without redundancy.

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 starts with a specific verb phrase 'Publishes or unpublishes the form and opens/closes response collection,' clearly identifying the resource (form) and the actions. It distinguishes itself from siblings like update_form_settings by focusing specifically on publication state and response acceptance.

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

Usage Guidelines5/5

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

Provides clear usage guidance: explains the default relationship between is_published and is_accepting_responses, gives a specific use case (published form but closed), and explicitly states a when-not: fails on legacy forms and should be managed in the Forms UI instead. This effectively communicates when to use the tool and when to avoid it.

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

setup_instructionsSetup instructionsA
Read-onlyIdempotent

Step-by-step checklist for connecting this server to Google: creating a Google Cloud project and a Desktop-app OAuth client, publishing the consent screen (mandatory — Testing-mode refresh tokens die after 7 days), downloading the client JSON and handing its PATH to set_client. Works without any credentials; the checklist shortens to 'enable the API + log in' when an OAuth client is already configured (one client serves the whole mcp-google-* line). Never asks the user to paste secrets into the chat.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark it read-only, idempotent, and non-destructive; the description adds valuable context beyond that: it works without credentials, warns that Testing-mode refresh tokens expire in 7 days, mandates publishing the consent screen, and guarantees it never asks users to paste secrets into the chat. 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?

Three dense sentences each carry unique, decision-relevant information: the checklist's contents, the shortened path when already configured, and the no-secrets guarantee. There is no filler or repetition.

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

Completeness5/5

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

For a zero-parameter instructional tool, the description fully covers purpose, usage timing, workflow relationships, and key behavioral safeguards. The lack of an output schema is acceptable since the tool's job is to present instructions, and the annotations already cover the operational profile.

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 input schema is empty and parameter coverage is 100%, so there is nothing for the description to add about parameter semantics. The zero-parameter case earns the baseline 4.

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?

States a specific deliverable: a step-by-step checklist for connecting the server to Google, including project creation, OAuth client, consent screen, and handing the client JSON path to set_client. This clearly distinguishes it from sibling tools like auth_status or set_client.

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?

The description explains when to use it (before credentials exist) and how the checklist shortens when an OAuth client is already configured, referencing set_client as the downstream consumer. It provides clear workflow context, though it does not explicitly say 'use this instead of X' for every alternative.

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

start_loginStart the Google loginA
Idempotent

First step of connecting from the chat, without editing config files or restarting the client. Returns authorizeUrl — show it to the user as a clickable link and ask them to open it in the browser ON THIS MACHINE, pick the Google account and approve access. A one-shot listener on 127.0.0.1 catches Google's redirect; the code is exchanged locally and never passes through the chat. Does not open the browser itself. The attempt lives 10 minutes; when the browser shows the success page, call finish_login.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

The description adds substantial behavioral context beyond the annotations: it does not open the browser itself, uses a one-shot listener on 127.0.0.1, exchanges the code locally, never passes it through chat, and has a 10-minute attempt lifetime. These details are not present in the annotations and provide meaningful operational guidance.

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 dense but every sentence earns its place: it covers user interaction, browser constraints, security, timeout, and next step without repetition or filler. The most important user-facing instruction is front-loaded.

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

Completeness5/5

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

For a tool with no parameters and no output schema, the description is fully complete. It explains the returned authorizeUrl, how to present it, what will happen afterward, and which sibling tool to call next.

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?

There are zero parameters, so the schema carries no burden and the description correctly avoids inventing parameter details. The baseline for a 0-parameter tool is 4; the description also reinforces that no configuration files or restart are needed.

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 opens with 'First step of connecting from the chat' and names a specific resource and action: start the Google login and return an authorizeUrl. It is clearly distinguished from siblings like finish_login and auth_status by positioning itself as the initial step.

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

Usage Guidelines5/5

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

The description explicitly states when to use it: as the first step of connecting, without editing config files or restarting the client. It also gives direct instructions to show the authorizeUrl to the user, ask them to open it in the browser, and call finish_login after the success page appears.

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

update_form_infoUpdate form infoA
DestructiveIdempotent

Changes the form's title and/or description. Only the provided fields are touched (the updateMask is computed automatically); at least one field is required. The document title (the Drive file name) is set once at create_form and cannot be changed through the Forms API — renaming the file needs the Drive API, which this server does not cover. Returns the batchUpdate replies with the new revisionId.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoNew form title shown to respondents.
form_idYesThe form id — the long id from the form URL (docs.google.com/forms/d/<formId>/edit) or from create_form output.
descriptionNoNew form description shown under the title.

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate mutating behavior (destructiveHint=true, readOnlyHint=false) and idempotentHint=true. The description adds important behavioral details: it only touches provided fields (partial update), requires at least one field, and returns batchUpdate replies with new revisionId. It also notes the limitation that the document title cannot be changed, which is useful. However, it doesn't disclose any potential side effects or error conditions beyond what annotations imply.

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 concise, with three sentences that are all informative. It front-loads the core purpose in the first sentence, then explains the partial-update behavior, and finally notes the Drive rename limitation. No fluff or repetition of schema details.

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?

Given the tool's moderate complexity (3 parameters, decent annotations, no output schema), the description covers the purpose, usage, and important behavioral nuances (partial updates, rename limitation, return value). It lacks an explicit mention of error handling or prerequisites (e.g., if the form must exist), but overall it is complete enough for the intended use. Slight deduction for not mentioning what happens if neither title nor description is provided, though the description implies it's required.

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?

Schema description coverage is 100%, so parameters are already well-documented. The description adds value by explaining that only provided fields are touched and that at least one field is required (though the schema implies this via required form_id, it doesn't explicitly say at least one of title/description). It also clarifies the form_id from the URL. This is a typical baseline of 3 when schema covers the semantics.

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 tool's purpose: 'Changes the form's title and/or description.' It specifies the resource (form) and the scoped fields (title/description), and distinguishes it from siblings like update_form_settings by focusing on title/description rather than settings. The mention of the Drive rename limitation further clarifies what the tool does not do.

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?

The description provides clear context on when to use this tool: when updating title or description. It also explains when not to use it for renaming the Drive file, suggesting an alternative (Drive API) but not a sibling tool. However, it doesn't explicitly contrast with sibling tools like update_form_settings or add_question, though the specified fields make it fairly clear.

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

update_form_settingsUpdate form settingsA
DestructiveIdempotent

Toggles quiz mode (grading with points) and/or the email collection mode. Quiz mode only enables grading — points, correct answers and feedback are set per question afterwards via update_question with the questionItem.question.grading mask (add_question cannot set them). email_collection_type: DO_NOT_COLLECT, VERIFIED (respondent must be signed in; email verified) or RESPONDER_INPUT (respondent types an email). At least one field is required; only the provided fields are touched.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYesThe form id — the long id from the form URL (docs.google.com/forms/d/<formId>/edit) or from create_form output.
is_quizNoTurn quiz mode on/off (enables per-question grading).
email_collection_typeNoHow respondent emails are collected.

TDQS

A4.8/5.0
Behavior5/5

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

Beyond annotations, it discloses partial-update semantics ('only the provided fields are touched'), explains the meaning of email_collection_type values (VERIFIED requires signed-in respondent, RESPONDER_INPUT lets respondent type email), and clarifies quiz mode only enables grading with per-question details set later. 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?

Three dense sentences front-load the purpose and pack enum semantics, sibling-tool guidance, and update behavior without redundancy or filler. Every sentence earns its place.

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

Completeness5/5

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

For a settings-update tool with no output schema, the description covers the operation's scope, parameter meaning, partial updates, and the correct sibling tool for related grading configuration. The tool is fully usable based on the description alone.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds meaningful semantics: it explains what enabling quiz mode actually enables, expands each enum value with behavioral context, and states the at-least-one-field requirement. This goes well beyond the schema's property descriptions.

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 tool toggles quiz mode and/or email collection mode on a form, specifying exact fields and behavior. It distinguishes itself from siblings like update_form_info, update_question, and add_question by naming the specific form-level settings it manages.

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?

The description gives explicit direction for when update_question should be used instead for per-question grading settings, and notes that add_question cannot set grading. It does not explicitly contrast update_form_info or set_publish_settings, but the scope is clear enough for correct selection.

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

update_questionUpdate an itemA
DestructiveIdempotent

Updates an existing item (question or other) via batchUpdate updateItem. The item is addressed by its 0-based index — call get_form first to see current positions and the item's current shape. item is a raw Forms API Item object with the new values; update_mask names the fields to replace, e.g. "title" or "title,questionItem.question.required". Only masked fields change; masking a field the item object leaves unset clears it.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemYesThe Forms API Item object with the new values, e.g. {"title":"New title","questionItem":{"question":{"required":true}}}.
indexYes0-based position of the item to update (from get_form).
form_idYesThe form id — the long id from the form URL (docs.google.com/forms/d/<formId>/edit) or from create_form output.
update_maskYesComma-separated field paths to replace, e.g. "title,questionItem.question.required".

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark the operation as destructive and not read-only, and the description adds valuable detail: only masked fields change, and masking a field left unset clears it. This goes beyond the annotation hints and helps the agent predict side effects without fully documenting error cases.

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 three concise sentences with no filler. It front-loads the core action, then explains prerequisites and key behavioral semantics, making every sentence informative and necessary.

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

Completeness5/5

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

For a complex update tool with nested objects and no output schema, the description covers the essential aspects: how to locate the item, how to structure the item object, how update_mask works, and the clearing behavior. It is sufficient for an agent to invoke the tool correctly without needing the schema to fill major gaps.

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?

Schema covers all parameters (100%), so the baseline is 3. The description enriches understanding of item and update_mask interaction, especially the clearing behavior, which is not fully captured in the parameter descriptions. This added context justifies a 4.

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 it updates an existing item via a specific API method, distinguishing it from sibling tools that create, delete, or move items. The title 'Update an item' is generic, but the description adds specificity by mentioning 'question or other' and addressing by index.

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?

It explicitly instructs to call get_form first to see positions and shape, which is a clear usage prerequisite. It does not explicitly compare to alternatives, but the tool name and sibling context make the intended use apparent; minor omission of when-not-to-use prevents a 5.

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.

  1. 6 tool updatesv1.2.0
    • Addedauth_status
    • Addedfinish_login
    • Addedlogout
    • Addedset_client
    • Addedsetup_instructions
    • Addedstart_login
  2. 1 tool updatev1.1.0
    • Changedupdate_form_info1 field changed
      • removedInput schema / properties / document_title
        Removed value: -{
        -  "description": "New document name in Google Drive.",
        -  "type": "string"
        -}
  3. 13 tool updatesv0.1.0
    • First observedadd_question
    • First observedcreate_form
    • First observeddelete_item
    • First observedget_form
    • First observedget_response
    • First observedlist_responses
    • First observedmanage_watches
    • First observedmove_item
    • First observedraw_request
    • First observedset_publish_settings
    • First observedupdate_form_info
    • First observedupdate_form_settings
    • First observedupdate_question

TDQS

A4.3/5.0

Scored across 19 tools

Disambiguation4/5

Most tools are clearly distinct (create_form, add_question, update_question, delete_item, move_item, list_responses, get_response). Some potential confusion exists between update_form_info and update_form_settings, and between start_login/finish_login/auth_status, but descriptions clarify the boundaries well.

Naming Consistency4/5

Tool names mostly follow a consistent verb_noun pattern (create_form, get_form, update_form_info, add_question, delete_item, move_item, list_responses). Minor deviations: start_login/finish_login are verb_verb, and set_client/logout/auth_status/setup_instructions don't follow the resource-action pattern, but the overall style is readable and predictable.

Tool Count4/5

19 tools is on the higher end but justified for a Google Forms server covering auth, form CRUD, question management, responses, watches, and a raw API escape hatch. Each tool serves a distinct purpose, though the auth-related tools (6) could arguably be consolidated.

Completeness4/5

The server covers the full form lifecycle: create, read, update info/settings, publish, add/update/delete/move questions, list/get responses, and watch notifications. Minor gaps: no form deletion, no file-upload question support, no response editing (API limitation), and no Drive rename — but these are documented as API limitations or covered by raw_request.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers