Skip to main content
Glama

Google Forms MCP

Give an existing AI assistant the ability to create, refine, publish, and update native Google Forms. The assistant handles natural language; this server maintains versioned drafts, applies explicit patches, enforces confirmation, and performs deterministic Forms API calls.

What works

  • Native Google Form creation in the authenticated user's account

  • Multi-section forms

  • Short text, paragraph, multiple choice, checkboxes, dropdown, linear scale, date, and time questions

  • Required questions and descriptions

  • Persistent SQLite drafts with version numbers and undo

  • Targeted patches that preserve unrelated questions and settings

  • Direct targeted updates to existing native Google Forms

  • Preview-before-publish and confirmation safety boundaries

  • Minimal OAuth scope: forms.body

  • MCP 2.x stdio transport

  • Authenticated Streamable HTTP transport for Claude and ChatGPT connectors

  • Companion skill in skill/google-forms/SKILL.md

Related MCP server: formslist-mcp

Current MVP limits

Version 0.4 does not yet configure conditional branching, create quizzes, upload files, change themes, or read responses. Google may create an empty form if the follow-up item population request fails; the tool records that partial form and blocks duplicate retries rather than pretending creation succeeded.

Install

uv sync --extra dev

The MCP executable is then available at:

<project>/.venv/bin/google-forms-mcp

Google OAuth setup

  1. Create or select a project in Google Cloud Console.

  2. Enable the Google Forms API.

  3. Configure the OAuth consent screen.

  4. Create an OAuth client with application type Desktop app.

  5. Download the JSON file to:

    ~/.config/google-forms-mcp/credentials.json

    Override the location with GOOGLE_FORMS_CLIENT_SECRET if needed.

  6. Authorize once:

    uv run google-forms-auth

The refresh token is stored at ~/.config/google-forms-mcp/token.json with owner-only permissions when the platform supports them. Override it with GOOGLE_FORMS_TOKEN.

Multi-user public mode

Version 0.4 adds a public onboarding mode where each user connects their own Google account and receives a private MCP bearer token for Claude, ChatGPT, or another HTTP MCP client.

Set:

GOOGLE_FORMS_MULTIUSER=true
GOOGLE_FORMS_PUBLIC_BASE_URL=https://forms.example.com
GOOGLE_FORMS_WEB_CLIENT_SECRET=/run/secrets/google-web-client.json
GOOGLE_FORMS_MULTIUSER_DATA_DIR=/var/lib/google-forms-mcp

The Google credential must be an OAuth client with application type Web application. Register this exact redirect URI:

https://forms.example.com/oauth/google/callback

Users visit /, select Connect Google Forms, approve only identity and Forms-body access, and receive a gfm_... token shown once. They configure their AI application's MCP authorization header with that token.

Multi-user protections include:

  • Fernet-encrypted Google credentials with a private server-side master key

  • SHA-256-hashed MCP tokens; plaintext tokens are never stored

  • Per-user draft databases and confirmation keys

  • Browser-bound, one-use PKCE OAuth state with expiration

  • Per-user request limits across all of the user's tokens

  • Token revocation and Google disconnect

  • Per-user audit events without prompts, form contents, OAuth tokens, or MCP tokens

See docs/public-product.md for deployment, Google consent-screen, privacy, and client-connection requirements.

Connect an MCP client

Hermes Agent

Use Hermes' MCP CLI rather than editing its configuration manually:

hermes mcp add google-forms \
  --command /absolute/path/to/google-forms-mcp/.venv/bin/google-forms-mcp

hermes mcp test google-forms

Restart the active Hermes agent after adding the server so its tools are discovered.

Other stdio MCP clients

Configure the command as:

{
  "command": "/absolute/path/to/google-forms-mcp/.venv/bin/google-forms-mcp",
  "args": []
}

The exact configuration file varies by client.

Claude and ChatGPT remote connector

Run the authenticated HTTP entrypoint and publish it behind HTTPS:

GOOGLE_FORMS_CONNECTOR_TOKEN='<random-token>' \
GOOGLE_FORMS_CONNECTOR_PUBLIC_HOSTS='forms.example.com' \
uv run google-forms-connector

Connect Claude or ChatGPT to https://your-domain.example/mcp and configure the Authorization request header with the connector bearer token. The hosted connector currently represents one Google account. See docs/connectors.md for deployment, platform setup, and security details.

Tools

preview_google_form

Validates a structured form specification and returns a normalized draft. It never authenticates or creates anything.

create_form_draft

Saves a validated draft at version 1 without contacting Google.

get_form_draft

Returns the current version, normalized specification, publication state, and summary.

patch_form_draft

Applies only the requested operations and creates a new version. Supported operations include form titles/descriptions, section renames, adding/deleting/renaming questions, question descriptions, required flags, and adding/removing choice options.

