{
  "name": "Personal budget & expense tracker with Google Sheets and alerts MCP",
  "nodes": [
    {
      "id": "544866c7-9676-4a94-a77d-8637b8b9f6e3",
      "name": "MCP Server Trigger",
      "type": "@n8n/n8n-nodes-langchain.mcpTrigger",
      "position": [
        -1560,
        360
      ]
    },
    {
      "id": "f45e1509-487b-46c6-b7dd-224df465c981",
      "name": "Filter",
      "type": "n8n-nodes-base.filter",
      "position": [
        1360,
        -340
      ]
    },
    {
      "id": "f4411283-0efa-4218-8d96-9d9a1c7c19e6",
      "name": "Google Sheets Filter Workflow",
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "position": [
        -40,
        420
      ]
    },
    {
      "id": "827737c1-4466-499c-abae-bc2e03d9191a",
      "name": "Get list transactions",
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "position": [
        -1880,
        560
      ]
    },
    {
      "id": "afb64fd3-d554-4f4f-9447-3a5cd48bae1a",
      "name": "Get By ID",
      "type": "n8n-nodes-base.googleSheetsTool",
      "position": [
        -1740,
        560
      ]
    },
    {
      "id": "05b35a22-757d-411f-ad56-a1b0e3d7a695",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        380,
        320
      ]
    },
    {
      "id": "e7ac76ec-a796-429a-85d0-44490cfe4f00",
      "name": "get by id",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        880,
        100
      ]
    },
    {
      "id": "d7ea9a2f-b9ef-4a02-92f7-25ec2c3a9232",
      "name": "remove transaction",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1160,
        100
      ]
    },
    {
      "id": "f6fe072a-ef50-4f95-87a6-e7b0e047127e",
      "name": "get all transactions",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1120,
        -200
      ]
    },
    {
      "id": "7af5ea63-d59b-49e6-9a42-c5e85ec4650e",
      "name": "Remove Transaction",
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "position": [
        -1600,
        560
      ]
    },
    {
      "id": "e8c38268-0876-461a-8b89-ed121c321d4a",
      "name": "Crypto",
      "type": "n8n-nodes-base.crypto",
      "position": [
        880,
        520
      ]
    },
    {
      "id": "ed85ffef-9a72-4025-a0e6-7f57eb9c4a0a",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        1280,
        520
      ]
    },
    {
      "id": "085c44bd-dfbc-4a37-9f47-c9562e54b699",
      "name": "Get existing budget",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1480,
        500
      ]
    },
    {
      "id": "7e6e1808-4b96-42a0-a696-5ef7a5b1fc6e",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        1900,
        320
      ]
    },
    {
      "id": "4fe6970d-d46c-42c1-aa32-c5fa9a1f6b80",
      "name": "add transaction",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1080,
        520
      ]
    },
    {
      "id": "e97f4b19-6d86-4c73-8d64-356c5a6f33fe",
      "name": "budget not found?",
      "type": "n8n-nodes-base.if",
      "position": [
        1660,
        500
      ]
    },
    {
      "id": "dcebec66-c750-4e64-8974-d659de8c0943",
      "name": "Code1",
      "type": "n8n-nodes-base.code",
      "position": [
        2140,
        520
      ]
    },
    {
      "id": "9164bfe3-1549-4943-a489-c67da1d32d9d",
      "name": "Get Monthly Expenses",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1900,
        520
      ]
    },
    {
      "id": "ff8d7da3-c567-41f8-af20-88c3248822bb",
      "name": "Add Transaction",
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "position": [
        -1440,
        560
      ]
    },
    {
      "id": "e71da569-0165-4c3f-917a-b97843aba5bf",
      "name": "Code2",
      "type": "n8n-nodes-base.code",
      "position": [
        1500,
        700
      ]
    },
    {
      "id": "f601629b-975a-48ba-a832-f53003776246",
      "name": "Update transaction",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        900,
        1020
      ]
    },
    {
      "id": "0bd3eebb-e341-49cc-87d3-c5ba6fe73da6",
      "name": "If1",
      "type": "n8n-nodes-base.if",
      "position": [
        1120,
        1040
      ]
    },
    {
      "id": "c82171bf-fae5-4407-9af3-c9abddff0b04",
      "name": "Code3",
      "type": "n8n-nodes-base.code",
      "position": [
        1840,
        880
      ]
    },
    {
      "id": "740cbba3-76e5-42a4-b8c8-1a33f137a576",
      "name": "budget not found?1",
      "type": "n8n-nodes-base.if",
      "position": [
        1600,
        1040
      ]
    },
    {
      "id": "d297855a-d70d-43cb-83d6-df2e712698d8",
      "name": "Code4",
      "type": "n8n-nodes-base.code",
      "position": [
        2080,
        1060
      ]
    },
    {
      "id": "3369be8c-67cc-4b2d-9c04-fb712afa6509",
      "name": "Get Monthly Expenses1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1840,
        1060
      ]
    },
    {
      "id": "4ae8401e-0ad5-43b4-aa72-b04edc150d4d",
      "name": "Code5",
      "type": "n8n-nodes-base.code",
      "position": [
        1440,
        1240
      ]
    },
    {
      "id": "ebcd4517-f735-4378-8c25-1b48e4593808",
      "name": "Get Existing Budget",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        920,
        1500
      ]
    },
    {
      "id": "76132552-d70d-46dd-add6-39436430699f",
      "name": "Get existing budget2",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1420,
        1040
      ]
    },
    {
      "id": "4d91a329-61d5-4ceb-a51a-27278c9112ad",
      "name": "Add budget",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1440,
        1480
      ]
    },
    {
      "id": "83c5093e-fa10-4bcc-b684-e5bd22fdfd00",
      "name": "Code6",
      "type": "n8n-nodes-base.code",
      "position": [
        1440,
        1680
      ]
    },
    {
      "id": "f83089ee-33de-48a0-8440-f02988ddd736",
      "name": "Get Existing Budget1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        940,
        1960
      ]
    },
    {
      "id": "84bcedda-5a53-4dbe-a2d9-811f96f13fd6",
      "name": "Code7",
      "type": "n8n-nodes-base.code",
      "position": [
        1360,
        1940
      ]
    },
    {
      "id": "d761eb69-7f8d-4f7a-9f16-f06a863fa2a6",
      "name": "Update Budget",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1360,
        2120
      ]
    },
    {
      "id": "1ea98857-1eac-4135-87b9-be5b89df0a0f",
      "name": "Get Existing Budget2",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        940,
        2420
      ]
    },
    {
      "id": "2c3cc9d2-2001-4698-9529-1373c43bebef",
      "name": "budget not found?4",
      "type": "n8n-nodes-base.if",
      "position": [
        1120,
        2420
      ]
    },
    {
      "id": "32259e82-ea9f-475f-9b5d-609e1bc63595",
      "name": "Code8",
      "type": "n8n-nodes-base.code",
      "position": [
        1360,
        2400
      ]
    },
    {
      "id": "d5f55296-427e-4525-b71a-7015b89b9215",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2580,
        260
      ],
      "parameters": {
        "width": 2040,
        "height": 540,
        "content": "## MCP Main tools\n\nThis is an MCP main entry point. \nIt has several tools that are available to use by AI client.\n\nMost of the tools will execute another workflow\n\n\n### How to use\n\n* You need to be ab"
      }
    },
    {
      "id": "605dcb3d-1bd9-403a-b50a-75ffdb755c0a",
      "name": "Update Transaction",
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "position": [
        -1280,
        560
      ]
    },
    {
      "id": "65352e90-d0b3-4a93-94bc-a31e32efb6ea",
      "name": "Add Budget",
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "position": [
        -1120,
        560
      ]
    },
    {
      "id": "6c1666ec-7ebd-4f61-98db-06dc6c892892",
      "name": "Update Budget Tool",
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "position": [
        -980,
        560
      ]
    },
    {
      "id": "2544655e-d5fd-476f-9185-5fe67f28b425",
      "name": "Remove Budget",
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "position": [
        -820,
        560
      ]
    },
    {
      "id": "021e523b-c47f-4b06-9104-279e7013df6b",
      "name": "Execution Data",
      "type": "n8n-nodes-base.executionData",
      "position": [
        180,
        420
      ]
    },
    {
      "id": "dc42a268-4b4d-46a2-9caa-04400bccfbbc",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1620,
        -420
      ],
      "parameters": {
        "width": 580,
        "height": 180,
        "content": "### Get all transaction\n\nIt will get list of transactions. \n\nSince currently google sheets integration doesn't support date range filter, so if the start date and end date criterial fall into same mon"
      }
    },
    {
      "id": "acaaf56e-62c6-4b08-a7dc-2837fe153229",
      "name": "If2",
      "type": "n8n-nodes-base.if",
      "position": [
        840,
        -360
      ]
    },
    {
      "id": "31a41bd8-f14f-45a0-8611-5a778b502312",
      "name": "get all transactions1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1120,
        -480
      ]
    },
    {
      "id": "7e99365b-555e-470d-bad1-1a406ba20a15",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1400,
        40
      ],
      "parameters": {
        "width": 320,
        "height": 180,
        "content": "### Remove transaction\n\nIt will remove transaction by ID. However we need to get the transaction first before removing to get row number. Because removing transaction needs a row number, can't be filt"
      }
    },
    {
      "id": "b470904a-69db-4e88-9656-ccc736114c87",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2380,
        480
      ],
      "parameters": {
        "width": 500,
        "height": 200,
        "content": "### Add transaction\n\nIt will add transaction to a new row. In this workflow it will also check for the existing budget.\n\nIn the response, it has `task` field that will tell AI client what to do next. "
      }
    },
    {
      "id": "4ddd4f34-be88-40f9-bfbc-84c3707f485d",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2380,
        1020
      ],
      "parameters": {
        "width": 540,
        "height": 200,
        "content": "### Update transaction\n\nIt will update transaction by ID. In this workflow it will also check for the existing budget.\n\nIt has the same checking budget workflow with the add transaction. I have to dup"
      }
    },
    {
      "id": "4fe2b09d-ece3-4686-a3bd-8e80800957d0",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1700,
        1460
      ],
      "parameters": {
        "width": 340,
        "height": 280,
        "content": "### Add monthly budget\n\nIt will add monthly budget.\n\n#### pro tip :\nYou can ask AI client to add budget for several months by prompting such \n\n```\nAdd budget for fashion for this month until the end o"
      }
    },
    {
      "id": "8e7b0528-61e7-43cb-941c-28cd4dd6e423",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1620,
        2020
      ],
      "parameters": {
        "width": 260,
        "height": 120,
        "content": "### update monthly budget\n\nIt will update budget"
      }
    },
    {
      "id": "7da84021-9af7-496e-8089-ac2237beba24",
      "name": "budget not found?2",
      "type": "n8n-nodes-base.if",
      "position": [
        1140,
        1500
      ]
    },
    {
      "id": "b6c0e7ff-92b8-43cf-b037-8adfa2b07a05",
      "name": "budget not found?3",
      "type": "n8n-nodes-base.if",
      "position": [
        1140,
        1960
      ]
    },
    {
      "id": "dd3206eb-134c-44a2-bcd2-08bd28c408de",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1620,
        2460
      ],
      "parameters": {
        "width": 260,
        "height": 120,
        "content": "### Remove budget\n\nIt will remove existing budget"
      }
    },
    {
      "id": "cb4aae48-7fa0-42ca-8052-441758d8775c",
      "name": "Remove budget",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1360,
        2580
      ]
    },
    {
      "id": "bb0b7988-c13c-47e7-be28-2e3fc942e566",
      "name": "Get Existing Budget3",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        960,
        2840
      ]
    },
    {
      "id": "bca9ba8a-9d65-4d85-bfbb-8fcb71a73dce",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1200,
        2840
      ],
      "parameters": {
        "width": 260,
        "height": 120,
        "content": "### Get existing budget\n\nIt will get existing budget"
      }
    },
    {
      "id": "bce1c72b-a5e8-415b-8c26-b15405da7d9f",
      "name": "Get Budget",
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "position": [
        -680,
        560
      ]
    },
    {
      "id": "f4485275-c028-4888-90bd-414d488e0a74",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2580,
        60
      ],
      "parameters": {
        "width": 420,
        "height": null,
        "content": "# MCP Personal Expense\n\nThis is a template for MCP that has tools to manage personal expenses and budget"
      }
    }
  ],
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Get existing budget",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Code2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If1": {
      "main": [
        [
          {
            "node": "Get existing budget2",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Code5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If2": {
      "main": [
        [
          {
            "node": "get all transactions1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "get all transactions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Crypto": {
      "main": [
        [
          {
            "node": "add transaction",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter": {
      "main": [
        []
      ]
    },
    "Switch": {
      "main": [
        [
          {
            "node": "If2",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "get by id",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Crypto",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Update transaction",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get Existing Budget",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get Existing Budget1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get Existing Budget2",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get Existing Budget3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get By ID": {
      "ai_tool": [
        [
          {
            "node": "MCP Server Trigger",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "get by id": {
      "main": [
        [
          {
            "node": "remove transaction",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add Budget": {
      "ai_tool": [
        [
          {
            "node": "MCP Server Trigger",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Add budget": {
      "main": [
        []
      ]
    },
    "Get Budget": {
      "ai_tool": [
        [
          {
            "node": "MCP Server Trigger",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Remove Budget": {
      "ai_tool": [
        [
          {
            "node": "MCP Server Trigger",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Execution Data": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add Transaction": {
      "ai_tool": [
        [
          {
            "node": "MCP Server Trigger",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "add transaction": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "budget not found?": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get Monthly Expenses",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Transaction": {
      "ai_tool": [
        [
          {
            "node": "MCP Server Trigger",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Update Budget Tool": {
      "ai_tool": [
        [
          {
            "node": "MCP Server Trigger",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Update Transaction": {
      "ai_tool": [
        [
          {
            "node": "MCP Server Trigger",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Update transaction": {
      "main": [
        [
          {
            "node": "If1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "budget not found?1": {
      "main": [
        [
          {
            "node": "Code3",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get Monthly Expenses1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "budget not found?2": {
      "main": [
        [
          {
            "node": "Add budget",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Code6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "budget not found?3": {
      "main": [
        [
          {
            "node": "Code7",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Update Budget",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "budget not found?4": {
      "main": [
        [
          {
            "node": "Code8",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Remove budget",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Existing Budget": {
      "main": [
        [
          {
            "node": "budget not found?2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get existing budget": {
      "main": [
        [
          {
            "node": "budget not found?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Existing Budget1": {
      "main": [
        [
          {
            "node": "budget not found?3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Existing Budget2": {
      "main": [
        [
          {
            "node": "budget not found?4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Monthly Expenses": {
      "main": [
        [
          {
            "node": "Code1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get existing budget2": {
      "main": [
        [
          {
            "node": "budget not found?1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "get all transactions": {
      "main": [
        [
          {
            "node": "Filter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Monthly Expenses1": {
      "main": [
        [
          {
            "node": "Code4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get list transactions": {
      "ai_tool": [
        [
          {
            "node": "MCP Server Trigger",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "get all transactions1": {
      "main": [
        [
          {
            "node": "Filter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets Filter Workflow": {
      "main": [
        [
          {
            "node": "Execution Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}