Esc

Start here

  • Create an accountStart here
  • Start from a template or AIStart here
  • Add and edit questionsStart here
  • Publish a formStart here
  • Share the linkStart here

MCP server

Connect Claude, ChatGPT, Cursor, or any MCP client to Deoochform and create forms, edit fields, and read responses in chat.


Deoochform ships an MCP server, a remote Model Context Protocol endpoint that turns any MCP capable AI assistant into a form builder. You describe the form you want in chat; the assistant calls create_form; you get a public link back. When the responses come in, the same assistant reads them with list_submissions.

The endpoint is https://deoochform.com/api/mcp. It speaks streamable HTTP, authenticates with OAuth (no API key to paste), and is published to the MCP Registry as io.github.musaib001/deooch-forms.

Connecting a client

Every client is the same three steps: add a remote/custom MCP connector, paste the URL, sign in when the browser opens.

  1. Claude: Settings → Connectors → Add custom connector → paste https://deoochform.com/api/mcp.
  2. ChatGPT: search deooch in the app directory and hit Install plugin; no URL to paste. Failing that, Settings → Connectors → Create custom connector, which needs a plan that supports them (Plus, Pro, or Business) with developer mode enabled.
  3. Cursor, Windsurf, Zed, and other config-file clients, add the server to the client's MCP config:
{
  "mcpServers": {
    "deooch-forms": {
      "url": "https://deoochform.com/api/mcp"
    }
  }
}

The first tool call opens a browser for sign in. After you approve, the connection appears on your Connected apps page and the client stores its own token. Per client screenshots and the errors people actually hit live on the MCP connector walkthrough.

Tool reference

Ten tools, no more: five for forms, two for responses, three for invitations. list_forms is usually the first call, most of the others take a formId, and this is where you get one.

ToolWhat it doesInputReturns
list_templatesBrowse the template library to start a form from.query?templates[]: slug, name, description
create_formCreate a form and get its public link back.title, description?, fields[]formId, slug, publicUrl
update_formChange a form's title, description, fields, or status (draft / published / closed).formId, title?, description?, fields[]?, status?formId, slug, publicUrl, updatedAt
get_formRead one form's full definition, including every field.formIdformId, title, description, fields[], status, createdAt, updatedAt
list_formsList forms in the workspace, newest first.status?, limit (default 20, max 100)forms[]: formId, title, status, submissionCount, createdAt
list_submissionsList responses to a form.formId, limit (default 50, max 200)submissions[]: submissionId, answers, submittedAt
get_submissionRead one response by id.submissionIdsubmissionId, formId, answers, submittedAt
list_invitation_templatesBrowse the invitation designs.nonetemplates[]: slug, name
create_invitationCreate an invitation from a template.template, detailsinvitationId
publish_invitationPublish an invitation and get its public link back.invitationIdinvitationId, status, publicUrl

Editing an existing form

update_form replaces the whole fields array rather than patching it. Read the form first with get_form, apply the edit to the array you got back, and send the full array. Assistants handle this correctly on their own, it matters if you are driving the tools programmatically.

Field shape

Each entry in fields is an object with id, type, label, required, order, and optionally placeholder, helpText, and options for choice fields. See field types for the full list of 14 types.

{
  "title": "Customer feedback",
  "fields": [
    { "id": "name",   "type": "text",     "label": "Your name",  "required": true,  "order": 0 },
    { "id": "rating", "type": "radio",    "label": "How did we do?", "required": true, "order": 1,
      "options": ["Great", "Fine", "Not great"] },
    { "id": "notes",  "type": "textarea", "label": "Anything else?", "required": false, "order": 2 }
  ]
}

What the connector can and cannot reach

  • Can: create forms, edit fields, publish or close a form, list forms, read submissions.
  • Cannot: delete forms, touch billing, add or remove workspace members, or reach another workspace.
  • Acts as you: the connection carries your role and plan. Free plan connections are scoped to forms you created.

Revoke a connection from Connected apps in Settings and it stops working immediately.

Common errors

  • 401 Unauthorized: the connection was revoked or sign in never finished. Remove the connector and add it again.
  • Form not found: wrong formId, the form was deleted, or it belongs to a teammate and you are on the Free plan. Call list_forms and use an id from that list.
  • Connection closed / server not responding: almost always a malformed URL. It must be exactly https://deoochform.com/api/mcp, with the /api/mcp path and https.
  • Plan limit: Free accounts get 5 forms. Delete one or upgrade.

Frequently asked questions

What is an AI form MCP connector?
An MCP connector is a server that speaks the Model Context Protocol, an open standard for giving AI assistants access to external tools. A form MCP connector lets an assistant such as Claude or ChatGPT create forms, edit their fields, and read the responses without you opening a dashboard. Deoochform exposes ten such tools at https://deoochform.com/api/mcp.
Which AI assistants work with Deoochform?
Any client that supports remote MCP servers over HTTP: Claude (desktop, web, and Claude Code), ChatGPT, Cursor, Windsurf, Zed, and the many smaller MCP clients. In ChatGPT we're listed in the app directory, so you can install us by name; everywhere else you add the same URL. Sign in happens in the browser via OAuth.
Do I need an API key?
No. The connector uses OAuth, so the first call opens a browser, you sign in and approve, and the client stores the token itself. There is no key to paste or keep in a config file. You can revoke the connection at any time from the Connected apps page.
Can the assistant delete my forms or see my billing?
No. The ten tools are the entire surface: form templates, forms, their submissions, and invitations. There is no delete tool, and nothing exposes billing, workspace members, or other workspaces. update_form can change a form's status to closed, which stops new responses without destroying anything.
Is the connection per user or per workspace?
Per user. The connection acts as you, with your role and your plan. Teammates connect with their own accounts. On the Free plan a connection only reaches forms you created; Owner and Member roles on paid plans reach the whole workspace.
Is Deoochform in the MCP Registry?
Yes. It is published as io.github.musaib001/deooch-forms. Clients that browse the registry can install it from there; everyone else adds https://deoochform.com/api/mcp as a custom connector.

Next

Ready to try it? Create a free account, 5 forms and 100 submissions, no card.