MCP server setup for AI Form API

Updated 2026-10-30

AI Form API has 2 MCP servers. The creator server at https://aiformapi.com/mcp creates forms and reads responses. It needs your API key in a header. The fill server at https://aiformapi.com/mcp/fill needs no key. It lets an agent fill in a form for a person.

Both use Streamable HTTP.

ServerURLAuthFor
Creatorhttps://aiformapi.com/mcpAuthorization: Bearer afk_...You, the form owner
Fillhttps://aiformapi.com/mcp/fillNone. A fill token is an argument.The person filling a form

Creator server

Tools

The tools return rows and form definitions. They do not summarise. Your own model reads the rows and writes the summary.

ToolArgumentsDoes the same as
create_formtitle, description (optional), fields, settings (optional)POST /v1/forms
list_formslimit (optional), cursor (optional)GET /v1/forms
get_formform_idGET /v1/forms/{id}
update_formform_id, and any of title, description, fields, settingsPATCH /v1/forms/{id}
close_formform_idPOST /v1/forms/{id}/close
reopen_formform_idPOST /v1/forms/{id}/reopen
get_responsesform_id, and any of format, since, limit, cursor, orderGET /v1/forms/{id}/responses
add_webhookform_id, urlPOST /v1/forms/{id}/webhooks
get_usagenoneGET /v1/usage

The arguments are the same as the body or query of the REST call, with one difference: the form id is the argument form_id, not a path part. format is json (the default) or csv, and order is asc or desc. In update_form, fields replaces the whole list and settings merges key by key.

A tool returns its result as JSON text. A list tool returns data and next_cursor. get_responses with format set to csv returns the CSV text, with a last line # next_cursor: ... when there are more rows. A failed call comes back as a tool error that holds the same JSON error body as the REST API, so the code is the one listed in Errors.

There is no tool to delete a form. Use the API or the dashboard for that.

Calls through MCP count against the same limit as REST calls for your key: 30 per minute and 1,000 per day on the free plan. See Rate limits and quotas.

Which apps work today

AppCreator serverFill server
Claude CodeYes, with a headerYes
CursorYes, with a headerYes
VS CodeYes, with a headerYes
Claude DesktopYes, through mcp-remote with a headerYes, as a custom connector
n8nYes, with a headerYes
Claude.aiNot yet. It needs OAuth, which is planned.Yes, as a custom connector
ChatGPTNot yet. It needs OAuth, which is planned.Yes, as a custom connector

Claude Code

bash
claude mcp add --transport http aiformapi https://aiformapi.com/mcp \
  --header "Authorization: Bearer $AIFORMAPI_KEY"

This stores your key in your local Claude Code config. To keep the key out of any file you share, use a project .mcp.json that reads an environment variable:

json
{
  "mcpServers": {
    "aiformapi": {
      "type": "http",
      "url": "https://aiformapi.com/mcp",
      "headers": {
        "Authorization": "Bearer ${AIFORMAPI_KEY}"
      }
    }
  }
}

Run /mcp inside Claude Code to see the connection. A wrong key shows as failed with status 401. Then ask: "List my AI Form API forms."

Cursor

Put this in .cursor/mcp.json for one project, or ~/.cursor/mcp.json for all projects. Set AIFORMAPI_KEY in your shell profile first.

json
{
  "mcpServers": {
    "aiformapi": {
      "url": "https://aiformapi.com/mcp",
      "headers": {
        "Authorization": "Bearer ${env:AIFORMAPI_KEY}"
      }
    }
  }
}

VS Code

Put this in .vscode/mcp.json, or run MCP: Open User Configuration for a profile-wide file. VS Code uses the key servers, not mcpServers. It asks for the key the first time the server starts and stores it.

json
{
  "inputs": [
    {
      "type": "promptString",
      "id": "aiformapi-key",
      "description": "AI Form API key",
      "password": true
    }
  ],
  "servers": {
    "aiformapi": {
      "type": "http",
      "url": "https://aiformapi.com/mcp",
      "headers": {
        "Authorization": "Bearer ${input:aiformapi-key}"
      }
    }
  }
}

Claude Desktop (through mcp-remote)