undo_draft_change

Moves the draft back one version. A subsequent patch creates a new history branch and discards the abandoned future revisions.

publish_form_draft

Creates and publishes the native Google Form from the reviewed draft only when confirm=true and expected_version matches the reviewed version, then records the resulting form ID on the draft. Published drafts become immutable; further changes use the existing-form update tool.

update_existing_google_form

Previews or applies explicit patch operations to a published native Google Form. The preview returns the current Google revision_id, exact operations, and a signed plan_token. The confirmed call executes the immutable signed plan and fails closed if either the plan is altered or Google changed after review.

google_forms_auth_status

Reports credential paths and whether the expected files exist. It does not expose token contents.

Example request

Ask the connected assistant:

Create a two-section retreat RSVP. In Basics, require name and email and ask whether the person is attending. In Logistics, ask for transportation as multiple choice and available days as checkboxes. Preview it before creating anything.

A valid tool payload looks like:

{
  "spec": {
    "title": "Retreat RSVP",
    "description": "Please respond by Friday.",
    "sections": [
      {
        "title": "Basics",
        "questions": [
          {"title": "Name", "type": "short_text", "required": true},
          {"title": "Email", "type": "short_text", "required": true},
          {
            "title": "Will you attend?",
            "type": "multiple_choice",
            "options": ["Yes", "No"]
          }
        ]
      },
      {
        "title": "Logistics",
        "questions": [
          {
            "title": "Transportation",
            "type": "dropdown",
            "options": ["Driving", "Need a ride", "Public transit"]
          },
          {
            "title": "Available days",
            "type": "checkboxes",
            "options": ["Friday", "Saturday", "Sunday"]
          }
        ]
      }
    ]
  }
}

The assistant saves this with create_form_draft. A targeted follow-up such as “remove Public transit and make Transportation required” becomes:

{
  "draft_id": "<draft-id>",
  "operations": [
    {
      "operation": "remove_option",
      "question_title": "Transportation",
      "option": "Public transit"
    },
    {
      "operation": "set_required",
      "question_title": "Transportation",
      "required": true
    }
  ]
}

patch_form_draft returns the exact change list and version 2 while every unrelated field remains unchanged. After approval, the assistant calls publish_form_draft with the draft ID, expected_version: 2, and confirm: true.

Development

uv run pytest -q
uv run ruff check .
uv run mypy

The tests use in-memory fakes and never contact Google.

Security

  • Never commit credentials.json or token.json; both are ignored by Git.

  • The server requests only the Forms body scope and does not read responses.

  • Draft databases, SQLite sidecars, and confirmation keys are restricted to owner read/write permissions where supported.

  • Creation, publication, and existing-form updates require explicit confirmation tied to reviewed versions or signed plans.

  • If Google allocates a form but later setup fails, the form ID is retained and automatic retries are blocked to avoid duplicate forms.

  • For shared installations, run one server per Google account or isolate each account's token path.

Available Tools

8 tools
create_form_draftA

Save a persistent, versioned form draft without creating a Google Form.

ParametersJSON Schema
NameRequiredDescriptionDefault
specYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose meaningful traits — the draft is persistent and versioned, and no Google Form is created — which implies a safe, reversible, local-only operation. However, it omits auth requirements, whether each call creates a new version or overwrites, and any limits on draft count.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the differentiating clause is placed immediately after the core action. Nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the schema documents the spec shape. Still, with no annotations the description should say more about versioning semantics and side effects — key facts for a tool whose siblings include patch, undo, and publish.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one required parameter (spec) with 0% description coverage, and the description never mentions it or explains that it is a complete form definition. The schema's internal $defs are self-describing (field descriptions, enums, bounds), which does much of the work, but the prose adds nothing about the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (save) and a specific resource (persistent, versioned form draft), and the clause 'without creating a Google Form' implicitly separates it from publish_form_draft and update_existing_google_form. It never names a sibling explicitly, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'without creating a Google Form' hints at the use case (drafting before publishing), but there is no explicit when-to-use/when-not guidance and no reference to publish_form_draft, patch_form_draft, or undo_draft_change as alternatives. Usage is inferable but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_form_draftC

Return the current version of a persistent form draft.

ParametersJSON Schema
NameRequiredDescriptionDefault
draft_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. 'Persistent' hints the draft survives beyond a session, but nothing is said about auth requirements, behavior when the draft_id does not exist, or whether unpublished changes are included in 'current version'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is efficient, though its brevity is the same trait that leaves the usage and parameter gaps unfilled.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one required param) and an output schema exists, so return values need not be explained. Still, with no annotations and an undocumented parameter, the description should say more about identity/format of draft_id and failure behavior when a draft is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single required parameter, so draft_id is completely undocumented in structured data. The description never mentions the parameter, its expected format, or where to obtain a valid ID, leaving the gap unaddressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Return') plus resource ('form draft') and a scope qualifier ('current version'), which signals a read of the latest state rather than a mutation. It implicitly contrasts with mutating siblings like patch_form_draft or publish_form_draft, but never names them, so differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance and no alternatives. An agent must guess whether to call this versus preview_google_form or patch_form_draft, and 'current version' hints at a read-before-edit pattern without ever saying so.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

