Google Forms MCP
MCP server for Google Forms with OAuth token-file auth.
Breaking Change (v1 auth migration)
GOOGLE_REFRESH_TOKEN is no longer used.
Run one-time auth instead:
GOOGLE_CLIENT_ID="your-client-id" \
GOOGLE_CLIENT_SECRET="your-client-secret" \
npx -y google-forms-mcp auth
This stores the refresh token at ~/.config/google-docs-mcp/token.json (respects XDG_CONFIG_HOME).
Setup
- Enable APIs in Google Cloud:
- Google Forms API
- Google Drive API
- Google Docs API
- Google Sheets API
- Create OAuth 2.0 credentials (Desktop app).
- Run auth command above once.
- Add MCP config:
{
"mcpServers": {
"google-forms-mcp": {
"command": "npx",
"args": ["-y", "google-forms-mcp"],
"env": {
"GOOGLE_CLIENT_ID": "your-client-id",
"GOOGLE_CLIENT_SECRET": "your-client-secret"
},
"type": "stdio"
}
}
}
Shared Token with google-docs-mcp
This project intentionally shares token storage with google-docs-mcp for DRY setup.
google-forms-mcp auth requests superset scopes:
forms
drive
documents
spreadsheets
That keeps one token usable for both MCP servers.
Tools
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 in the form.
Multiple Choice Options
Options support both formats:
- Simple:
["Option A", "Option B"]
- With description:
[{ "label": "Option A", "description": "Details" }]
Use multiSelect: true for checkboxes.
License
MIT