Extend your agents with powerful tools - from MCP integrations to custom APIs and pre-built connectors.
Tools are the capabilities you give your agents to interact with the world. They enable agents to:
Query databases, fetch from APIs, read files
Send emails, SMS, push notifications, chat messages
Create invoices, process refunds, manage subscriptions
Connect to any external API or service
┌─────────────────────────────────────────────────────────────┐
│ AGENT │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ TOOL EXECUTOR │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ MCP │ │ API │ │ Custom │ │ Database │ │
│ │ Tools │ │ Tools │ │ Tools │ │ Tools │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ │ │ │ │ │
└───────────┼──────────────┼──────────────┼──────────────┼─────┘
▼ ▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ Stripe │ │ Resend │ │ Custom │ │ Neon │
│ Ayrshare │ │ Twilio │ │ Logic │ │ Supabase │
└──────────┘ └──────────┘ └──────────┘ └──────────┘Model Context Protocol (MCP) tools follow a standardized interface for AI agent interoperability.
Direct API integrations with popular services for email, SMS, payments, and more.
Build your own tools with custom logic, business rules, and domain-specific functionality.
Tools are defined with a schema that describes their inputs, outputs, and behavior:
import { z } from "zod"
import { tool } from "ai"
// Define a tool with Zod schema
const sendEmailTool = tool({
description: "Send an email to a recipient",
parameters: z.object({
to: z.string().email().describe("Recipient email address"),
subject: z.string().describe("Email subject line"),
body: z.string().describe("Email body content"),
priority: z.enum(["low", "normal", "high"]).optional()
.describe("Email priority level"),
}),
execute: async ({ to, subject, body, priority }) => {
const result = await sendEmail({ to, subject, body, priority })
return {
success: true,
messageId: result.id,
timestamp: new Date().toISOString()
}
}
})
// Use the tool with an agent
const agent = createAgent({
name: "Communication Agent",
tools: [sendEmailTool, sendSmsTool, createNotificationTool],
model: "anthropic/claude-sonnet-4"
})RealAroha includes many pre-built tools ready to use:
| Category | Tools | Use Cases |
|---|---|---|
| Communication | sendEmail, sendSms, sendPushNotification | Tenant notifications, alerts, reminders |
| Payments | createInvoice, processRefund, getPaymentStatus | Rent collection, deposits, refunds |
| Social Media | postToSocial, schedulePost, getAnalytics | Property marketing, listing promotion |
| Database | queryDatabase, insertRecord, updateRecord | Data operations, reporting |
| Documents | generatePdf, parseDocument, extractData | Contracts, reports, leases |
// Tool execution with validation and logging
async function executeToolWithGuardrails(
tool: Tool,
params: Record<string, unknown>,
context: ExecutionContext
) {
// 1. Validate parameters
const validated = await tool.parameters.parseAsync(params)
// 2. Check permissions
if (tool.requiresApproval) {
const approval = await requestApproval({
tool: tool.name,
params: validated,
context
})
if (!approval.granted) {
throw new Error(`Tool execution denied: ${approval.reason}`)
}
}
// 3. Execute with timeout
const result = await Promise.race([
tool.execute(validated, context),
timeout(tool.timeout ?? 30000)
])
// 4. Log execution
await logToolExecution({
tool: tool.name,
params: validated,
result,
duration: Date.now() - startTime,
agentId: context.agentId
})
return result
}Model Context Protocol integrations - Stripe, Notion, Linear, and more
Direct API connections to email, SMS, payments, and social media
Build your own tools with business logic and domain-specific functions
Manage, version, and discover tools across your organization