This workflow follows the HTTP Request Tool → Mcptrigger 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 →
{
"nodes": [
{
"parameters": {
"path": "gmail-mcp-server"
},
"type": "@n8n/n8n-nodes-langchain.mcpTrigger",
"typeVersion": 2,
"position": [
-224,
-208
],
"id": "2bc987c8-cca5-4015-ad7b-0ea41074ecf0",
"name": "Gmail MCP Server"
},
{
"parameters": {
"descriptionType": "manual",
"toolDescription": "This tool gets many emails from your personal business inbox. Use for direct client communications, partnerships, and personal business matters.",
"operation": "getAll",
"filters": {
"receivedAfter": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Received_After', `Date and time after which the emails you're searching for were received (ISO format: 2026-01-11T00:00:00Z)`, 'string') }}",
"receivedBefore": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Received_Before', `Date and time before which the emails you're searching for were received (ISO format: 2026-01-13T00:00:00Z)`, 'string') }}"
}
},
"type": "n8n-nodes-base.gmailTool",
"typeVersion": 2.2,
"position": [
-256,
0
],
"id": "3a1221a8-9c1d-412c-9264-952c3f2c410d",
"name": "Get many emails",
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"resource": "draft",
"subject": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Subject', ``, 'string') }}",
"message": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Message', ``, 'string') }}",
"options": {
"threadId": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Thread_ID', ``, 'string') }}",
"sendTo": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('To_Email', ``, 'string') }}"
}
},
"type": "n8n-nodes-base.gmailTool",
"typeVersion": 2.2,
"position": [
-80,
0
],
"id": "e6b53100-a837-4d81-8eb6-70e227f6bd24",
"name": "Draft a Reply",
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"path": "google-search-console"
},
"type": "@n8n/n8n-nodes-langchain.mcpTrigger",
"typeVersion": 2,
"position": [
352,
-192
],
"id": "510a2e35-349f-430b-b5ed-c955df78f8ce",
"name": "Google Search Console"
},
{
"parameters": {
"toolDescription": "List Sites",
"url": "https://www.googleapis.com/webmasters/v3/sites",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "googleOAuth2Api",
"options": {}
},
"type": "n8n-nodes-base.httpRequestTool",
"typeVersion": 4.3,
"position": [
304,
0
],
"id": "df1bd2a2-5007-4980-9ce6-2647c2dd6627",
"name": "List Sites",
"credentials": {
"googleOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"description": "Get search performance data from Google Search Console: clicks, impressions, CTR, position. Use dimensions to group data: \"page\" for URL performance, \"query\" for keyword performance, \"page,query\" for keywords per page, \"date\" for trends over time, \"country\" or \"device\" for segmentation. Data has 2-3 day delay.",
"workflowId": {
"__rl": true,
"value": "YOUR_SUBWORKFLOW_ID",
"mode": "list",
"cachedResultUrl": "/workflow/YOUR_SUBWORKFLOW_ID",
"cachedResultName": "Search Analytics Subworkflow"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {
"startDate": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('startDate', `Start date in YYYY-MM-DD format (e.g., 2025-12-01)`, 'string') }}",
"endDate": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('endDate', `End date in YYYY-MM-DD format (e.g., 2026-01-10). Data has 2-3 day delay.`, 'string') }}",
"dimensions": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('dimensions', `Dimension to group by as JSON array. Examples: [\"page\"], [\"query\"], [\"page\", \"query\"], [\"date\"], [\"country\"], [\"device\"]`, 'string') }}",
"rowLimit": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('rowLimit', `Max rows to return (default 1000, max 25000)`, 'string') }}"
},
"matchingColumns": [],
"schema": [
{
"id": "startDate",
"displayName": "startDate",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "endDate",
"displayName": "endDate",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "dimensions",
"displayName": "dimensions",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "rowLimit",
"displayName": "rowLimit",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
}
},
"type": "@n8n/n8n-nodes-langchain.toolWorkflow",
"typeVersion": 2.2,
"position": [
496,
0
],
"id": "581c3fac-7d3e-4932-8d70-ab9ead5069f3",
"name": "Search Analytics"
},
{
"parameters": {
"content": "## Gmail Tools",
"height": 464,
"width": 592
},
"type": "n8n-nodes-base.stickyNote",
"position": [
-336,
-272
],
"typeVersion": 1,
"id": "ffe6bff9-8b6e-42eb-85c1-1d8502752ade",
"name": "Sticky Note"
},
{
"parameters": {
"content": "## Google Search Console Tools",
"height": 464,
"width": 560,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"position": [
256,
-272
],
"typeVersion": 1,
"id": "3972e3aa-8d1b-4fea-b806-d6ae7a3d3921",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "## Supabase",
"height": 464,
"width": 448,
"color": 4
},
"type": "n8n-nodes-base.stickyNote",
"position": [
1248,
-272
],
"typeVersion": 1,
"id": "2cc5eb37-b7c0-42d6-9bc2-e1bcb0ba2bc1",
"name": "Sticky Note2"
},
{
"parameters": {
"path": "supabase-sql"
},
"type": "@n8n/n8n-nodes-langchain.mcpTrigger",
"typeVersion": 2,
"position": [
1296,
-208
],
"id": "68918aaa-8a18-4d2e-ae99-e4d97527e78a",
"name": "Supabase SQL"
},
{
"parameters": {
"toolDescription": "Check if a URL is indexed in Google and get indexing status details",
"method": "POST",
"url": "https://searchconsole.googleapis.com/v1/urlInspection/index:inspect",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "googleOAuth2Api",
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "inspectionUrl",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', `Full URL to inspect (e.g., https://your-domain.com/blog/your-post)`, 'string') }}"
},
{
"name": "siteUrl",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters1_Value', `Site URL, use: sc-domain:your-domain.com`, 'string') }}"
},
{
"name": "languageCode",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters2_Value', `Language code, use: en-US`, 'string') }}"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequestTool",
"typeVersion": 4.3,
"position": [
688,
0
],
"id": "11ebd978-c84f-4afd-8704-ad5319eece71",
"name": "Inspect URL",
"credentials": {
"googleOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"path": "google-analytics-4"
},
"type": "@n8n/n8n-nodes-langchain.mcpTrigger",
"typeVersion": 2,
"position": [
864,
-208
],
"id": "39f93b8b-3c32-4caf-8a7d-4c9f26b83986",
"name": "Google Analytics 4"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "YOUR_SUBWORKFLOW_ID",
"mode": "list",
"cachedResultUrl": "/workflow/YOUR_SUBWORKFLOW_ID",
"cachedResultName": "Run Report Subworkflow"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {
"propertyId": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('propertyId', `GA4 property ID (e.g., \"520162535\")`, 'string') }}",
"startDate": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('startDate', `Start date: YYYY-MM-DD or \"today\", \"yesterday\", \"7daysAgo\", \"30daysAgo\"`, 'string') }}",
"endDate": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('endDate', `End date: YYYY-MM-DD or \"today\", \"yesterday\"`, 'string') }}",
"dimensions": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('dimensions', `Comma-separated dimensions (e.g., \"pagePath,sessionSource\"). Options: pagePath, pageTitle, sessionSource, sessionMedium, country, city, deviceCategory, date`, 'string') }}",
"metrics": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('metrics', `Comma-separated metrics (e.g., \"sessions,screenPageViews\"). Options: sessions, screenPageViews, activeUsers, newUsers, averageSessionDuration, bounceRate, engagementRate, conversions`, 'string') }}",
"limit": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('limit', `Max rows (default \"10\")`, 'string') }}",
"orderBy": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('orderBy', `Optional. Format: \"metricName:desc\" or \"metricName:asc\" (e.g., \"sessions:desc\")`, 'string') }}"
},
"matchingColumns": [],
"schema": [
{
"id": "propertyId",
"displayName": "propertyId",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "startDate",
"displayName": "startDate",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "endDate",
"displayName": "endDate",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "dimensions",
"displayName": "dimensions",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "metrics",
"displayName": "metrics",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "limit",
"displayName": "limit",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "orderBy",
"displayName": "orderBy",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
}
},
"type": "@n8n/n8n-nodes-langchain.toolWorkflow",
"typeVersion": 2.2,
"position": [
912,
16
],
"id": "7bf74f49-899e-421c-adbf-94e4fb3ce860",
"name": "Run Report"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "YOUR_SUBWORKFLOW_ID",
"mode": "list",
"cachedResultUrl": "/workflow/YOUR_SUBWORKFLOW_ID",
"cachedResultName": "Run Realtime Report Subworkflow"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {
"propertyId": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('propertyId', `GA4 property ID (e.g., \"520162535\")`, 'string') }}",
"dimensions": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('dimensions', `Comma-separated dimensions (e.g., \"unifiedScreenName,country\"). Options: unifiedScreenName, country, city, platform, deviceCategory`, 'string') }}",
"metrics": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('metrics', `Comma-separated metrics (e.g., \"activeUsers,screenPageViews\"). Options: activeUsers, screenPageViews, conversions, eventCount`, 'string') }}",
"limit": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('limit', `Max rows (default \"10\")`, 'string') }}"
},
"matchingColumns": [],
"schema": [
{
"id": "propertyId",
"displayName": "propertyId",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "dimensions",
"displayName": "dimensions",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "metrics",
"displayName": "metrics",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "limit",
"displayName": "limit",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
}
},
"type": "@n8n/n8n-nodes-langchain.toolWorkflow",
"typeVersion": 2.2,
"position": [
1088,
16
],
"id": "480e7be3-6cce-4ad8-a3cd-1d717bc0bc0c",
"name": "Run Realtime Report"
},
{
"parameters": {
"content": "## Google Analytics 4",
"height": 464,
"width": 432,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"position": [
816,
-272
],
"typeVersion": 1,
"id": "49e2771a-7e46-4f8f-9ba4-b69dd4aeb823",
"name": "Sticky Note3"
},
{
"parameters": {
"toolDescription": "Manage the keywords table in Supabase. Actions: 'insert' (add new keyword), 'update' (change status, refresh data), 'delete' (remove keyword). For insert: only add keywords with competition_index \u2264 25 and volume \u2265 5000. Never duplicate existing keywords.",
"method": "POST",
"url": "YOUR_SUPABASE_URL/rest/v1/rpc/manage_keyword",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_SUPABASE_SERVICE_KEY"
},
{
"name": "apikey",
"value": "YOUR_SUPABASE_SERVICE_KEY"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "p_action",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', `Action to perform: insert, update, or delete`, 'string') }}"
},
{
"name": "p_keyword",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters1_Value', `The keyword text (required)`, 'string') }}"
},
{
"name": "p_volume",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters2_Value', `Monthly search volume from Google Ads`, 'string') }}"
},
{
"name": "p_competition_index",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters3_Value', `Competition index 0-100, lower is better`, 'string') }}"
},
{
"name": "p_yoy_trend",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters4_Value', `Year-over-year trend e.g. 0%, -90%, +15%`, 'string') }}"
},
{
"name": "p_icp_fit",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters5_Value', `Target audience description`, 'string') }}"
},
{
"name": "p_angle",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters6_Value', `Content angle/approach for this keyword`, 'string') }}"
},
{
"name": "p_related_posts",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters7_Value', `Array of related post slugs for internal linking`, 'string') }}"
},
{
"name": "p_date_verified",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters8_Value', `Date keyword data was verified (YYYY-MM-DD)`, 'string') }}"
},
{
"name": "p_status",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters9_Value', `Status: available, used, or rejected`, 'string') }}"
},
{
"name": "p_used_in_post",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters10_Value', `Post slug when status is used`, 'string') }}"
},
{
"name": "p_notes",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters11_Value', `Additional notes`, 'string') }}"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequestTool",
"typeVersion": 4.3,
"position": [
1536,
16
],
"id": "498eda14-2081-4d3a-9078-6850d5fd7925",
"name": "Manage Keywords"
},
{
"parameters": {
"toolDescription": "Query the Supabase PostgreSQL database. Returns JSON results. Use this to check table schemas, view data, verify counts, and understand the current database state. Read-only - no modifications allowed.",
"method": "POST",
"url": "YOUR_SUPABASE_URL/rest/v1/rpc/run_sql",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_SUPABASE_SERVICE_KEY"
},
{
"name": "apikey",
"value": "YOUR_SUPABASE_SERVICE_KEY"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "query",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', `SQL SELECT query to execute. Only SELECT and WITH (CTE) queries allowed. Example: SELECT * FROM leads LIMIT 5`, 'string') }}"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequestTool",
"typeVersion": 4.3,
"position": [
1328,
16
],
"id": "0af0c911-f3cd-402a-8eea-5de716bf958e",
"name": "Run Read SQL"
}
],
"connections": {
"Get many emails": {
"ai_tool": [
[
{
"node": "Gmail MCP Server",
"type": "ai_tool",
"index": 0
}
]
]
},
"Draft a Reply": {
"ai_tool": [
[
{
"node": "Gmail MCP Server",
"type": "ai_tool",
"index": 0
}
]
]
},
"List Sites": {
"ai_tool": [
[
{
"node": "Google Search Console",
"type": "ai_tool",
"index": 0
}
]
]
},
"Search Analytics": {
"ai_tool": [
[
{
"node": "Google Search Console",
"type": "ai_tool",
"index": 0
}
]
]
},
"Inspect URL": {
"ai_tool": [
[
{
"node": "Google Search Console",
"type": "ai_tool",
"index": 0
}
]
]
},
"Run Report": {
"ai_tool": [
[
{
"node": "Google Analytics 4",
"type": "ai_tool",
"index": 0
}
]
]
},
"Run Realtime Report": {
"ai_tool": [
[
{
"node": "Google Analytics 4",
"type": "ai_tool",
"index": 0
}
]
]
},
"Manage Keywords": {
"ai_tool": [
[
{
"node": "Supabase SQL",
"type": "ai_tool",
"index": 0
}
]
]
},
"Run Read SQL": {
"ai_tool": [
[
{
"node": "Supabase SQL",
"type": "ai_tool",
"index": 0
}
]
]
}
},
"meta": {
"templateCredsSetupCompleted": true
}
}
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.
gmailOAuth2googleOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Mcp-Servers. Uses mcpTrigger, gmailTool, httpRequestTool, toolWorkflow. Event-driven trigger; 17 nodes.
Source: https://github.com/tiagolemos05/claude-mcps-and-prompts/blob/3e32a4b1934c28f9b79be6f9f3706dbb0d3ecdac/workflows/mcp-servers.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Gmail MCP Server. Uses gmailTool, stickyNote, mcpTrigger. Event-driven trigger; 27 nodes.
Gmail MCP Server. Uses gmailTool, mcpTrigger. Event-driven trigger; 27 nodes.
MCP_GMAIL. Uses gmailTool, mcpTrigger. Event-driven trigger; 5 nodes.
spy tool. Uses gmailTool, httpRequest, formTrigger, stopAndError. Event-driven trigger; 52 nodes.
This template is ideal for HR teams, startup founders, operations leads, remote-first companies, and freelancers managing onboarding manually or across multiple tools.