Superforms
Human-input bridge for AI agents with voice-first answer links, MCP tools, and HTTP APIs.
Should I use this
Quality & Safety
Findings (1)
- LOWin join_creation_session
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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-httpWhat it can do
Tool inventory
Tools (11)
🟡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
Evidence