@agentforge/tools
Production-ready tools collection for AgentForge - 88 tools for web, data, file, utility, and agent operations

š Status: Production Ready & Published
88 production-ready tools | Full TypeScript support | Comprehensive documentation | LangChain compatible
š¦ Installation
npm install @agentforge/tools
pnpm add @agentforge/tools
yarn add @agentforge/tools
Optional Peer Dependencies
Some tools require additional peer dependencies. Install only what you need:
Relational Database Tools (PostgreSQL, MySQL, SQLite):
pnpm add pg @types/pg
pnpm add mysql2
pnpm add better-sqlite3 @types/better-sqlite3
šÆ Overview
This package provides 88 ready-to-use tools organized into 5 categories:
- š Web Tools (22 tools) - HTTP requests, web search, web scraping, HTML parsing, URL manipulation, Slack integration, Confluence integration
- š Data Tools (25 tools) - JSON, CSV, XML processing, data transformation, and Neo4j graph database with embeddings
- š File Tools (18 tools) - File operations, directory management, path utilities
- š§ Utility Tools (22 tools) - Date/time, strings, math, validation
- š¤ Agent Tools (1 tool) - Human-in-the-loop and agent interaction
All tools feature:
- ā
Full TypeScript support with type inference
- ā
Zod schema validation
- ā
Comprehensive error handling
- ā
Detailed documentation and examples
- ā
LangChain compatibility
- ā
Production-tested and ready
š Quick Start
import { httpGet, jsonParser, fileReader, calculator } from '@agentforge/tools';
const response = await httpGet.invoke({
url: 'https://api.example.com/data'
});
const parsed = await jsonParser.invoke({
json: '{"name": "John", "age": 30}'
});
const file = await fileReader.invoke({
path: './data.txt',
encoding: 'utf8'
});
const result = await calculator.invoke({
operation: 'add',
a: 10,
b: 20
});
š Tool Categories
š Web Tools (22 tools)
Tools for web interactions, HTTP operations, and integrations.
Web Search
webSearch - Search the web using DuckDuckGo (free) or Serper API (optional premium)
- No API key required for basic searches (uses DuckDuckGo)
- Optional Serper API for premium Google search results
- Smart fallback: automatically switches providers when needed
- Returns structured results with titles, links, and snippets
HTTP Client Tools
httpClient - Full-featured HTTP client with all methods (GET, POST, PUT, DELETE, PATCH)
httpGet - Simple GET requests
httpPost - Simple POST requests with JSON body
Web Scraping Tools
webScraper - Extract data from web pages using CSS selectors
htmlParser - Parse HTML and extract elements
extractLinks - Extract all links from HTML
extractImages - Extract all images from HTML
URL Tools
urlValidator - Validate and parse URLs
urlBuilder - Build URLs from components
urlQueryParser - Parse query parameters
Slack Tools
sendSlackMessage - Send messages to Slack channels
notifySlack - Send notifications with @mentions
getSlackChannels - List available Slack channels
getSlackMessages - Read message history from channels
createSlackTools() - Factory function for custom Slack configuration
Confluence Tools
searchConfluence - Search Confluence using CQL (Confluence Query Language)
getConfluencePage - Get full page content by ID
listConfluenceSpaces - List all available Confluence spaces
getSpacePages - Get all pages from a specific space
createConfluencePage - Create new Confluence pages
updateConfluencePage - Update existing Confluence pages
archiveConfluencePage - Archive pages (move to trash)
createConfluenceTools() - Factory function for custom Confluence configuration
š Data Tools (18 tools)
Tools for data processing and transformation.
JSON Tools
jsonParser - Parse JSON strings
jsonStringify - Convert objects to JSON
jsonQuery - Query JSON using dot notation
jsonValidator - Validate JSON syntax
jsonMerge - Merge multiple JSON objects
CSV Tools
csvParser - Parse CSV to objects
csvGenerator - Generate CSV from objects
csvToJson - Convert CSV to JSON
jsonToCsv - Convert JSON to CSV
XML Tools
xmlParser - Parse XML to objects
xmlGenerator - Generate XML from objects
xmlToJson - Convert XML to JSON
jsonToXml - Convert JSON to XML
Data Transformation Tools
arrayFilter - Filter arrays by property values
arrayMap - Extract properties from array objects
arraySort - Sort arrays by property
arrayGroupBy - Group arrays by property
objectPick - Pick specific properties from objects
objectOmit - Omit specific properties from objects
Neo4j Graph Database Tools
neo4jQuery - Execute Cypher queries against Neo4j
neo4jGetSchema - Get graph schema (labels, relationships, properties)
neo4jFindNodes - Find nodes by label and properties
neo4jTraverse - Traverse graph following relationships
neo4jVectorSearch - Semantic search using vector indexes (GraphRAG)
neo4jVectorSearchWithEmbedding - Semantic search with automatic embedding generation
neo4jCreateNodeWithEmbedding - Create nodes with automatic embeddings
š File Tools (18 tools)
Tools for file system operations.
File Operations
fileReader - Read file contents
fileWriter - Write content to files
fileAppend - Append content to files
fileDelete - Delete files
fileExists - Check if file/directory exists
Directory Operations
directoryList - List directory contents
directoryCreate - Create directories
directoryDelete - Delete directories
fileSearch - Search for files by pattern
Path Utilities
pathJoin - Join path segments
pathResolve - Resolve absolute paths
pathParse - Parse path components
pathBasename - Get filename from path
pathDirname - Get directory from path
pathExtension - Get file extension
pathRelative - Get relative path
pathNormalize - Normalize paths
š§ Utility Tools (22 tools)
General utility tools for common operations.
Date/Time Tools
currentDateTime - Get current date/time
dateFormatter - Format dates
dateArithmetic - Add/subtract time
dateDifference - Calculate date differences
dateComparison - Compare dates
String Tools
stringCaseConverter - Convert string cases
stringTrim - Trim whitespace
stringReplace - Replace substrings
stringSplit - Split strings
stringJoin - Join string arrays
stringSubstring - Extract substrings
stringLength - Get string length/word count
Math Tools
calculator - Basic arithmetic operations
mathFunctions - Mathematical functions (sqrt, sin, cos, etc.)
randomNumber - Generate random numbers
statistics - Calculate statistics (avg, median, stddev)
Validation Tools
emailValidator - Validate email addresses
urlValidatorSimple - Validate URLs
phoneValidator - Validate phone numbers
creditCardValidator - Validate credit cards (Luhn algorithm)
ipValidator - Validate IPv4/IPv6 addresses
uuidValidator - Validate UUIDs
š” Usage Examples
Web Search Example
import { webSearch } from '@agentforge/tools';
const result = await webSearch.invoke({
query: 'TypeScript programming language',
maxResults: 10
});
console.log(`Found ${result.results.length} results from ${result.source}`);
result.results.forEach(r => {
console.log(`${r.title}: ${r.link}`);
console.log(` ${r.snippet}`);
});
const premiumResult = await webSearch.invoke({
query: 'Latest AI developments 2026',
maxResults: 5,
preferSerper: true
});
console.log(`Source: ${premiumResult.source}`);
console.log(`Fallback used: ${premiumResult.metadata?.fallbackUsed}`);
console.log(`Response time: ${premiumResult.metadata?.responseTime}ms`);
Environment Setup:
SERPER_API_KEY=your-serper-api-key-here
Input Schema:
{
query: string;
maxResults?: number;
preferSerper?: boolean;
}
Output Schema:
{
results: Array<{
title: string;
link: string;
snippet: string;
position: number;
}>;
source: 'duckduckgo' | 'serper';
metadata?: {
fallbackUsed: boolean;
responseTime: number;
};
}
DuckDuckGo vs Serper:
| API Key | ā Not required | ā
Required (get key) |
| Cost | š Free | š° Paid (see pricing) |
| Search Engine | DuckDuckGo | Google |
| Rate Limits | Generous | Based on plan |
| Result Quality | Good | Excellent (Google results) |
| Use Case | Development, testing, low-volume | Production, high-quality results |
| Fallback | N/A | Auto-fallback to DuckDuckGo on error |
When to use each:
- DuckDuckGo: Default choice, no setup needed, great for development and testing
- Serper: Production use cases requiring Google-quality results, set
preferSerper: true
Web Scraping Example
import { webScraper } from '@agentforge/tools';
const result = await webScraper.invoke({
url: 'https://example.com',
selector: 'article h1',
extractText: true,
extractLinks: true,
extractMetadata: true
});
console.log(result.text);
console.log(result.links);
console.log(result.metadata);
Slack Integration Example
import {
sendSlackMessage,
notifySlack,
getSlackChannels,
getSlackMessages,
createSlackTools
} from '@agentforge/tools';
const message = await sendSlackMessage.invoke({
channel: 'general',
message: 'Hello from AgentForge!'
});
const notification = await notifySlack.invoke({
channel: 'alerts',
message: 'System alert: High CPU usage detected',
mentions: ['john', 'jane']
});
const channels = await getSlackChannels.invoke({
include_private: false
});
console.log(channels.data?.channels);
const history = await getSlackMessages.invoke({
channel: 'general',
limit: 50
});
console.log(`Found ${history.data?.count} messages`);
const customTools = createSlackTools({
token: 'xoxb-your-custom-token',
botName: 'My Custom Bot',
botIcon: ':rocket:'
});
await customTools.sendMessage.invoke({
channel: 'general',
message: 'Message from custom bot!'
});
Environment Setup:
SLACK_USER_TOKEN=xoxp-your-user-token
SLACK_BOT_TOKEN=xoxb-your-bot-token
Getting a Slack Token:
- Go to Slack API
- Create a new app or select existing
- Add OAuth scopes:
chat:write, channels:read, channels:history
- Install app to workspace
- Copy the token (starts with
xoxb- for bot or xoxp- for user)
Confluence Integration Example
import {
searchConfluence,
getConfluencePage,
listConfluenceSpaces,
getSpacePages,
createConfluencePage,
updateConfluencePage,
archiveConfluencePage,
createConfluenceTools
} from '@agentforge/tools';
const searchResults = await searchConfluence.invoke({
cql: 'type=page AND space=DOCS',
limit: 10
});
console.log(`Found ${searchResults.results.length} pages`);
const page = await getConfluencePage.invoke({
page_id: '123456'
});
console.log(`Page title: ${page.page.title}`);
console.log(`Content: ${page.page.content}`);
const spaces = await listConfluenceSpaces.invoke({
limit: 50
});
console.log(`Found ${spaces.spaces.length} spaces`);
const spacePages = await getSpacePages.invoke({
space_key: 'DOCS',
limit: 25
});
console.log(`Found ${spacePages.pages.length} pages in DOCS space`);
const newPage = await createConfluencePage.invoke({
space_key: 'DOCS',
title: 'My New Page',
content: '<p>This is the page content in HTML format</p>',
parent_page_id: '789012'
});
console.log(`Created page with ID: ${newPage.page.id}`);
const updated = await updateConfluencePage.invoke({
page_id: newPage.page.id,
title: 'Updated Page Title',
content: '<p>Updated content</p>'
});
console.log(`Updated to version ${updated.page.version}`);
const archived = await archiveConfluencePage.invoke({
page_id: newPage.page.id,
reason: 'No longer needed'
});
console.log(archived.archived.note);
const customTools = createConfluenceTools({
apiKey: 'your-api-key',
email: 'your-email@example.com',
siteUrl: 'https://your-domain.atlassian.net'
});
await customTools.searchConfluence.invoke({
cql: 'type=page',
limit: 5
});
Environment Setup:
ATLASSIAN_API_KEY=your-api-key-here
ATLASSIAN_EMAIL=your-email@example.com
ATLASSIAN_SITE_URL=https://your-domain.atlassian.net
Getting a Confluence API Key:
- Go to Atlassian Account Settings
- Click "Create API token"
- Give it a label (e.g., "AgentForge")
- Copy the generated token
- Use your Atlassian email and the API token for authentication
Data Processing Example
import { csvParser, arrayFilter, arraySort } from '@agentforge/tools';
const parsed = await csvParser.invoke({
csv: 'name,age,city\nJohn,30,NYC\nJane,25,LA',
hasHeaders: true
});
const filtered = await arrayFilter.invoke({
array: parsed.data,
property: 'age',
operator: 'greater-than',
value: 25
});
const sorted = await arraySort.invoke({
array: filtered.filtered,
property: 'age',
order: 'desc'
});
console.log(sorted.sorted);
Neo4j Graph Database Example
import {
initializeNeo4jTools,
neo4jQuery,
neo4jGetSchema,
neo4jFindNodes,
neo4jTraverse,
neo4jVectorSearch,
} from '@agentforge/tools';
await initializeNeo4jTools();
const schema = await neo4jGetSchema.execute({});
console.log('Node Labels:', schema.schema.nodeLabels);
console.log('Relationships:', schema.schema.relationshipTypes);
const result = await neo4jQuery.execute({
cypher: 'MATCH (p:Person)-[:KNOWS]->(friend) WHERE p.name = $name RETURN friend',
parameters: { name: 'Alice' },
});
const people = await neo4jFindNodes.execute({
label: 'Person',
properties: { city: 'New York' },
limit: 10,
});
const connections = await neo4jTraverse.execute({
startNodeId: 123,
relationshipType: 'KNOWS',
direction: 'outgoing',
maxDepth: 2,
limit: 50,
});
const embeddingVector = new Array(1536).fill(0).map(() => Math.random());
const similar = await neo4jVectorSearch.execute({
indexName: 'document_embeddings',
queryVector: embeddingVector,
limit: 5,
});
Environment Variables:
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your-password
NEO4J_DATABASE=neo4j
File Operations Example
import { fileReader, fileWriter, directoryList } from '@agentforge/tools';
const content = await fileReader.invoke({
path: './data.json',
encoding: 'utf8'
});
const processed = JSON.parse(content.content);
processed.updated = new Date().toISOString();
await fileWriter.invoke({
path: './data-updated.json',
content: JSON.stringify(processed, null, 2),
createDirs: true
});
const files = await directoryList.invoke({
path: './',
recursive: false,
includeDetails: true
});
console.log(files.files);
Date/Time Example
import { currentDateTime, dateArithmetic, dateDifference } from '@agentforge/tools';
const now = await currentDateTime.invoke({
format: 'custom',
customFormat: 'yyyy-MM-dd HH:mm:ss'
});
const future = await dateArithmetic.invoke({
date: now.iso,
operation: 'add',
amount: 7,
unit: 'days'
});
const diff = await dateDifference.invoke({
startDate: now.iso,
endDate: future.result,
unit: 'hours'
});
console.log(`${diff.difference} hours until ${future.result}`);
String Manipulation Example
import { stringCaseConverter, stringReplace, stringSplit } from '@agentforge/tools';
const camel = await stringCaseConverter.invoke({
text: 'hello world example',
targetCase: 'camel'
});
const kebab = await stringCaseConverter.invoke({
text: 'HelloWorldExample',
targetCase: 'kebab'
});
const replaced = await stringReplace.invoke({
text: 'Hello World, Hello Universe',
search: 'Hello',
replace: 'Hi',
global: true
});
const parts = await stringSplit.invoke({
text: 'apple,banana,orange',
delimiter: ','
});
Validation Example
import { emailValidator, urlValidatorSimple, creditCardValidator } from '@agentforge/tools';
const email = await emailValidator.invoke({
email: 'user@example.com'
});
console.log(email.valid);
const url = await urlValidatorSimple.invoke({
url: 'https://example.com/path'
});
console.log(url.valid);
const card = await creditCardValidator.invoke({
cardNumber: '4532-1488-0343-6467'
});
console.log(card.valid);
š Using with LangChain
All tools are compatible with LangChain through the @agentforge/core integration:
import { httpGet, jsonParser } from '@agentforge/tools';
import { toLangChainTool } from '@agentforge/core';
const langchainHttpGet = toLangChainTool(httpGet);
const langchainJsonParser = toLangChainTool(jsonParser);
const tools = [langchainHttpGet, langchainJsonParser];
š API Reference
Tool Structure
All tools follow the same structure:
interface Tool<TInput, TOutput> {
metadata: {
name: string;
description: string;
category: ToolCategory;
tags?: string[];
};
schema: ZodSchema<TInput>;
execute: (input: TInput) => Promise<TOutput>;
}
Error Handling
Most tools return a result object with a success field:
const result = await someTool.invoke({ ... });
if (result.success) {
console.log(result.data);
} else {
console.error(result.error);
}
Type Safety
All tools are fully typed with TypeScript:
import { httpGet } from '@agentforge/tools';
const result = await httpGet.invoke({
url: 'https://api.example.com',
headers: { 'Authorization': 'Bearer token' }
});
console.log(result.data);
šļø Code Organization
All tools follow a consistent directory structure pattern for better maintainability and discoverability:
Directory Structure
Each tool category is organized into its own directory with the following structure:
tool-category/
āāā index.ts # Main exports, factory functions, default instances
āāā types.ts # TypeScript interfaces, Zod schemas, configuration types
āāā auth.ts # Authentication helpers (for API tools)
āāā tools/ # Individual tool implementations
āāā tool-1.ts
āāā tool-2.ts
āāā tool-3.ts
Example: Slack Tools
slack/
āāā index.ts # Exports: sendSlackMessage, notifySlack, getSlackChannels, getSlackMessages, createSlackTools()
āāā types.ts # SlackConfig, SlackMessageSchema, SlackChannelSchema, etc.
āāā auth.ts # getSlackToken(), validateSlackConfig()
āāā tools/
āāā send-message.ts
āāā notify.ts
āāā get-channels.ts
āāā get-messages.ts
Benefits
- Modularity: Each tool is in its own file, making it easy to find and modify
- Consistency: All tool categories follow the same pattern
- Maintainability: Changes to one tool don't affect others
- Discoverability: Clear structure makes it easy to understand what's available
- Type Safety: Shared types in
types.ts ensure consistency across tools
- Testability: Each tool can be tested independently
Factory Functions
Each tool category provides a factory function for custom configuration:
import { createSlackTools } from '@agentforge/tools';
const customTools = createSlackTools({
token: 'xoxb-your-custom-token',
botName: 'My Custom Bot',
botIcon: ':rocket:'
});
await customTools.sendMessage.invoke({
channel: 'general',
message: 'Hello from custom bot!'
});
Available factory functions:
createSlackTools(config?) - Slack integration tools
createConfluenceTools(config?) - Confluence integration tools
createHttpTools(config?) - HTTP client tools
createScraperTools(config?) - Web scraping tools
createCsvTools(config?) - CSV processing tools
createJsonTools(config?) - JSON processing tools
createXmlTools(config?) - XML processing tools
createTransformerTools(config?) - Data transformation tools
createFileOperationTools(config?) - File operation tools
createDirectoryOperationTools(config?) - Directory operation tools
createPathUtilityTools(config?) - Path utility tools
createDateTimeTools(config?) - Date/time tools
createStringUtilityTools(config?) - String utility tools
createMathOperationTools(config?) - Math operation tools
createValidationTools(config?) - Validation tools
š ļø Development
pnpm install
pnpm build
pnpm test
pnpm typecheck
pnpm lint
š Tool Statistics
- Total Tools: 81
- Web Tools: 22 (includes 4 Slack tools + 7 Confluence tools)
- Data Tools: 18
- File Tools: 18
- Utility Tools: 22
- Agent Tools: 1
- Lines of Code: ~4,000
- Full TypeScript Support: ā
- Zod Validation: ā
- LangChain Compatible: ā
š¤ Contributing
Contributions are welcome! Please see the main AgentForge repository for contribution guidelines.
š License
MIT Ā© 2026 Tom Van Schoor
š Documentation
š Links
š Related Packages
Built with ā¤ļø by the AgentForge Team