Construir un servidor MCP de Google Drive personalizado

Avanzado

Este es unBuilding Blocks, AIflujo de automatización del dominio deautomatización que contiene 17 nodos.Utiliza principalmente nodos como Set, Switch, GoogleDrive, ExtractFromFile, GoogleDriveTool, combinando tecnología de inteligencia artificial para lograr automatización inteligente. Construir un servidor MCP personalizado para Google Drive

Requisitos previos
  • Credenciales de API de Google Drive
  • Clave de API de OpenAI
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "meta": {
    "instanceId": "408f9fb9940c3cb18ffdef0e0150fe342d6e655c3a9fac21f0f644e8bedabcd9",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "fb5b682b-5e30-497e-b465-c3369bb3c2e3",
      "name": "Nota adhesiva",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -32,
        -20
      ],
      "parameters": {
        "color": 7,
        "width": 680,
        "height": 660,
        "content": "## 1. Set up an MCP Server Trigger\n[Read more about the MCP Server Trigger](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-langchain.mcptrigger)"
      },
      "typeVersion": 1
    },
    {
      "id": "cfc2c7f1-a6ee-42a9-b955-e5bce012b6e1",
      "name": "Nota adhesiva 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -40,
        -160
      ],
      "parameters": {
        "color": 5,
        "width": 380,
        "height": 100,
        "content": "### Always Authenticate Your Server!\nBefore going to production, it's always advised to enable authentication on your MCP server trigger."
      },
      "typeVersion": 1
    },
    {
      "id": "79586d35-0582-4da8-91da-5bc8451c2089",
      "name": "Cuando se ejecuta por otro flujo de trabajo",
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "position": [
        800,
        360
      ],
      "parameters": {
        "workflowInputs": {
          "values": [
            {
              "name": "operation"
            },
            {
              "name": "folderId"
            },
            {
              "name": "fileId"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "02aee033-58e8-4f33-a18d-b872840e81d8",
      "name": "Google Drive MCP Server",
      "type": "@n8n/n8n-nodes-langchain.mcpTrigger",
      "position": [
        160,
        160
      ],
      "webhookId": "a289c719-fb71-4b08-97c6-79d12645dc7e",
      "parameters": {
        "path": "a289c719-fb71-4b08-97c6-79d12645dc7e"
      },
      "typeVersion": 1
    },
    {
      "id": "e0e50653-d98a-4ad4-a2ed-e1b73332c380",
      "name": "Nota adhesiva 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        680,
        -20
      ],
      "parameters": {
        "color": 7,
        "width": 1340,
        "height": 860,
        "content": "## 2. Handle Multiple Binary Formats via Conversion and AI\n[Read more about the PostgreSQL Node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.postgres/)\n\nMCP clients (or rather, the AI agents) still expect and require text responses from our MCP server.\nN8N can provide the right conversion tools to parse most text formats such as PDF, CSV and XML.\nFor images, audio and video, consider using multimodal LLMs to describe or transcribe the file instead."
      },
      "typeVersion": 1
    },
    {
      "id": "6be1ff49-5edc-42d2-87de-09d207ee7733",
      "name": "Descargar archivo 1",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        1160,
        360
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.fileId }}"
        },
        "options": {
          "googleFileConversion": {
            "conversion": {
              "docsToFormat": "text/plain",
              "slidesToFormat": "application/pdf"
            }
          }
        },
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "yOwz41gMQclOadgu",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "91b0a549-0494-48a1-bdf3-6c2b91409d01",
      "name": "Tipo de archivo",
      "type": "n8n-nodes-base.switch",
      "position": [
        1340,
        320
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "pdf",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "7b6958ce-d553-4379-a5d6-743f39b342d0",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $binary.data.mimeType }}",
                    "rightValue": "application/pdf"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "csv",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "d0816a37-ac06-49e3-8d63-17fcd061e33f",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $binary.data.mimeType }}",
                    "rightValue": "text/csv"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "image",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "589540e1-1439-41e3-ba89-b27f5e936190",
                    "operator": {
                      "type": "boolean",
                      "operation": "true",
                      "singleValue": true
                    },
                    "leftValue": "={{\n[\n  'image/jpeg',\n  'image/jpg',\n  'image/png',\n  'image/gif'\n].some(mimeType => $binary.data.mimeType === mimeType)\n}}",
                    "rightValue": ""
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "audio",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "b8fc61a1-6057-4db3-960e-b8ddcbdd0f31",
                    "operator": {
                      "type": "string",
                      "operation": "contains"
                    },
                    "leftValue": "={{ $binary.data.mimeType }}",
                    "rightValue": "audio"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "video",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "959d65a6-372f-4978-b2d1-f28aa1e372c6",
                    "operator": {
                      "type": "string",
                      "operation": "contains"
                    },
                    "leftValue": "={{ $binary.data.mimeType }}",
                    "rightValue": "video"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.2
    },
    {
      "id": "d88ed202-1121-41db-859d-b31d53d46292",
      "name": "Operación",
      "type": "n8n-nodes-base.switch",
      "position": [
        980,
        360
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "ReadFile",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "b03bb746-dc4e-469c-b8e6-a34c0aa8d0a6",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.operation }}",
                    "rightValue": "readFile"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.2
    },
    {
      "id": "7e8791e6-24c2-441a-8efb-7f4375f2519b",
      "name": "Extraer de PDF",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        1620,
        80
      ],
      "parameters": {
        "options": {},
        "operation": "pdf"
      },
      "typeVersion": 1
    },
    {
      "id": "2b33623c-cea4-4a83-80ef-f852b9a3d126",
      "name": "Extraer de CSV",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        1620,
        260
      ],
      "parameters": {
        "options": {
          "encoding": "utf-8",
          "headerRow": false,
          "relaxQuotes": true,
          "includeEmptyCells": true
        }
      },
      "typeVersion": 1
    },
    {
      "id": "6ca2542d-225e-4a65-b5ce-3edafb11379c",
      "name": "Obtener respuesta de PDF",
      "type": "n8n-nodes-base.set",
      "position": [
        1780,
        80
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a481cde3-b8ec-4d97-aa13-4668bd66c24d",
              "name": "response",
              "type": "string",
              "value": "={{ $json.text }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "3d1c4aa6-cac1-4957-ab7e-3134368e4b53",
      "name": "Obtener respuesta de CSV",
      "type": "n8n-nodes-base.set",
      "position": [
        1780,
        260
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a481cde3-b8ec-4d97-aa13-4668bd66c24d",
              "name": "response",
              "type": "string",
              "value": "={{\n$input.all()\n  .map(item => item.json.row.map(cell => `\"${cell}\"`).join(','))\n  .join('\\n')\n}}"
            }
          ]
        }
      },
      "executeOnce": true,
      "typeVersion": 3.4
    },
    {
      "id": "141444f9-e937-41f9-ab97-09624646ddba",
      "name": "Leer archivo desde GDrive",
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "position": [
        400,
        380
      ],
      "parameters": {
        "name": "ReadFile",
        "workflowId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $workflow.id }}"
        },
        "description": "Call this tool to download and read the contents of a file within google drive.",
        "workflowInputs": {
          "value": {
            "fileId": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('fileId', ``, 'string') }}",
            "folderId": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('folderId', ``, 'string') }}",
            "operation": "readFile"
          },
          "schema": [
            {
              "id": "operation",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "operation",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "folderId",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "folderId",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "fileId",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "fileId",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "b5851527-0b57-447b-ac8c-10408a684862",
      "name": "Buscar archivos en GDrive",
      "type": "n8n-nodes-base.googleDriveTool",
      "position": [
        240,
        380
      ],
      "parameters": {
        "limit": 10,
        "filter": {
          "driveId": {
            "mode": "list",
            "value": "My Drive"
          },
          "whatToSearch": "files"
        },
        "options": {},
        "resource": "fileFolder",
        "queryString": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Search_Query', ``, 'string') }}"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "yOwz41gMQclOadgu",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "98197c91-c7e9-4fbb-a2b1-c16c873fa0a1",
      "name": "Analizar imagen",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1620,
        440
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini",
          "cachedResultName": "GPT-4O-MINI"
        },
        "options": {},
        "resource": "image",
        "inputType": "base64",
        "operation": "analyze"
      },
      "credentials": {
        "openAiApi": {
          "id": "8gccIjcuf3gvaoEr",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "b44a787a-c670-47e1-b87e-d880425ce610",
      "name": "Transcribir audio",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1620,
        620
      ],
      "parameters": {
        "options": {},
        "resource": "audio",
        "operation": "transcribe"
      },
      "credentials": {
        "openAiApi": {
          "id": "8gccIjcuf3gvaoEr",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "1e1a358d-769e-48c9-bf27-6a3cfaaacb14",
      "name": "Nota adhesiva 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -500,
        -420
      ],
      "parameters": {
        "width": 440,
        "height": 1060,
        "content": "## Try It Out!\n### This n8n demonstrates how to build a simple Google Drive MCP server to search and get contents of files from Google Drive.\n\nThis MCP example is based off an official MCP reference implementation which can be found here -https://github.com/modelcontextprotocol/servers/tree/main/src/gdrive\n\n### How it works\n* A MCP server trigger is used and connected to 1x Google Drive tool and 1x Custom Workflow tool.\n* The Google Drive tool is set to perform a search on files within our Google Drive folder.\n* The Custom Workflow tool downloads target files found in our drive and converts the binaries to their text representation. Eg. PDFs have only their text contents extracted and returned to the MCP client.\n\n### How to use\n* This Google Drive MCP server allows any compatible MCP client to manage a person or shared Google Drive. Simple select a drive or for better control, specify a folder within the drive to scope the operations to.\n* Connect your MCP client by following the n8n guidelines here - https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-langchain.mcptrigger/#integrating-with-claude-desktop\n* Try the following queries in your MCP client:\n  * \"Please help me search for last month's expense reports.\"\n * \"What does the company policy document say about cancellations and refunds?\"\n\n### Requirements\n* Google Drive for documents.\n* OpenAI for image and audio understanding.\n* MCP Client or Agent for usage such as Claude Desktop - https://claude.ai/download\n\n### Customising this workflow\n* Add additional capabilities such as renaming, moving and/or deleting files.\n* Remember to set the MCP server to require credentials before going to production and sharing this MCP server with others!"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "91b0a549-0494-48a1-bdf3-6c2b91409d01": {
      "main": [
        [
          {
            "node": "7e8791e6-24c2-441a-8efb-7f4375f2519b",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "2b33623c-cea4-4a83-80ef-f852b9a3d126",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "98197c91-c7e9-4fbb-a2b1-c16c873fa0a1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "b44a787a-c670-47e1-b87e-d880425ce610",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "d88ed202-1121-41db-859d-b31d53d46292": {
      "main": [
        [
          {
            "node": "6be1ff49-5edc-42d2-87de-09d207ee7733",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6be1ff49-5edc-42d2-87de-09d207ee7733": {
      "main": [
        [
          {
            "node": "91b0a549-0494-48a1-bdf3-6c2b91409d01",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2b33623c-cea4-4a83-80ef-f852b9a3d126": {
      "main": [
        [
          {
            "node": "3d1c4aa6-cac1-4957-ab7e-3134368e4b53",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7e8791e6-24c2-441a-8efb-7f4375f2519b": {
      "main": [
        [
          {
            "node": "6ca2542d-225e-4a65-b5ce-3edafb11379c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "141444f9-e937-41f9-ab97-09624646ddba": {
      "ai_tool": [
        [
          {
            "node": "02aee033-58e8-4f33-a18d-b872840e81d8",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "b5851527-0b57-447b-ac8c-10408a684862": {
      "ai_tool": [
        [
          {
            "node": "02aee033-58e8-4f33-a18d-b872840e81d8",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "79586d35-0582-4da8-91da-5bc8451c2089": {
      "main": [
        [
          {
            "node": "d88ed202-1121-41db-859d-b31d53d46292",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿Cómo usar este flujo de trabajo?

Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.

¿En qué escenarios es adecuado este flujo de trabajo?

Avanzado - Bloques de construcción, Inteligencia Artificial

¿Es de pago?

Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.

Información del flujo de trabajo
Nivel de dificultad
Avanzado
Número de nodos17
Categoría2
Tipos de nodos10
Descripción de la dificultad

Adecuado para usuarios avanzados, flujos de trabajo complejos con 16+ nodos

Autor
Jimleuk

Jimleuk

@jimleuk

Freelance consultant based in the UK specialising in AI-powered automations. I work with select clients tackling their most challenging projects. For business enquiries, send me an email at hello@jimle.uk LinkedIn: https://www.linkedin.com/in/jimleuk/ X/Twitter: https://x.com/jimle_uk

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34