---
slug: "google-forms-mcp"
source_type: "readme"
source_url: "https://cdn.jsdelivr.net/gh/udecode/google-forms-mcp@main/README.md"
repo: "https://github.com/udecode/google-forms-mcp"
source_file: "README.md"
branch: "main"
---
# Google Forms MCP

MCP server for Google Forms.

## Quick Start

```bash
npx skills add https://github.com/udecode/google-forms-mcp --skills google-forms
```

Then run `/google-forms` in Claude Code to complete setup.

## Manual Installation

```bash
git clone https://github.com/udecode/google-forms-mcp.git ~/.claude/mcp/google-forms-mcp
cd ~/.claude/mcp/google-forms-mcp
bun install && bun run build
```

### Setup

1. Enable **Google Forms API** + **Google Drive API** at [console.cloud.google.com](https://console.cloud.google.com)
2. Create OAuth 2.0 credentials (Desktop app)
3. Get refresh token:
   ```bash
   cd ~/.claude/mcp/google-forms-mcp
   GOOGLE_CLIENT_ID="..." GOOGLE_CLIENT_SECRET="..." bun run token
   ```
4. Add to `.mcp.json`:
   ```json
   {
     "mcpServers": {
       "google-forms-mcp": {
         "command": "bun",
         "args": ["/Users/YOUR_USERNAME/.claude/mcp/google-forms-mcp/build/index.js"],
         "env": {
           "GOOGLE_CLIENT_ID": "...",
           "GOOGLE_CLIENT_SECRET": "...",
           "GOOGLE_REFRESH_TOKEN": "..."
         }
       }
     }
   }
   ```

## Tools

| Tool | Description |
|------|-------------|
| `create_form` | Create form |
| `get_form` | Get form details |
| `list_forms` | List all forms |
| `update_form` | Update title/description |
| `delete_form` | Delete form |
| `add_section` | Add visual divider (no page break) |
| `add_page` | Add page break (requires Next button) |
| `add_text_question` | Add text question |
| `add_multiple_choice_question` | Add radio/checkbox question |
| `update_question` | Modify question |
| `delete_question` | Remove question |
| `get_form_responses` | Get responses |

### Item Order (CRITICAL)

**All items are added at index 0.** The LAST item you add appears FIRST.

For a form with sections, add in reverse:
```
create_form → update_form
add: last question
add: last section header
...
add: first question
add: first section header  ← LAST (appears first)
```

### Multiple Choice Options

Options support both formats:
- Simple: `["Option A", "Option B"]`
- With description: `[{ "label": "Option A", "description": "Details" }]`

Set `multiSelect: true` for checkboxes, omit for radio buttons.

## License

MIT
