Add tools to your chat
Tools are how a chat experience can go beyond chatting — search your data, look up records, call your APIs. This guide covers the two common cases: assigning auto-generated tools to a chat, and creating a custom HTTP tool from scratch.
Before you start
- A chat experience.
- (For data-source tools) a search index with data already loaded.
- (For HTTP tools) the upstream API's URL, auth requirements, request/response shape.
Case 1: Assign auto-generated tools
When you upload data into a search index, Interakt creates a data source and four tools for it: search, lookup, inspect, enumerate. If those exist, you just need to assign them to the chat.
Steps
- Sidebar → Experiences → open your AI experience.
- Expand the Assigned Tools card.
- Click Assign Tool. A modal opens with a search box and the list of every tool in the system.
- Tick the four tools for your data source: search, lookup, inspect, enumerate.
- Click Assign.
The tools appear in the card with toggles and a per-tool description override.
When to override the AI description
Each tool has a global description (used everywhere) and a per-experience override (used only by this chat). Override when:
- The chat needs a more specific framing of the tool. "Searches the support knowledge base" vs "Searches the product catalog" — same tool type, different framing.
- You want the AI to use the tool more aggressively (or more carefully) in this experience than elsewhere.
- The default description was generic.
Click the description override field, write your version, click outside to save. The change applies immediately to this chat only.
When to disable a tool without removing it
The toggle on each row. Useful for:
- A/B testing — turn off
lookupand see if the chat degrades. - Maintenance — the upstream is down; toggle off so the chat stops trying.
Re-enable by toggling on again.
Case 2: Create a custom HTTP tool
Use this to give the chat access to your own systems — order lookup, account check, inventory query, whatever has an HTTP API.
Step 1 — Save the credential as a secret
Sidebar → Platform → Secrets Vault → New Secret.
- Name —
orders_api_key. - Value — paste your API key.
- Description — "Bearer token for orders.example.com API."
Save. You'll reference this from the tool config.
See Secrets for details.
Step 2 — Create the tool
Sidebar → Capabilities → Tools → Create Tool.
- Pick the executor type — HTTP API.
- Basic info:
- Name:
lookup_order. - Slug: auto-generated.
- Description: a short summary.
- Name:
- Configuration:
- Method — GET (for read), POST (for create / search).
- Base URL —
https://orders.example.com. - Path template —
/orders/{{input.order_id}}. The{{input.X}}placeholders are filled in by the AI when it calls the tool. - Headers —
Authorization: Bearer {{secret:orders_api_key}}. - Body template — for POST/PUT, with
{{input.X}}placeholders. Skip for GET. - Timeout — 30 seconds is the default. Raise for slow upstreams.
- Retries — default 0. Set to 1–2 for transient failures.
- Input schema — JSON Schema describing what the AI needs to provide:
{"type": "object","properties": {"order_id": {"type": "string","description": "The order identifier, e.g. ORD-12345"}},"required": ["order_id"]}
- Output schema (optional) — validates the response. Useful for catching upstream changes.
- AI description — see Description matters below.
Click Create.
Step 3 — Test the tool
On the tool's detail page, the Test Tool panel lets you call it with sample input. Try an order ID you know exists; confirm you get the expected response, that the secret resolved, that there's no timeout.
This is where you catch wiring problems before exposing the tool to a live chat.
Step 4 — Assign to a chat experience
Same flow as Case 1 — open the experience, Assigned Tools card, Assign Tool, pick lookup_order, save.
Step 5 — Test in the Chat Playground
Open the experience's Chat Playground card. Ask a question that should trigger the tool:
"Where's order ORD-12345?"
Watch the sidebar:
- Does the AI pick
lookup_order? - Does it extract the right
order_id? - Does the tool return data?
- Does the AI use the data in its response?
If the tool isn't called when it should be, the description needs work.
Description matters
The AI picks tools based on their descriptions. A bad description means the tool gets ignored or overused for everything.
The template
[What the tool does, in one sentence.]
[When to use it: 1–3 specific triggers.]
[When not to use it: 1–2 anti-triggers.]
[Example: a sample input and what it returns.]
A bad description
Looks up orders.
A good description
Looks up an order's status, items, and shipping by order ID. Use when the user asks about a specific order they have (order number, "where's my order", "did my order ship", "what was in my order"). Don't use for general product questions, returns, or customer-service inquiries — those have their own tools. Example input:
{ "order_id": "ORD-12345" }. Returns status, items, shipping carrier.
Iterating
In the experience's playground, watch where the AI goes wrong:
- Wrong tool picked. Tighten both tools' descriptions to be less ambiguous.
- No tool picked when one should be. Make the description more inviting — add more "when to use" triggers.
- Wrong parameter extracted. Tighten the input schema — mark fields required, add clear descriptions on each property.
- Tool fires but response makes no sense. Add an output schema or shape the response in the executor (truncate, summarise). Big or messy responses confuse the AI.
- HTTP timeouts. Raise the tool's timeout. For really slow upstreams, switch to an async pattern (return a job ID, have the AI say "I'll check back").
AI Responder tools
The same flow applies to AI Responder tools (sub-AI calls with their own instructions). See Tools for the configuration shape.
Bringing in MCP server tools
MCP servers aren't tools — they're Connections that expose many tools at once. Set up the connection once in Capabilities → MCP Connections, then attach it to any chat experience from that experience's detail page. See MCP Connections for the full flow.
Common gotchas
- Tool not called when it obviously should be. 99% of the time the description. Rewrite it.
{{input.X}}resolving to empty. The AI didn't fill X. Add it as required in the input schema with a clear description.{{secret:X}}resolving to empty. Typo in the name, or the secret doesn't exist. Check the Secrets list.- HTTP 4xx from the upstream. Header / body shape wrong. Test with the in-page Test Tool panel before involving the AI.
- Big response confuses the AI. Add an output schema, or shape the response (truncate, pick fields, summarise) inside the executor.
Where to go next
- Tools — concept page.
- Secrets — storing tool credentials.
- Configure guardrails — limiting what the chat can say with tool data.
- Prompt templates — tuning the prompts that decide which tool runs.