> 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