GoFormz MCP by usefulapi

Read GoFormz templates, forms, groups and data sources; create and update forms and rows.

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
97%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~5,820Tokens (tool definitions)
~1.5 KBTypical response size
Significant attention impact (4.55% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "goformz": {
      "url": "https://goformz.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://goformz.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (23)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢goformz_list_templates(name, page, page_size)

List the form templates of the account (id, name). Use a template id to list its forms or to create a form. GET /v2/templates.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Only items whose name starts with this text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢goformz_get_template(template_id)

Get one template by id. GET /v2/templates/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "template_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "Template id (a GUID)."
    }
  },
  "required": [
    "template_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢goformz_list_forms(name, status, updated_after, sort, direction, ...)

List forms (filled-in instances of templates) with name, status (draft or complete), last update date and assignment. Field values are NOT included: call goformz_get_form for those. Filter by name prefix, status or last-updated date. GET /v2/formz.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Only items whose name starts with this text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "status": {
      "description": "Only draft or only complete forms.",
      "type": "string",
      "enum": [
        "draft",
        "complete"
      ]
    },
    "updated_after": {
      "description": "Only forms last updated after this date or date-time (ISO 8601).",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,7})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
    },
    "sort": {
      "description": "Sort field.",
      "type": "string",
      "enum": [
        "name",
        "createddate",
        "lastupdateddate",
        "completeddate"
      ]
    },
    "direction": {
      "description": "Sort direction (default asc).",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢goformz_list_template_forms(template_id, name, status, sort, direction, ...)

List the forms created from one template (name, status, last update date). Field values are not included. GET /v2/templates/{templateId}/formz.

Input Schema

{
  "type": "object",
  "properties": {
    "template_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "Template id (a GUID)."
    },
    "name": {
      "description": "Only items whose name starts with this text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "status": {
      "description": "Only draft or only complete forms.",
      "type": "string",
      "enum": [
        "draft",
        "complete"
      ]
    },
    "sort": {
      "description": "Sort field.",
      "type": "string",
      "enum": [
        "name",
        "createddate",
        "lastupdateddate",
        "completeddate"
      ]
    },
    "direction": {
      "description": "Sort direction (default asc).",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "template_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢goformz_get_form(form_id, include_deleted)

Get one form with all its field values (text, numbers, dates, checkboxes, table rows, signature/image references), status, assignment and template version. GET /v2/formz/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "form_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "Form id (a GUID)."
    },
    "include_deleted": {
      "description": "Also return a form that has been deleted (default false).",
      "type": "boolean"
    }
  },
  "required": [
    "form_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢goformz_list_groups(name, page, page_size)

List user groups (forms can be assigned to a group). GET /v2/groups.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Only items whose name starts with this text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢goformz_get_group(group_id)

Get one group by id. GET /v2/groups/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "group_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "Group id (a GUID)."
    }
  },
  "required": [
    "group_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢goformz_list_users(name, page, page_size)

List the account's users (id, username, first and last name). A user id is needed to assign a new form. GET /v2/users.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Only items whose name starts with this text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢goformz_get_user(user_id)

Get one user by id. GET /v2/users/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "User id (a GUID)."
    }
  },
  "required": [
    "user_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢goformz_list_datasources(name, page, page_size)

List data sources (lookup tables that feed dropdown and database fields in templates). GET /v2/datasources.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Only items whose name starts with this text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢goformz_get_datasource(datasource_id)

Get one data source: its name, columns and indexed columns. GET /v2/datasources/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "datasource_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "Data source id (a GUID)."
    }
  },
  "required": [
    "datasource_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢goformz_list_datasource_rows(datasource_id, name, page, page_size)

List the rows of a data source. Each row has an id, a keyColumn (the lookup key) and a value (a JSON-encoded array of the column values). GET /v2/datasources/{dataSourceId}/rows.

Input Schema

{
  "type": "object",
  "properties": {
    "datasource_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "Data source id (a GUID)."
    },
    "name": {
      "description": "Only rows whose key column starts with this text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "datasource_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢goformz_get_datasource_row(datasource_id, row_id)

Get one data source row by id. GET /v2/datasources/{dataSourceId}/rows/{rowId}.

Input Schema

{
  "type": "object",
  "properties": {
    "datasource_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "Data source id (a GUID)."
    },
    "row_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "Row id (a GUID)."
    }
  },
  "required": [
    "datasource_id",
    "row_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢goformz_list_webhooks(template_id, page, page_size)

List the webhooks that call a URL when a form of a template is completed (event form.complete). Read-only. GET /v2/webhooks.

Input Schema

{
  "type": "object",
  "properties": {
    "template_id": {
      "description": "Only webhooks for this template (the webhook's entity id).",
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢goformz_get_queue_item(queue_id)

Check a queued job, for example the PDF export started by goformz_export_form_pdf. Returns status (and progressIndicator); when it is Completed, redirectUrl points at the result (a /v2/files/{id} URL: pass that id to goformz_get_file). GET /v2/queue/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "queue_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "Queue item id (a GUID)."
    }
  },
  "required": [
    "queue_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢goformz_get_file(file_id)

Get a file summary: type, created date and a temporary download `link` (it expires; see linkExpiration). Use it for an exported PDF or a form image/signature. The file itself is not downloaded here. GET /v2/files/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "file_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "File id (a GUID)."
    }
  },
  "required": [
    "file_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢goformz_get_pdf_export(form_id, export_id)

Get the metadata of a PDF export of a form, including the temporary download `link` once the PDF is ready. GET /v2/formz/{formId}/exports/{exportId}.

Input Schema

{
  "type": "object",
  "properties": {
    "form_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "Form id (a GUID)."
    },
    "export_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "Export id (a GUID)."
    }
  },
  "required": [
    "form_id",
    "export_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡goformz_export_form_pdf(form_id, pages)

WRITE: start a PDF export of a form (the form is not changed; GoFormz creates a PDF file). The reply gives the queue_id of the job: poll goformz_get_queue_item until Completed, then read the file with goformz_get_file using the id in redirectUrl. POST /v2/formz/{formId}/exports.

Input Schema

{
  "type": "object",
  "properties": {
    "form_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "Form id (a GUID)."
    },
    "pages": {
      "description": "Pages to include, for example \"1-5,7,9\" (default all pages).",
      "type": "string",
      "maxLength": 100,
      "pattern": "^\\d+(-\\d+)?(,\\d+(-\\d+)?)*$"
    }
  },
  "required": [
    "form_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡goformz_create_form(template_id, name, override_default_form_name, fields, assign_to_type, ...)

WRITE: create a new draft form from a template, optionally pre-filled and assigned to a user or group (assignment is only possible at creation). Field keys are the template's field names (or ids) and the values are field objects such as {"text": "Acme"}; see goformz_get_form on an existing form of the template for each field's shape. Each call creates another form. POST /v2/formz.

Input Schema

{
  "type": "object",
  "properties": {
    "template_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "Template id (a GUID)."
    },
    "name": {
      "description": "Form name. Ignored unless override_default_form_name is true: GoFormz names forms by the template's rule.",
      "type": "string",
      "minLength": 1,
      "maxLength": 250
    },
    "override_default_form_name": {
      "description": "Use `name` instead of the template's automatic form name (default false).",
      "type": "boolean"
    },
    "fields": {
      "description": "Field values keyed by field name or id, for example {\"PO #\": {\"value\": \"1223333\"}, \"Customer\": {\"text\": \"Acme\"}}.",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      },
      "additionalProperties": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    },
    "assign_to_type": {
      "description": "Assign the form to a User or a Group (needs assign_to_id).",
      "type": "string",
      "enum": [
        "User",
        "Group"
      ]
    },
    "assign_to_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "User or group id (a GUID)."
    }
  },
  "required": [
    "template_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴goformz_update_form(form_id, name, fields)

WRITE: change a form's name and/or field values (partial update: only the fields given change; a null value clears a field). Does NOT change the status and does not trigger workflows; to re-run completion workflows use goformz_set_form_status draft, update, then complete. PATCH /v2/formz/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "form_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "Form id (a GUID)."
    },
    "name": {
      "description": "New form name.",
      "type": "string",
      "minLength": 1,
      "maxLength": 250
    },
    "fields": {
      "description": "Field values keyed by field name or id, for example {\"PO #\": {\"value\": \"1223333\"}}; null clears the field.",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      },
      "additionalProperties": {
        "anyOf": [
          {
            "type": "null"
          },
          {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {}
          }
        ]
      }
    }
  },
  "required": [
    "form_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴goformz_set_form_status(form_id, status)

WRITE: mark a form complete (this can trigger the template's completion workflows and webhooks) or re-open it as a draft so it can be edited. POST /v2/formz/{id}/status.

Input Schema

{
  "type": "object",
  "properties": {
    "form_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "Form id (a GUID)."
    },
    "status": {
      "type": "string",
      "enum": [
        "draft",
        "complete"
      ],
      "description": "complete to finish the form, draft to re-open it."
    }
  },
  "required": [
    "form_id",
    "status"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡goformz_create_datasource_row(datasource_id, key_column, values)

WRITE: add a row to a data source. key_column is the lookup key; values are the column values in the data source's column order (see goformz_get_datasource). Each call adds another row. POST /v2/datasources/{dataSourceId}/rows.

Input Schema

{
  "type": "object",
  "properties": {
    "datasource_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "Data source id (a GUID)."
    },
    "key_column": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500,
      "description": "The row's lookup key (the value of the key column)."
    },
    "values": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 2000
      },
      "description": "Column values in column order, as strings."
    }
  },
  "required": [
    "datasource_id",
    "key_column",
    "values"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴goformz_update_datasource_row(datasource_id, row_id, key_column, values)

WRITE: replace a data source row's key and values (the whole row is replaced; send every column). PATCH /v2/datasources/{dataSourceId}/rows/{rowId}.

Input Schema

{
  "type": "object",
  "properties": {
    "datasource_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "Data source id (a GUID)."
    },
    "row_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "description": "Row id (a GUID)."
    },
    "key_column": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500,
      "description": "The row's lookup key."
    },
    "values": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 2000
      },
      "description": "All column values in column order, as strings."
    }
  },
  "required": [
    "datasource_id",
    "row_id",
    "key_column",
    "values"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded23 tools