# Google Forms MCP
**English** | [Русский](./README.ru.md)
[](https://www.npmjs.com/package/mcp-google-forms)
[](https://glama.ai/mcp/servers/A1-x-Tech/mcp-google-forms)
[](https://github.com/A1-x-Tech/mcp-google-forms/actions/workflows/ci.yml)
[](./LICENSE)
**A1 Google Forms MCP** lets an AI app build and manage Google Forms in plain language. Create a survey, choose its questions, publish it when ready, read answers and use notifications for new submissions.
It uses the Google Forms API with your Google account. It distinguishes a draft form from a published form and makes the limits of the Forms API explicit instead of implying that every form task is possible.
- **13 tools.** Inspect form structure and responses, create and edit forms and questions, manage publishing, and configure Pub/Sub watches.
- **Publish deliberately.** Forms made through the API start unpublished, so they cannot collect responses until you publish them.
- **Responses stay intact.** The API can read responses but cannot create or edit them; the server has no tool that submits answers.
- **Minimal Google scopes.** It uses `forms.body` and `forms.responses.readonly`, without broad Drive access.
Start with a read-only question:
> Show me yesterday’s responses to the customer feedback form and summarize the free-text answers.
[Connect the server](#quick-start) · [Explore use cases](#what-you-can-ask-it-to-do) · [Open technical documentation](#technical-documentation)
---
## See it work in a minute
> **You:** Show me the questions and response settings of the customer feedback form.
>
> **Assistant:** Shows the form, its items, whether it is published and whether it accepts responses. Nothing changes.
>
> **You:** Prepare a required 1–5 rating question called “How was your experience?” after the first question.
>
> **Assistant:** Shows the target form, position and proposed question, then asks for confirmation before adding it.
>
> **You:** Confirm.
>
> **Assistant:** Adds the question to the form. It does not publish or close the form unless you ask separately.
## Contents
- [Quick start](#quick-start)
- [What you can ask it to do](#what-you-can-ask-it-to-do)
- [How a form changes](#how-a-form-changes)
- [What can change](#what-can-change)
- [Getting access](#getting-access)
- [Configuration](#configuration)
- [Data, limits and background work](#data-limits-and-background-work)
- [Technical documentation](#technical-documentation)
- [Support](#support)
## Quick start
You need Node.js 20+, a Google account and OAuth credentials from a Google Cloud project with the Google Forms API enabled.
1. [Prepare Google OAuth access](#getting-access).
2. Add the server to your AI app.
3. Ask the read-only question above.
Codex
**In the app:** open **Settings → MCP servers**, select **Add server**, choose **STDIO**, enter the command `npx -y mcp-google-forms@latest` and environment variables `GOOGLE_FORMS_CLIENT_ID`, `GOOGLE_FORMS_CLIENT_SECRET`, `GOOGLE_FORMS_REFRESH_TOKEN`, then select **Save** and **Restart**.
**From the command line:**
```bash
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
```
```bash
codex mcp list
```
[Codex MCP documentation](https://learn.chatgpt.com/docs/extend/mcp?surface=cli)
Claude Code
```bash
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
```
```bash
claude mcp list
```
[Claude Code MCP documentation](https://code.claude.com/docs/en/mcp)
Claude Desktop
The current official path is **Settings → Extensions**. For a custom desktop extension, open **Advanced settings → Extension Developer → Install Extension…**, select a `.mcpb` file and follow the prompts.
This repository currently publishes an npm stdio package and does not contain a `.mcpb` bundle. For Claude Desktop builds that still support local configuration, use the following JSON stdio configuration as a fallback:
```json
{
"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"
}
}
}
}
```
In those builds, save it to `~/Library/Application Support/Claude/claude_desktop_config.json` on macOS or `%APPDATA%\Claude\claude_desktop_config.json` on Windows.
[Claude Desktop MCP documentation](https://support.claude.com/en/articles/10949351-getting-started-with-local-mcp-servers-on-claude-desktop)
Cursor
Add this to `~/.cursor/mcp.json` on macOS/Linux or `%USERPROFILE%\.cursor\mcp.json` on Windows:
```json
{
"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"
}
}
}
}
```
[Cursor MCP documentation](https://cursor.com/docs/mcp)
VS Code
Run **MCP: Open User Configuration** and add:
```json
{
"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 }
]
}
```
Check it with **MCP: List Servers**.
[VS Code MCP documentation](https://code.visualstudio.com/docs/agent-customization/mcp-servers)
You made it to the end!