Superforms

Human-input bridge for AI agents with voice-first answer links, MCP tools, and HTTP APIs.

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
79%
Naming quality
95%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'join_creation_session' description lacks action verbin join_creation_session

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,378Tokens (tool definitions)
~2.2 KBTypical response size
Moderate attention impact (1.86% 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": {
    "superforms": {
      "url": "https://superforms.co/mcp"
    }
  }
}

Remote endpoints

https://superforms.co/mcpstreamable-http

What it can do

Tool inventory

Tools (11)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡create_form(prompt, questions, goal, context, questionContext, ...)

Publish a voice-first form link immediately after creator confirmation, collect human answers, and pipe responses back to the agent.

Input Schema

{
  "type": "object",
  "properties": {
    "prompt": {
      "type": "string",
      "description": "Plain-English ask or request. Use only when explicit questions are not already known."
    },
    "questions": {
      "type": "array",
      "description": "Explicit questions to ask the respondent. Use this whenever questions already exist; preserve them exactly.",
      "items": {
        "anyOf": [
          {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "text": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "context": {
                "type": "string"
              }
            },
            "required": [
              "text"
            ],
            "additionalProperties": false
          }
        ]
      }
    },
    "goal": {
      "type": "string"
    },
    "context": {
      "type": "string",
      "description": "Private context for smart follow-ups. Summarize relevant non-sensitive host-conversation context and append any extra context the creator provides. Never shown to respondents."
    },
    "questionContext": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "creationSessionUrl": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "persistent": {
      "type": "boolean"
    },
    "followUpMode": {
      "type": "string",
      "enum": [
        "none",
        "smart",
        "deep_dive"
      ],
      "description": "For exactly one question, set this only after asking the creator \"Want smart follow-up questions?\" Use deep_dive for yes or none for no. For multiple questions, use none unless explicitly requested."
    },
    "max_followups_per_question": {
      "type": "number",
      "description": "Optional compatibility setting. Omit for adaptive one-question smart follow-ups."
    },
    "max_total_questions": {
      "type": "number",
      "description": "Optional compatibility setting. Omit for adaptive one-question smart follow-ups."
    },
    "responseMode": {
      "type": "string",
      "enum": [
        "voice_preferred",
        "text_only",
        "voice_only"
      ]
    },
    "responseLimit": {
      "type": "string",
      "enum": [
        "one",
        "multiple"
      ],
      "description": "Use \"one\" for a form intended for one named person/client. Use \"multiple\" for forms, surveys, feedback, customers, users, and public/embedded links."
    }
  },
  "additionalProperties": false
}
🟡create_feedback_form(prompt, questions, goal, context, questionContext, ...)

Publish a voice-first feedback, cancellation, feature request, survey, or research form immediately after creator confirmation, with optional smart follow-ups.

Input Schema

{
  "type": "object",
  "properties": {
    "prompt": {
      "type": "string",
      "description": "Plain-English ask or request. Use only when explicit questions are not already known."
    },
    "questions": {
      "type": "array",
      "description": "Explicit questions to ask the respondent. Use this whenever questions already exist; preserve them exactly.",
      "items": {
        "anyOf": [
          {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "text": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "context": {
                "type": "string"
              }
            },
            "required": [
              "text"
            ],
            "additionalProperties": false
          }
        ]
      }
    },
    "goal": {
      "type": "string"
    },
    "context": {
      "type": "string",
      "description": "Private context for smart follow-ups. Summarize relevant non-sensitive host-conversation context and append any extra context the creator provides. Never shown to respondents."
    },
    "questionContext": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "creationSessionUrl": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "persistent": {
      "type": "boolean"
    },
    "followUpMode": {
      "type": "string",
      "enum": [
        "none",
        "smart",
        "deep_dive"
      ],
      "description": "For exactly one question, set this only after asking the creator \"Want smart follow-up questions?\" Use deep_dive for yes or none for no. For multiple questions, use none unless explicitly requested."
    },
    "max_followups_per_question": {
      "type": "number",
      "description": "Optional compatibility setting. Omit for adaptive one-question smart follow-ups."
    },
    "max_total_questions": {
      "type": "number",
      "description": "Optional compatibility setting. Omit for adaptive one-question smart follow-ups."
    },
    "responseMode": {
      "type": "string",
      "enum": [
        "voice_preferred",
        "text_only",
        "voice_only"
      ]
    },
    "responseLimit": {
      "type": "string",
      "enum": [
        "one",
        "multiple"
      ],
      "description": "Use \"one\" for a form intended for one named person/client. Use \"multiple\" for forms, surveys, feedback, customers, users, and public/embedded links."
    }
  },
  "additionalProperties": false
}
🟡create_ask(prompt, questions, goal, context, questionContext, ...)

