> Source: https://docs.virtuo.in/vibot/tools
> Build the toolkit your AI agent can call mid-conversation — presets, integration actions, and custom webhooks.
# Tools
A **tool** is an action your AI agent can take during a conversation, instead of
only writing a reply. Capturing a lead, booking an appointment, checking an
order, posting to Slack, calling your own API — each of those is a tool you
switch on and configure.
Tools live at **Dashboard → AI → Tools**. Connecting the underlying accounts is a
separate, do-it-once job on [**Integrations**](/vibot/integrations).
The agent decides *when* to call a tool, from the tool's **description**. That
field is not decoration — it is the instruction the model reads. See
[Writing a description the agent understands](#writing-a-description-the-agent-understands).
## The Tools workspace
Three panes: your existing tools on the left, the configuration for the selected
tool in the middle, and its parameters on the right. **Create Tool** opens a
menu with four sections.
| Section | What it creates |
|---|---|
| **Custom** | A **Custom Webhook** — the agent calls an HTTPS endpoint you own. |
| **Presets** | A built-in Vibot action. No external account needed. |
| **Query** | **Knowledge Base Search**. See the note below before using this. |
| **Integrations** | One action from a connected provider (Google Calendar, Shopify, Slack, …). |
**Knowledge Base Search is not implemented yet.** It appears in the Create Tool
menu, but if the agent calls it the tool returns *"Query tool is not yet
implemented."* Don't add it to a live agent. Your Knowledge Base is already
searched automatically on every message — you do **not** need a tool for it.
See [Knowledge Base](/vibot/features#knowledge-base).
## Preset tools
Built into Vibot. Nothing to connect — switch one on and it works.
| Preset | What the agent does with it |
|---|---|
| **Capture lead** (`capture_lead`) | Records the customer as a lead with the details gathered so far. Triggers [lead scoring](/vibot/features#leads) and a notification email. |
| **Escalate to human** (`escalate_to_human`) | Stops the AI and raises an [escalation](/vibot/features#escalations) for a human to pick up. |
| **Request call** (`request_call`) | Records that the customer wants a phone call back. |
| **Send follow-up message** (`send_followup_message`) | Sends one of your approved follow-up templates. See [Automations](/vibot/features#automations). |
**One tool you never add: `capture_variable`.** Declare a field on
[AI Agent → Variables](/vibot/getting-started/configure-agent#variables) and the
agent is given this action automatically, so it can record each field as the
customer provides it. It won't appear in this list — defining the variable is
the whole setup.
## Integration tools
An integration tool is **one action** from a provider you've already connected.
Connect the account once on [Integrations](/vibot/integrations), then add as many
actions as you need here.
| Provider | Actions |
|---|---|
| **Google Sheets** | `append_row`, `lookup_row` |
| **Shopify** | `search_products`, `lookup_order`, `get_order_status` |
| **Calendly** | `create_one_off_link`, `list_event_types` |
| **Slack** | `send_message` |
| **MCP** | Discovered live from your MCP server |
| **Google Calendar** | `book_appointment`, `check_availability` — *not connectable yet* |
If a provider isn't connected, its actions still appear in the menu but the tool
can't be saved until you connect it. **Google Calendar** is still in provider
review and sits under **Coming soon** — use Calendly for booking in the meantime.
## Custom webhooks
For anything Vibot doesn't ship. The agent calls your HTTPS endpoint with a JSON
body you define, and whatever you return is handed back to the model as context
for its next reply.
### Create the tool
**Create Tool → Custom → Custom Webhook**.
### Point it at your endpoint
Give it the HTTPS URL. HTTP is refused — the payload can contain customer data.
### Define the parameters
A JSON Schema describing what the agent should collect before calling you:
```json
{
"type": "object",
"properties": {
"name": { "type": "string", "description": "Customer name" },
"phone": { "type": "string", "description": "Phone in E.164" }
},
"required": ["name", "phone"]
}
```
Each `description` tells the agent what to put in that field, so write them for a
reader who only sees the schema.
### Add authentication
Optional. A bearer token or header secret, stored encrypted. Once saved the
secret is never shown again — leave the field blank to keep it, or paste a new
value to rotate it.
### Describe it, then enable it
Write the description (below), save, and switch the tool on.
Return quickly. The customer is waiting on WhatsApp while your endpoint responds,
and a slow tool call shows up as a slow reply. Return a small JSON object — the
whole response becomes model context, so a large blob costs tokens on every
subsequent turn of that conversation.
## Writing a description the agent understands
The description is the only thing the model uses to decide whether this tool is
the right one for what the customer just said. Say **when** to use it, not what
it is internally.
| Instead of | Write |
|---|---|
| `Order lookup` | `Look up the status of a customer's existing order. Use when they ask where their order is or give an order number.` |
| `Sheets append` | `Save a new enquiry to the sales sheet. Use once you have the customer's name and phone number.` |
| `Calls the booking API` | `Book an appointment. Use only after the customer has agreed to a specific date and time.` |
If two tools have descriptions that overlap, the agent will sometimes pick the
wrong one — make the boundary between them explicit.
## Testing a tool
The fastest loop is [**Vibot Chat**](/vibot/features#vibot-chat), which talks to
your agent with your real tools connected but without messaging a customer. Send
the message a customer would send and check the tool fires.
## Troubleshooting
| Symptom | Cause |
|---|---|
| Agent never calls the tool | Description doesn't match how customers actually phrase it, or the tool is saved but not enabled. |
| Agent calls the wrong tool | Two descriptions overlap. Narrow both. |
| Tool fails every time | Endpoint isn't reachable over HTTPS, or the auth secret was rotated on your side but not in Vibot. |
| Integration action won't save | The provider isn't connected — see [Integrations](/vibot/integrations). |
| Agent replies "not yet implemented" | It called **Knowledge Base Search**. Remove that tool. |
## Related
- [**Integrations**](/vibot/integrations) — connect the accounts these tools use
- [**Configure the agent**](/vibot/getting-started/configure-agent) — persona and instructions
- [**Features overview**](/vibot/features) — every dashboard page