Browse Formstack forms, submissions and webhooks, search responses, and create submissions.
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Count a form's submissions, with a per-day breakdown over a lookback window of up to 7 days. Formstack: GET /forms/{formId}/submissions/count.
The form ID.
Date to count from, e.g. 2026-09-01.
How many days to count backwards (maximum 7).
Count a form's submissions, with a per-day breakdown over a lookback window of up to 7 days. Formstack: GET /forms/{formId}/submissions/count.
| Argument | Type | Description |
|---|---|---|
| form_id* | integer | The form ID. |
| start_date | string | Date to count from, e.g. 2026-09-01. |
| lookback_period | integer | How many days to count backwards (maximum 7). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"form_id"
],
"properties": {
"form_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The form ID.",
"exclusiveMinimum": 0
},
"start_date": {
"type": "string",
"description": "Date to count from, e.g. 2026-09-01."
},
"lookback_period": {
"type": "integer",
"maximum": 7,
"minimum": 1,
"description": "How many days to count backwards (maximum 7)."
}
}
}Create a folder for organising forms, at the root or inside a parent folder. Formstack: POST /folders.
| Argument | Type | Description |
|---|---|---|
| name* | string | Folder name. |
| parent | integer | Parent folder ID (omit for root level). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Folder name."
},
"parent": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Parent folder ID (omit for root level)."
}
}
}Generate a link to a live form with some fields already filled in — e.g. to send a customer a form with their name and account number pre-entered. Formstack stores the prefill and returns prefilledUrl. Formstack: POST /forms/{formId}/prefill.
| Argument | Type | Description |
|---|---|---|
| fields* | array | Field values to prefill. |
| form_id* | integer | The form ID. |
| incomplete_password | string | Optional password protecting the prefilled entry. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"form_id",
"fields"
],
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"value"
],
"properties": {
"id": {
"type": [
"string",
"number"
],
"description": "The field ID."
},
"value": {
"type": "object",
"description": "The field value as an object, shaped by field type: text/email/number/phone/textarea/datetime/radio → {\"value\":\"...\"}; name → {\"first\":\"...\",\"last\":\"...\"} (also prefix, middle, initial, suffix); address → {\"address\",\"address2\",\"city\",\"state\",\"zip\",\"country\"}; checkbox/select → {\"subvalues\":[{\"subvalue\":\"...\"}]}. Use formstack_list_form_fields for field IDs and types.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
},
"minItems": 1,
"description": "Field values to prefill."
},
"form_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The form ID.",
"exclusiveMinimum": 0
},
"incomplete_password": {
"type": "string",
"description": "Optional password protecting the prefilled entry."
}
}
}Submit an entry to a form on someone's behalf. This is a real submission: it counts toward the form and can fire its notification emails, webhooks and integrations. Formstack: POST /forms/{formId}/submissions.
| Argument | Type | Description |
|---|---|---|
| read | boolean | Mark the submission as read on creation. |
| fields* | array | Field values to submit. |
| form_id* | integer | The form ID. |
| user_agent | string | Submitter's browser user agent to record. |
| remote_addr | string | Submitter's IP address to record. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"form_id",
"fields"
],
"properties": {
"read": {
"type": "boolean",
"description": "Mark the submission as read on creation."
},
"fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"value"
],
"properties": {
"id": {
"type": [
"string",
"number"
],
"description": "The field ID."
},
"value": {
"type": "object",
"description": "The field value as an object, shaped by field type: text/email/number/phone/textarea/datetime/radio → {\"value\":\"...\"}; name → {\"first\":\"...\",\"last\":\"...\"} (also prefix, middle, initial, suffix); address → {\"address\",\"address2\",\"city\",\"state\",\"zip\",\"country\"}; checkbox/select → {\"subvalues\":[{\"subvalue\":\"...\"}]}. Use formstack_list_form_fields for field IDs and types.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
},
"minItems": 1,
"description": "Field values to submit."
},
"form_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The form ID.",
"exclusiveMinimum": 0
},
"user_agent": {
"type": "string",
"description": "Submitter's browser user agent to record."
},
"remote_addr": {
"type": "string",
"description": "Submitter's IP address to record."
}
}
}Add a webhook that POSTs each new submission of a form to your URL. Formstack: POST /forms/{formId}/webhooks.
| Argument | Type | Description |
|---|---|---|
| url* | string | HTTPS URL that receives the submission data. |
| name | string | Webhook name. |
| form_id* | integer | The form ID. |
| hmac_secret | string | Secret used to HMAC-sign each payload. |
| content_type | string | Payload encoding. |
| error_emails | string | Comma-separated emails to notify on delivery failure. |
| file_transfer_type | string | How uploaded files are delivered in the payload. |
| include_field_type | boolean | Include each field's type in the payload. |
| standardize_values | boolean | Standardize field values for consistency. |
Fetch a folder with its parent, permissions and direct subfolders. Formstack: GET /folders/{folderId}.
| Argument | Type | Description |
|---|---|---|
| folder_id* | integer | The folder ID. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"folder_id"
],
"properties": {
"folder_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The folder ID.",
"exclusiveMinimum": 0
}
}
}Fetch a form's details — name, URL, submission counts, settings — optionally with its full field list. Formstack: GET /forms/{formId}.
| Argument | Type | Description |
|---|---|---|
| form_id* | integer | The form ID. |
| with_fields | boolean | Include the form's fields in the response. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"form_id"
],
"properties": {
"form_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The form ID.",
"exclusiveMinimum": 0
},
"with_fields": {
"type": "boolean",
"description": "Include the form's fields in the response."
}
}
}Fetch a single submission with every field's label, type, display value and parsed value, plus payment, approval and workflow status. Formstack: GET /submissions/{submissionId}.
| Argument | Type | Description |
|---|---|---|
| submission_id* | integer | The submission ID. |
| encryption_password | string | Only for forms with encryption enabled: the form's encryption password, sent as the X-FS-Encryption-Password header. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"submission_id"
],
"properties": {
"submission_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The submission ID.",
"exclusiveMinimum": 0
},
"encryption_password": {
"type": "string",
"description": "Only for forms with encryption enabled: the form's encryption password, sent as the X-FS-Encryption-Password header."
}
}
}List the confirmation emails sent to the person who submits a form — sender, subject, message and delay. Formstack: GET /forms/{formId}/confirmations.
| Argument | Type | Description |
|---|---|---|
| form_id* | integer | The form ID. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"form_id"
],
"properties": {
"form_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The form ID.",
"exclusiveMinimum": 0
}
}
}List the account's form folders and their subfolders. Formstack: GET /folders.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
| per_page | integer | Folders per page (minimum 10). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"per_page": {
"type": "integer",
"maximum": 500,
"minimum": 10,
"description": "Folders per page (minimum 10)."
}
}
}List every field on a form — id, label, type, required flag, options and logic. Use this to learn field IDs before searching or creating submissions. Formstack: GET /forms/{formId}/fields.
| Argument | Type | Description |
|---|---|---|
| form_id* | integer | The form ID. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"form_id"
],
"properties": {
"form_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The form ID.",
"exclusiveMinimum": 0
}
}
}List a form's submissions, newest or oldest first, filtered by keyword, date range or specific field values. Set include_data to get the answers. Formstack: GET /forms/{formId}/submissions.
| Argument | Type | Description |
|---|---|---|
| order | string | Sort direction (default ASC). |
| form_id* | integer | The form ID. |
| keyword | string | Match submissions by content across all fields. |
| max_time | string | Only entries created on or before this date/time: YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (Eastern Time). |
| min_time | string | Only entries created on or after this date/time: YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (Eastern Time). |
| page_size | integer | Items per page, 10-500 (Formstack default 50). |
| data_format | string | Shape of data: legacy (object keyed by field id) or standardized (array of field objects). |
| expand_data | boolean | Include expanded field data with parsed values. |
List the forms in the account, with submission counts, live URL and folder. Filter by name or folder and sort. Formstack: GET /forms.
| Argument | Type | Description |
|---|---|---|
| order | string | Sort direction (default ASC). |
| folder | integer | Only forms in this folder ID. |
| search | string | Match forms by name. |
| order_by | string | Column to order by, e.g. name, created, updated. |
| page_size | integer | Items per page, 10-500 (Formstack default 50). |
| page_number | integer | Page number, starting at 1. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"order": {
"enum": [
"ASC",
"DESC"
],
"type": "string",
"description": "Sort direction (default ASC)."
},
"folder": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Only forms in this folder ID."
},
"search": {
"type": "string",
"description": "Match forms by name."
},
"order_by": {
"type": "string",
"description": "Column to order by, e.g. name, created, updated."
},
"page_size": {
"type": "integer",
"maximum": 500,
"minimum": 10,
"description": "Items per page, 10-500 (Formstack default 50)."
},
"page_number": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
}
}
}List the notification emails that alert your team when a form is submitted — recipients, subject, sender and logic. Formstack: GET /forms/{formId}/notifications.
| Argument | Type | Description |
|---|---|---|
| form_id* | integer | The form ID. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"form_id"
],
"properties": {
"form_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The form ID.",
"exclusiveMinimum": 0
}
}
}List entries respondents started but did not finish (Save & Resume / abandoned), with the same filters as submissions. Formstack: GET /form/{formId}/partialsubmission.
| Argument | Type | Description |
|---|---|---|
| order | string | Sort direction (default ASC). |
| form_id* | integer | The form ID. |
| keyword | string | Keyword to search. |
| max_time | string | Only entries created on or before this date/time: YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (Eastern Time). |
| min_time | string | Only entries created on or after this date/time: YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (Eastern Time). |
| page_size | integer | Items per page, 10-500 (Formstack default 50). |
| expand_data | boolean | Expand data with detailed field information. |
| page_number | integer | Page number, starting at 1. |
| pretty_name |
List what happens after a form is submitted — default processing, a custom message, or a redirect URL — with conditional logic. Formstack: GET /forms/{formId}/submitactions.
| Argument | Type | Description |
|---|---|---|
| form_id* | integer | The form ID. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"form_id"
],
"properties": {
"form_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The form ID.",
"exclusiveMinimum": 0
}
}
}List the webhooks that push a form's submissions to external URLs, with their payload settings. Formstack: GET /forms/{formId}/webhooks.
| Argument | Type | Description |
|---|---|---|
| form_id* | integer | The form ID. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"form_id"
],
"properties": {
"form_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The form ID.",
"exclusiveMinimum": 0
}
}
}Full-text search for submissions across every form in the account, e.g. by a person's email or name. Formstack: GET /submissions.
| Argument | Type | Description |
|---|---|---|
| order | string | Sort direction (default ASC). |
| search* | string | Search term to match against submission content. |
| page_size | integer | Items per page, 10-500 (Formstack default 50). |
| page_number | integer | Page number, starting at 1. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"search"
],
"properties": {
"order": {
"enum": [
"ASC",
"DESC"
],
"type": "string",
"description": "Sort direction (default ASC)."
},
"search": {
"type": "string",
"minLength": 1,
"description": "Search term to match against submission content."
},
"page_size": {
"type": "integer",
"maximum": 500,
"minimum": 10,
"description": "Items per page, 10-500 (Formstack default 50)."
},
"page_number": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
}
}
}Rename a form, move it to a folder, change its submit-button text, timezone or language, or activate/deactivate it (with a message shown while inactive). Reversible. Formstack: PUT /forms/{formId}.
| Argument | Type | Description |
|---|---|---|
| name | string | New form name. |
| folder | integer | Folder ID to move the form into. |
| form_id* | integer | The form ID. |
| language | string | Form language. |
| timezone | string | Form timezone. |
| is_active | boolean | Turn the live form on (true) or off (false). |
| disabled_message | string | Message shown while the form is inactive. |
| submit_button_title | string | Submit button text on the live form. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"form_id"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "New form name."
},
"folder": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Folder ID to move the form into."
},
"form_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The form ID.",
"exclusiveMinimum": 0
},
"language": {
"type": "string",
"description": "Form language."
},
"timezone": {
"type": "string",
"description": "Form timezone."
},
"is_active": {
"type": "boolean",
"description": "Turn the live form on (true) or off (false)."
},
"disabled_message": {
"type": "string",
"description": "Message shown while the form is inactive."
},
"submit_button_title": {
"type": "string",
"description": "Submit button text on the live form."
}
}
}Change field values on an existing submission, or mark it read/unread. Only the fields you pass are changed. Formstack: PUT /submissions/{submissionId}.
| Argument | Type | Description |
|---|---|---|
| read | boolean | Mark the submission read (true) or unread (false). |
| fields | array | Field values to change. |
| submission_id* | integer | The submission ID. |
| encryption_password | string | Only for forms with encryption enabled: the form's encryption password, sent as the X-FS-Encryption-Password header. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"submission_id"
],
"properties": {
"read": {
"type": "boolean",
"description": "Mark the submission read (true) or unread (false)."
},
"fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"value"
],
"properties": {
"id": {
"type": [
"string",
"number"
],
"description": "The field ID."
},
"value": {
"type": "object",
"description": "The field value as an object, shaped by field type: text/email/number/phone/textarea/datetime/radio → {\"value\":\"...\"}; name → {\"first\":\"...\",\"last\":\"...\"} (also prefix, middle, initial, suffix); address → {\"address\",\"address2\",\"city\",\"state\",\"zip\",\"country\"}; checkbox/select → {\"subvalues\":[{\"subvalue\":\"...\"}]}. Use formstack_list_form_fields for field IDs and types.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
},
"minItems": 1,
"description": "Field values to change."
},
"submission_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The submission ID.",
"exclusiveMinimum": 0
},
"encryption_password": {
"type": "string",
"description": "Only for forms with encryption enabled: the form's encryption password, sent as the X-FS-Encryption-Password header."
}
}
}| post_data_field_keys | string | How fields are keyed in the payload. |
| include_subfield_names | boolean | Include subfield names in the payload. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"form_id",
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "HTTPS URL that receives the submission data."
},
"name": {
"type": "string",
"description": "Webhook name."
},
"form_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The form ID.",
"exclusiveMinimum": 0
},
"hmac_secret": {
"type": "string",
"description": "Secret used to HMAC-sign each payload."
},
"content_type": {
"enum": [
"urlencoded",
"json"
],
"type": "string",
"description": "Payload encoding."
},
"error_emails": {
"type": "string",
"description": "Comma-separated emails to notify on delivery failure."
},
"file_transfer_type": {
"enum": [
"downloadLink",
"signedUrl",
"base64encode"
],
"type": "string",
"description": "How uploaded files are delivered in the payload."
},
"include_field_type": {
"type": "boolean",
"description": "Include each field's type in the payload."
},
"standardize_values": {
"type": "boolean",
"description": "Standardize field values for consistency."
},
"post_data_field_keys": {
"enum": [
"field_names",
"field_ids",
"api_friendly_field_names",
"internal_labels",
"internal_labels_api_friendly"
],
"type": "string",
"description": "How fields are keyed in the payload."
},
"include_subfield_names": {
"type": "boolean",
"description": "Include subfield names in the payload."
}
}
}| page_number | integer | Page number, starting at 1. |
| pretty_name | boolean | Include a human-readable name per submission (from its name/email field). |
| include_data | boolean | Include each submission's field data. |
| field_filters | array | Search specific fields by value (up to 10 criteria, AND-ed). |
| encryption_password | string | Only for forms with encryption enabled: the form's encryption password, sent as the X-FS-Encryption-Password header. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"form_id"
],
"properties": {
"order": {
"enum": [
"ASC",
"DESC"
],
"type": "string",
"description": "Sort direction (default ASC)."
},
"form_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The form ID.",
"exclusiveMinimum": 0
},
"keyword": {
"type": "string",
"description": "Match submissions by content across all fields."
},
"max_time": {
"type": "string",
"description": "Only entries created on or before this date/time: YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (Eastern Time)."
},
"min_time": {
"type": "string",
"description": "Only entries created on or after this date/time: YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (Eastern Time)."
},
"page_size": {
"type": "integer",
"maximum": 500,
"minimum": 10,
"description": "Items per page, 10-500 (Formstack default 50)."
},
"data_format": {
"enum": [
"legacy",
"standardized"
],
"type": "string",
"description": "Shape of data: legacy (object keyed by field id) or standardized (array of field objects)."
},
"expand_data": {
"type": "boolean",
"description": "Include expanded field data with parsed values."
},
"page_number": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"pretty_name": {
"type": "boolean",
"description": "Include a human-readable name per submission (from its name/email field)."
},
"include_data": {
"type": "boolean",
"description": "Include each submission's field data."
},
"field_filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"field_id",
"value"
],
"properties": {
"value": {
"type": "string",
"description": "The value to search for in that field."
},
"field_id": {
"type": [
"string",
"number"
],
"description": "The field ID to match."
}
}
},
"maxItems": 10,
"description": "Search specific fields by value (up to 10 criteria, AND-ed)."
},
"encryption_password": {
"type": "string",
"description": "Only for forms with encryption enabled: the form's encryption password, sent as the X-FS-Encryption-Password header."
}
}
}| boolean |
| Include pretty names. |
| include_data | boolean | Include each partial submission's data. |
| field_filters | array | Search specific fields by value (up to 10 criteria, AND-ed). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"form_id"
],
"properties": {
"order": {
"enum": [
"ASC",
"DESC"
],
"type": "string",
"description": "Sort direction (default ASC)."
},
"form_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The form ID.",
"exclusiveMinimum": 0
},
"keyword": {
"type": "string",
"description": "Keyword to search."
},
"max_time": {
"type": "string",
"description": "Only entries created on or before this date/time: YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (Eastern Time)."
},
"min_time": {
"type": "string",
"description": "Only entries created on or after this date/time: YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (Eastern Time)."
},
"page_size": {
"type": "integer",
"maximum": 500,
"minimum": 10,
"description": "Items per page, 10-500 (Formstack default 50)."
},
"expand_data": {
"type": "boolean",
"description": "Expand data with detailed field information."
},
"page_number": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"pretty_name": {
"type": "boolean",
"description": "Include pretty names."
},
"include_data": {
"type": "boolean",
"description": "Include each partial submission's data."
},
"field_filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"field_id",
"value"
],
"properties": {
"value": {
"type": "string",
"description": "The value to search for in that field."
},
"field_id": {
"type": [
"string",
"number"
],
"description": "The field ID to match."
}
}
},
"maxItems": 10,
"description": "Search specific fields by value (up to 10 criteria, AND-ed)."
}
}
}