Create a voice-first Superforms answer link for human input. Backward-compatible alias for create_form.

Input Schema

{
  "type": "object",
  "properties": {
    "prompt": {
      "type": "string",
      "description": "Plain-English ask or request. Use only when explicit questions are not already known."
    },
    "questions": {
      "type": "array",
      "description": "Explicit questions to ask the respondent. Use this whenever questions already exist; preserve them exactly.",
      "items": {
        "anyOf": [
          {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "text": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "context": {
                "type": "string"
              }
            },
            "required": [
              "text"
            ],
            "additionalProperties": false
          }
        ]
      }
    },
    "goal": {
      "type": "string"
    },
    "context": {
      "type": "string",
      "description": "Private context for smart follow-ups. Summarize relevant non-sensitive host-conversation context and append any extra context the creator provides. Never shown to respondents."
    },
    "questionContext": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "creationSessionUrl": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "persistent": {
      "type": "boolean"
    },
    "followUpMode": {
      "type": "string",
      "enum": [
        "none",
        "smart",
        "deep_dive"
      ],
      "description": "For exactly one question, set this only after asking the creator \"Want smart follow-up questions?\" Use deep_dive for yes or none for no. For multiple questions, use none unless explicitly requested."
    },
    "max_followups_per_question": {
      "type": "number",
      "description": "Optional compatibility setting. Omit for adaptive one-question smart follow-ups."
    },
    "max_total_questions": {
      "type": "number",
      "description": "Optional compatibility setting. Omit for adaptive one-question smart follow-ups."
    },
    "responseMode": {
      "type": "string",
      "enum": [
        "voice_preferred",
        "text_only",
        "voice_only"
      ]
    },
    "responseLimit": {
      "type": "string",
      "enum": [
        "one",
        "multiple"
      ],
      "description": "Use \"one\" for a form intended for one named person/client. Use \"multiple\" for forms, surveys, feedback, customers, users, and public/embedded links."
    }
  },
  "additionalProperties": false
}
⚪join_creation_session(creationSessionUrl, agentName)

Join a Superforms homepage creation handoff session before creating the real form. Pass agentName with the client name, such as Codex, Claude Code, Claude, ChatGPT, or Cursor.

Input Schema

{
  "type": "object",
  "properties": {
    "creationSessionUrl": {
      "type": "string"
    },
    "agentName": {
      "type": "string"
    }
  },
  "required": [
    "creationSessionUrl"
  ],
  "additionalProperties": false
}
🟡update_creation_session(creationSessionUrl, title, goal, context, questions, ...)

Update a homepage creation handoff draft with the current form title, questions, and settings before the user clicks Set live.

Input Schema

