{"id":124854,"date":"2025-11-27T13:12:29","date_gmt":"2025-11-27T13:12:29","guid":{"rendered":"\/ph\/tutorials\/how-to-build-n8n-personal-assistant-with-mcp\/"},"modified":"2026-04-17T06:02:39","modified_gmt":"2026-04-17T06:02:39","slug":"how-to-build-n8n-personal-assistant-with-mcp","status":"publish","type":"post","link":"\/ph\/tutorials\/how-to-build-n8n-personal-assistant-with-mcp","title":{"rendered":"How to built a fully autonomous personal assistant in n8n using MCP"},"content":{"rendered":"<p>My personal assistant just scheduled three meetings, summarized my unread emails, and drafted a reply &ndash; all while I was making coffee.<\/p><p>This wasn&rsquo;t done with a simple script. I built a true AI agent by designing a custom <strong>automation workflow in n8n and running it on a Hostinger VPS<\/strong>.<\/p><p>The core of this system is the Model Context Protocol (MCP), which enables an AI &ldquo;brain&rdquo; to securely connect with and control other applications, such as Google Calendar and Gmail.<\/p><p>It&rsquo;s a powerful way to create a self-hosted n8n personal assistant that interprets requests and automates tasks across multiple platforms.<\/p><p>Continue reading as I guide you through my entire process, from initial design to final build, and provide you with a downloadable workflow template so you can deploy your own assistant right away.<\/p><p>\n\n\n\n<\/p><h2 class=\"wp-block-heading\" id=\"h-what-is-an-mcp-powered-personal-assistant\"><strong>What is an MCP-powered personal assistant?<\/strong><\/h2><p>An MCP-powered personal assistant is an <strong>automation workflow that utilizes an AI language model to interpret requests and the Model Context Protocol (MCP) to execute complex, multi-step tasks across various applications<\/strong>.<\/p><p>This approach to AI integration lets you build a truly multi-platform assistant.<\/p><p>To make sense of this, let&rsquo;s break down the three core components:<\/p><ul class=\"wp-block-list\">\n<li><strong>n8n<\/strong>. The automation platform where the entire workflow lives. Think of <a href=\"\/ph\/tutorials\/what-is-n8n\/\">n8n<\/a> as the workshop where you build and run your assistant. It&rsquo;s the foundation for this open-source automation project with the MCP.<\/li>\n\n\n\n<li><strong>The AI &ldquo;brain.&rdquo;<\/strong> A <a href=\"\/ph\/tutorials\/large-language-models\/\">large language model (LLM)<\/a>, like Gemini or GPT-4, that interprets your commands. When you ask it to do something, it determines the necessary steps and selects the appropriate tools to trigger tasks.<\/li>\n\n\n\n<li><strong>The &ldquo;nervous system (MCP)&rdquo;<\/strong>. Acting as the assistant&rsquo;s nervous system, MCP is the communication layer that lets the AI brain securely control other tools, such as Google Calendar or Gmail. For this type of agentic work, an <a href=\"\/ph\/tutorials\/how-to-use-n8n-with-mcp\/\">n8n-MCP integration<\/a> is far more reliable than using simple webhooks, as it establishes a persistent and secure channel for executing complex commands.<\/li>\n<\/ul><h2 class=\"wp-block-heading\" id=\"h-why-i-decided-to-build-this-assistant\"><strong>Why I decided to build this assistant<\/strong><\/h2><p>I decided to build this personal assistant <strong>to <\/strong><strong>solve a specific problem: reducing the time I spent switching between apps for routine tasks<\/strong>.<\/p><p>My morning routine was a classic example. I&rsquo;d check my Google Calendar for the day&rsquo;s schedule, then switch to Gmail to scan for urgent emails, and then open another app to create a to-do list based on what I found.<\/p><p>It was a repetitive, manual process that wasted valuable time.<\/p><p>While I could create separate, simple automations for some of these steps, they couldn&rsquo;t &ldquo;talk&rdquo; to each other. A basic workflow can fetch calendar events, and another can check emails, but neither can understand context or make decisions based on the other&rsquo;s findings.<\/p><p>I needed more than just a script &ndash; I needed an AI-driven &ldquo;agent&rdquo; that could understand a natural language command like, &ldquo;Summarize my morning and draft a priority list.&rdquo;<\/p><p>To truly automate tasks with n8n in a dynamic way, I had to move beyond linear workflows. This justified the complexity of a full AI integration, leading me to design a system that not only followed instructions but also understood the intent behind them.<\/p><h2 class=\"wp-block-heading\" id=\"h-how-i-designed-my-assistant-s-workflow\"><strong>How I designed my assistant&rsquo;s workflow<\/strong><\/h2><p>I designed my autonomous assistant&rsquo;s workflow by<strong> conceptualizing the logic and then creating a visual diagram of the architecture before modifying any nodes in n8n<\/strong>.<\/p><p>First, I mapped the logic. Before you can create an automation workflow, you need to understand every step of the process you&rsquo;re trying to replace.<\/p><p>I began by writing down the exact sequence of events for a common task, such as scheduling a meeting. This involved defining the inputs (the user&rsquo;s request), the decision points (required information like the date or number of attendees), and the final output (a calendar event and a confirmation message).<\/p><p>Secondly, I visualized the entire architecture. A simple list isn&rsquo;t enough for a dynamic system, so I created a diagram to show how all the components connect and how data flows between them. This visual map shows the complete journey:<\/p><ul class=\"wp-block-list\">\n<li><strong>The command input<\/strong>. The process starts when the assistant receives a command from a user.<\/li>\n\n\n\n<li><strong>The AI decision core<\/strong>. The command is sent to the AI model, which acts as the central decision-making hub (the &ldquo;brain&rdquo;). It interprets the request and decides which tool is needed to fulfill it.<\/li>\n\n\n\n<li><strong>Tool selection via MCP<\/strong>. This is the critical step. The AI doesn&rsquo;t directly control the tool. Instead, it sends a formatted request to the MCP client node in n8n.<\/li>\n\n\n\n<li><strong>Execution and result<\/strong>. The MCP client node securely triggers the correct tool (such as Google Calendar) to take action. Once the task is complete, it returns a result (like &ldquo;event created successfully&rdquo;) through the workflow.<\/li>\n<\/ul><p>Here&rsquo;s what that architecture looks like on the Miro board:<\/p><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a5884f46d8e5\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a5884f46d8e5\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2025\/10\/miro-board-ai-assistant-n8n-mcp-workflow-architecture.png\/w=1024,h=1024,fit=scale-down\" alt=\"A flowchart diagram in Miro of the n8n AI assistant's workflow architecture using the MCP protocol.\" class=\"wp-image-135374\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><h2 class=\"wp-block-heading\" id=\"h-what-i-prepared-before-building-my-assistant\"><strong>What I prepared before building my assistant<\/strong><\/h2><p>To build my self-hosted n8n personal assistant, I prepared <strong>a reliable server, an n8n instance, and the API credentials for the services I wanted to connect<\/strong>.<\/p><p>Here are the specific prerequisites:<\/p><ul class=\"wp-block-list\">\n<li><strong>A virtual private server (VPS)<\/strong>. To keep my data private and to maintain complete control, I built this assistant on a <a href=\"\/ph\/self-hosted-n8n\">self-hosted n8n VPS<\/a>. I chose Hostinger because it lets me skip the entire setup process, as n8n comes pre-installed as a template. It provides full root access and dedicated resources that I need to ensure the assistant remains stable and performs well 24\/7.<\/li>\n\n\n\n<li><strong>A working n8n instance<\/strong>. Usually, after setting up a server, the next step is to install n8n. However, since I used Hostinger, my n8n instance was pre-installed and ready to go. If you&rsquo;re setting up an instance on a different server or prefer manual setup using commands, this guide on <a href=\"\/ph\/tutorials\/how-to-install-n8n\/\">how to install n8n<\/a> covers the details.<\/li>\n\n\n\n<li><strong>API keys and credentials<\/strong>. The final step was to gather the API credentials that would let my n8n workflow securely access my data in other applications. I needed credentials for three specific services:\n<ul class=\"wp-block-list\">\n<li><strong>OpenAI<\/strong>. To provide the AI &ldquo;brain&rdquo; for the assistant.<\/li>\n\n\n\n<li><strong>Google Workspace<\/strong>. To grant access for reading my calendar and managing emails in Gmail.<\/li>\n\n\n\n<li><strong>Slack<\/strong>. To create a notification system. I configured it so that if a workflow failed, it would immediately send an alert to a private Slack channel, letting me fix the issue.<\/li>\n<\/ul>\n<\/li>\n<\/ul><p>        <div class=\"protip\">\n            <div class=\"protip__heading\">\n                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                    <path d=\"M1.49234 23.5024C1.23229 23.5024 0.972242 23.4024 0.782206 23.2123C0.562165 22.9923 0.452144 22.6822 0.502153 22.3722C0.562165 21.9221 1.14227 17.9113 3.00262 16.351C3.63274 15.8209 4.43289 15.5509 5.26305 15.5609C6.09321 15.5909 6.87335 15.9109 7.47347 16.4911C8.6937 17.6913 8.76371 19.6717 7.6435 20.9919C6.0832 22.8523 2.08245 23.4324 1.63237 23.4924C1.59236 23.4924 1.54235 23.4924 1.50234 23.4924L1.49234 23.5024ZM5.16303 17.5613C4.84297 17.5613 4.53291 17.6713 4.29287 17.8813C3.60274 18.4614 3.07264 19.9317 2.75258 21.242C4.06282 20.9219 5.5331 20.3918 6.11321 19.7017C6.55329 19.1716 6.54329 18.3814 6.0832 17.9213C5.85316 17.7013 5.5431 17.5713 5.20304 17.5613C5.19304 17.5613 5.17303 17.5613 5.16303 17.5613ZM11.7243 21.8821C11.4942 21.8821 11.2642 21.8021 11.0841 21.652C10.8541 21.462 10.7241 21.1819 10.7241 20.8819V15.9109L8.08358 13.2705H3.11264C2.81259 13.2705 2.53254 13.1404 2.3425 12.9104C2.15246 12.6803 2.07245 12.3803 2.12246 12.0902C2.19247 11.7102 2.84259 8.36953 4.70294 7.12929C6.33325 6.04909 8.96375 6.49918 10.244 6.80923C11.5442 4.96889 13.2546 3.4286 15.2349 2.33839C17.4553 1.11816 19.9858 0.518051 22.4963 0.498047C23.0464 0.498047 23.4865 0.948132 23.4865 1.49824C23.4865 5.0389 22.3763 9.97983 17.1753 13.7605C17.4853 15.0408 17.9354 17.6613 16.8552 19.2816C15.615 21.1419 12.2744 21.7921 11.8943 21.8621C11.8343 21.8721 11.7743 21.8821 11.7143 21.8821H11.7243ZM12.7245 16.181V19.6016C13.7146 19.2916 14.7948 18.7915 15.2049 18.1814C15.675 17.4812 15.605 16.091 15.385 14.9008C14.5248 15.3808 13.6346 15.8109 12.7245 16.181ZM9.66388 12.0302L11.9643 14.3307C13.1845 13.8306 14.3648 13.2204 15.485 12.5103C19.9358 9.51974 21.2361 5.60901 21.4561 2.53843C19.6157 2.67846 17.8254 3.20856 16.2051 4.09872C14.2847 5.14892 12.6544 6.68921 11.4942 8.54956C10.7841 9.65977 10.174 10.82 9.66388 12.0302ZM4.39289 11.2701H7.81353C8.1936 10.3599 8.63368 9.46974 9.11377 8.60957C7.92355 8.38953 6.51329 8.31952 5.81315 8.78961C5.19304 9.19968 4.70294 10.3099 4.39289 11.2701Z\" fill=\"#673DE6\"\/>\n                <\/svg>\n                <p class=\"protip__title\">\n                     &#128200; By the numbers                <\/p>\n            <\/div>\n            <p class=\"protip__content\">Since its launch in January 2025, Hostinger&rsquo;s n8n template has surpassed <strong>50,000<\/strong> total installations as of September 2025. Averaging around <strong>800<\/strong> new installs per month, it has quickly become <strong> Hostinger&rsquo;s #1 most popular template<\/strong> and its second-most popular VPS product overall, behind only the regular VPS service.<\/p>\n                    <\/div>\n        \n\n\n<figure class=\"wp-block-image size-large\"><a href=\"\/ph\/vps-hosting\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2023\/02\/VPS-hosting-banner.png\/w=1024,h=1024,fit=scale-down\" alt=\"\" class=\"wp-image-77934\" srcset=\"https:\/\/www.hostinger.com\/ph\/tutorials\/wp-content\/uploads\/sites\/44\/2023\/02\/VPS-hosting-banner.png 1024w, https:\/\/www.hostinger.com\/ph\/tutorials\/wp-content\/uploads\/sites\/44\/2023\/02\/VPS-hosting-banner-300x88.png 300w, https:\/\/www.hostinger.com\/ph\/tutorials\/wp-content\/uploads\/sites\/44\/2023\/02\/VPS-hosting-banner-150x44.png 150w, https:\/\/www.hostinger.com\/ph\/tutorials\/wp-content\/uploads\/sites\/44\/2023\/02\/VPS-hosting-banner-768x225.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<\/p><h2 class=\"wp-block-heading\" id=\"h-how-i-built-my-personal-assistant-in-n8n-with-mcp\"><strong>How I built my personal assistant in n8n with MCP<\/strong><\/h2><p>My process for this n8n-MCP project breaks down into five direct stages: <strong>setting up the conversation entry point, building the AI core with memory, establishing the tool communication channel with MCP, connecting the assistant&rsquo;s tools, and implementing error handling<\/strong>.<\/p><p>If you want to jump right in or follow along with a completed version, you can download the full workflow templates I used here:<\/p><div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div><div class=\"wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-769315fb wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button has-custom-width wp-block-button__width-50\"><a class=\"wp-block-button__link has-white-color has-text-color has-background has-link-color has-custom-font-size wp-element-button\" href=\"https:\/\/assets.hostinger.com\/content\/AI_personal_assistant_and_error_handling_workflows%20(5).zip\" style=\"border-radius:10px;background-color:#673de6;font-size:18px\" target=\"_blank\" rel=\"noopener\">Get my n8n workflows for free!<\/a><\/div>\n<\/div><div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div><h3 class=\"wp-block-heading\" id=\"h-step-1-set-up-the-conversation-entry-point\"><strong>Step 1: Set up the conversation entry point<\/strong><\/h3><p>The first step was to create the entry point for my assistant. I achieved this by adding the <strong>When chat message received<\/strong> node to my workflow.<\/p><p>This specific node is a <strong>Chat Trigger<\/strong>, serving as the front door for the entire automation. Its job is to listen for incoming messages and start the workflow whenever a new one arrives.<\/p><p>For this build, I used the built-in testing interface that this node provides. So, when I manually execute the workflow in the n8n editor, a chat box appears in the corner.<\/p><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a5884f473c1f\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a5884f473c1f\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2025\/10\/n8n-chat-trigger-chat-box.png\/w=1024,h=1024,fit=scale-down\" alt=\"A screenshot of the n8n editor's built-in testing chat box for the Chat Trigger node.\" class=\"wp-image-135375\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>This lets me send prompts directly to the assistant to test its responses without needing to set up any external application.<\/p><h3 class=\"wp-block-heading\" id=\"h-step-2-build-the-ai-core-with-an-agent-llm-and-memory\"><strong>Step 2: Build the AI core with an agent, LLM, and memory<\/strong><\/h3><p>With the entry point configured, the next step was to build the assistant&rsquo;s brain. I added<strong> <\/strong>an <strong>AI Agent<\/strong> node and connected it to a language model for thinking and a memory node for context.<\/p><p>The central component here is the <strong>Personal Assistant<\/strong> node, which receives the prompt from the trigger and orchestrates the entire response.<\/p><p>I then connected two essential inputs to this agent:<\/p><ul class=\"wp-block-list\">\n<li><strong>OpenAI Chat Model<\/strong>. This is the LLM that does the actual thinking. I configured it to use the <strong>gpt-4.1-2025-04-14<\/strong> model. It&rsquo;s responsible for understanding the user&rsquo;s request.<\/li>\n<\/ul><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a5884f476f4d\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a5884f476f4d\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2025\/10\/n8n-openai-chat-model-gpt-4.1-2025-04-14-scaled.png\/w=1024,h=1024,fit=scale-down\" alt=\"The n8n OpenAI Chat Model node's parameters, with the gpt-4.1-2025-04-14 model selected.\" class=\"wp-image-135376\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><ul class=\"wp-block-list\">\n<li><strong>Simple Memory<\/strong>. This node provides the assistant with conversational memory, letting it recall previous messages within the same session. This is crucial for handling follow-up questions without me having to repeat the context.<\/li>\n<\/ul><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a5884f47a76c\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a5884f47a76c\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2025\/10\/n8n-simple-memory-context-window-length-5-scaled.png\/w=1024,h=1024,fit=scale-down\" alt=\"The Simple Memory node in n8n, with the context window length parameter set to 5.\" class=\"wp-image-135377\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>To guide the LLM&rsquo;s behavior, I configured a <strong>system prompt<\/strong> within the <strong>Personal Assistant<\/strong> agent node. This is a critical step where I provide the AI with its core instructions, telling it how to act and what its purpose is. For example, I included instructions like:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">You are a helpful personal assistant. Based on the user&rsquo;s request, you must choose one of the available tools to assist them.<\/pre><p>This ensures the assistant stays on task and uses the tools I provide.<\/p><h3 class=\"wp-block-heading\" id=\"h-step-3-establish-ai-tool-communication-channel-with-mcp\"><strong>Step 3: Establish AI-tool communication channel with MCP<\/strong><\/h3><p>The AI core requires a way to communicate with its tools. For this, I set<strong> <\/strong>up a two-part system using the<strong> MCP Server Trigger<\/strong> and the <strong>MCP Client<\/strong> nodes.<\/p><p>This process establishes a secure communication channel for the AI agent to interact with tools. Here&rsquo;s how I configured it:<\/p><ul class=\"wp-block-list\">\n<li>I added an <strong>MCP Server Trigger<\/strong> node to my canvas. This node acts as a central hub that listens for instructions from the AI agent. After that, I copied its unique webhook URL, which is needed for the client to connect to it.<\/li>\n<\/ul><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a5884f47df9d\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a5884f47df9d\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2025\/10\/n8n-mcp-server-trigger-test-url.png\/public\" alt=\"The n8n MCP Server Trigger node, with its unique Test URL field highlighted for copying.\" class=\"wp-image-135378\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><ul class=\"wp-block-list\">\n<li>I also included an <strong>MCP Client<\/strong> node. I configured its <strong>SSE Endpoint<\/strong> field by pasting the URL I copied from the <strong>MCP Server Trigger<\/strong>. Then, I connected the <strong>MCP Client<\/strong> node to the <strong>Tool<\/strong> input of my <strong>Personal Assistant<\/strong> agent.<\/li>\n<\/ul><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a5884f4815b4\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a5884f4815b4\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2025\/10\/n8n-mcp-client.png\/public\" alt=\"The n8n MCP Client node with the SSE Endpoint configured.\" class=\"wp-image-135379\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>This two-node setup is the core of the MCP in this workflow. The agent doesn&rsquo;t call tools like Google Calendar directly.<\/p><p>Instead, it sends an instruction to the <strong>MCP Client<\/strong>, and the client securely passes that message to the <strong>MCP Server<\/strong>, which then activates the correct tool. This makes the system more organized and secure.<\/p><h3 class=\"wp-block-heading\" id=\"h-step-4-connect-the-assistant-s-tools\"><strong>Step 4: Connect the assistant&rsquo;s tools<\/strong><\/h3><p>With the communication channel ready, I equipped my assistant with the necessary skills by adding tool nodes for each desired capability and connecting them all to the <strong>MCP Server Trigger<\/strong>.<\/p><p>The <strong>MCP Server Trigger<\/strong> acts as a switchboard for all the assistant&rsquo;s abilities. Any node that I connect to becomes a tool that the AI agent can choose to use.<\/p><p>For this project, I gave my assistant skills across three main services:<\/p><ul class=\"wp-block-list\">\n<li><strong>Google Calendar<\/strong>. I added several <strong>Google Calendar Tool<\/strong> nodes for actions like creating, updating, and finding events. For example, the <strong>Create event<\/strong> node lets the assistant schedule new meetings.<\/li>\n<\/ul><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a5884f4846dc\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a5884f4846dc\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2025\/10\/n8n-calendar-nodes.png\/public\" alt=\"Several n8n Google Calendar Tool nodes connected to the MCP Server Trigger on the canvas.\" class=\"wp-image-135380\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><ul class=\"wp-block-list\">\n<li><strong>Gmail<\/strong>. I added <strong>Gmail Tool<\/strong> nodes to let the assistant find, read, and send emails. The <strong>Send email<\/strong> node, for instance, enables it to dispatch messages on my behalf.<\/li>\n\n\n\n<li><strong>Google Drive<\/strong>. I used <strong>Google Drive Tool<\/strong> nodes to manage files. This included nodes for creating documents from text, searching for files, and sharing them.<\/li>\n<\/ul><p>With all the tools in place, the main workflow canvas is now complete. Here&rsquo;s what it looks like:<\/p><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a5884f487962\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a5884f487962\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2025\/10\/n8n-ai-personal-assistant-workflow-canvas.png\/w=1024,h=1024,fit=scale-down\" alt=\"A complete overview of the n8n workflow canvas for the AI personal assistant project.\" class=\"wp-image-135381\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><h3 class=\"wp-block-heading\" id=\"h-step-5-implement-robust-error-handling\"><strong>Step 5: Implement robust error handling<\/strong><\/h3><p>The final step in building a reliable assistant is to plan for failures.<\/p><p>Instead of adding complex error logic to my main workflow, I created a dedicated error-handling workflow focused on notifications and linked it to my main assistant workflow using n8n&rsquo;s settings.<\/p><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a5884f489cab\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a5884f489cab\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2025\/10\/n8n-error-handling-workflow-canvas.png\/w=1024,h=1024,fit=scale-down\" alt=\"The simple error-handling workflow in n8n, with an Error Trigger and a Slack node.\" class=\"wp-image-135382\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>My error workflow is simple. It starts with an <strong>Error Trigger<\/strong> node, a special trigger that runs only when another workflow assigned to it fails.<\/p><p>This trigger connects to a <strong>Slack<\/strong> node configured to send a message. I customized the notification to include dynamic data, such as the workflow name, the node that failed, and a direct link to the execution log. This way, I gather all the necessary details to debug the issue quickly.<\/p><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a5884f48d162\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a5884f48d162\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2025\/10\/n8n-slack-send-a-message.png\/w=1024,h=1024,fit=scale-down\" alt=\"The n8n Slack node's parameters, showing the custom error message with dynamic data.\" class=\"wp-image-135383\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Using Slack for notifications is a matter of preference. You can easily replace this node with another service. For example, you can set up an <a href=\"\/ph\/tutorials\/n8n-telegram-integration\/\">n8n Telegram integration<\/a> to receive alerts, or follow our guide on <a href=\"\/ph\/tutorials\/how-to-integrate-n8n-with-whatsapp\/\">integrating n8n with WhatsApp<\/a> for notifications.<\/p><p>After saving the error workflow, the final step was connecting it. I went back to my main <strong>Personal Assistant<\/strong> workflow, opened the <strong>Settings<\/strong> menu, navigated to the <strong>Error Workflow<\/strong> field, and selected the new workflow I had just created.<\/p><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a5884f490845\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a5884f490845\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2025\/10\/n8n-settings-error-workflow-highlighted.png\/w=1024,h=1024,fit=scale-down\" alt=\"The n8n Workflow settings panel, with the Error Workflow field highlighted.\" class=\"wp-image-135384\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><h2 class=\"wp-block-heading\" id=\"h-what-my-personal-assistant-can-do-practical-demonstrations\"><strong>What my personal assistant can do (practical demonstrations)<\/strong><\/h2><p>My AI personal assistant using n8n can now run workflows that handle multi-step tasks that traditionally require manual intervention. Here are a few practical examples of what it can do.<\/p><p><div class=\"announcement-block announcement-block--important\">\n            <span class=\"announcement-block__heading\">\n                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n                          d=\"M12 22.5C17.799 22.5 22.5 17.799 22.5 12C22.5 6.20101 17.799 1.5 12 1.5C6.20101 1.5 1.5 6.20101 1.5 12C1.5 17.799 6.20101 22.5 12 22.5ZM13.637 7.65198C13.637 6.74791 12.9041 6.01501 12 6.01501C11.0959 6.01501 10.363 6.74791 10.363 7.65198C10.5335 9.53749 10.875 13.383 10.875 13.383C10.875 14.0043 11.3787 14.508 12 14.508C12.6213 14.508 13.125 14.0043 13.125 13.383V13.38L13.637 7.65198ZM11.9927 15.714C11.3714 15.714 10.8677 16.2177 10.8677 16.839C10.8677 17.4603 11.3714 17.964 11.9927 17.964H12.0073C12.6286 17.964 13.1323 17.4603 13.1323 16.839C13.1323 16.2177 12.6286 15.714 12.0073 15.714H11.9927Z\"\n                          fill=\"#FEA419\"\/>\n                <\/svg>\n                Important\n            <\/span>\n            <p class=\"announcement-block__content\">\n                <strong>Important!<\/strong> Since this workflow is running in test mode, you must click the <strong>Execute Workflow<\/strong> button in the n8n editor before sending each command in the chat interface. If you don&rsquo;t, the trigger won&rsquo;t be active, and you&rsquo;ll see a <strong>404 Not Found<\/strong> error message.\n            <\/p><\/div>\n\n\n\n<\/p><h3 class=\"wp-block-heading\" id=\"h-use-case-1-scheduling-a-meeting-instantly\"><strong>Use case 1: Scheduling a meeting instantly<\/strong><\/h3><p>Scheduling meetings often involves checking my calendar, finding a free time slot, and then creating an invitation.<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">This use case demonstrates how the assistant can handle that entire process from a single text prompt, saving me several minutes of context switching.<\/pre><ul class=\"wp-block-list\">\n<li><strong>The command<\/strong>:<\/li>\n<\/ul><p>Schedule a meeting with alex@domain.tld for October 22, 2025, at 2 PM for an hour to discuss the project proposal.<\/p><ul class=\"wp-block-list\">\n<li><strong>The process<\/strong>: Behind the scenes, the AI agent understands the request and triggers the <strong>Create event<\/strong> node in my workflow, passing along all the necessary details.<\/li>\n\n\n\n<li><strong>The result<\/strong>: A moment later, I get a confirmation in the chat. The event is instantly added to my Google Calendar, and an invitation is sent to <strong>alex@domain.tld<\/strong>, which will also appear on their calendar.<\/li>\n<\/ul><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a5884f493fea\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a5884f493fea\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2025\/10\/n8n-chat-box-schedule-meeting-output.png\/w=1024,h=1024,fit=scale-down\" alt=\"The n8n chat box showing the confirmation message after successfully scheduling a meeting.\" class=\"wp-image-135385\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><h3 class=\"wp-block-heading\" id=\"h-use-case-2-researching-and-creating-a-document\"><strong>Use case 2: Researching and creating a document<\/strong><\/h3><p>This use case shows how the assistant can act as a research and drafting partner. Instead of me having to find information and then manually create a document to store it, the assistant can do it in one step.<\/p><ul class=\"wp-block-list\">\n<li><strong>The command<\/strong>:<\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Research the topic &lsquo;What is Retrieval-Augmented Generation (RAG)?&rsquo; and create a document based on your findings.<\/pre><ul class=\"wp-block-list\">\n<li><strong>The process<\/strong>: When it receives this command, the agent uses the LLM&rsquo;s internal knowledge to generate an explanation of RAG. It then passes this generated text directly to the <strong>Create file from text<\/strong> tool, which saves it as a new Google Doc.<\/li>\n\n\n\n<li><strong>The result<\/strong>: The assistant replies in the chat, confirming the document has been created and providing a direct link to the new file. This lets me access the document immediately without having to search for it in Google Drive.<\/li>\n<\/ul><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a5884f497d5f\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a5884f497d5f\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2025\/10\/n8n-chat-box-create-document-output.png\/w=1024,h=1024,fit=scale-down\" alt=\"The n8n chat box showing the assistant's confirmation and a link to the created document.\" class=\"wp-image-135386\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><h3 class=\"wp-block-heading\" id=\"h-use-case-3-drafting-and-sending-emails\"><strong>Use case 3: Drafting and sending emails<\/strong><\/h3><p>Drafting routine follow-up emails is another task that breaks my focus. This demonstration shows how I can delegate the entire process to the assistant, from composing the message to sending it.<\/p><ul class=\"wp-block-list\">\n<li><strong>The command<\/strong>:<\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Send an email to taylor@domain.tld with the subject &lsquo;Following Up&rsquo; and ask if they have had a chance to review the document I sent.<\/pre><ul class=\"wp-block-list\">\n<li><strong>The process<\/strong>: The agent parses this command to identify the recipient, subject line, and message body. It then feeds this information into the <strong>Send email<\/strong> tool, which connects to my Gmail account.<\/li>\n\n\n\n<li><strong>The result<\/strong>: The assistant confirms the email has been sent. If I check my <strong>Sent<\/strong> folder in Gmail, I&rsquo;ll see the new message, perfectly drafted and addressed, without me having to type a single word in the Gmail interface.<\/li>\n<\/ul><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a5884f49b638\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a5884f49b638\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2025\/10\/n8n-chat-box-draft-email-output.png\/w=1024,h=1024,fit=scale-down\" alt=\"The n8n chat box showing the confirmation message after successfully sending an email.\" class=\"wp-image-135387\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><h2 class=\"wp-block-heading\" id=\"h-what-are-the-limitations-of-my-ai-personal-assistant\"><strong>What are the limitations of my AI personal assistant?<\/strong><\/h2><p>While this n8n assistant is powerful, it&rsquo;s important to understand its operational boundaries. Its effectiveness depends on the tools it&rsquo;s connected to and the quality of its underlying AI model.<\/p><h3 class=\"wp-block-heading\" id=\"h-api-and-tool-dependencies\"><strong>API and tool dependencies<\/strong><\/h3><p>The assistant&rsquo;s biggest limitation is that its functionality is entirely dependent on the third-party services it connects to.<\/p><p>My n8n workflow sends instructions to external services like Google Calendar and Gmail; if those services are not working, my assistant cannot perform its tasks.<\/p><p>This creates two main risks that are outside of my control:<\/p><ul class=\"wp-block-list\">\n<li><strong>Service downtime<\/strong>. For example, if the Google Calendar API is temporarily unavailable due to an issue on Google&rsquo;s end, my assistant will be unable to schedule meetings. There is nothing I can do within my workflow to resolve this issue; the capability is currently unavailable until the external service is restored.<\/li>\n\n\n\n<li><strong>API changes<\/strong>. Companies occasionally update their APIs to add new features or improve security. Sometimes these changes are &ldquo;breaking,&rdquo; meaning the n8n tool node that relies on the old version will stop working until the node is updated.<\/li>\n<\/ul><h3 class=\"wp-block-heading\" id=\"h-ai-model-constraints\"><strong>AI model constraints<\/strong><\/h3><p>The assistant is only as intelligent and reliable as the LLM that powers it. This presents two main constraints:<\/p><ul class=\"wp-block-list\">\n<li><strong>Limited scope<\/strong>. The AI agent can only perform tasks that I have explicitly given it tools for. For instance, I can&rsquo;t ask it to &ldquo;book a flight&rdquo; because I have not provided it with a flight-booking tool. It only knows how to use the specific Google Calendar, Gmail, and Drive tools that I connected earlier.<\/li>\n\n\n\n<li><strong>Model reliability<\/strong>. LLMs have &ldquo;token limits,&rdquo; which are the maximum amount of text (input and output) they can process at one time. For very long conversations, complex requests in a single command, or when processing large documents, the model may lose context and fail to function correctly. LLMs can also sometimes &ldquo;hallucinate,&rdquo; which means they state incorrect information with complete confidence. The model might invent a detail for an event or misinterpret a complex email.<\/li>\n<\/ul><h2 class=\"wp-block-heading\" id=\"h-what-are-the-best-practices-for-the-ai-assistant\"><strong>What are the best practices for the AI assistant?<\/strong><\/h2><p>To ensure my personal assistant runs securely, reliably, and efficiently, I follow these best practices for prompting, managing credentials, and monitoring performance.<\/p><h3 class=\"wp-block-heading\" id=\"h-effective-prompt-engineering\"><strong>Effective prompt engineering<\/strong><\/h3><p>The key to getting reliable results is effective prompt engineering. Instead of treating the AI like a search engine, I treat it like a talented intern and give it clear, detailed instructions in the system prompt.<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">A great way to structure these instructions is with the CLEAR framework:<\/pre><ul class=\"wp-block-list\">\n<li><strong>Context<\/strong>. I provide the background for the task, including the AI&rsquo;s role and its primary goal. For instance:<\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">You are a helpful personal assistant.<\/pre><ul class=\"wp-block-list\">\n<li><strong>Limitations<\/strong>. I set clear rules and define what the assistant should not do. For example:<\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">You must not perform any action other than the ones provided.<\/pre><ul class=\"wp-block-list\">\n<li><strong>Examples<\/strong>. Providing examples of user requests helps the model understand intent. For instance, showing &ldquo;what&rsquo;s on my plate for Friday?&rdquo; means it should use the calendar-finding tool.<\/li>\n\n\n\n<li><strong>Actions<\/strong>. I explicitly list the tools the AI is allowed to use. For example:<\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Your available tools are Google Calendar, Gmail, and Google Drive.<\/pre><ul class=\"wp-block-list\">\n<li><strong>Refinements<\/strong>. Prompting is an iterative process. I test the assistant and refine the system prompt based on its performance to improve its accuracy over time.<\/li>\n<\/ul><p>This is covered in more detail in the Hostinger Academy video below.<\/p><figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"How to Prompt to Create the Best AI Agent With n8n\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/PjXRzOOxe24?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure><p>\n  <div class=\"youtube-shortcode\">\n    <div class=\"row\">\n      <div class=\"col-7 col-sm-8 d-flex align-items-center\">\n        <img decoding=\"async\" class=\"channel-logo\" src=\"https:\/\/www.hostinger.com\/ph\/tutorials\/wp-content\/themes\/tutorialsthemeuplift\/public\/images\/youtube-channels\/hostinger-academy.jpg\" alt=\"youtube channel logo\">\n        <div class=\"d-flex flex-column justify-content-between\">\n          <span class=\"slogan d-none d-sm-block\">Subscribe For more educational videos!<\/span>\n          <span class=\"channel-name\">Hostinger Academy<\/span>\n                    <\/div>\n      <\/div>\n      <div class=\"col-5 col-sm-4 d-flex align-items-center justify-content-end\">\n          <a class=\"subscribe-button\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"http:\/\/www.youtube.com\/channel\/UCbNIC-svDbtUOH2qsLnPQPg?sub_confirmation=1\">\n            <img decoding=\"async\" src=\"https:\/\/www.hostinger.com\/ph\/tutorials\/wp-content\/themes\/tutorialsthemeuplift\/public\/images\/icons\/youtube.svg\" alt=\"subscribe\">\n            <span>Subscribe<\/span>\n          <\/a>\n      <\/div>\n    <\/div>\n  <\/div>\n\n    \n\n\n\n<\/p><h3 class=\"wp-block-heading\" id=\"h-secure-credential-management\"><strong>Secure credential management<\/strong><\/h3><p>A critical best practice I follow is to never expose API keys directly in my workflow. Instead, I always use n8n&rsquo;s built-in credential manager to store them securely.<\/p><p>This prevents your keys from being accidentally shared through screenshots or workflow export files.<\/p><p>n8n encourages this by prompting you to create or select a secure credential whenever you add a node that requires authentication, keeping the actual secret hidden from view.<\/p><h3 class=\"wp-block-heading\" id=\"h-proactive-maintenance-and-monitoring\"><strong>Proactive maintenance and monitoring<\/strong><\/h3><p>An automation is only helpful if it&rsquo;s reliable, so proactive maintenance is essential. My two main practices are:<\/p><ul class=\"wp-block-list\">\n<li>I regularly check the <strong>Execution Logs<\/strong>. This provides a history of every workflow run and is invaluable for spotting unexpected behavior or errors that might not trigger a full failure notification.<\/li>\n\n\n\n<li>I keep my n8n instance and its nodes up to date. This ensures I get security patches, bug fixes, and protection against failures caused by changes in third-party APIs. If you self-host n8n on Hostinger&rsquo;s VPS like me, you can follow this guide on <a href=\"\/support\/11767754-how-to-update-n8n-at-hostinger\/\">how to update n8n<\/a>.<\/li>\n<\/ul><h2 class=\"wp-block-heading\" id=\"h-how-can-you-enhance-your-ai-assistant\"><strong>How can you enhance your AI assistant?<\/strong><\/h2><p>This initial build provides a strong foundation, but you can further expand its capabilities. Here are a few ideas to take your assistant to the next level:<\/p><ul class=\"wp-block-list\">\n<li><strong>Add long-term memory<\/strong>. The current memory only lasts for a single session. To give the assistant a permanent memory, you can connect a database node (such as Redis or Postgres) to store the conversation history. You can also explore Retrieval-Augmented Generation (RAG) to provide the AI with additional context from your own documents, such as contact lists or project notes.<\/li>\n\n\n\n<li><strong>Integrate more tools<\/strong>. The real power of this assistant comes from its customizability. You can add tool nodes for any service with an API. Consider connecting it to <a href=\"\/ph\/tutorials\/notion-alternatives\/\">project management apps like Notion<\/a> to manage tasks, or even financial tools to track expenses.<\/li>\n\n\n\n<li><strong>Set up a custom GPT<\/strong>. For a more polished user interface, you can set up a Custom GPT in ChatGPT. By configuring its <strong>Action<\/strong> to point to your n8n <strong>Chat Trigger&rsquo;s<\/strong> URL, you can interact with your assistant directly from the ChatGPT interface instead of n8n&rsquo;s dashboard.<\/li>\n\n\n\n<li><strong>Use local AI models<\/strong>. For enhanced privacy and to fully leverage open-source automation, you can replace the <strong>OpenAI<\/strong> node with a self-hosted model. A tool like <a href=\"\/ph\/tutorials\/what-is-ollama\/\">Ollama<\/a> lets you run powerful language models directly on your own server, keeping your data completely private.<\/li>\n\n\n\n<li><strong>Implement voice commands<\/strong>. To make the assistant hands-free, you can add a transcription service at the beginning of your workflow. For example, a node using OpenAI&rsquo;s Whisper API could transcribe an audio file or voice note into text, which is then passed to the agent as a command.<\/li>\n<\/ul><h2 class=\"wp-block-heading\" id=\"h-key-takeaways\"><strong>Key takeaways<\/strong><\/h2><p>Building this project showed me that combining n8n&rsquo;s flexible automation with MCP&rsquo;s robust communication protocol is what makes true AI agents possible. It&rsquo;s the difference between a simple script and a system that can reason and act on my behalf.<\/p><p>I hope that this guide on how to build a personal assistant in n8n using MCP provides you with the workflow and the foundational knowledge to start building your own.<\/p><p>Now, what is the first repetitive task you&rsquo;ll automate with your new assistant?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>My personal assistant just scheduled three meetings, summarized my unread emails, and drafted a reply &ndash; all while I was making coffee. This wasn&rsquo;t done with a simple script. I built a true AI agent by designing a custom automation workflow in n8n and running it on a Hostinger VPS. The core of this system [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"\/ph\/tutorials\/how-to-build-n8n-personal-assistant-with-mcp\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":411,"featured_media":128762,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"How to build an AI personal assistant in n8n using MCP","rank_math_description":"Follow my complete guide to build a powerful, self-hosted AI personal assistant in n8n with MCP. Includes free workflow templates.","rank_math_focus_keyword":"how to build a personal assistant in n8n using MCP","footnotes":""},"categories":[22639],"tags":[],"class_list":["post-124854","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vps"],"hreflangs":[{"locale":"en-US","link":"https:\/\/www.hostinger.com\/tutorials\/how-to-build-n8n-personal-assistant-with-mcp\/","default":0},{"locale":"en-PH","link":"https:\/\/www.hostinger.com\/ph\/tutorials\/how-to-build-n8n-personal-assistant-with-mcp\/","default":0},{"locale":"en-MY","link":"https:\/\/www.hostinger.com\/my\/tutorials\/how-to-build-n8n-personal-assistant-with-mcp\/","default":0},{"locale":"en-GB","link":"https:\/\/www.hostinger.com\/uk\/tutorials\/how-to-build-n8n-personal-assistant-with-mcp\/","default":0},{"locale":"en-IN","link":"https:\/\/www.hostinger.com\/in\/tutorials\/how-to-build-n8n-personal-assistant-with-mcp\/","default":0},{"locale":"en-CA","link":"https:\/\/www.hostinger.com\/ca\/tutorials\/how-to-build-n8n-personal-assistant-with-mcp\/","default":0},{"locale":"en-AU","link":"https:\/\/www.hostinger.com\/au\/tutorials\/how-to-build-n8n-personal-assistant-with-mcp\/","default":0},{"locale":"en-NG","link":"https:\/\/www.hostinger.com\/ng\/tutorials\/how-to-build-n8n-personal-assistant-with-mcp\/","default":0}],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/ph\/tutorials\/wp-json\/wp\/v2\/posts\/124854","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/ph\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/ph\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/ph\/tutorials\/wp-json\/wp\/v2\/users\/411"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/ph\/tutorials\/wp-json\/wp\/v2\/comments?post=124854"}],"version-history":[{"count":2,"href":"https:\/\/www.hostinger.com\/ph\/tutorials\/wp-json\/wp\/v2\/posts\/124854\/revisions"}],"predecessor-version":[{"id":128761,"href":"https:\/\/www.hostinger.com\/ph\/tutorials\/wp-json\/wp\/v2\/posts\/124854\/revisions\/128761"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/ph\/tutorials\/wp-json\/wp\/v2\/media\/128762"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/ph\/tutorials\/wp-json\/wp\/v2\/media?parent=124854"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/ph\/tutorials\/wp-json\/wp\/v2\/categories?post=124854"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/ph\/tutorials\/wp-json\/wp\/v2\/tags?post=124854"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}