AirTable Create / Upsert nodes not working via MCP Server Trigger

AIrTable Get and Search nodes are working just fine but Create, Update or Upsert nodes keep failing with error when executed via Claude Desktop using the n8n MCP Server Trigger.

The Base Id and Table Id are defined automatically by AI for all nodes and this works fine for the GET and Search nodes.

  • {{ $fromAI(‘Base’, ``, ‘string’) }}
  • {{ $fromAI(‘Table’, ``, ‘string’) }}

What is the error message (if any)?

See below in last node output

Please share your workflow

The output returned by the last node

{
  "errorMessage": "Your request is invalid or could not be processed by the service",
  "errorDetails": {},
  "n8nDetails": {
    "time": "11/06/2025, 21:03:05",
    "n8nVersion": "1.90.2 (Self Hosted)",
    "binaryDataMode": "default",
    "cause": {
      "message": "Your request is invalid or could not be processed by the service",
      "timestamp": 1749632585807,
      "name": "NodeApiError",
      "description": "Unknown field name: \"Base\"",
      "context": {},
      "cause": {
        "message": "422 - {\"error\":{\"type\":\"UNKNOWN_FIELD_NAME\",\"message\":\"Unknown field name: \\\"Base\\\"\"}}",
        "name": "AxiosError",
        "stack": "AxiosError: Request failed with status code 422\n    at settle (/usr/local/lib/node_modules/n8n/node_modules/axios/lib/core/settle.js:19:12)\n    at IncomingMessage.handleStreamEnd (/usr/local/lib/node_modules/n8n/node_modules/axios/lib/adapters/http.js:599:11)\n    at IncomingMessage.emit (node:events:536:35)\n    at endReadableNT (node:internal/streams/readable:1698:12)\n    at processTicksAndRejections (node:internal/process/task_queues:82:21)\n    at Axios.request (/usr/local/lib/node_modules/n8n/node_modules/axios/lib/core/Axios.js:45:41)\n    at processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at invokeAxios (/usr/local/lib/node_modules/n8n/node_modules/n8n-core/dist/execution-engine/node-execution-context/utils/request-helper-functions.js:173:16)\n    at proxyRequestToAxios (/usr/local/lib/node_modules/n8n/node_modules/n8n-core/dist/execution-engine/node-execution-context/utils/request-helper-functions.js:513:26)\n    at SupplyDataContext.requestWithAuthentication (/usr/local/lib/node_modules/n8n/node_modules/n8n-core/dist/execution-engine/node-execution-context/utils/request-helper-functions.js:974:16)\n    at SupplyDataContext.requestWithAuthentication (/usr/local/lib/node_modules/n8n/node_modules/n8n-core/dist/execution-engine/node-execution-context/utils/request-helper-functions.js:1147:20)\n    at SupplyDataContext.apiRequest (/usr/local/lib/node_modules/n8n/node_modules/n8n-nodes-base/dist/nodes/Airtable/v2/transport/index.js:47:10)\n    at SupplyDataContext.execute (/usr/local/lib/node_modules/n8n/node_modules/n8n-nodes-base/dist/nodes/Airtable/v2/actions/record/create.operation.js:80:28)\n    at SupplyDataContext.router (/usr/local/lib/node_modules/n8n/node_modules/n8n-nodes-base/dist/nodes/Airtable/v2/actions/router.js:57:22)\n    at SupplyDataContext.execute (/usr/local/lib/node_modules/n8n/node_modules/n8n-nodes-base/dist/nodes/Airtable/v2/AirtableV2.node.js:41:12)\n    at /usr/local/lib/node_modules/n8n/node_modules/n8n-core/dist/execution-engine/node-execution-context/utils/get-input-connection-data.js:15:28\n    at DynamicStructuredTool.func (/usr/local/lib/node_modules/n8n/node_modules/n8n-core/dist/execution-engine/node-execution-context/utils/create-node-as-tool.js:82:35)\n    at DynamicStructuredTool.call (/usr/local/lib/node_modules/n8n/node_modules/@langchain/core/dist/tools/index.cjs:113:22)\n    at /usr/local/lib/node_modules/n8n/node_modules/@n8n/n8n-nodes-langchain/dist/nodes/mcp/McpTrigger/McpServer.js:133:24",
        "code": "ERR_BAD_REQUEST",
        "status": 422
      }
    }
  }
}

Information on your n8n setup

  • n8n version: 1.90.2 (Self Hosted)
  • Database (default: Postgres):
  • n8n EXECUTIONS_PROCESS setting (default: own, main): main (In think)
  • Running n8n via Docker
  • Operating system: Railway

The values ​​for {{ $fromAI(‘Base’, …) }} and {{ $fromAI(‘Table’, …) }} to define IDs are not being passed to the MCP from the agent.

What is the structure of your system prompt?

Here is a test request Claude sent:

{
  `Base`: `appcAAeraDu0IZ1bj`,
  `Name`: `Simple Test`,
  `Type`: `ICPP`,
  `Table`: `tbls2Y1BxIm7yV9rZ`,
  `Access`: `Internal`,
  `Content`: `Test content`,
  `Messages`: ``,
  `Template`: `rec9gyIc710RR8lVN`,
  `Created At`: `2025-06-12`,
  `Updated At`: `2025-06-12`
}

The system prompt includes this:

### Artefacts
- Name (string, required): Name of the artefact
- Type (string, required): Type of artefact - one of: ICPP, ICPP Interview, CVP Raw, CVP, Testimonials, TOV, Competitor CVPs, Messaging, ICP
- Access (string, required): Access level - either "Internal" or "External" 
- Content (string, required): The artefact content (JSON, markdown, or other text format)
- Template (array, required): Array containing the template record ID used to create this artefact (e.g. ["rec9gyIc710RR8lVN"])
- Messages (array, required): Array of message/input record IDs used as source material (e.g. ["rec2zkFxi8z0JdIJh", "rec6VJP20Zqc4kDiF"])
- Updated At (date, required): the current date/time in ISO format
- Created At (date, required): the current date/time in ISO format

And here is the node execution result which shows the input ids:

Carefully review the baseid, tableid, and fields parameters.

And you’re sending Base and Table, with different names, and you’re not sending fields.

I have the same issue also using railway. Were you able to solve it already? Super thanks