Formspark MCP by usefulapi

List forms and submissions, and create or update forms and their notifications in Formspark.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
89%
Naming quality
75%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (2)

  • LOWTool 'formspark_list_form_submissions' name length outside 3-30 rangein formspark_list_form_submissions
  • LOWTool 'formspark_list_workspace_submissions' name length outside 3-30 rangein formspark_list_workspace_submissions

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,494Tokens (tool definitions)
~1.4 KBTypical response size
Moderate attention impact (1.17% 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": {
    "formspark": {
      "url": "https://formspark.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

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

What it can do

Tool inventory

Tools (8)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢formspark_whoami

Describe the API token in use: its name, scopes, expiry and last use. Good first call to see what this connection can read. Formspark API: GET /me.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢formspark_list_workspaces(limit, startingAfter)

List the workspaces this token can reach, with plan (FREE or an upgraded plan), submission quota and timestamps. Use the ids in the other tools. Formspark API: GET /workspaces.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Page size, 1 to 100 (default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "startingAfter": {
      "description": "Cursor: the nextCursor of the previous page. Opaque; do not build one.",
      "type": "string",
      "minLength": 1,
      "maxLength": 512
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢formspark_list_forms(workspaceId, limit, startingAfter)

List the forms in one workspace, with name, notification emails, threading and spam settings. Formspark API: GET /forms.

Input Schema

{
  "type": "object",
  "properties": {
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "The workspace id (from formspark_list_workspaces)."
    },
    "limit": {
      "description": "Page size, 1 to 100 (default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "startingAfter": {
      "description": "Cursor: the nextCursor of the previous page. Opaque; do not build one.",
      "type": "string",
      "minLength": 1,
      "maxLength": 512
    }
  },
  "required": [
    "workspaceId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢formspark_get_form(formId)

Get one form by id, including its settings and notification emails. Captcha secrets are never returned. Formspark API: GET /forms/{formId}.

Input Schema

{
  "type": "object",
  "properties": {
    "formId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "The form id (from formspark_list_forms)."
    }
  },
  "required": [
    "formId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢formspark_list_form_submissions(formId, limit, startingAfter, search)

List the newest submissions of one form, with their field values and timestamps. Pass nextCursor back as startingAfter for the next page. Formspark API: GET /forms/{formId}/submissions.

Input Schema

{
  "type": "object",
  "properties": {
    "formId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "The form id (from formspark_list_forms)."
    },
    "limit": {
      "description": "Page size, 1 to 100 (default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "startingAfter": {
      "description": "Cursor: the nextCursor of the previous page. Opaque; do not build one.",
      "type": "string",
      "minLength": 1,
      "maxLength": 512
    },
    "search": {
      "description": "Text to search for in the submissions.",
      "type": "string",
      "minLength": 1,
      "maxLength": 256
    }
  },
  "required": [
    "formId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢formspark_list_workspace_submissions(workspaceId, limit, startingAfter, search)

List the newest submissions across every form in one workspace. Pass nextCursor back as startingAfter for the next page. Formspark API: GET /workspaces/{workspaceId}/submissions.

Input Schema

{
  "type": "object",
  "properties": {
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "The workspace id (from formspark_list_workspaces)."
    },
    "limit": {
      "description": "Page size, 1 to 100 (default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "startingAfter": {
      "description": "Cursor: the nextCursor of the previous page. Opaque; do not build one.",
      "type": "string",
      "minLength": 1,
      "maxLength": 512
    },
    "search": {
      "description": "Text to search for in the submissions.",
      "type": "string",
      "minLength": 1,
      "maxLength": 256
    }
  },
  "required": [
    "workspaceId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴formspark_create_form(workspaceId, name, description, notificationEmails, emailThreading)

Create a form in a workspace with a name, an optional description and notification emails. Needs an upgraded workspace and the forms:write scope. Formspark API: POST /forms.

Input Schema

{
  "type": "object",
  "properties": {
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "The workspace id (from formspark_list_workspaces)."
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "The form name, shown in the dashboard."
    },
    "description": {
      "description": "A short description for the team.",
      "anyOf": [
        {
          "type": "string",
          "maxLength": 512
        },
        {
          "type": "null"
        }
      ]
    },
    "notificationEmails": {
      "description": "Addresses that get an email for each submission.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 128
      }
    },
    "emailThreading": {
      "description": "Group the notification emails into one thread.",
      "type": "boolean"
    }
  },
  "required": [
    "workspaceId",
    "name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡formspark_update_form(formId, name, description, notificationEmails, emailThreading)

Change a form's name, description, notification emails or threading. Sends only the fields you pass; null clears a text field. Formspark API: PATCH /forms/{formId}.

Input Schema

{
  "type": "object",
  "properties": {
    "formId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "The form id (from formspark_list_forms)."
    },
    "name": {
      "description": "The new form name.",
      "type": "string",
      "minLength": 1,
      "maxLength": 128
    },
    "description": {
      "description": "The new description, or null to clear it.",
      "anyOf": [
        {
          "type": "string",
          "maxLength": 512
        },
        {
          "type": "null"
        }
      ]
    },
    "notificationEmails": {
      "description": "The full new list of notification addresses (replaces the list).",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 128
      }
    },
    "emailThreading": {
      "description": "Group the notification emails into one thread.",
      "type": "boolean"
    }
  },
  "required": [
    "formId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded8 tools