AutomationFlowsAI & RAG › Complete Airtable Database Management with AI Agents and Redis Storage

Complete Airtable Database Management with AI Agents and Redis Storage

ByDenis @denisholc7 on n8n.io

Complete Airtable database management system using MCP (Model Context Protocol) for AI agents. Create bases, tables with complex field types, manage records, and maintain state with Redis storage. Add your Airtable Personal Access Token to credentials Configure Redis connection…

Chat trigger trigger★★★★☆ complexityAI-powered24 nodesHTTP Request ToolMemory Redis ChatAgentOpenAI ChatChat TriggerMcp Client ToolMcp TriggerRedis Tool
AI & RAG Trigger: Chat trigger Nodes: 24 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #8081 — we link there as the canonical source.

This workflow follows the Agent → Chat Trigger recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "nodes": [
    {
      "id": "2bf31ff0-fdb2-4a63-8cb4-7dd77c25e3a0",
      "name": "create_custom_table",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        -432,
        736
      ],
      "parameters": {
        "url": "=https://api.airtable.com/v0/meta/bases/{{ $fromAI('base_id') }}/tables",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"name\": \"{{ $fromAI('table_name') }}\",\n  \"fields\": {{ $fromAI('fields_json') }}\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "toolDescription": "Creates a custom table with user-specified name and fields. For advanced users who want additional tables.\n\n{\n  \"name\": \"Bookings\",\n  \"fields\": [\n    {\"name\": \"Name\", \"type\": \"singleLineText\"},\n    {\"name\": \"Phone Number\", \"type\": \"phoneNumber\"},\n    {\"name\": \"starttime\", \"type\": \"dateTime\", \"options\": {\"dateFormat\": {\"name\": \"european\"}, \"timeFormat\": {\"name\": \"24hour\"}, \"timeZone\": \"utc\"}},\n    {\"name\": \"endtime\", \"type\": \"dateTime\", \"options\": {\"dateFormat\": {\"name\": \"european\"}, \"timeFormat\": {\"name\": \"24hour\"}, \"timeZone\": \"utc\"}},\n    {\"name\": \"eventid\", \"type\": \"singleLineText\"},\n    {\"name\": \"Service\", \"type\": \"singleLineText\"},\n    {\"name\": \"Status\", \"type\": \"singleSelect\", \"options\": {\"choices\": [{\"name\": \"confirmed\"}, {\"name\": \"cancelled\"}, {\"name\": \"completed\"}]}},\n    {\"name\": \"Notes\", \"type\": \"multilineText\"}\n  ]\n}\n\nFor create_custom_table:\n- date fields MUST have: \"options\":{\"dateFormat\":{\"name\":\"iso\"}}\n- dateTime fields MUST have: \"options\":{\"dateFormat\":{\"name\":\"iso\"},\"timeFormat\":{\"name\":\"24hour\"},\"timeZone\":\"utc\"}\n- number fields MUST have: \"options\":{\"precision\":0} or 2\n- singleSelect MUST have: \"options\":{\"choices\":[{\"name\":\"Option1\"}]}",
        "nodeCredentialType": "airtableTokenApi"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "4d7a86f7-2e87-4d9d-8f8a-5e6b9cea6e99",
      "name": "rename_table",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        -1280,
        1568
      ],
      "parameters": {
        "url": "=https://api.airtable.com/v0/meta/bases/{{ $fromAI('base_id') }}/tables/{{ $fromAI('table_id') }}",
        "method": "PATCH",
        "options": {},
        "jsonBody": "={\n  \"name\": \"{{ $fromAI('new_name') }}\"\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "toolDescription": "Rename an existing table in the Airtable base. Requires base_id, table_id, and new_name.",
        "nodeCredentialType": "airtableTokenApi"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "198daf19-98d5-45ab-b025-b0fec8f8db16",
      "name": "get_existing_records",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        -1648,
        1104
      ],
      "parameters": {
        "url": "=https://api.airtable.com/v0/{{ $fromAI('base_id') }}/{{ $fromAI('table_id') }}",
        "options": {},
        "authentication": "predefinedCredentialType",
        "toolDescription": "Gets current records from a specific table. Requires base_id and table_id. Use before updating records to show user current values.",
        "nodeCredentialType": "airtableTokenApi"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "71d07559-3927-402c-9527-a3ac209c83a1",
      "name": "get_table_ids",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        -1648,
        1296
      ],
      "parameters": {
        "url": "=https://api.airtable.com/v0/meta/bases/{{ $fromAI('base_id') }}/tables",
        "options": {},
        "authentication": "predefinedCredentialType",
        "toolDescription": "Fetches all table IDs and names from the base. Critical for getting table_id needed for data operations. Use after creating tables and before adding/updating records.",
        "nodeCredentialType": "airtableTokenApi"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "87f84943-3ecf-4d37-88c8-58652cd3409d",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1840,
        800
      ],
      "parameters": {
        "color": 4,
        "width": 496,
        "height": 624,
        "content": "### \ud83d\udcd6 READ OPERATIONS\n\nView & Retrieve Data:\n- get_existing_records - Shows all records from any table\n- get_table_ids - Fetches all table names, IDs, and field info from base\n\nUse for: Viewing data, checking table structure, getting IDs for operations"
      },
      "typeVersion": 1
    },
    {
      "id": "50965ac1-256d-452c-b7f7-57a80c7b6386",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1840,
        1456
      ],
      "parameters": {
        "color": 5,
        "width": 880,
        "height": 256,
        "content": "### \u270f\ufe0f UPDATE OPERATIONS\n\nModify Existing Data:\n- update_record - Updates any record with new field values\n- rename_table - Changes table names\n- rename_fields - Changes field/column names\n\nUse for: Editing records, renaming structure elements"
      },
      "typeVersion": 1
    },
    {
      "id": "5c39b558-961b-4828-be8d-17a9cd5bba63",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -784,
        1456
      ],
      "parameters": {
        "color": 3,
        "width": 640,
        "height": 256,
        "content": "\ud83d\uddd1\ufe0f DELETE OPERATIONS\n\nRemove Data (Permanent):\n- delete_record - Deletes specific services permanently  \n\n\u26a0\ufe0f WARNING: All delete operations are PERMANENT"
      },
      "typeVersion": 1
    },
    {
      "id": "ab251dd7-4686-44e1-a601-6fc5074e247c",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -640,
        432
      ],
      "parameters": {
        "color": 6,
        "width": 496,
        "height": 976,
        "content": "### \u2795 CREATE OPERATIONS\n\nBuild Database Structure:\n- create_base - Creates new Airtable base (needs workspace_id)\n- create_custom_table - Creates tables with any field structure\n- add_field - Adds new fields to existing tables\n- create_record - Adds records with flexible field values\n\nUse for: Setting up databases, adding tables, inserting data"
      },
      "typeVersion": 1
    },
    {
      "id": "e1cd5c63-31df-4e5e-a014-75f5cf168ee9",
      "name": "Redis Chat Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryRedisChat",
      "position": [
        -1280,
        2176
      ],
      "parameters": {
        "sessionKey": "=salon_owner_agent",
        "sessionIdType": "customKey",
        "contextWindowLength": 15
      },
      "credentials": {
        "redis": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.5
    },
    {
      "id": "63854117-36a6-4a3b-a90a-08fdc3ed6e76",
      "name": "Airtable Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -1200,
        1840
      ],
      "parameters": {
        "text": "={{ $json.chatInput }}",
        "options": {
          "systemMessage": "=You are an Airtable Database Assistant helping users create and manage Airtable databases.\n\n## Storage Tools Available:\n- get_base_id / set_base_id - Store and retrieve base IDs\n- get_workspace_id / set_workspace_id - Store and retrieve workspace ID\n\n## For EXISTING databases:\n1. Use get_base_id to check for stored base ID\n2. If found, use that base_id for all operations\n3. User only needs to provide base_id (NO workspace needed)\n\n## For NEW database creation ONLY:\n1. Check get_workspace_id for stored workspace\n2. If not found, ask user for workspace_id ONCE\n3. Store it with set_workspace_id for future use\n4. Create base with workspace_id\n5. Store new base_id with set_base_id\n\n## Important:\n- Only ask for workspace_id when creating NEW bases\n- For existing bases, ONLY need base_id\n- Always check stored values first before asking user\n- Store IDs after getting them to avoid asking again\n\n## Process Guidelines:\n- Be conversational and guide step-by-step\n- Create working system first, then customize\n- Use plain text only. No markdown formatting or asterisks\n- Don't assume what they want to change, ask for clarification\n- Fetch table IDs before operations unless stored in memory\n- Never lie or invent just to please the user\n"
        },
        "promptType": "define"
      },
      "typeVersion": 2.1
    },
    {
      "id": "923e63e8-b6fc-4199-840e-e7fc13b657f3",
      "name": "gpt-5-mini",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -1472,
        2176
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5-mini",
          "cachedResultName": "gpt-5-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "602ce2b4-dd59-42c0-b5fe-dcf4b3bdbc7b",
      "name": "When chat message received",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -1552,
        1840
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.3
    },
    {
      "id": "9b06d16d-200a-493e-b9d6-ac029dd54086",
      "name": "MCP Client",
      "type": "@n8n/n8n-nodes-langchain.mcpClientTool",
      "position": [
        -496,
        2176
      ],
      "parameters": {
        "endpointUrl": "https://primary-production-8fde8.up.railway.app/mcp/airtable-database-builder-mcp",
        "serverTransport": "httpStreamable"
      },
      "typeVersion": 1.1
    },
    {
      "id": "ddce06f4-7e87-4915-8ea4-99b5de8cc42e",
      "name": "MCP Server Trigger",
      "type": "@n8n/n8n-nodes-langchain.mcpTrigger",
      "position": [
        -1120,
        896
      ],
      "parameters": {
        "path": "airtable-database-builder-mcp"
      },
      "typeVersion": 2
    },
    {
      "id": "18f9e358-1a5e-4be3-afff-325c00a07cf6",
      "name": "delete_record",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        -288,
        1552
      ],
      "parameters": {
        "url": "=https://api.airtable.com/v0/{{ $fromAI('base_id') }}/{{ $fromAI('table_id') }}/{{ $fromAI('record_id') }}",
        "method": "DELETE",
        "options": {},
        "authentication": "predefinedCredentialType",
        "toolDescription": "Deletes a specific record from Services table. Requires base_id, table_id, and record_id.",
        "nodeCredentialType": "airtableTokenApi"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "a5ca9a63-5da9-4b2f-84b4-bbcebfbe48ab",
      "name": "create_record",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        -432,
        896
      ],
      "parameters": {
        "url": "=https://api.airtable.com/v0/{{ $fromAI('base_id') }}/{{ $fromAI('table_id') }}",
        "method": "POST",
        "options": {},
        "jsonBody": "={\"records\": [{\"fields\": {{ $fromAI('fields_json') }}}]}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "toolDescription": "Adds a new service to the Services table. Requires base_id and table_id. Required params: service_name, price. Use after getting table_ids to populate services.",
        "nodeCredentialType": "airtableTokenApi"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "191bd7d2-38f4-4122-864a-158c38b885cf",
      "name": "update_record",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        -432,
        1248
      ],
      "parameters": {
        "url": "=https://api.airtable.com/v0/{{ $fromAI('base_id') }}/{{ $fromAI('table_id') }}",
        "method": "POST",
        "options": {},
        "jsonBody": "={\"fields\": {{ $fromAI('fields_json') }}}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "toolDescription": "Adds a new service to the Services table. Requires base_id and table_id. Required params: service_name, price. Use after getting table_ids to populate services.",
        "nodeCredentialType": "airtableTokenApi"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "fe4aff37-0b9b-479e-9a37-b07e4537d5bf",
      "name": "create_base",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        -432,
        1056
      ],
      "parameters": {
        "url": "https://api.airtable.com/v0/meta/bases",
        "method": "POST",
        "options": {},
        "jsonBody": "={\"name\": \"{{ $fromAI('base_name') }}\", \"workspaceId\": \"{{ $fromAI('workspace_id') }}\", \"tables\": [{\"name\":\"Main\",\"fields\":[{\"name\":\"Name\",\"type\":\"singleLineText\"}]}]}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "toolDescription": "Create a base with Workspace ID:\n\nWhen creating bases with tables_json, use only these exact field types:\n- singleLineText (for text)\n- multilineText (for long text - NOT multiLineText)\n- number (for numbers)\n- phoneNumber (for phone - NOT phone)\n- email (for emails)\n- date (for dates only)\n- dateTime (for date and time)\n- singleSelect (needs options)\n- multipleSelect (needs options)\n\nDO NOT use:\n- multiLineText (wrong capitalization)\n- phone (use phoneNumber)\n- linkedRecord fields (add after base creation)\n- \"primary\" property (automatic)\n\n\nFor number fields, MUST include options:\n{\"name\": \"Price\", \"type\": \"number\", \"options\": {\"precision\": 2}}\n- precision: 0 for integers\n- precision: 2 for money/decimals\n\nExample valid tables_json:\n[{\"name\":\"Services\",\"fields\":[{\"name\":\"ServiceName\",\"type\":\"singleLineText\"},{\"name\":\"Description\",\"type\":\"multilineText\"}, ",
        "nodeCredentialType": "airtableTokenApi"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "3cf80b36-0a67-41aa-ae9e-c5b847cb3563",
      "name": "set_workspace_id",
      "type": "n8n-nodes-base.redisTool",
      "position": [
        -1088,
        2176
      ],
      "parameters": {
        "key": "=workspace_id",
        "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Value', `Store Workspace ID`, 'string') }}",
        "operation": "set",
        "descriptionType": "manual",
        "toolDescription": "Store Workspace ID"
      },
      "credentials": {
        "redis": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f6a633cb-6031-4c77-8a7c-8d2e213b382d",
      "name": "get_workspace_id",
      "type": "n8n-nodes-base.redisTool",
      "position": [
        -912,
        2176
      ],
      "parameters": {
        "key": "=workspace_id",
        "options": {},
        "operation": "get",
        "propertyName": "WorkspaceID",
        "descriptionType": "manual",
        "toolDescription": "Get Workspace ID"
      },
      "credentials": {
        "redis": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "7ccbd0fa-8c0e-4f3a-9632-e6a12412327a",
      "name": "get_base_id",
      "type": "n8n-nodes-base.redisTool",
      "position": [
        -624,
        2176
      ],
      "parameters": {
        "key": "=base_id",
        "options": {},
        "operation": "get",
        "propertyName": "BaseID",
        "descriptionType": "manual",
        "toolDescription": "Get Base ID"
      },
      "credentials": {
        "redis": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f6a1c55c-8cae-424d-a947-877903f614ad",
      "name": "set_base_id",
      "type": "n8n-nodes-base.redisTool",
      "position": [
        -768,
        2176
      ],
      "parameters": {
        "key": "=base_id",
        "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Value', `Store Base ID`, 'string') }}",
        "operation": "set",
        "descriptionType": "manual",
        "toolDescription": "Store Base ID"
      },
      "credentials": {
        "redis": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "548aaf33-852a-4bf7-bea8-a1b964b522b0",
      "name": "rename_fields",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        -1120,
        1568
      ],
      "parameters": {
        "url": "=https://api.airtable.com/v0/meta/bases/{{ $fromAI('base_id') }}/tables/{{ $fromAI('table_id') }}/fields/{{ $fromAI('field_id') }}",
        "method": "PATCH",
        "options": {},
        "jsonBody": "={\"name\": \"{{ $fromAI('new_field_name') }}\", \"description\": \"{{ $fromAI('description') }}\"}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "toolDescription": "Rename a field/column in a table. Requires base_id, table_id, field_id, and new_name",
        "nodeCredentialType": "airtableTokenApi"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "74eeee0e-0f2d-42b5-8248-925a3818fac8",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2320,
        800
      ],
      "parameters": {
        "color": 7,
        "width": 432,
        "height": 2128,
        "content": "## \ud83d\udccc AIRTABLE ID GUIDE\n\n### What IDs do I need?\n\n#### Working with EXISTING base:\n- **Base ID only** (starts with `app...`)\n- Example: `appHt4tJ6HTCmLOKV`\n- Find it: Airtable URL when viewing your base\n\n#### Creating NEW base:\n- **Workspace ID** (starts with `wsp...`)\n- Example: `wspyMkHTZGijmTTsH`\n- Find it: Airtable workspace settings\n\n### Where to find your IDs:\n\n#### Base ID:\n1. Open your base in Airtable\n2. Look at URL: `airtable.com/appXXXXXXXXXXXXXX/...`\n3. The `appXXXXXXXXXXXXXX` part is your base ID\n\n#### Workspace ID:\n1. Go to Airtable workspace settings\n2. Click \"Workspace settings\"\n3. Find workspace ID in the URL or settings page\n   - Example: `https://airtable.com/workspaces/wspyMkHTZGijmTT11`\n\n### First time setup:\n- Provide your workspace ID once (stored for future use)\n- Each base ID you use will be stored\n- System remembers your IDs - no need to repeat\n\n### Common operations:\n- **View/edit records** \u2192 Base ID only\n- **Create tables** \u2192 Base ID only\n- **Create new base** \u2192 Workspace ID only\n\n\n## Getting your Airtable token\n1. Go to https://airtable.com/create/tokens\n2. Click \"Create new token\"\n3. Name it (e.g., \"n8n Integration\")\n4. Add these scopes:\n   - data.records:read\n   - data.records:write\n   - schema.bases:read\n   - schema.bases:write\n5. Add access to all workspaces or specific ones\n6. Copy the token (starts with pat...)\n7. In n8n, create \"Airtable Personal Access Token API\" credential\n8. Paste your token there\n\n## Setting up Redis (for ID storage)\n\n### Create free Redis database:\n1. Go to https://console.upstash.com\n2. Sign up for free account (10,000 commands/day free)\n3. Click \"Create Database\"\n4. Choose:\n   - Name: Any name (e.g., \"n8n-airtable\")\n   - Region: Closest to you\n   - Type: Regional (not Global)\n5. Click \"Create\"\n\n### Get connection details:\n1. In your database dashboard, find:\n   - **Endpoint**: something like `usw1-settling-cat-12345.upstash.io`\n   - **Port**: `6379` (default)\n   - **Password**: Click \"Show\" to reveal\n\n### Connect to n8n:\n1. In n8n, create new credential\n2. Choose \"Redis\"\n3. Fill in:\n   - **Host**: Your endpoint (without https://)\n   - **Port**: 6379\n   - **Password**: Your password from Upstash\n   - **SSL**: Toggle ON (required for Upstash)\n4. Click \"Save\"\n\n### Why Redis?\n- Stores your workspace and base IDs\n- Prevents asking for same IDs repeatedly\n- Maintains state between workflow runs\n- Free tier is more than enough for this use"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "MCP Client": {
      "ai_tool": [
        [
          {
            "node": "Airtable Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "gpt-5-mini": {
      "ai_languageModel": [
        [
          {
            "node": "Airtable Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "create_base": {
      "ai_tool": [
        [
          {
            "node": "MCP Server Trigger",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "get_base_id": {
      "ai_tool": [
        [
          {
            "node": "Airtable Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "set_base_id": {
      "ai_tool": [
        [
          {
            "node": "Airtable Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "rename_table": {
      "ai_tool": [
        [
          {
            "node": "MCP Server Trigger",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "create_record": {
      "ai_tool": [
        [
          {
            "node": "MCP Server Trigger",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "delete_record": {
      "ai_tool": [
        [
          {
            "node": "MCP Server Trigger",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "get_table_ids": {
      "ai_tool": [
        [
          {
            "node": "MCP Server Trigger",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "rename_fields": {
      "ai_tool": [
        [
          {
            "node": "MCP Server Trigger",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "update_record": {
      "ai_tool": [
        [
          {
            "node": "MCP Server Trigger",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Airtable Agent": {
      "main": [
        []
      ]
    },
    "get_workspace_id": {
      "ai_tool": [
        [
          {
            "node": "Airtable Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "set_workspace_id": {
      "ai_tool": [
        [
          {
            "node": "Airtable Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Redis Chat Memory": {
      "ai_memory": [
        [
          {
            "node": "Airtable Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "create_custom_table": {
      "ai_tool": [
        [
          {
            "node": "MCP Server Trigger",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "get_existing_records": {
      "ai_tool": [
        [
          {
            "node": "MCP Server Trigger",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "Airtable Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Complete Airtable database management system using MCP (Model Context Protocol) for AI agents. Create bases, tables with complex field types, manage records, and maintain state with Redis storage. Add your Airtable Personal Access Token to credentials Configure Redis connection…

Source: https://n8n.io/workflows/8081/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

This n8n workflow is designed for Shopify store owners and e-commerce managers who want to automate their store operations through an intelligent AI assistant. The workflow creates a conversational in

Shopify Tool, Discord, Telegram +10
AI & RAG

This workflow implements an advanced AI-powered system for generating, and executing Claude Skills stored on GitHub.

Chat Trigger, Memory Buffer Window, Mcp Client Tool +9
AI & RAG

Description: Turn your WooCommerce store into a conversational AI assistant — create products, place orders, run reports and manage coupons using natural language via n8n + an MCP Server.

Agent, OpenAI Chat, Mcp Client Tool +4
AI & RAG

This n8n workflow template uses community nodes and is only compatible with the self-hosted version of n8n.

Chat Trigger, Agent, N8N Nodes Mcp +4
AI & RAG

This n8n workflow showcases a full-featured AI-powered assistant connected to a Shopify store through a custom MCP (Multi-Channel Commerce Platform) Server toolkit. It empowers users to automate compr

Agent, OpenAI Chat, Mcp Client Tool +4