Workflow: Build an MCP server with Airtable
Integrations: airtableTool, manualTrigger, noOp, stickyNote, stopAndError

{"id": "kS9EfgZeaK3QV6Mw", "meta": {"instanceId": "workflow-43fbc197", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:55.112491", "updatedAt": "2025-09-29T07:07:55.112506", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "Build an MCP server with Airtable", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "trigger-6aa5d43b", "name": "Manual Trigger", "type": "n8n-nodes-base.manualTrigger", "typeVersion": 1, "position": [100, 100], "parameters": {}}, {"id": "357649f0-43c5-4d6c-97b9-079fa3b5c1f3", "name": "When chat message received", "type": "n8n-nodes-base.noOp", "position": [-100, -80], "webhookId": "c42d1e2e-b175-48cf-bfd4-aa8289266a20", "parameters": {"options": {}}, "typeVersion": 1.1, "notes": "This chatTrigger node performs automated tasks as part of the workflow."}, {"id": "ddf28f88-d76c-4ab6-82c4-c1ab1b746009", "name": "AI Agent", "type": "n8n-nodes-base.noOp", "position": [152, -180], "parameters": {"options": {}}, "typeVersion": 1.9, "notes": "This agent node performs automated tasks as part of the workflow."}, {"id": "3170d4fd-700c-4449-a800-0395c06711aa", "name": "Simple Memory", "type": "n8n-nodes-base.noOp", "position": [260, 40], "parameters": {}, "typeVersion": 1.3, "notes": "This memoryBufferWindow node performs automated tasks as part of the workflow."}, {"id": "557b0e0a-133b-4e80-afba-408803ed9898", "name": "Airtable MCP Client", "type": "n8n-nodes-base.noOp", "position": [600, 100], "parameters": {"sseEndpoint": "{{ $env.WEBHOOK_URL }}"}, "typeVersion": 1, "notes": "This mcpClientTool node performs automated tasks as part of the workflow."}, {"id": "a0bc9aa3-decb-42f1-bee4-b9e425db81e8", "name": "OpenAI Chat Model", "type": "n8n-nodes-base.noOp", "position": [80, 40], "parameters": {"model": {"__rl": true, "mode": "list", "value": "gpt-4o", "cachedResultName": "gpt-4o"}, "options": {}}, "credentials": {"openAiApi": {"id": "vupAk5StuhOafQcb", "name": "OpenAi account"}}, "typeVersion": 1.2, "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow."}, {"id": "7737e491-ddd4-4e4f-a34d-73f518497990", "name": "MCP Server Trigger", "type": "n8n-nodes-base.noOp", "position": [140, 240], "webhookId": "a93f35fb-3a86-4475-9ebd-1434aef8e433", "parameters": {"path": "insert-your-cool-path-here"}, "typeVersion": 1, "notes": "This mcpTrigger node performs automated tasks as part of the workflow."}, {"id": "0ce9e128-be31-41d8-ae06-894316781358", "name": "Get", "type": "n8n-nodes-base.airtableTool", "position": [0, 460], "parameters": {"id": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Record_ID', ``, 'string') }}", "base": {"__rl": true, "mode": "list", "value": "appltMFy409fOqCVt", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "AI news and social posts"}, "table": {"__rl": true, "mode": "list", "value": "tblZwA0JCNPeORaGi", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Social Posts"}, "options": {}}, "credentials": {"airtableTokenApi": {"id": "4hNTBxRPe8ft4Iic", "name": "Airtable Personal Access Token account"}}, "typeVersion": 2.1, "notes": "This airtableTool node performs automated tasks as part of the workflow."}, {"id": "1f9c6a61-9357-4fa1-81e0-42719284d291", "name": "Search", "type": "n8n-nodes-base.airtableTool", "position": [140, 460], "parameters": {"base": {"__rl": true, "mode": "list", "value": "appltMFy409fOqCVt", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "AI news and social posts"}, "table": {"__rl": true, "mode": "list", "value": "tblZwA0JCNPeORaGi", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Social Posts"}, "options": {}, "operation": "search", "returnAll": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Return_All', ``, 'boolean') }}", "filterByFormula": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Filter_By_Formula', ``, 'string') }}"}, "credentials": {"airtableTokenApi": {"id": "4hNTBxRPe8ft4Iic", "name": "Airtable Personal Access Token account"}}, "typeVersion": 2.1, "notes": "This airtableTool node performs automated tasks as part of the workflow."}, {"id": "061a0eb9-26de-47f1-b444-5dd98c984d70", "name": "Update", "type": "n8n-nodes-base.airtableTool", "position": [260, 460], "parameters": {"base": {"__rl": true, "mode": "list", "value": "appltMFy409fOqCVt", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "AI news and social posts"}, "table": {"__rl": true, "mode": "list", "value": "tblZwA0JCNPeORaGi", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Social Posts"}, "columns": {"value": {}, "schema": [{"id": "id", "type": "string", "display": true, "removed": false, "readOnly": true, "required": false, "displayName": "id", "defaultMatch": true}, {"id": "sourceHeadline", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "sourceHeadline", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "sourceSummary", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "sourceSummary", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "goToArticle", "type": "string", "display": true, "removed": true, "readOnly": true, "required": false, "displayName": "goToArticle", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "sourceURL", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "sourceURL", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "socialChannels", "type": "array", "display": true, "options": [{"name": "Twitter", "value": "Twitter"}, {"name": "LinkedIn", "value": "LinkedIn"}, {"name": "Blog", "value": "Blog"}, {"name": "Instagram", "value": "Instagram"}, {"name": "Facebook", "value": "Facebook"}], "removed": false, "readOnly": false, "required": false, "displayName": "socialChannels", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "needsImage?", "type": "options", "display": true, "options": [{"name": "Yes", "value": "Yes"}, {"name": "No", "value": "No"}], "removed": false, "readOnly": false, "required": false, "displayName": "needsImage?", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "twitterCopy", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "twitterCopy", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "linkedinCopy", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "linkedinCopy", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "instagramCopy", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "instagramCopy", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "facebookCopy", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "facebookCopy", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "blogCopy", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "blogCopy", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "imagePrompt", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "imagePrompt", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "postImage", "type": "array", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "postImage", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Status", "type": "options", "display": true, "options": [{"name": "Waiting for Content", "value": "Waiting for Content"}, {"name": "Needs Approval", "value": "Needs Approval"}, {"name": "Approved", "value": "Approved"}, {"name": "Posted", "value": "Posted"}], "removed": false, "readOnly": false, "required": false, "displayName": "Status", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "datePosted", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "datePosted", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "ID", "type": "string", "display": true, "removed": true, "readOnly": true, "required": false, "displayName": "ID", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "autoMapInputData", "matchingColumns": ["id"], "attemptToConvertTypes": false, "convertFieldsToString": false}, "options": {}, "operation": "update"}, "credentials": {"airtableTokenApi": {"id": "4hNTBxRPe8ft4Iic", "name": "Airtable Personal Access Token account"}}, "typeVersion": 2.1, "notes": "This airtableTool node performs automated tasks as part of the workflow."}, {"id": "b0e17724-5a56-4b71-997d-f9f44d16e5bc", "name": "Delete", "type": "n8n-nodes-base.airtableTool", "position": [400, 460], "parameters": {"id": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Record_ID', ``, 'string') }}", "base": {"__rl": true, "mode": "list", "value": "appltMFy409fOqCVt", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "AI news and social posts"}, "table": {"__rl": true, "mode": "list", "value": "tblZwA0JCNPeORaGi", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Social Posts"}, "operation": "deleteRecord"}, "credentials": {"airtableTokenApi": {"id": "4hNTBxRPe8ft4Iic", "name": "Airtable Personal Access Token account"}}, "typeVersion": 2.1, "notes": "This airtableTool node performs automated tasks as part of the workflow."}, {"id": "2d0273b6-520b-45b7-8192-a83b10661028", "name": "Create", "type": "n8n-nodes-base.airtableTool", "position": [520, 460], "parameters": {"base": {"__rl": true, "mode": "list", "value": "appltMFy409fOqCVt", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "AI news and social posts"}, "table": {"__rl": true, "mode": "list", "value": "tblZwA0JCNPeORaGi", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Social Posts"}, "columns": {"value": {}, "schema": [{"id": "sourceHeadline", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "sourceHeadline", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "sourceSummary", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "sourceSummary", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "goToArticle", "type": "string", "display": true, "removed": true, "readOnly": true, "required": false, "displayName": "goToArticle", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "sourceURL", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "sourceURL", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "socialChannels", "type": "array", "display": true, "options": [{"name": "Twitter", "value": "Twitter"}, {"name": "LinkedIn", "value": "LinkedIn"}, {"name": "Blog", "value": "Blog"}, {"name": "Instagram", "value": "Instagram"}, {"name": "Facebook", "value": "Facebook"}], "removed": false, "readOnly": false, "required": false, "displayName": "socialChannels", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "needsImage?", "type": "options", "display": true, "options": [{"name": "Yes", "value": "Yes"}, {"name": "No", "value": "No"}], "removed": false, "readOnly": false, "required": false, "displayName": "needsImage?", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "twitterCopy", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "twitterCopy", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "linkedinCopy", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "linkedinCopy", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "instagramCopy", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "instagramCopy", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "facebookCopy", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "facebookCopy", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "blogCopy", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "blogCopy", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "imagePrompt", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "imagePrompt", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "postImage", "type": "array", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "postImage", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Status", "type": "options", "display": true, "options": [{"name": "Waiting for Content", "value": "Waiting for Content"}, {"name": "Needs Approval", "value": "Needs Approval"}, {"name": "Approved", "value": "Approved"}, {"name": "Posted", "value": "Posted"}], "removed": false, "readOnly": false, "required": false, "displayName": "Status", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "datePosted", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "datePosted", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "ID", "type": "string", "display": true, "removed": true, "readOnly": true, "required": false, "displayName": "ID", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "autoMapInputData", "matchingColumns": [], "attemptToConvertTypes": false, "convertFieldsToString": false}, "options": {}, "operation": "create"}, "credentials": {"airtableTokenApi": {"id": "4hNTBxRPe8ft4Iic", "name": "Airtable Personal Access Token account"}}, "typeVersion": 2.1, "notes": "This airtableTool node performs automated tasks as part of the workflow."}, {"id": "69e906cf-82da-45c4-bacc-00970902d1f5", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [480, -60], "parameters": {"width": 360, "height": 280, "content": "## Update SSE endpoint "}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "819d82c9-da54-48c6-a007-2e8750cfb3e2", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [-520, -220], "parameters": {"width": 380, "height": 540, "content": "## Talk to your Airtable database \nPoint to your SSE endpoint, update your credentials and talk to your Airtable to:\n\n- Get records\n- Search records\n- Update records\n- Delete records\n- Create records\n\nand more!\n\nThis example showcases basic yet powerful functionality for a table.\n\nFeel free to combine it with other tools, connect a Slack channel as trigger node or another as output to receive the updates for the stakeholders and project owners.\n\nEnjoy!\n\nAitor\n[1 Node]({{ $env.WEBHOOK_URL }}"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "error-1a307010", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [1000, 400], "parameters": {"message": "Workflow execution error", "options": {}}}], "active": false, "pinData": {}, "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "2355fe0d-0515-4d1b-8a02-42712191f466", "connections": {"a0bc9aa3-decb-42f1-bee4-b9e425db81e8": {"main": [[{"node": "error-handler-a0bc9aa3-decb-42f1-bee4-b9e425db81e8-7eae3a3f", "type": "main", "index": 0}]]}}, "description": "Automated workflow: Build an MCP server with Airtable. This workflow integrates 9 different services: stickyNote, agent, mcpClientTool, mcpTrigger, stopAndError. It contains 14 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: Build an MCP server with Airtable. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}