google_forms_auth_statusA

Report whether the active user's Google authorization is configured.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. 'Report' implies a read-only, side-effect-free check, which is useful behavioral context, but it does not explicitly state that the operation is safe, idempotent, or that it requires no authorization itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that communicates the entire purpose without filler. Every word earns its place for such a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description need not explain return values. The tool is low-complexity and the description adequately covers its purpose, though it could mention prerequisites or when to invoke it relative to the sibling form tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the scoring rules the baseline is 4. The description correctly does not attempt to describe nonexistent parameters, and the empty schema is self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Report') and a precise resource ('whether the active user's Google authorization is configured'). This clearly distinguishes it from all sibling tools, which operate on form drafts rather than authorization state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies the usage context (checking whether authorization is ready before attempting form operations), but the description offers no explicit when-to-use guidance or prerequisites. It does not mention alternatives or when not to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

patch_form_draftC

Apply targeted operations to a draft while preserving unrelated content.

ParametersJSON Schema
NameRequiredDescriptionDefault
draft_idYes
operationsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, yet it does disclose one meaningful behavioral trait: unrelated content is preserved, implying a partial/non-destructive merge rather than a full replace. It omits atomicity (do all operations apply or does one failure roll back?), reversibility, auth requirements, and whether the draft must exist first.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is efficient, though arguably under-sized for an operation that supports ten distinct mutation kinds.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a high-complexity tool with a large discriminated-union input, no annotations, and no parameter documentation, one sentence is far too thin. An output schema exists so return values needn't be described, but atomicity, auth, operation coverage, and error behavior are all missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for both draft_id and the operations array. It explains neither the draft identifier nor the discriminated union of ten operation types, leaving all meaning to be recovered from the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: applying targeted operations to a draft. It's clear this is an in-place edit tool, and 'preserving unrelated content' hints at its patch semantics. However, it doesn't differentiate itself from siblings like update_existing_google_form or create_form_draft, nor hint at the operation types available.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus publishing, creating, updating, previewing, or undoing. Siblings like publish_form_draft and undo_draft_change strongly imply ordering/alternatives the description never addresses. The agent must infer the whole workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_google_formB

Validate and preview a Google Form without creating or saving anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
specYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral burden. It does disclose the key trait that nothing is created or persisted, but it does not say what validation actually covers, what happens on an invalid spec, or whether failures raise errors or return a report — all material for a tool whose whole value is validation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler; the no-side-effect qualifier is placed where it matters. It is arguably undersized for the complexity of the input, but every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be explained, but the tool's complex nested input contract and the substance of 'validate' are both unaddressed. For a validation/preview tool with a rich spec parameter, this leaves the agent guessing what is checked and what a failure looks like.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% at the property level, and the description says nothing about the single 'spec' parameter. The nested FormSpec/SectionSpec/QuestionSpec structure (required fields, 75-section and 200-question caps, question types) is left entirely to the schema, so the description adds no semantic value for a complex, non-trivial input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific compound verb ('validate and preview') against a named resource ('a Google Form') and adds the crucial scope qualifier 'without creating or saving anything', which separates it from create_form_draft and publish_form_draft. It never names those siblings explicitly, so the differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Without creating or saving anything' implies a pre-flight check to run before create/publish, which is useful implicit routing. However, no sibling is named and there is no explicit statement of when to prefer this over create_form_draft or get_form_draft.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publish_form_draftC

Create a native Google Form from the exact approved draft version.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
draft_idYes
expected_versionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, yet it discloses nothing beyond the bare action. It does not explain the 'confirm' flag (default false, likely a dry-run gate), what 'expected_version' guards against, whether publishing is irreversible, what happens to the draft afterwards, or what auth is required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or redundancy. It is efficient, though its brevity comes at the cost of the behavioral and parameter detail an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be described, but for an unannotated mutation tool with 0% parameter documentation and a default-false confirm flag, the definition is too thin. It omits concurrency semantics, irreversibility, and preconditions that an agent must know before invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for three parameters, so the schema offers only titles like 'Confirm' and 'Expected Version' with no meaning. The description compensates only faintly: 'exact approved draft version' gestures at version pinning but never mentions draft_id, expected_version, or confirm, leaving two parameters entirely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource ('Create a native Google Form') and scopes it to 'the exact approved draft version', which distinguishes it from create_form_draft and preview_google_form. It never names a sibling explicitly, but the publish-vs-draft distinction is inferable from the phrasing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance, and no mention of prerequisites such as the draft needing approval before publishing or how this relates to preview_google_form. The only usage signal is the implied precondition embedded in 'approved draft version', which is thin for a mutating publish operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

undo_draft_changeC

Move a draft back by one version without touching Google Forms.

ParametersJSON Schema
NameRequiredDescriptionDefault
draft_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose a meaningful behavioral boundary — the change is confined to the draft and does not propagate to the live Google Form — but omits what happens at the earliest version, whether the rollback is itself reversible, and any auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence that front-loads the action. Nothing is wasted, though "without touching Google Forms" is vague enough to be marginally less useful than a concrete statement like "does not modify the published form."

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be explained, but with zero annotation coverage and 0% parameter documentation the definition leaves an agent guessing about identifier format and edge-case behavior. For a state-mutating rollback tool this is thin.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single draft_id parameter, and the description never addresses it beyond the indefinite article "a draft." An agent gets no format, source, or identifier guidance to compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Move a draft back by one version" gives a specific verb and resource with a clear unit of change, and "without touching Google Forms" scopes it away from the publish/update siblings. It stops short of naming a distinct alternative tool, but the intent is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No statement of when to use this versus get_form_draft, patch_form_draft, or publish_form_draft. The only implied guidance is the negative scope ("without touching Google Forms"), which hints it is a local-only rollback but never says so explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_existing_google_formC

Preview or apply a signed targeted update plan to an existing Google Form.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
form_idYes
operationsNo
plan_tokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It omits that the operation set includes destructive actions (delete_question, remove_option), that confirm/plan_token gate whether changes actually apply, and any auth or side-effect details. For a mutating tool with no annotation coverage this is a substantial gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is efficient, though the brevity shades into under-specification rather than tight communication.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema is complex (10 discriminated operation variants, nested QuestionSpec) and no annotations exist, yet the description covers none of the preview/apply mechanics, destructive operations, or parameter roles. An output schema exists, so return values are not owed, but the operational model still is.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description explains none of the four parameters. The words 'signed' and 'plan' vaguely gesture at plan_token, but confirm, operations, and form_id are never addressed, leaving the most consequential controls (confirm, plan_token) undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (update) and resource (existing Google Form), and the 'preview or apply' phrasing hints at a two-phase workflow. However, 'signed targeted update plan' is left undefined, so an agent can't tell precisely what a plan is or how this differs from patch_form_draft without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus patch_form_draft, preview_google_form, or undo_draft_change. The 'preview or apply' wording implies a two-step flow but never states which parameter selects each mode, so the agent must infer it from the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv0.4.0
    • First observedcreate_form_draft
    • First observedget_form_draft
    • First observedgoogle_forms_auth_status
    • First observedpatch_form_draft
    • First observedpreview_google_form
    • First observedpublish_form_draft
    • First observedundo_draft_change
    • First observedupdate_existing_google_form

TDQS

B3.3/5.0

Scored across 8 tools

Disambiguation4/5

Most tools map to distinct stages of a draft lifecycle (create/get/patch/undo/publish), so an agent can route most requests cleanly. However, preview_google_form overlaps with update_existing_google_form's preview mode, and publish_form_draft vs update_existing_google_form both write to live Google Forms, creating some boundary ambiguity.

Naming Consistency4/5

Names are consistently snake_case with a verb_noun shape (create_form_draft, patch_form_draft, undo_draft_change). Minor deviations exist: the noun is phrased variously as 'form_draft', 'existing_google_form', and the namespace-prefixed google_forms_auth_status breaks the pattern slightly.

Tool Count5/5

Eight tools is well-scoped for a draft-based form authoring workflow. Each tool (create, get, patch, undo, preview, publish, update, auth) earns its place without redundancy.

Completeness4/5

The draft lifecycle is covered end-to-end: create/get/patch/undo/publish plus preview, update-existing, and auth. Minor gaps remain, such as no delete_form_draft, no way to list drafts, and no read/fetch tool for existing Google Forms beyond updating them.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for reading, editing, and publishing Google Forms with the official Google Forms API. Enables AI agents to programmatically create, modify, and manage forms and responses.
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    MCP server for FormsList, a form-backend SaaS. Enables creating form endpoints, reading submissions, configuring auto-responses, and generating embed snippets via natural language.
    7
    -
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server for the Google Forms API that enables creating and editing forms, publishing them, reading responses, and setting up push notifications from AI clients using natural language.
    19
    107 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Turns existing backend APIs (OpenAPI) and SQL databases (PostgreSQL, MariaDB, ClickHouse) into hosted MCP servers for AI clients, with built-in dashboards, forms, and credential encryption.
    2,965 npm
    Apache 2.0