{
  "type": "object",
  "properties": {
    "creationSessionUrl": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "goal": {
      "type": "string"
    },
    "context": {
      "type": "string",
      "description": "Private smart-follow-up context. Summarize relevant non-sensitive host-conversation context and append any extra context the creator provides. Never shown to respondents."
    },
    "questions": {
      "type": "array",
      "description": "Current draft questions to show in the live form preview.",
      "items": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "text": {
                "type": "string"
              },
              "context": {
                "type": "string"
              }
            },
            "required": [
              "text"
            ],
            "additionalProperties": false
          }
        ]
      }
    },
    "followUpMode": {
      "type": "string",
      "enum": [
        "none",
        "smart",
        "deep_dive"
      ]
    },
    "max_followups_per_question": {
      "type": "number",
      "description": "Use 0 by default. Use 1 only when smart follow-ups are explicitly requested."
    },
    "max_total_questions": {
      "type": "number",
      "description": "Use 20 for deep-dive interviews."
    },
    "responseMode": {
      "type": "string",
      "enum": [
        "voice_preferred",
        "text_only",
        "voice_only"
      ]
    },
    "responseLimit": {
      "type": "string",
      "enum": [
        "one",
        "multiple"
      ],
      "description": "Use one for a named person/client. Use multiple for feedback forms, surveys, customers, users, and public links."
    }
  },
  "required": [
    "creationSessionUrl"
  ],
  "additionalProperties": false
}
🟢get_responses(askId, agentToken, since)

Fetch persisted raw responses for a Superforms ask. This is the MCP equivalent of the HTTP bridge answers endpoint.

Input Schema

{
  "type": "object",
  "properties": {
    "askId": {
      "type": "string"
    },
    "agentToken": {
      "type": "string"
    },
    "since": {
      "type": "string"
    }
  },
  "required": [
    "askId",
    "agentToken"
  ],
  "additionalProperties": false
}
🟢list_asks(agentToken)

List recent asks for a provided private agent token.

Input Schema

{
  "type": "object",
  "properties": {
    "agentToken": {
      "type": "string"
    }
  },
  "required": [
    "agentToken"
  ],
  "additionalProperties": false
}
🟢watch_ask(url, askId, agentToken, since, timeoutMs)

Wait up to two minutes and return as soon as an individual answer is saved, including answers received while an agent was reconnecting and while the form remains in progress. The wait ends when this call returns; nothing keeps watching afterward. Pass the returned nextSince as since to continue without repeating answers; the HTTP bridge also exposes an SSE stream endpoint.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string"
    },
    "askId": {
      "type": "string"
    },
    "agentToken": {
      "type": "string"
    },
    "since": {
      "type": "string",
      "description": "ISO timestamp cursor from the last response the agent processed."
    },
    "timeoutMs": {
      "type": "number",
      "description": "Maximum wait in milliseconds, capped at 120000."
    }
  },
  "required": [
    "url",
    "agentToken"
  ],
  "additionalProperties": false
}
🟢list_my_forms

List forms owned by the connected Superforms account, including response counts and latest response timestamps.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢get_my_form_responses(askId, since)

Read persisted raw responses for a form owned by the connected Superforms account. No per-form agent token is required.

Input Schema

{
  "type": "object",
  "properties": {
    "askId": {
      "type": "string"
    },
    "since": {
      "type": "string",
      "description": "Optional ISO timestamp cursor."
    }
  },
  "required": [
    "askId"
  ],
  "additionalProperties": false
}
🟢watch_my_form_responses(askId, since, timeoutMs)

Return any existing individual answers immediately, or wait briefly until the respondent saves their next answer, even while the form remains in progress.

Input Schema

{
  "type": "object",
  "properties": {
    "askId": {
      "type": "string"
    },
    "since": {
      "type": "string",
      "description": "Optional ISO timestamp cursor."
    },
    "timeoutMs": {
      "type": "number",
      "description": "Maximum wait in milliseconds, capped at 120000."
    }
  },
  "required": [
    "askId"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded11 tools
verifiedversion not recorded11 tools
verifiedversion not recorded11 tools
verifiedversion not recorded11 tools
verifiedversion not recorded11 tools
verifiedversion not recorded11 tools