Webtzm
Server Details
Manage Webtzm forms that send submissions to Google Sheets: list, embed, create, update, pause.
- Status
- Healthy
- Uptime
- 82.1% over 28 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 6 tools
Each tool has a clearly distinct target: one form vs. all forms, one submission vs. recent submissions, embed code, and workspace metadata. There is minor overlap because get_workspace references list_forms, but the actual outputs are distinct.
All names follow a consistent snake_case get_/list_ pattern with clear noun phrases. No mixed conventions or vague verbs.
Six tools are well scoped for a read-only inspection surface covering forms, submissions, embed code, and workspace status. Each tool earns its place without redundancy.
The surface is entirely read-only and references actions such as update_form, set_form_status, retry_delivery, and allow_website that are not exposed as tools. Agents can diagnose issues but cannot perform the fixes or lifecycle operations the descriptions imply.
Available Tools
6 toolsget_formGet a formBRead-onlyInspect
One form's settings: fields, allowed websites, success message or redirect, anti-spam check, owner alert, Google Sheet link, the form it changes rows of (targetFormId) if any, whether Record Fetch is on, and the revision update_form and set_form_status need.
| Name | Required | Description | Default |
|---|---|---|---|
| form_id | Yes | The form's id, as list_forms returns it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| sheet | Yes | |
| fields | Yes | |
| output | Yes | |
| status | Yes | |
| revision | Yes | |
| operation | No | |
| ownerAlert | Yes | |
| recordLinks | No | |
| allowedSites | Yes | |
| targetFormId | No | |
| retentionDays | No | |
| spamProtection | Yes | |
| successMessage | Yes | |
| recordFetchEnabled | No | |
| successRedirectUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful cross-tool context: it notes the response carries "the revision update_form and set_form_status need", which tells the agent this call is a prerequisite for those mutations — something not derivable from the schema. It does not discuss failure behavior for unknown form_id or the size/shape of the payload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single compact sentence with no filler, and the essential head ("One form's settings") is front-loaded. However, it is an unpunctuated comma-list of ten items that is harder to scan than a short prose sentence plus a few grouped clauses would be, and the parenthetical targetFormId mixes schema-level detail into prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With readOnly annotations and a full output schema in place, the description only needs to establish scope and any non-obvious dependencies — and it does flag the update_form/set_form_status revision dependency. Only the lack of a stated verb and of sibling routing keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single form_id parameter is documented there as "The form's id, as list_forms returns it." The description adds nothing about the parameter itself (no format, prefix, or ID-provenance detail beyond what the schema says), so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates exactly what a caller gets back from a single form: fields, allowed websites, success message/redirect, anti-spam, alerts, sheet link, targetFormId, Record Fetch state, and revision id. That is a specific, distinctive resource scope, though it never states a verb ("retrieve"/"read") and never contrasts itself with list_forms or get_form_embed_code, so the sibling separation is inferred from "One form's" only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 alternatives such as list_forms for enumeration or get_form_embed_code for the embed snippet. The reader must infer from the resource scope alone that this is the read-one-by-id call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_form_embed_codeGet a form's HTMLARead-onlyInspect
The HTML to put a form on a website, plus the rules for using it: paste it unchanged except for styling, keep every name attribute and the hidden _webtzm_form and _webtzm_rev inputs, and publish it only on one of the form's allowed websites.
| Name | Required | Description | Default |
|---|---|---|---|
| form_id | Yes | The form's id, as list_forms returns it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| html | Yes | |
| rules | Yes | |
| formId | Yes | |
| status | Yes | |
| allowedSites | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral constraints: preserve every name attribute and hidden inputs, paste unchanged except for styling, and publish only on allowed websites. It does not explain return format or rate limits, but the output schema covers return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the tool's purpose before listing usage rules. It contains no obvious waste, though the colon-separated rule list is slightly dense and could be more scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool with an output schema, the description covers what the tool returns and the critical constraints on using the HTML. The main gap is the lack of explicit sibling differentiation, which matters because get_form and list_forms are adjacent tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the single form_id parameter is already documented as 'The form's id, as list_forms returns it.' The description adds no additional meaning or syntax beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource and output: 'The HTML to put a form on a website.' It is specific enough to distinguish from siblings like get_form or get_submission, but it does not explicitly name or contrast those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides rules for using the returned HTML, but it does not explain when to call this tool versus siblings such as get_form, list_forms, or get_submission. There is no explicit selection guidance or exclusion criteria for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_submissionGet one submissionARead-onlyInspect
One submission by its id, as list_recent_submissions returns it: its form, status, what it does to its Sheet row (operation insert, update or archive, and for a change the entry it changes as targetSubmissionId), when it was accepted and delivered, delivery attempts, whether an insert's row was later removed (removed, removedAt), and for one that needs review the reason - where it broke and which fix applies. Status only, like list_recent_submissions: what the person answered is never included.
| Name | Required | Description | Default |
|---|---|---|---|
| submission_id | Yes | The submission's id, as list_recent_submissions returns it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| formId | Yes | |
| status | Yes | |
| removed | No | |
| attempts | No | |
| formName | No | |
| reviewed | No | |
| errorCode | No | |
| operation | Yes | |
| removedAt | No | |
| acceptedAt | Yes | |
| deliveredAt | No | |
| needsReview | Yes | |
| needsReviewReason | No | |
| targetSubmissionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real substance beyond that: it discloses the status-only payload ('what the person answered is never included'), the removed/removedAt lifecycle flag for inserts, and the review-reason field. No auth or rate-limit notes, but the scope disclosure is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the opening clause, but the middle of the description is a long comma-spliced enumeration of return fields (operation, targetSubmissionId, accepted/delivered, attempts, removed, removedAt, review reason) that the output schema already carries. Useful sentences coexist with redundant ones.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 spelled out, and the description is more than sufficient to invoke the tool correctly with one required id. It is slightly misallocated — heavy on return-field detail, thin on when to prefer a sibling — but nothing needed for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter already documents itself as 'The submission's id, as list_recent_submissions returns it.' The description only restates 'by its id' without adding format, source, or failure semantics, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource pair ('One submission by its id') and immediately anchors it against the sibling that produces those ids ('as list_recent_submissions returns it'). An agent can distinguish it from list_recent_submissions and get_form without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicitly routes the agent: ids come from list_recent_submissions, and this tool takes exactly one. It gives clear context for use but never states exclusions, e.g. that you shouldn't call it for a form definition (get_form) or for bulk retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workspaceGet the Webtzm workspaceARead-onlyInspect
The connected Webtzm workspace: its name, plan, this month's submissions and active forms against the plan's limits, whether Google is connected (Reconnect Google in the console if it is not), and the console address. The console shows the workspace's forms as Connections; list_forms returns the same set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| plan | Yes | |
| usage | Yes | |
| Yes | ||
| consoleUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this is a safe, read-only, non-destructive call, so the bar is lower. The description adds genuinely useful behavior beyond that: it exposes plan-limit comparison, Google connection state, and a remediation hint ('Reconnect Google in the console') that no structured field conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource contents, then a short second sentence to disambiguate from list_forms. Slightly dense with clauses, but each one carries distinct information and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be spelled out, and the description still summarizes the payload plus the plan-limit and connection semantics an agent needs to interpret it. Nothing required to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The schema is empty and fully covered, so no compensating explanation is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates exactly what the workspace object contains (name, plan, submission/form counts against limits, Google connection status, console address), so an agent knows precisely what this returns. It also explicitly distinguishes itself from the sibling list_forms by noting the console renders the same set as Connections.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is clear: reach for this to read workspace-level state (plan, limits, Google connection) rather than per-form data, and the list_forms overlap note prevents redundant calls. It stops short of explicit when-not-to-use guidance or naming every sibling as an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_formsList formsBRead-onlyInspect
Every form in the workspace with its id, name, status (active, paused, draft or archived), Google output, Google Sheet link, submissions this month, when it last had delivery activity, what it does to its Sheet (operation insert adds rows; update and archive change or remove rows of the form named by targetFormId), whether Record Fetch is on, whether the rows of a form carry edit or remove links (recordLinksEnabled: a form that changes or removes rows puts them there itself, and a form that adds rows has them through the forms linked to it), how many submissions need review (needsReview: stopped for good and not marked reviewed - a delivery with another attempt scheduled is not counted) and how many are held for a website not yet allowed (heldSubmissions). The console shows each form that adds rows as a Connection, with the forms whose targetFormId names it linked to it as its edit and remove abilities; a Connection reads Paused when its form is paused and Needs review when needsReview or heldSubmissions is above zero.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| forms | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely non-obvious domain semantics — how needsReview excludes deliveries with another attempt scheduled, how heldSubmissions counts blocked-site deliveries, and how recordLinksEnabled propagates through linked forms — which is real added value, though it is expressed as return-field lore rather than tool behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is a single ~230-word run-on sentence with deeply nested parentheticals, several of which are sentences themselves. It front-loads the resource well but then buries the operationally important distinctions (needsReview, heldSubmissions, Connection status) in an unparseable clause chain.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 did not need to enumerate return fields at all — yet nearly all of its length is spent re-explaining them. What an agent actually needs for a parameterless read-only list (result size, ordering, whether the whole workspace is always returned) is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly does not invent any filtering or scoping inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause states a specific verb and resource with scope: 'Every form in the workspace with its id, name, status...'. An agent can tell it returns the full collection rather than a single record, which implicitly separates it from get_form, but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus get_form, get_form_embed_code, or list_recent_submissions. Usage is only inferable from the field list ('Every form in the workspace'), and there is no mention of ordering, paging, or cost for what could be a large workspace-wide read.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent_submissionsList recent submissionsARead-onlyInspect
The delivery status of recent submissions, any that need review, and any held because they came from a website the form does not allow yet, newest first. Status only: pending or processing means In delivery, synced means Delivered to Sheet (or to the form's other Google output), failed means another delivery attempt is scheduled, dead_letter means Needs review, and needsReview lists only those (never a delivery with another attempt scheduled), the same count list_forms and the console give. acceptedAt is when Webtzm accepted a submission and deliveredAt when Webtzm wrote it to Google (null until then). operation says what a submission does to its Sheet row: insert adds a row, update changes the row of the entry named by targetSubmissionId, archive removes that row. An insert whose row was later removed has removed true and removedAt (when the removal reached the Sheet, or was accepted while still on its way); its own status stays synced because it was delivered. Each needs-review item says where it broke and which reversible fix applies (retry_delivery, or Reconnect Google in the console). Held items name the website; allow_website releases them. Each submission's receipt is the confirmation email to the person who submitted (null when the form sends none): pending, sent, retrying, failed, or skipped with a reason and a summary - recipient_receipt_cap means that address already had the daily maximum of receipts from this form, which resets at 00:00 UTC and needs no fix. For older submissions pass nextCursor back as cursor; get_submission reads one submission by id. What people answered is never included.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many recent submissions to return, 1 to 20. Defaults to 10. | |
| cursor | No | Where to continue: the nextCursor of the previous answer. Omit for the newest. | |
| form_id | No | Only this form's submissions. Omit for the whole workspace. |
Output Schema
| Name | Required | Description |
|---|---|---|
| held | No | |
| recent | Yes | |
| nextCursor | No | |
| needsReview | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/non-destructive annotations, it discloses rich domain behavior: exact status mappings, what needsReview excludes, how removed inserts retain synced status, receipt states including recipient_receipt_cap, and that answers are never included. This is substantial context an agent could not infer from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is front-loaded and nearly every clause carries domain meaning, but it is delivered as one very long run-on paragraph. The density makes it harder to scan than it needs to be for a list tool with only three parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich status model, receipt semantics, and output schema, the description is complete enough for an agent to interpret results correctly. It covers pagination, filtering scope, and the important caveat that answers are excluded.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3. The description adds useful meaning by tying cursor to the previous answer's nextCursor and clarifying that form_id scopes to one form while omission covers the workspace.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (recent submissions), the main payload (delivery status), and the three triage views (delivered, needs review, held), plus newest-first ordering. It also distinguishes itself from get_submission by saying that tool reads one submission by id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit continuation guidance ('For older submissions pass nextCursor back as cursor'), names get_submission as the single-record alternative, and explains that held items can be released with allow_website. It lacks a broad 'use this when' statement, but the usage context is clear.
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.
3 tool updates
- Changed
get_form1 field changed- added
Output schema / properties / recordLinks / properties / viaLinkedFormsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +}
- Added
get_submission - Changed
list_recent_submissions2 fields changed- added
Input schema / properties / cursorAdded value: +{ + "description": "Where to continue: the nextCursor of the previous answer. Omit for the newest.", + "maxLength": 400, + "minLength": 1, + "type": "string" +} - added
Output schema / properties / nextCursorAdded value: +{ + "type": [ + "string", + "null" + ] +}
1 tool update
- Changed
list_recent_submissions1 field changed- added
Output schema / properties / heldAdded value: +{ + "type": "array" +}
2 tool updates
- Changed
get_form3 fields changed- added
Output schema / properties / recordFetchEnabledAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / recordLinksAdded value: +{ + "properties": { + "enabled": { + "type": "boolean" + }, + "onlyAcceptChangesFromLinks": { + "type": "boolean" + }, + "showCurrentAnswers": { + "type": "boolean" + } + }, + "type": "object" +} - added
Output schema / properties / targetFormIdAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Changed
list_forms4 fields changed- added
Output schema / properties / forms / items / properties / operationAdded value: +{ + "type": "string" +} - added
Output schema / properties / forms / items / properties / recordFetchEnabledAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / forms / items / properties / recordLinksEnabledAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / forms / items / properties / targetFormIdAdded value: +{ + "type": [ + "string", + "null" + ] +}
5 tool updates
- First observed
get_form - First observed
get_form_embed_code - First observed
get_workspace - First observed
list_forms - First observed
list_recent_submissions
Related MCP Connectors
Build, edit and publish forms and read their responses from your AI assistant.
Form backend: create forms, get embed code, read submissions, add webhooks. OAuth sign-in.
- FormEdgeOAuthapp.formedge
Create, edit, preview and publish FormEdge forms and landing pages, and review submissions.
Form backend for static sites: create forms, manage submissions, webhooks and exports.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables creation and management of Google Forms with support for all 12 question types, response collection, CSV export, and form publishing through OAuth-authenticated API access.2MIT
- FlicenseNot gradedqualityDmaintenanceEnables interaction with Google Forms API to create forms, add questions, and retrieve responses through natural language commands.3-
- AlicenseBqualityFmaintenanceManage Tally.so forms through AI conversation. Create, update, and organize forms using natural language instead of web interfaces. Features safe bulk operations and works with all major MCP clients.16285 npm8ISC
- FlicenseNot gradedqualityCmaintenanceEnables Claude to persistently manage Google Forms through a remote MCP server, including creating and editing forms, configuring quizzes and scoring, publishing or closing forms, and retrieving responses.-
Glama MCP Gateway
Add one secure layer between your agents and this server.