Claude Desktop reads local servers from claude_desktop_config.json. The mcp-remote package turns a remote server with a header into a local one. You need Node.js installed.

  1. Open the file. On macOS it is ~/Library/Application Support/Claude/claude_desktop_config.json. On Windows it is %APPDATA%\Claude\claude_desktop_config.json. In Claude Desktop you can reach it through Settings, Developer, Edit Config.
  2. Add the server. Keep the space inside the environment variable, not inside args, so it works on Windows too.
json
{
  "mcpServers": {
    "aiformapi": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://aiformapi.com/mcp",
        "--header",
        "Authorization:${AIFORMAPI_AUTH}"
      ],
      "env": {
        "AIFORMAPI_AUTH": "Bearer afk_your_key_here"
      }
    }
  }
}
  1. Quit Claude Desktop completely and open it again.

This file holds your key in plain text. Do not share it or commit it.

n8n

Use the MCP Client Tool node and connect it to an AI Agent node.

  1. Set the endpoint to https://aiformapi.com/mcp.
  2. Set the transport to HTTP Streamable.
  3. Under Authentication, choose Bearer and paste your key. If you use a header credential instead, name the header Authorization and set the value to Bearer afk_your_key_here.
  4. Under Tools to Include, pick all tools or only the ones you need.

Check the field names in your n8n version.

Fill server

The fill server has no login. It has 2 tools.

ToolArgumentsDoes
get_fill_formfill_tokenReturns the form and instructions. Same as GET /v1/fill/{token}.
submit_fillfill_token, answersStores the answers. Same as POST /v1/fill/{token}.

fill_token is the code from the prompt, which starts with fil_. answers is an object that maps field ids to values. A successful submit_fill returns response_id, receipt and submitted_at. An invalid answer comes back as a tool error with the code invalid_answers.

The token rules are the same as for HTTP: 60 minutes, 1 successful use, 5 attempts. The server allows 20 calls per minute for each IP address. The person gets the token by pressing the card on the form page, and the agent finds it inside the prompt. See Agent fill and Fill API.

Claude.ai and Claude Desktop

Claude adds remote servers as custom connectors.

  1. Go to Customize, then Connectors.
  2. Press + Add, then Add custom connector.
  3. Enter a name, for example AI Form API fill.
  4. Enter the URL https://aiformapi.com/mcp/fill.
  5. Choose No sign in, because this server has no login.
  6. Press Add.
  7. In a chat, press +, then Connectors, and switch the connector on for that chat.

Anthropic's page says custom connectors are available on Free, Pro, Max, Team and Enterprise plans, that Free plans are limited to one custom connector, and that only an owner can add one on Team and Enterprise plans.

ChatGPT

ChatGPT adds remote servers in developer mode. Plain MCP servers with no sign in are allowed.

  1. Turn on developer mode in ChatGPT settings.
  2. Create a connector.
  3. Enter a name and the URL https://aiformapi.com/mcp/fill.
  4. Choose No authentication.
  5. Confirm that you trust the connector and create it.
  6. In a new chat, enable the connector from the + menu.

These steps come from third-party guides. Menu names, plan availability and the location of the developer mode switch change often. Check OpenAI's current help page before you publish exact menu names.

Claude Code, Cursor, VS Code and n8n

Add the fill server the same way as the creator server, without the header.

bash
claude mcp add --transport http aiformapi-fill https://aiformapi.com/mcp/fill
json
{
  "mcpServers": {
    "aiformapi-fill": {
      "url": "https://aiformapi.com/mcp/fill"
    }
  }
}

Try it

After you connect the creator server, say this to your agent:

Make an RSVP form for Friday's dinner. Ask for name, whether they can come (yes, no, maybe) and how many guests. Give me the link.

The agent calls create_form and replies with the public_url. Later you can ask: "Who said yes?" The agent calls get_responses and reads the rows.

Troubleshooting

What you seeWhat to do
401 or "failed" in the clientThe key is wrong or has a typo. Copy it again or rotate it in the dashboard.
rate_limitedWait for the Retry-After seconds. The creator server shares the 30 per minute limit with REST.
The tool list is empty in Claude DesktopQuit the app fully and reopen it. Check that Node.js is installed and that the JSON is valid.
blocked_field from create_formA field asks for a secret such as a password or card number. See Forms and fields.

Sources (read 2026-10-30)