n8n AI Agent Tools List
The power of n8n's AI Agent node comes from its ability to use tools — external functions the agent can call to fetch data, perform actions, or compute results. This guide catalogs every built-in tool, shows how to configure each one, and provides patterns for building custom tools.
How Tools Work in n8n AI Agent
When you add a tool to the AI Agent node:
1. Agent decides to use a tool based on user query
2. Agent prepares parameters (validated against tool schema)
3. n8n executes the tool node
4. Result returned to agent as context
5. Agent responds to user with tool output
Tool Schema: Each tool exposes a JSON Schema defining its name, description, and parameters. The LLM uses this to decide when and how to call the tool.
Built-in Tool Categories
1. Web Search Tools
SerpAPI (Google Search)
| Config | Details |
|---|
| **Node** | HTTP Request |
| **API** | SerpAPI (serpapi.com) |
| **Auth** | API Key in header |
| **Params** | q (query), location, gl, hl, num |
| **Returns** | Organic results, snippets, links |
| **Cost** | $50/mo for 5K searches |
Setup:
1. Get API key from serpapi.com
2. Add HTTP Request node
3. Method: GET
4. URL: https://serpapi.com/search
5. Query Parameters: q={{$json.query}}, api_key={{$credentials.serpApiKey}}, num=10
6. AI Agent Tool Config:
- Name: web_search
- Description: Search Google for current information, news, facts
- Parameters: { query: { type: string, description: 'Search query' } }
Brave Search API
| Config | Details |
|---|
| **Node** | HTTP Request |
| **API** | Brave Search (brave.com/search/api) |
| **Auth** | API Key in header |
| **Params** | q, count, offset, search_lang |
| **Cost** | Free tier: 2K/mo, $3/1K after |
DuckDuckGo Instant Answer (Free)
| Config | Details |
|---|
| **Node** | HTTP Request |
| **API** | DuckDuckGo HTML scrape or API |
| **Cost** | Free |
| **Limit** | Rate limited, no official API |
2. Database Tools
PostgreSQL
| Config | Details |
|---|
| **Node** | PostgreSQL |
| **Operations** | Select, Insert, Update, Delete, Execute Query |
| **Auth** | Host, Port, Database, User, Password, SSL |
| **Best For** | Structured data, transactions, complex queries |
Common Patterns:
- Select: SELECT * FROM users WHERE email = $1
- Insert: INSERT INTO leads (email, name) VALUES ($1, $2) RETURNING id
- Update: UPDATE users SET last_login = NOW() WHERE id = $1
Security: Use parameterized queries ($1, $2) — never interpolate user input directly.
MySQL / MariaDB
| Config | Details |
|---|
| **Node** | MySQL |
| **Operations** | Select, Insert, Update, Delete, Execute Query |
| **Auth** | Host, Port, Database, User, Password, SSL |
MongoDB
| Config | Details |
|---|
| **Node** | MongoDB |
| **Operations** | Find, Insert One, Insert Many, Update, Delete, Aggregate |
| **Auth** | Connection String, Database, Collection |
| **Best For** | Flexible schemas, documents, geospatial |
Redis
| Config | Details |
|---|
| **Node** | Redis |
| **Operations** | Get, Set, HGet, HSet, Incr, Expire, Keys |
| **Best For** | Caching, sessions, rate limiting, queues |
Supabase (PostgreSQL + Auth + Realtime)
| Config | Details |
|---|
| **Node** | HTTP Request (Supabase REST API) |
| **Auth** | Service Role Key |
| **Operations** | CRUD, Auth, Realtime, Storage |
| **Bonus** | Built-in Auth, Row Level Security |
3. API & HTTP Tools
Generic HTTP Request
| Config | Details |
|---|
| **Node** | HTTP Request |
| **Methods** | GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS |
| **Auth** | Header, Query, Body, OAuth2, Bearer, API Key |
| **Body** | JSON, Form, Raw, Binary |
| **Response** | JSON, Text, Binary, File |
Common Patterns:
- REST API: GET/POST/PUT/DELETE with JSON body
- GraphQL: POST with query/variables in body
- Webhooks: POST with signature verification
- File Upload: Multipart form data
REST API Best Practices
// Tool Schema for Generic API Call
{
"name": "api_call",
"description": "Make HTTP request to any REST API",
"parameters": {
"type": "object",
"properties": {
"method": { "type": "string", "enum": ["GET", "POST", "PUT", "DELETE"] },
"url": { "type": "string", "format": "uri" },
"headers": { "type": "object" },
"body": { "type": "object" },
"timeout": { "type": "number", "default": 30000 }
},
"required": ["method", "url"]
}
}
GraphQL
| Config | Details |
|---|
| **Node** | HTTP Request |
| **Method** | POST |
| **Headers** | Content-Type: application/json, Authorization |
| **Body** | `{ "query": "...", "variables": {} }` |
4. Calculation & Computation Tools
Calculator
| Config | Details |
|---|
| **Node** | Function (JavaScript) |
| **Operations** | +, -, *, /, %, Math.*, parseFloat |
| **Use Case** | Math, conversions, calculations |
// Tool: calculator
const { expression } = $json;
try {
// Safe eval — only allow math
const result = Function('"use strict"; return (' + expression + ')')();
return { result };
} catch (e) {
return { error: 'Invalid expression' };
}
Date/Time Calculator
| Config | Details |
|---|
| **Node** | Function (JavaScript) |
| **Operations** | Date arithmetic, formatting, timezone conversion |
| **Library** | date-fns, luxon (if available) |
// Tool: date_calculator
const { operation, date, value, unit, timezone } = $json;
const dateObj = new Date(date);
switch (operation) {
case 'add': dateObj.setDate(dateObj.getDate() + value); break;
case 'subtract': dateObj.setDate(dateObj.getDate() - value); break;
case 'format': return { result: format(dateObj, value, { timeZone: timezone }) };
case 'diff': return { result: differenceInDays(new Date(), dateObj) };
}
return { result: dateObj.toISOString() };
Unit Converter
| Config | Details |
|---|
| **Node** | Function |
| **Conversions** | Length, weight, temperature, currency, data |
| **API** | exchangerate.host (free currency), custom formulas |
5. Code Execution Tools
JavaScript / TypeScript Execution
| Config | Details |
|---|
| **Node** | Function (JavaScript) |
| **Runtime** | Node.js (sandboxed) |
| **Timeout** | 30s default (configurable) |
| **Memory** | 128MB default |
| **Globals** | $json, $node, $workflow, $runIndex |
Security: Code runs in isolated VM. No filesystem/network access unless explicitly allowed.
// Tool: code_executor
const { code, language, timeout } = $json;
// Language: javascript (only supported)
// Timeout in ms (max 300000)
const start = Date.now();
try {
const fn = new Function('return ' + code);
const result = fn();
return { result, executionTime: Date.now() - start };
} catch (e) {
return { error: e.message };
}
Python Execution (via HTTP to external service)
| Config | Details |
|---|
| **Node** | HTTP Request |
| **Service** | PythonAnywhere, Replit, custom container |
| **Use Case** | Data science, pandas, numpy, ML inference |
6. Communication Tools
Email (SendGrid, SMTP, Gmail, Outlook)
| Config | Details |
|---|
| **Nodes** | SendGrid, Gmail, Outlook, SMTP, Mailgun, Postmark |
| **Operations** | Send, Send with Template, Schedule |
| **Attachments** | Base64, File, URL |
SMS (Twilio, Vonage, MessageBird, Plivo)
| Config | Details |
|---|
| **Nodes** | Twilio, Vonage, MessageBird, Plivo, Plivo |
| **Operations** | Send SMS, Send MMS, Check Status |
| **Features** | Short codes, Alphanumeric sender, Templates |
Slack
| Config | Details |
|---|
| **Node** | Slack |
| **Operations** | Post Message, Update, Delete, Thread Reply, Upload File |
| **Auth** | Bot Token, User Token, OAuth |
| **Features** | Blocks, Attachments, Threads, Modals |
Microsoft Teams
| Config | Details |
|---|
| **Node** | Microsoft Teams |
| **Operations** | Post Message, Send Card, Create Channel |
| **Auth** | OAuth2, App Registration |
Discord
| Config | Details |
|---|
| **Node** | Discord |
| **Operations** | Send Message, Create Embed, Manage Roles |
| **Auth** | Bot Token |
WhatsApp (Twilio, Vonage, MessageBird, 360Dialog)
| Config | Details |
|---|
| **Providers** | Twilio, Vonage, MessageBird, 360Dialog, Gupshup |
| **Features** | Templates, Media, Interactive Buttons |
| **Compliance** | Opt-in required, 24h window |
Telegram
| Config | Details |
|---|
| **Node** | Telegram |
| **Operations** | Send Message, Send Photo, Send Document, Inline Keyboard |
| **Auth** | Bot Token |
7. File & Document Tools
PDF Processing
| Config | Details |
|---|
| **Nodes** | PDF.co, PDFMonkey, PDFMonkey, DocuSign, DocuGenerate |
| **Operations** | Generate PDF, Extract Text, Merge, Split, Fill Form |
| **Templates** | HTML-to-PDF, Template IDs |
Document Generation
| Config | Details |
|---|
| **Tools** | DocuGenerate, PDFMonkey, DocuSign, PandaDoc |
| **Templates** | HTML, DOCX, PDF templates with variables |
| **Output** | PDF, DOCX, HTML |
File Storage
| Config | Details |
|---|
| **Nodes** | Google Drive, OneDrive, Dropbox, Box, S3, FTP/SFTP |
| **Operations** | Upload, Download, List, Move, Delete, Share |
| **Triggers** | File Created, Updated, Deleted |
CSV / Excel Processing
| Config | Details |
|---|
| **Nodes** | CSV, Excel (Excel File, Microsoft Excel Online) |
| **Operations** | Read, Write, Append, Convert |
| **Parsing** | Header row, custom delimiter, encoding |
8. AI & ML Tools
OpenAI / Anthropic / Google AI
| Config | Details |
|---|
| **Nodes** | OpenAI, Anthropic, Google AI (Gemini) |
| **Models** | GPT-4o, GPT-4o-mini, Claude 3.5, Gemini 1.5 |
| **Operations** | Chat, Completion, Embeddings, Images, Audio, Moderation |
| **Features** | Functions/Tools, Vision, Streaming, JSON Mode |
Hugging Face
| Config | Details |
|---|
| **Node** | HTTP Request (Inference API) |
| **Models** | 100K+ models (LLM, Embedding, Vision, Audio) |
| **Cost** | Free tier, Pro $9/mo, Enterprise |
Local LLMs (Ollama, LM Studio, vLLM)
| Config | Details |
|---|
| **Node** | HTTP Request |
| **Endpoint** | `http://localhost:11434/api/generate` (Ollama) |
| **Models** | Llama 3, Mistral, CodeLlama, Phi-3, Gemma |
| **Cost** | Free (local hardware) |
9. Workflow & Automation Tools
Workflow Control
| Tool | Purpose |
|---|
| **IF** | Conditional branching |
| **Switch** | Multi-way routing |
| **Split In Batches** | Process arrays in chunks |
| **Merge** | Combine branches |
| **Wait** | Delay, wait for webhook, wait for time |
| **Loop** | Loop over items (via Split + Merge) |
| **Execute Workflow** | Call another workflow as subroutine |
| **Call n8n Workflow** | Invoke another workflow |
Data Transformation
| Tool | Purpose |
|---|
| **Set** | Set/rename/delete fields |
| **Function** | JavaScript transformation |
| **Function Item** | Per-item JavaScript |
| **Item Lists** | Aggregate, filter, sort, unique |
| **Convert** | JSON/CSV/XML/HTML/Base64 conversion |
| **Date & Time** | Parse, format, calculate |
| **Crypto** | Hash, HMAC, encrypt, decrypt |
| **Compression** | Gzip, Zip, Unzip |
10. Custom Tool Development
Creating Custom Tools
1. As a Workflow (Reusable)
1. Create workflow: tools/my_custom_tool
2. Input: Webhook with defined schema
3. Logic: Any n8n nodes
4. Output: Respond to Webhook with result
5. Register as Tool: In AI Agent node > Tools > Add Custom Workflow
2. As a Custom Node (Advanced)
export class MyCustomTool implements INodeType {
description: INodeTypeDescription = {
displayName: 'My Custom Tool',
name: 'myCustomTool',
group: ['transform'],
version: 1,
description: 'Custom tool for AI Agent',
defaults: { name: 'My Custom Tool' },
inputs: ['main'],
outputs: ['main'],
credentials: [],
properties: [
{
displayName: 'Input',
name: 'input',
type: 'string',
default: '',
description: 'Input for the tool',
},
],
};
async execute(this: IExecuteFunctions): Promise {
const input = this.getNodeParameter('input', 0);
// Your logic here
return this.prepareOutputData([{ json: { result: Processed: ${input} } }]);
}
}
```
Tool Selection Guide
| Task | Recommended Tool |
|---|
| Search the web | SerpAPI, Brave Search |
| Query database | PostgreSQL, MySQL, MongoDB nodes |
| Call REST API | HTTP Request |
| Run calculations | Function (JavaScript) |
| Send email | SendGrid / Gmail / Outlook |
| Send SMS | Twilio / Vonage |
| Post to Slack | Slack node |
| Generate PDF | PDF.co / PDFMonkey / |
| Run custom code | Function (JS) |
| Query vector DB | Pinecone / Qdrant / PGVector |
| Call GraphQL | HTTP Request (POST) |
| Run Python | HTTP to Python service |
| Process PDF | PDF.co / PDFMonkey |
| Upload file | S3 / Google Drive / OneDrive |
| Parse CSV/Excel | CSV / Excel nodes |
| Run Python | HTTP to Python service |
Tool Configuration Best Practices
1. Name clearly: web_search, database_query, send_email
2. Describe precisely: "Search Google for current information" not "Search"
3. Parameter descriptions: Help LLM understand each field
4. Validate inputs: Use schema validation, required fields
5. Handle errors: Return structured error objects
6. Limit scope: One tool = one clear purpose
7. Test schemas: Use n8n's AI Agent test panel
Tool Limits & Quotas
| Tool | Rate Limit | Cost |
|---|
| SerpAPI | 100/search | $50/5K |
| Brave Search | 1/sec | $3/1K |
| OpenAI | 3K RPM | Per token |
| Anthropic | 50 RPM | Per token |
| Twilio SMS | 1/sec | $0.0075/SMS |
| SendGrid | 600/min | $15/100K |
| PostgreSQL | Connection pool | Your DB |
| n8n Function | 30s timeout | Free |
Related Guides