José Garrido
SuscribirmeRead in EnglishEN

Te escribo cuando publico un proyecto open source: qué hace y cómo probarlo. Sin spam.

Google Docs MCPv0.1.2

google-docs-mcp 0.1.2 indica el comando de acceso correcto, explica las sesiones caducadas, rechaza archivos que no son Google Docs y descodifica el texto citado.

google-docs-mcp es un servidor MCP de solo lectura que explica a un asistente de IA los comentarios de un Google Doc: quién escribió cada uno, cuándo, sobre qué texto, si está abierto o resuelto, y el hilo completo de respuestas. La versión 0.1.2 corrige cuatro errores: los mensajes de inicio de sesión, las sesiones caducadas, la comprobación del tipo de archivo y el texto citado.

Esto es lo que te aporta cada corrección y cómo funciona.

¿Qué comando de inicio de sesión te da ahora el servidor?

Los mensajes de inicio de sesión decían a todo el mundo que ejecutara npm run auth, un comando que no existe si usas el servidor con npx. Ahora el servidor comprueba desde dónde se ejecuta y te da el comando que te corresponde. Instalado desde npm, get_auth_status dice:

Ask the user to run `npx -y -p @yeyo11/google-docs-mcp google-docs-mcp-auth` in a terminal to sign in with Google (read-only access).

La comprobación es una línea en src/config.ts: si la ruta del módulo pasa por node_modules, es un paquete instalado; cualquier otra cosa es un clon, que sigue usando npm run auth. Las instrucciones del servidor al asistente y sus mensajes de error usan la misma función, así que todos dan el mismo comando.

¿Qué pasa cuando caduca tu sesión de Google?

Google responde invalid_grant cuando un token de actualización ha caducado o se ha revocado. Con una pantalla de consentimiento External en modo Testing, eso ocurre a los siete días. Antes las herramientas devolvían esa cadena sin más. Ahora devuelven esto:

Your Google sign-in has expired or was revoked (invalid_grant). Run `npx -y -p @yeyo11/google-docs-mcp google-docs-mcp-auth` in a terminal to sign in again. With an External OAuth consent screen in Testing mode, Google ends the sign-in after seven days.

Ejecuta ese comando y vuelve a preguntar a tu asistente. No tienes que reiniciar el servidor: cuando una herramienta falla así, el servidor descarta sus clientes de Google en caché, de modo que la siguiente llamada vuelve a leer token.json.

La prueba de humo recorre esta secuencia por stdio contra endpoints de Google simulados (scripts/fixtures/fake-google.mjs): token caducado, error con el comando, token nuevo, sesión iniciada. Puedes ejecutarla sin cuenta de Google:

npm test

¿Y si le pasas el ID de una hoja de cálculo?

El servidor tenía una comprobación de «no es un Google Doc» que nunca saltaba, porque no se le pedía mimeType a Drive. Ahora sí se pide, así que un ID suelto de una hoja de cálculo, una presentación o cualquier otro archivo recibe una respuesta directa:

File <id> is not a Google Doc (mimeType application/vnd.google-apps.spreadsheet).

Esto vale para todas las herramientas que reciben un documento, incluidas las de comentarios, que antes dejaban pasar estos archivos. get_document hace la comprobación antes de llamar a la API de Docs, así que recibes este mensaje y no un error de esa API.

¿Por qué el texto citado se veía mal?

Drive devuelve el texto al que se refiere un comentario con escapes HTML, y el servidor lo mostraba así. Una cita de un trozo de SQL llegaba de esta forma:

AND CreateAt &gt; :ChannelMemberLastViewedAt

Ahora llega como se lee en el documento:

AND CreateAt > :ChannelMemberLastViewedAt

Esto también arregla el párrafo circundante. El servidor lo encuentra buscando en el documento el principio de la cita, así que una entidad en los primeros caracteres hacía que no coincidiera.

La descodificación se hace una sola vez, de modo que &amp;lt; pasa a &lt; y ahí se queda. El texto de comentarios y respuestas no se toca, porque la referencia de Drive lo describe como texto plano: si alguien escribió &gt; en un comentario, ves &gt;. El descodificador es el paquete entities, una dependencia nueva que no tiene dependencias propias.

¿Qué más trae esta versión?

  • Un GIF de demostración en el README: la reproducción de una ejecución real sobre un documento público, con los nombres anonimizados.
  • @modelcontextprotocol/sdk 1.32.2 y zod 4.6.7 son ahora las versiones mínimas en package.json, y se han actualizado varias dependencias transitivas.
  • El README explica la regla de los siete días para las pantallas de consentimiento External en modo Testing.

¿Cómo lo pruebo?

Necesitas Node.js 20 o superior y un cliente OAuth de tipo Desktop app de un proyecto de Google Cloud con las API de Drive y Docs activadas, guardado como ~/.config/google-docs-mcp/credentials.json. Los pasos están en el README.

Inicia sesión; se abre el navegador y te pide acceso de solo lectura:

npx -y -p @yeyo11/google-docs-mcp google-docs-mcp-auth

Registra el servidor. En Claude Code:

claude mcp add google-docs -- npx -y @yeyo11/google-docs-mcp

Y pregunta por un documento:

Resume los comentarios abiertos de https://docs.google.com/document/d/…/edit y dime cuáles están esperando mi respuesta.

El código está en GitHub, y en el changelog tienes la lista completa de cambios.