{
  "workflow": {
    "id": 5554,
    "name": "File hash verification for AI agents with hashlookup CIRCL API",
    "views": 273,
    "recentViews": 0,
    "totalViews": 273,
    "createdAt": "2025-07-02T00:05:28.154Z",
    "description": "Complete MCP server exposing 11 hashlookup CIRCL API operations to AI agents.\n\n## ⚡ Quick Setup\n\nNeed help? Want access to more workflows and even live Q&A sessions with a top verified n8n creator.. All 100% free?\n\n[Join the community](https://www.skool.com/n8n-nodes-automation-lab-1570/about)\n1. **Import** this workflow into your n8n instance\n2. **Credentials** Add hashlookup CIRCL API credentials\n3. **Activate** the workflow to start your MCP server\n4. **Copy** the webhook URL from the MCP trigger node\n5. **Connect** AI agents using the MCP URL\n\n## 🔧 How it Works\n\nThis workflow converts the hashlookup CIRCL API into an MCP-compatible interface for AI agents.\n\n• **MCP Trigger**: Serves as your server endpoint for AI agent requests\n• **HTTP Request Nodes**: Handle API calls to https://hashlookup.circl.lu\n• **AI Expressions**: Automatically populate parameters via `$fromAI()` placeholders\n• **Native Integration**: Returns responses directly to the AI agent\n\n## 📋 Available Operations (11 total)\n\n### 🔧 Bulk (2 endpoints)\n\n• **POST /bulk/md5**: Bulk Search MD5 Hashes\n• **POST /bulk/sha1**: Bulk Search SHA1 Hashes\n\n### 🔧 Children (1 endpoints)\n\n• **GET /children/{sha1}/{count}/{cursor}**: Return children from a given SHA1.  A number of element to return and an offset must be given. If not set it will be the 100 first elements. A cursor must be given to paginate over. The starting cursor is 0.\n\n### 🔧 Info (1 endpoints)\n\n• **GET /info**: Get Database Info\n\n### 🔧 Lookup (3 endpoints)\n\n• **GET /lookup/md5/{md5}**: Lookup MD5.\n• **GET /lookup/sha1/{sha1}**: Lookup SHA-1.\n• **GET /lookup/sha256/{sha256}**: Lookup SHA-256.\n\n### 🔧 Parents (1 endpoints)\n\n• **GET /parents/{sha1}/{count}/{cursor}**: Return parents from a given SHA1. A number of element to return and an offset must be given. If not set it will be the 100 first elements. A cursor must be given to paginate over. The starting cursor is 0.\n\n### 🔧 Session (2 endpoints)\n\n• **GET /session/create/{name}**: Create a session key to keep search context. The session is attached to a name. After the session is created, the header `hashlookup_session` can be set to the session name.\n• **GET /session/get/{name}**: Return set of matching and non-matching hashes from a session.\n\n### 🔧 Stats (1 endpoints)\n\n• **GET /stats/top**: Get Top Queries\n\n## 🤖 AI Integration\n\n**Parameter Handling**: AI agents automatically provide values for:\n• Path parameters and identifiers\n• Query parameters and filters\n• Request body data\n• Headers and authentication\n\n**Response Format**: Native hashlookup CIRCL API responses with full data structure\n\n**Error Handling**: Built-in n8n HTTP request error management\n\n## 💡 Usage Examples\n\nConnect this MCP server to any AI agent or workflow:\n\n• **Claude Desktop**: Add MCP server URL to configuration\n• **Cursor**: Add MCP server SSE URL to configuration\n• **Custom AI Apps**: Use MCP URL as tool endpoint\n• **API Integration**: Direct HTTP calls to MCP endpoints\n\n## ✨ Benefits\n\n• **Zero Setup**: No parameter mapping or configuration needed\n• **AI-Ready**: Built-in `$fromAI()` expressions for all parameters\n• **Production Ready**: Native n8n HTTP request handling and logging\n• **Extensible**: Easily modify or add custom logic\n\n&gt; 🆓 **[Free for community use](https://github.com/Cfomodz/community-use)!** Ready to deploy in under 2 minutes.",
    "workflow": {
      "id": "gjWBBSi8vTPYPDYJ",
      "meta": null,
      "name": "hashlookup CIRCL API MCP Server",
      "tags": [],
      "nodes": [
        {
          "id": "41d644d4-61e0-4fce-bb6d-2b5bcd5fccc9",
          "name": "Setup Instructions",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1380,
            -240
          ],
          "parameters": {
            "color": 4,
            "height": 1060,
            "content": "### ⚙️ Setup Instructions\n\n1. **Import Workflow**: \nLoad this workflow into your n8n instance\n\n2. **Authentication**: \nNo authentication required\n\n3. **Activate Workflow**:\nEnable the workflow to start the MCP server\n\n4. **Get MCP URL**: \nCopy the webhook URL from the MCP trigger\n\n5. **Connect AI Agent**:\nUse the MCP URL in your AI agent configuration\n\n\n### 💡 Usage Notes\n• Parameters are auto-populated by AI using $fromAI() expressions\n• With 11 API endpoints available as tools\n• Responses maintain original API structure\n\n\n### 🛠️ Customization\n• Add data transformation nodes if needed\n• Implement custom error handling\n• Add logging or monitoring nodes\n\n• Modify parameter defaults in any HTTP request node as needed\n\n### 💬 Need Help?\nPing me on [discord](https://discord.me/cfomodz) for integration guidance and custom automations. Check the [n8n documentation](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolmcp/) for more information."
          },
          "typeVersion": 1
        },
        {
          "id": "467248d4-c590-475b-afb5-8612ce3900ca",
          "name": "Workflow Overview",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1120,
            -240
          ],
          "parameters": {
            "width": 420,
            "height": 920,
            "content": "## 🛠️ hashlookup CIRCL MCP Server ✅ 11 operations\n\n### About\nThe CIRCL Hash Lookup API lets developers query known file hashes via a RESTful HTTP interface, with OpenAPI documentation available. It supports online queries and offers an offline Bloom filter option for local file checks. Sample queries and usage details are provided in the project documentation.\n\n### 🔧 How it Works\n\nThis workflow converts the hashlookup CIRCL API into an MCP-compatible interface for AI agents.\n\n• **MCP Trigger**: Serves as your server endpoint for AI agent requests\n• **HTTP Request Nodes**: Handle API calls to https://hashlookup.circl.lu\n• **AI Expressions**: Automatically populate parameters via `$fromAI()` placeholders\n• **Native Integration**: Returns responses directly to the AI agent\n\n\n### 📋 Available Operations (11 endpoints)\n\n**Default (11 operations)**\nBulk Search MD5 Hashes, Bulk Search SHA1 Hashes, List SHA1 Children, Get Database Info, Lookup MD5 Hash, Lookup SHA1 Hash, Lookup SHA256 Hash, List SHA1 Parents, Create Search Session, Get Session Results, Get Top Queries\n\n"
          },
          "typeVersion": 1
        },
        {
          "id": "a0aac3d5-272c-47e5-9eb6-81ed203ed016",
          "name": "hashlookup CIRCL MCP Server",
          "type": "@n8n/n8n-nodes-langchain.mcpTrigger",
          "position": [
            -620,
            -240
          ],
          "webhookId": "7780fda3-6fb2-4d70-a156-9b8b087bd08c",
          "parameters": {
            "path": "hashlookup-circl-mcp"
          },
          "typeVersion": 1
        },
        {
          "id": "9804e5ff-1538-4252-9bc0-a9f6e8b3b81a",
          "name": "Sticky Note",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -660,
            -100
          ],
          "parameters": {
            "color": 2,
            "width": 1220,
            "height": 440,
            "content": "## Default"
          },
          "typeVersion": 1
        },
        {
          "id": "08561b6b-7d05-4514-b8c8-d689bc728ac8",
          "name": "Bulk Search MD5 Hashes",
          "type": "n8n-nodes-base.httpRequestTool",
          "position": [
            -520,
            -60
          ],
          "parameters": {
            "url": "=https://hashlookup.circl.lu/bulk/md5",
            "method": "POST",
            "options": {},
            "toolDescription": "Bulk search of MD5 hashes in a JSON array with the key 'hashes'."
          },
          "typeVersion": 4.2
        },
        {
          "id": "f8df85ff-c265-47f6-b706-9ad7fb194fa4",
          "name": "Bulk Search SHA1 Hashes",
          "type": "n8n-nodes-base.httpRequestTool",
          "position": [
            -320,
            -60
          ],
          "parameters": {
            "url": "=https://hashlookup.circl.lu/bulk/sha1",
            "method": "POST",
            "options": {},
            "toolDescription": "Bulk search of SHA1 hashes in a JSON array with the 'hashes'."
          },
          "typeVersion": 4.2
        },
        {
          "id": "dfd4d0c8-b1fa-46aa-b550-0f4cb7bda2d6",
          "name": "List SHA1 Children",
          "type": "n8n-nodes-base.httpRequestTool",
          "position": [
            -120,
            -60
          ],
          "parameters": {
            "url": "=https://hashlookup.circl.lu/children/{{ $fromAI('sha1', 'Sha1', 'string') }}/{{ $fromAI('count', 'Count', 'number') }}/{{ $fromAI('cursor', 'Cursor', 'string') }}",
            "options": {},
            "toolDescription": "Children from a given SHA1. A number of element to return and an offset must be given. If not set it will be the 100 first elements. A cursor must be given to paginate over. The starting cursor is 0.\n\nParameters:\n- Path parameters:\n  • sha1 (required)\n  • count (required)\n  • cursor (required)"
          },
          "typeVersion": 4.2
        },
        {
          "id": "3e98f6ca-25a4-4f55-9825-2e4593cf5609",
          "name": "Get Database Info",
          "type": "n8n-nodes-base.httpRequestTool",
          "position": [
            80,
            -60
          ],
          "parameters": {
            "url": "=https://hashlookup.circl.lu/info",
            "options": {},
            "toolDescription": "Info about the hashlookup database"
          },
          "typeVersion": 4.2
        },
        {
          "id": "5150eb48-6353-46a8-9428-e1aa2522c64e",
          "name": "Lookup MD5 Hash",
          "type": "n8n-nodes-base.httpRequestTool",
          "position": [
            280,
            -60
          ],
          "parameters": {
            "url": "=https://hashlookup.circl.lu/lookup/md5/{{ $fromAI('md5', 'Md5', 'string') }}",
            "options": {},
            "toolDescription": "Lookup MD5.\n\nParameters:\n- Path parameters:\n  • md5 (required)"
          },
          "typeVersion": 4.2
        },
        {
          "id": "4f773006-5472-426e-820a-e0d64179664a",
          "name": "Lookup SHA1 Hash",
          "type": "n8n-nodes-base.httpRequestTool",
          "position": [
            -600,
            160
          ],
          "parameters": {
            "url": "=https://hashlookup.circl.lu/lookup/sha1/{{ $fromAI('sha1', 'Sha1', 'string') }}",
            "options": {},
            "toolDescription": "Lookup SHA-1.\n\nParameters:\n- Path parameters:\n  • sha1 (required)"
          },
          "typeVersion": 4.2
        },
        {
          "id": "2b865b56-d203-49b8-966f-84e472182b27",
          "name": "Lookup SHA256 Hash",
          "type": "n8n-nodes-base.httpRequestTool",
          "position": [
            -400,
            160
          ],
          "parameters": {
            "url": "=https://hashlookup.circl.lu/lookup/sha256/{{ $fromAI('sha256', 'Sha256', 'string') }}",
            "options": {},
            "toolDescription": "Lookup SHA-256.\n\nParameters:\n- Path parameters:\n  • sha256 (required)"
          },
          "typeVersion": 4.2
        },
        {
          "id": "c4ae2946-0b3b-485b-a079-c40a61227cb3",
          "name": "List SHA1 Parents",
          "type": "n8n-nodes-base.httpRequestTool",
          "position": [
            -200,
            160
          ],
          "parameters": {
            "url": "=https://hashlookup.circl.lu/parents/{{ $fromAI('sha1', 'Sha1', 'string') }}/{{ $fromAI('count', 'Count', 'number') }}/{{ $fromAI('cursor', 'Cursor', 'string') }}",
            "options": {},
            "toolDescription": "Parents from a given SHA1. A number of element to return and an offset must be given. If not set it will be the 100 first elements. A cursor must be given to paginate over. The starting cursor is 0.\n\nParameters:\n- Path parameters:\n  • sha1 (required)\n  • count (required)\n  • cursor (required)"
          },
          "typeVersion": 4.2
        },
        {
          "id": "6ea1a2c3-b897-4725-9cd4-a59d43c953c6",
          "name": "Create Search Session",
          "type": "n8n-nodes-base.httpRequestTool",
          "position": [
            0,
            160
          ],
          "parameters": {
            "url": "=https://hashlookup.circl.lu/session/create/{{ $fromAI('name', 'Name', 'string') }}",
            "options": {},
            "toolDescription": "Create a session key to keep search context. The session is attached to a name. After the session is created, the header `hashlookup_session` can be set to the session name.\n\nParameters:\n- Path parameters:\n  • name (required)"
          },
          "typeVersion": 4.2
        },
        {
          "id": "49e16128-fb61-4165-8568-c753dbf315be",
          "name": "Get Session Results",
          "type": "n8n-nodes-base.httpRequestTool",
          "position": [
            200,
            160
          ],
          "parameters": {
            "url": "=https://hashlookup.circl.lu/session/get/{{ $fromAI('name', 'Name', 'string') }}",
            "options": {},
            "toolDescription": "Set of matching and non-matching hashes from a session.\n\nParameters:\n- Path parameters:\n  • name (required)"
          },
          "typeVersion": 4.2
        },
        {
          "id": "2d704fae-771c-4d87-837a-6b832b6515a9",
          "name": "Get Top Queries",
          "type": "n8n-nodes-base.httpRequestTool",
          "position": [
            400,
            160
          ],
          "parameters": {
            "url": "=https://hashlookup.circl.lu/stats/top",
            "options": {},
            "toolDescription": "Top 100 of most queried values."
          },
          "typeVersion": 4.2
        }
      ],
      "active": false,
      "shared": [
        {
          "role": "workflow:owner",
          "project": {
            "id": "G5fce9xGuBAsWBXe",
            "icon": null,
            "name": "David Ashby <david.ashby.lds@gmail.com>",
            "type": "personal",
            "createdAt": "2025-06-04T02:55:02.013Z",
            "updatedAt": "2025-06-04T02:56:01.361Z",
            "projectRelations": [
              {
                "role": "project:personalOwner",
                "user": {
                  "id": "715c1c00-cb48-4712-9a32-f1f4b6db2b30",
                  "role": "global:owner",
                  "email": "david.ashby.lds@gmail.com",
                  "disabled": false,
                  "lastName": "Ashby",
                  "settings": {
                    "npsSurvey": {
                      "responded": true,
                      "lastShownAt": 1749357655581
                    },
                    "userActivated": true,
                    "userActivatedAt": 1749075994495,
                    "easyAIWorkflowOnboarded": true,
                    "firstSuccessfulWorkflowId": "3N3vVikZb3MckFYm"
                  },
                  "createdAt": "2025-06-04T02:55:01.745Z",
                  "firstName": "David",
                  "isPending": false,
                  "updatedAt": "2025-06-08T04:40:58.399Z",
                  "mfaEnabled": false,
                  "personalizationAnswers": {
                    "version": "v4",
                    "personalization_survey_n8n_version": "1.95.3",
                    "personalization_survey_submitted_at": "2025-06-04T02:56:07.075Z"
                  }
                },
                "userId": "715c1c00-cb48-4712-9a32-f1f4b6db2b30",
                "createdAt": "2025-06-04T02:55:02.013Z",
                "projectId": "G5fce9xGuBAsWBXe",
                "updatedAt": "2025-06-04T02:55:02.013Z"
              }
            ]
          },
          "createdAt": "2025-07-02T00:02:38.090Z",
          "projectId": "G5fce9xGuBAsWBXe",
          "updatedAt": "2025-07-02T00:02:38.090Z",
          "workflowId": "gjWBBSi8vTPYPDYJ"
        }
      ],
      "pinData": {},
      "settings": {
        "timezone": "America/New_York"
      },
      "createdAt": "2025-07-02T00:02:38.089Z",
      "updatedAt": "2025-07-02T00:04:58.000Z",
      "versionId": "cc390f89-a640-4365-bda7-38fa0daef2cb",
      "isArchived": false,
      "staticData": null,
      "connections": {
        "Get Top Queries": {
          "ai_tool": [
            [
              {
                "node": "hashlookup CIRCL MCP Server",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "Lookup MD5 Hash": {
          "ai_tool": [
            [
              {
                "node": "hashlookup CIRCL MCP Server",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "Lookup SHA1 Hash": {
          "ai_tool": [
            [
              {
                "node": "hashlookup CIRCL MCP Server",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "Get Database Info": {
          "ai_tool": [
            [
              {
                "node": "hashlookup CIRCL MCP Server",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "List SHA1 Parents": {
          "ai_tool": [
            [
              {
                "node": "hashlookup CIRCL MCP Server",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "List SHA1 Children": {
          "ai_tool": [
            [
              {
                "node": "hashlookup CIRCL MCP Server",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "Lookup SHA256 Hash": {
          "ai_tool": [
            [
              {
                "node": "hashlookup CIRCL MCP Server",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "Get Session Results": {
          "ai_tool": [
            [
              {
                "node": "hashlookup CIRCL MCP Server",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "Create Search Session": {
          "ai_tool": [
            [
              {
                "node": "hashlookup CIRCL MCP Server",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "Bulk Search MD5 Hashes": {
          "ai_tool": [
            [
              {
                "node": "hashlookup CIRCL MCP Server",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "Bulk Search SHA1 Hashes": {
          "ai_tool": [
            [
              {
                "node": "hashlookup CIRCL MCP Server",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        }
      },
      "triggerCount": 0
    },
    "lastUpdatedBy": 29,
    "workflowInfo": {
      "nodeCount": 15,
      "nodeTypes": {
        "n8n-nodes-base.stickyNote": {
          "count": 3
        },
        "n8n-nodes-base.httpRequestTool": {
          "count": 11
        },
        "@n8n/n8n-nodes-langchain.mcpTrigger": {
          "count": 1
        }
      }
    },
    "status": "published",
    "user": {
      "name": "David Ashby",
      "username": "cfomodz",
      "bio": "Unlimited Access to my paid workflows 👇 For the cost of one a month",
      "verified": true,
      "links": [
        "https://www.skool.com/n8n-automation-lab"
      ],
      "avatar": "https://gravatar.com/avatar/0118796cfdab829a3307d407dfeeb01a3952eb402584a45a211e4ef7d15edbbf?r=pg&d=retro&size=200"
    },
    "nodes": [
      {
        "id": 565,
        "icon": "fa:sticky-note",
        "name": "n8n-nodes-base.stickyNote",
        "codex": {
          "data": {
            "alias": [
              "Comments",
              "Notes",
              "Sticky"
            ],
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Sticky Note",
          "color": "#FFD233"
        },
        "iconData": {
          "icon": "sticky-note",
          "type": "icon"
        },
        "displayName": "Sticky Note",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 1293,
        "icon": "file:../mcp.svg",
        "name": "@n8n/n8n-nodes-langchain.mcpTrigger",
        "codex": {
          "data": {
            "alias": [
              "Model Context Protocol",
              "MCP Server"
            ],
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-langchain.mcptrigger/"
                }
              ]
            },
            "categories": [
              "AI",
              "Core Nodes",
              "Langchain"
            ],
            "subcategories": {
              "AI": [
                "Root Nodes",
                "Model Context Protocol"
              ],
              "Core Nodes": [
                "Other Trigger Nodes"
              ]
            }
          }
        },
        "group": "[\"trigger\"]",
        "defaults": {
          "name": "MCP Server Trigger"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgwIiBoZWlnaHQ9IjE4MCIgdmlld0JveD0iMCAwIDE5NSAxOTUiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+Cgk8ZyBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+CgkJPHBhdGggZD0iTTI1IDk3Ljg1MjhMOTIuODgyMyAyOS45NzA2QzEwMi4yNTUgMjAuNTk4IDExNy40NTEgMjAuNTk4IDEyNi44MjMgMjkuOTcwNlYyOS45NzA2QzEzNi4xOTYgMzkuMzQzMSAxMzYuMTk2IDU0LjUzOTEgMTI2LjgyMyA2My45MTE3TDc1LjU1ODEgMTE1LjE3NyIvPgoJCTxwYXRoIGQ9Ik03Ni4yNjUzIDExNC40N0wxMjYuODIzIDYzLjkxMTdDMTM2LjE5NiA1NC41MzkxIDE1MS4zOTIgNTQuNTM5MSAxNjAuNzY1IDYzLjkxMTdMMTYxLjExOCA2NC4yNjUyQzE3MC40OTEgNzMuNjM3OCAxNzAuNDkxIDg4LjgzMzggMTYxLjExOCA5OC4yMDYzTDk5LjcyNDggMTU5LjZDOTYuNjAwNiAxNjIuNzI0IDk2LjYwMDYgMTY3Ljc4OSA5OS43MjQ4IDE3MC45MTNMMTEyLjMzMSAxODMuNTIiLz4KCQk8cGF0aCBkPSJNMTA5Ljg1MyA0Ni45NDExTDU5LjY0ODIgOTcuMTQ1N0M1MC4yNzU3IDEwNi41MTggNTAuMjc1NyAxMjEuNzE0IDU5LjY0ODIgMTMxLjA4N1YxMzEuMDg3QzY5LjAyMDggMTQwLjQ1OSA4NC4yMTY4IDE0MC40NTkgOTMuNTg5NCAxMzEuMDg3TDE0My43OTQgODAuODgyMiIvPgoJPC9nPgo8L3N2Zz4K"
        },
        "displayName": "MCP Server Trigger",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          },
          {
            "id": 25,
            "name": "AI"
          },
          {
            "id": 26,
            "name": "Langchain"
          }
        ]
      }
    ],
    "categories": [
      {
        "id": 29,
        "name": "SecOps"
      },
      {
        "id": 48,
        "name": "AI RAG"
      }
    ],
    "image": []
  }
}