MCP server setup for AI Form API
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.
| Server | URL | Auth | For |
|---|---|---|---|
| Creator | https://aiformapi.com/mcp | Authorization: Bearer afk_... | You, the form owner |
| Fill | https://aiformapi.com/mcp/fill | None. 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.
| Tool | Arguments | Does the same as |
|---|---|---|
create_form | title, description (optional), fields, settings (optional) | POST /v1/forms |
list_forms | limit (optional), cursor (optional) | GET /v1/forms |
get_form | form_id | GET /v1/forms/{id} |
update_form | form_id, and any of title, description, fields, settings | PATCH /v1/forms/{id} |
close_form | form_id | POST /v1/forms/{id}/close |
reopen_form | form_id | POST /v1/forms/{id}/reopen |
get_responses | form_id, and any of format, since, limit, cursor, order | GET /v1/forms/{id}/responses |
add_webhook | form_id, url | POST /v1/forms/{id}/webhooks |
get_usage | none | GET /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
| App | Creator server | Fill server |
|---|---|---|
| Claude Code | Yes, with a header | Yes |
| Cursor | Yes, with a header | Yes |
| VS Code | Yes, with a header | Yes |
| Claude Desktop | Yes, through mcp-remote with a header | Yes, as a custom connector |
| n8n | Yes, with a header | Yes |
| Claude.ai | Not yet. It needs OAuth, which is planned. | Yes, as a custom connector |
| ChatGPT | Not yet. It needs OAuth, which is planned. | Yes, as a custom connector |
Claude Code
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:
{
"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.
{
"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.
{
"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.
- 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. - Add the server. Keep the space inside the environment variable, not inside
args, so it works on Windows too.
{
"mcpServers": {
"aiformapi": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://aiformapi.com/mcp",
"--header",
"Authorization:${AIFORMAPI_AUTH}"
],
"env": {
"AIFORMAPI_AUTH": "Bearer afk_your_key_here"
}
}
}
}- 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.
- Set the endpoint to
https://aiformapi.com/mcp. - Set the transport to HTTP Streamable.
- Under Authentication, choose Bearer and paste your key. If you use a header credential instead, name the header
Authorizationand set the value toBearer afk_your_key_here. - 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.
| Tool | Arguments | Does |
|---|---|---|
get_fill_form | fill_token | Returns the form and instructions. Same as GET /v1/fill/{token}. |
submit_fill | fill_token, answers | Stores 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.
- Go to Customize, then Connectors.
- Press + Add, then Add custom connector.
- Enter a name, for example
AI Form API fill. - Enter the URL
https://aiformapi.com/mcp/fill. - Choose No sign in, because this server has no login.
- Press Add.
- 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.
- Turn on developer mode in ChatGPT settings.
- Create a connector.
- Enter a name and the URL
https://aiformapi.com/mcp/fill. - Choose No authentication.
- Confirm that you trust the connector and create it.
- 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.
claude mcp add --transport http aiformapi-fill https://aiformapi.com/mcp/fill{
"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 see | What to do |
|---|---|
| 401 or "failed" in the client | The key is wrong or has a typo. Copy it again or rotate it in the dashboard. |
rate_limited | Wait for the Retry-After seconds. The creator server shares the 30 per minute limit with REST. |
| The tool list is empty in Claude Desktop | Quit the app fully and reopen it. Check that Node.js is installed and that the JSON is valid. |
blocked_field from create_form | A field asks for a secret such as a password or card number. See Forms and fields. |
Sources (read 2026-10-30)
- Claude Code MCP documentation
- Cursor MCP documentation
- VS Code MCP configuration reference
- Model Context Protocol: connect Claude Desktop to servers
- mcp-remote on GitHub
- Anthropic: custom connectors using remote MCP
- n8n MCP Client Tool node
- ChatGPT (third-party guides, not OpenAI): Speakeasy, Dataddo