Agent Skill
2/7/2026

google-forms

Create and manage Google Forms programmatically via MCP. Use when: (1) creating survey forms, (2) adding questions/sections to forms, (3) getting form responses, (4) converting AskUserQuestion to shareable forms. Covers setup, all tools, item ordering, and API limitations.

U
udecode
0GitHub Stars
1Views
npx skills add udecode/google-forms-mcp

SKILL.md

Namegoogle-forms
DescriptionCreate and manage Google Forms programmatically via MCP. Use when: (1) creating survey forms, (2) adding questions/sections to forms, (3) getting form responses, (4) converting AskUserQuestion to shareable forms. Covers setup, all tools, item ordering, and API limitations.

name: google-forms description: | Create and manage Google Forms programmatically via MCP. Use when: (1) creating survey forms, (2) adding questions/sections to forms, (3) getting form responses, (4) converting AskUserQuestion to shareable forms. Covers setup, all tools, item ordering, and API limitations.

Google Forms MCP

Setup

  1. Enable Google Forms API + Google Drive API at console.cloud.google.com
  2. Create OAuth 2.0 credentials (Desktop app type)
  3. Get refresh token:
    cd ~/.claude/mcp/google-forms-mcp
    bun install && bun run build
    GOOGLE_CLIENT_ID="..." GOOGLE_CLIENT_SECRET="..." bun run token
    
  4. Add to .mcp.json (use full path, not ~):
    {
      "mcpServers": {
        "google-forms-mcp": {
          "command": "bun",
          "args": ["/Users/USERNAME/.claude/mcp/google-forms-mcp/build/index.js"],
          "env": {
            "GOOGLE_CLIENT_ID": "...",
            "GOOGLE_CLIENT_SECRET": "...",
            "GOOGLE_REFRESH_TOKEN": "..."
          }
        }
      }
    }
    
  5. Run /mcp reset to load

Tools

ToolDescription
create_formCreate form (returns formId)
update_formUpdate title/description
get_formGet form structure
list_formsList all forms
delete_formDelete form permanently
add_sectionVisual divider (no page break)
add_pagePage break (requires Next button)
add_text_questionFree text input
add_multiple_choice_questionRadio or checkbox
update_questionModify existing question
delete_questionRemove question by index
get_form_responsesGet submitted responses

Item Ordering (CRITICAL)

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

For a multi-section form, add in reverse order:

1. create_form → update_form (description)
2. Additional Notes (last item)
3. Last section questions (e.g., 4.2, 4.1)
4. Last section header (Section 4)
5. Previous section questions (e.g., 3.4, 3.3, 3.2, 3.1)
6. Previous section header (Section 3)
7. ... continue for all sections ...
8. First section questions (e.g., 1.3, 1.2, 1.1)
9. First section header (Section 1) ← ADD LAST, APPEARS FIRST

Multiple Choice Options

Two formats supported:

// Simple strings
options: ["Option A", "Option B", "Option C"]

// With descriptions (renders as "Label – Description")
options: [
  { label: "Option A", description: "Details about A" },
  { label: "Option B", description: "Details about B" }
]

Parameters:

  • includeOther: true - Adds "Other" with text field
  • multiSelect: true - Checkboxes (multi-select)
  • multiSelect: false - Radio buttons (single choice, default)

API Limitations

ErrorCauseSolution
Only info.title can be set when creating a formCan't set description on createUse update_form after create_form
Displayed text cannot contain newlinesOptions can't have \nUse " – " (en-dash) to separate label from description
Cannot set option.value when isOther is trueOther option can't have valueFixed in MCP - just use includeOther: true

Section vs Page

  • add_section - Visual divider only, stays on same page (uses textItem)
  • add_page - Creates page break, user clicks "Next" (uses pageBreakItem)

For single-page surveys, always use add_section.

Skills Info
Original Name:google-formsAuthor:udecode