{
  "workflow": {
    "id": 5509,
    "name": "Ai-powered contact management in Airtable with natural language commands",
    "views": 808,
    "recentViews": 0,
    "totalViews": 808,
    "createdAt": "2025-07-01T08:01:44.545Z",
    "description": "# AI-Powered Airtable Contact Manager\n\n## Overview\n\nThe **AI-Powered Airtable Contact Manager** is an intelligent n8n workflow that enables AI assistants to seamlessly manage contact data in Airtable through natural language interactions. Using the Model Context Protocol (MCP), this workflow bridges the gap between conversational AI and structured data management.\n\n## How It Works\n\nThis workflow creates a powerful AI-to-database interface that allows users to manage their Airtable contacts through natural language commands. Here's the complete flow:\n\n### 1. **AI Interaction Layer**\n- Users interact with an AI assistant using natural language\n- Examples: \"Add John Doe to contacts\", \"Find all contacts assigned to Sarah\", \"Show me contact details for ID xyz\"\n\n### 2. **MCP Server Trigger**\n- The AI assistant processes the user's request and identifies the needed operation\n- Sends structured commands to the n8n workflow via the MCP (Model Context Protocol)\n- Acts as the intelligent routing system for all contact operations\n\n### 3. **Airtable Operations**\nThe workflow provides four core contact management functions:\n\n**🔍 Get Record**: Retrieves specific contact details using a Record ID\n- Input: Record ID from AI\n- Output: Complete contact information (Name, Email, Assignee, Status)\n\n**➕ Create Record**: Adds new contacts to the database\n- Input: Contact details (Name, Email, Assignee)\n- Output: New record with auto-generated ID and default status\n\n**🗑️ Delete Record**: Removes contacts permanently\n- Input: Record ID to delete\n- Output: Confirmation of successful deletion\n\n**🔎 Search Records**: Finds contacts using flexible criteria\n- Input: Airtable formula for filtering\n- Output: All matching contact records\n\n### 4. **Smart Data Handling**\n- The workflow uses AI-powered field mapping with `$fromAI()` functions\n- Automatically extracts relevant information from natural language requests\n- Maintains data integrity with proper field validation\n\n## Setup Steps\n\n### Prerequisites\n- n8n instance (cloud or self-hosted)\n- Airtable account with API access\n- MCP-compatible AI system\n\n### Step 1: Airtable Preparation\n1. **Create Airtable Base**:\n   - Set up a new base or use existing one\n   - Note your Base ID (starts with `app`)\n\n2. **Set Up Contact Table**:\n   - Create a table with these fields:\n     - `Name` (Single line text)\n     - `email` (Email)\n     - `Assignee` (Single line text)\n     - `Status` (Single select: Todo, In progress, Done)\n   - Note your Table ID (starts with `tbl`)\n\n3. **Generate API Token**:\n   - Go to https://airtable.com/developers/web/api/introduction\n   - Create a personal access token with full permissions\n   - Save this token securely\n\n### Step 2: n8n Configuration\n1. **Import Workflow**:\n   - Copy the enhanced JSON workflow\n   - Import into your n8n instance\n\n2. **Configure Airtable Credentials**:\n   - Go to Credentials in n8n\n   - Create new \"Airtable Personal Access Token\" credential\n   - Enter your Airtable API token\n   - Name it \"full access\" (or update credential references in workflow)\n\n3. **Update Base and Table IDs**:\n   - Replace `YOUR_AIRTABLE_BASE_ID` with your actual Base ID (starts with `app`)\n   - Replace `YOUR_AIRTABLE_TABLE_ID` with your actual Table ID (starts with `tbl`)\n   - Update in all four Airtable nodes\n\n4. **Update Credential References**:\n   - Replace `your-airtable-credential-id` with your actual credential ID\n   - Or rename your credential to match \"Airtable API Token\"\n\n### Step 3: MCP Integration\n1. **Configure MCP Server**:\n   - Set up your MCP server to communicate with n8n\n   - Replace `your-webhook-path-here` and `your-webhook-id-here` with your actual webhook details\n   - Configure your AI system to use this workflow\n\n2. **Update Node IDs** (Optional):\n   - The workflow uses placeholder node IDs for privacy\n   - n8n will auto-generate new IDs when you import\n   - No action needed unless you're referencing specific nodes\n\n3. **Test the Integration**:\n   - Activate the workflow in n8n\n   - Test each operation through your AI interface\n   - Verify data flows correctly between AI and Airtable\n\n### Step 4: Customization (Optional)\n1. **Add More Fields**:\n   - Extend the Airtable schema as needed\n   - Update the Create Record node field mappings\n   - Modify the Search Record filters\n\n2. **Enhanced Error Handling**:\n   - Add error handling nodes\n   - Set up notifications for failed operations\n   - Implement retry logic for reliability\n\n## Usage Examples\n\nOnce set up, users can interact with the system naturally:\n\n**Creating Contacts**:\n- \"Add Sarah Johnson with email sarah@company.com, assign to Mike\"\n- \"Create a new contact for David Wilson, email david@startup.io\"\n\n**Finding Contacts**:\n- \"Show me all contacts assigned to Jennifer\"\n- \"Find contacts with status 'In progress'\"\n- \"Search for contacts with gmail addresses\"\n\n**Managing Records**:\n- \"Get details for contact rec123ABC\"\n- \"Delete the contact with ID rec456DEF\"\n- \"Update John's status to Done\"\n\n## Benefits\n\n- **Natural Language Interface**: No technical knowledge required\n- **Automated Data Entry**: Reduces manual work and errors\n- **Flexible Searching**: Find contacts using any criteria\n- **AI-Powered**: Leverages advanced language understanding\n- **Scalable**: Easily extend with more operations\n- **Integrated**: Works seamlessly with existing Airtable workflows\n\n## Technical Notes\n\n- Uses n8n's `$fromAI()` function for intelligent data extraction\n- Implements MCP for standardized AI-to-automation communication\n- Supports Airtable's formula syntax for complex searches\n- Maintains security through proper credential management\n- Designed for high reliability with error handling capabilities\n\nThis workflow transforms contact management from a manual, time-consuming task into an effortless, conversational experience powered by AI.",
    "workflow": {
      "id": "nNmc3DeecTU28eVM",
      "meta": {
        "instanceId": "2000c64071c20843606b95c63795bb0797c41036047055a6586498e855b96efc",
        "templateCredsSetupCompleted": true
      },
      "name": "Airtable MCP",
      "tags": [],
      "nodes": [
        {
          "id": "57d9bacd-3ff4-48b3-a253-f47cc8fde5ab",
          "name": "MCP Server Trigger",
          "type": "@n8n/n8n-nodes-langchain.mcpTrigger",
          "position": [
            780,
            120
          ],
          "webhookId": "your-webhook-id-here",
          "parameters": {
            "path": "your-webhook-path-here"
          },
          "typeVersion": 1.1
        },
        {
          "id": "5e1eb7f9-a1c7-44fc-acb2-38ea6b407896",
          "name": "Get Record",
          "type": "n8n-nodes-base.airtableTool",
          "position": [
            720,
            380
          ],
          "parameters": {
            "id": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Record_ID', ``, 'string') }}",
            "base": {
              "__rl": true,
              "mode": "list",
              "value": "YOUR_AIRTABLE_BASE_ID",
              "cachedResultUrl": "https://airtable.com/YOUR_AIRTABLE_BASE_ID",
              "cachedResultName": "contacts"
            },
            "table": {
              "__rl": true,
              "mode": "list",
              "value": "YOUR_AIRTABLE_TABLE_ID",
              "cachedResultUrl": "https://airtable.com/YOUR_AIRTABLE_BASE_ID/YOUR_AIRTABLE_TABLE_ID",
              "cachedResultName": "contact data"
            },
            "options": {}
          },
          "typeVersion": 2.1
        },
        {
          "id": "6226cd66-19b5-4751-8db9-d0f45f017292",
          "name": "Create Record",
          "type": "n8n-nodes-base.airtableTool",
          "position": [
            860,
            580
          ],
          "parameters": {
            "base": {
              "__rl": true,
              "mode": "list",
              "value": "YOUR_AIRTABLE_BASE_ID",
              "cachedResultUrl": "https://airtable.com/YOUR_AIRTABLE_BASE_ID",
              "cachedResultName": "contacts"
            },
            "table": {
              "__rl": true,
              "mode": "list",
              "value": "YOUR_AIRTABLE_TABLE_ID",
              "cachedResultUrl": "https://airtable.com/YOUR_AIRTABLE_BASE_ID/YOUR_AIRTABLE_TABLE_ID",
              "cachedResultName": "contact data"
            },
            "columns": {
              "value": {
                "Name": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Name', ``, 'string') }}",
                "email": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('email', ``, 'string') }}",
                "Assignee": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Assignee', ``, 'string') }}"
              },
              "schema": [
                {
                  "id": "Name",
                  "type": "string",
                  "display": true,
                  "removed": false,
                  "readOnly": false,
                  "required": false,
                  "displayName": "Name",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "email",
                  "type": "string",
                  "display": true,
                  "removed": false,
                  "readOnly": false,
                  "required": false,
                  "displayName": "email",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Assignee",
                  "type": "string",
                  "display": true,
                  "removed": false,
                  "readOnly": false,
                  "required": false,
                  "displayName": "Assignee",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Status",
                  "type": "options",
                  "display": true,
                  "options": [
                    {
                      "name": "Todo",
                      "value": "Todo"
                    },
                    {
                      "name": "In progress",
                      "value": "In progress"
                    },
                    {
                      "name": "Done",
                      "value": "Done"
                    }
                  ],
                  "removed": false,
                  "readOnly": false,
                  "required": false,
                  "displayName": "Status",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                }
              ],
              "mappingMode": "defineBelow",
              "matchingColumns": [],
              "attemptToConvertTypes": false,
              "convertFieldsToString": false
            },
            "options": {},
            "operation": "create"
          },
          "typeVersion": 2.1
        },
        {
          "id": "a6ec7651-1953-4c92-8a51-21f9c130df0c",
          "name": "Delete Record",
          "type": "n8n-nodes-base.airtableTool",
          "position": [
            1200,
            360
          ],
          "parameters": {
            "id": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Record_ID', ``, 'string') }}",
            "base": {
              "__rl": true,
              "mode": "list",
              "value": "YOUR_AIRTABLE_BASE_ID",
              "cachedResultUrl": "https://airtable.com/YOUR_AIRTABLE_BASE_ID",
              "cachedResultName": "contacts"
            },
            "table": {
              "__rl": true,
              "mode": "list",
              "value": "YOUR_AIRTABLE_TABLE_ID",
              "cachedResultUrl": "https://airtable.com/YOUR_AIRTABLE_BASE_ID/YOUR_AIRTABLE_TABLE_ID",
              "cachedResultName": "contact data"
            },
            "operation": "deleteRecord"
          },
          "typeVersion": 2.1
        },
        {
          "id": "303338ab-02c7-45ed-9978-31e254c9d34b",
          "name": "Search Record",
          "type": "n8n-nodes-base.airtableTool",
          "position": [
            1060,
            520
          ],
          "parameters": {
            "base": {
              "__rl": true,
              "mode": "list",
              "value": "YOUR_AIRTABLE_BASE_ID",
              "cachedResultUrl": "https://airtable.com/YOUR_AIRTABLE_BASE_ID",
              "cachedResultName": "contacts"
            },
            "table": {
              "__rl": true,
              "mode": "list",
              "value": "YOUR_AIRTABLE_TABLE_ID",
              "cachedResultUrl": "https://airtable.com/YOUR_AIRTABLE_BASE_ID/YOUR_AIRTABLE_TABLE_ID",
              "cachedResultName": "contact data"
            },
            "options": {},
            "operation": "search",
            "filterByFormula": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Filter_By_Formula', ``, 'string') }}"
          },
          "typeVersion": 2.1
        },
        {
          "id": "39d9b303-de3f-4af4-a464-26be930dda40",
          "name": "MCP Trigger Info",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            560,
            20
          ],
          "parameters": {
            "color": null,
            "height": 260,
            "content": "🚀 **MCP TRIGGER**\n**AUTHOR DAVID OLUSOLA**\n\nThis is the entry point for AI interactions. When an AI assistant needs to manage contacts, it triggers this workflow through the Model Context Protocol (MCP).\n\n**Function**: Receives AI requests and routes them to appropriate Airtable operations."
          },
          "typeVersion": 1
        },
        {
          "id": "2acfe724-42c5-4dd7-af33-47710e57b5b1",
          "name": "Get Record Info",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            500,
            340
          ],
          "parameters": {
            "color": null,
            "width": 220,
            "height": 140,
            "content": "🔍 **GET RECORD**\n\nRetrieves a specific contact record from Airtable using the Record ID.\n\n**Input**: Record_ID from AI\n**Output**: Complete contact details\n**Use Case**: \"Show me details for contact ID xyz\""
          },
          "typeVersion": 1
        },
        {
          "id": "f5b8fc28-da04-476c-ab9c-28b9019e73b5",
          "name": "Create Record Info",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            640,
            620
          ],
          "parameters": {
            "color": "orange",
            "width": 220,
            "height": 140,
            "content": "➕ **CREATE RECORD**\n\nAdds a new contact to the Airtable database.\n\n**Inputs**: Name, Email, Assignee\n**Output**: New record with auto-generated ID\n**Use Case**: \"Add John Doe with email john@example.com\""
          },
          "typeVersion": 1
        },
        {
          "id": "75303405-11b5-4f16-8cb1-b6fc136373b5",
          "name": "Delete Record Info",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1280,
            280
          ],
          "parameters": {
            "color": "red",
            "width": 200,
            "height": 120,
            "content": "🗑️ **DELETE RECORD**\n\nRemoves a contact from the database permanently.\n\n**Input**: Record_ID from AI\n**Output**: Confirmation of deletion\n**Use Case**: \"Delete contact ID xyz\""
          },
          "typeVersion": 1
        },
        {
          "id": "59f20c23-144e-439e-a0fd-a37ef9ec0a43",
          "name": "Search Record Info",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1060,
            640
          ],
          "parameters": {
            "color": "purple",
            "width": 220,
            "height": 140,
            "content": "🔎 **SEARCH RECORDS**\n\nFinds contacts based on specific criteria using Airtable formulas.\n\n**Input**: Filter_By_Formula from AI\n**Output**: Matching contact records\n**Use Case**: \"Find all contacts assigned to Sarah\""
          },
          "typeVersion": 1
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "f96d97b6-70a4-4e38-b6fd-9bc678fc548f",
      "connections": {
        "Get Record": {
          "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
              }
            ]
          ]
        },
        "Search Record": {
          "ai_tool": [
            [
              {
                "node": "MCP Server Trigger",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 29,
    "workflowInfo": {
      "nodeCount": 10,
      "nodeTypes": {
        "n8n-nodes-base.stickyNote": {
          "count": 5
        },
        "n8n-nodes-base.airtableTool": {
          "count": 4
        },
        "@n8n/n8n-nodes-langchain.mcpTrigger": {
          "count": 1
        }
      }
    },
    "status": "published",
    "user": {
      "name": "David Olusola",
      "username": "dae221",
      "bio": "I design enterprise-grade automation systems that eliminate bottlenecks, cut manual work by 70%+, and unlock millions in lost revenue opportunities. My clients — typically achieve 5–10x ROI within the first 90 days. Currently partnering with select high-growth companies ready to scale faster with AI automation.  david@daexai.com",
      "verified": true,
      "links": [
        ""
      ],
      "avatar": "https://gravatar.com/avatar/2abbc4c9e828c54a8d8838beda1382e8e4a66684ef9fa8451dbeb3e72b0c9f9c?r=pg&d=retro&size=200"
    },
    "nodes": [
      {
        "id": 565,
        "icon": "fa:sticky-note",
        "name": "n8n-nodes-base.stickyNote",
        "codex": {
          "data": {
            "alias": [
              "Comments",
              "Notes",
              "Sticky"
            ],
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Sticky Note",
          "color": "#FFD233"
        },
        "iconData": {
          "icon": "sticky-note",
          "type": "icon"
        },
        "displayName": "Sticky Note",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 1293,
        "icon": "file:../mcp.svg",
        "name": "@n8n/n8n-nodes-langchain.mcpTrigger",
        "codex": {
          "data": {
            "alias": [
              "Model Context Protocol",
              "MCP Server"
            ],
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-langchain.mcptrigger/"
                }
              ]
            },
            "categories": [
              "AI",
              "Core Nodes",
              "Langchain"
            ],
            "subcategories": {
              "AI": [
                "Root Nodes",
                "Model Context Protocol"
              ],
              "Core Nodes": [
                "Other Trigger Nodes"
              ]
            }
          }
        },
        "group": "[\"trigger\"]",
        "defaults": {
          "name": "MCP Server Trigger"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgwIiBoZWlnaHQ9IjE4MCIgdmlld0JveD0iMCAwIDE5NSAxOTUiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+Cgk8ZyBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+CgkJPHBhdGggZD0iTTI1IDk3Ljg1MjhMOTIuODgyMyAyOS45NzA2QzEwMi4yNTUgMjAuNTk4IDExNy40NTEgMjAuNTk4IDEyNi44MjMgMjkuOTcwNlYyOS45NzA2QzEzNi4xOTYgMzkuMzQzMSAxMzYuMTk2IDU0LjUzOTEgMTI2LjgyMyA2My45MTE3TDc1LjU1ODEgMTE1LjE3NyIvPgoJCTxwYXRoIGQ9Ik03Ni4yNjUzIDExNC40N0wxMjYuODIzIDYzLjkxMTdDMTM2LjE5NiA1NC41MzkxIDE1MS4zOTIgNTQuNTM5MSAxNjAuNzY1IDYzLjkxMTdMMTYxLjExOCA2NC4yNjUyQzE3MC40OTEgNzMuNjM3OCAxNzAuNDkxIDg4LjgzMzggMTYxLjExOCA5OC4yMDYzTDk5LjcyNDggMTU5LjZDOTYuNjAwNiAxNjIuNzI0IDk2LjYwMDYgMTY3Ljc4OSA5OS43MjQ4IDE3MC45MTNMMTEyLjMzMSAxODMuNTIiLz4KCQk8cGF0aCBkPSJNMTA5Ljg1MyA0Ni45NDExTDU5LjY0ODIgOTcuMTQ1N0M1MC4yNzU3IDEwNi41MTggNTAuMjc1NyAxMjEuNzE0IDU5LjY0ODIgMTMxLjA4N1YxMzEuMDg3QzY5LjAyMDggMTQwLjQ1OSA4NC4yMTY4IDE0MC40NTkgOTMuNTg5NCAxMzEuMDg3TDE0My43OTQgODAuODgyMiIvPgoJPC9nPgo8L3N2Zz4K"
        },
        "displayName": "MCP Server Trigger",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          },
          {
            "id": 25,
            "name": "AI"
          },
          {
            "id": 26,
            "name": "Langchain"
          }
        ]
      }
    ],
    "categories": [
      {
        "id": 39,
        "name": "CRM"
      },
      {
        "id": 47,
        "name": "AI Chatbot"
      }
    ],
    "image": []
  }
}