Tools & integrations
Tools let an agent look up live information or take action during a conversation. Integrations hold reusable workspace connections. EVA and Gemini support these tools; Cartesia hosted tools will follow in a later release.
Connect a service
Open Build → Integrations. Choose Slack or Custom API.
- Slack: Create an incoming webhook in your Slack app, choose its channel, then save the webhook URL in EVA. Each connection sends to one channel.
- Custom API: Enter the HTTPS origin, such as
https://api.example.com, and choose a bearer token or an API key header. The credential can only be sent to that origin.
Credentials are encrypted and never returned after saving. Configured means a credential has been saved; use a tool test to verify it. Public APIs need no connection. Workspace members with tool-write access can manage connections. Developer API keys can reference saved connections but cannot retrieve or manage their secrets.
Manage replaces a credential or disconnects a service. Rotation affects all tools using that connection. For Slack, a replacement webhook may select a different channel. Disconnecting makes dependent tools unavailable, including in published agent versions.
Create and enable a tool
- Open Build → Tools and choose API Request, Function or Slack message.
- Give it a short name such as
lookup_orderand explain when the agent should use it. - Choose a connection, then add the values the agent must collect. API Request supports GET, POST, PUT, PATCH and DELETE; body fields use POST, PUT or PATCH.
- Save. Choose Test, enter sample arguments and press Run tool. This calls the real service and can change data or send a message.
- Open your agent configuration, expand Tools, select the tool and publish a new version.
A good description says what the tool does, when to call it, and what information is required. For example: “Look up an order after the caller supplies its order ID. Ask for that ID if it is missing; never invent one.”
Saved tool edits apply to newly published versions. Existing versions keep their tool configuration. Deleting a catalog tool does not remove it from existing versions.
Choose the right tool
| Tool | Use it for |
|---|---|
| API Request | Call a REST API that accepts mapped inputs and returns JSON. |
| Function | Run logic on your own HTTPS server with a correlated EVA request/response. |
| Slack message | Send a plain-text update to a fixed connected channel. |
| DTMF | Press telephone keypad digits during a SIP call. Enable send_dtmf directly in the agent configuration. |
| Hang Up | End the call. Gemini includes this automatically; EVA uses end_conversation. |
DTMF accepts 0–9, * and #, up to 20 characters. It is available on SIP calls, not browser or WhatsApp calls. It sends keypad events, not SMS or SIP INFO requests.
Advanced configuration
Advanced JSON supports optional/nested input schemas, path/query/body mappings, non-secret headers, static body values and selected response fields. Mappings use destination: input_name. A URL placeholder such as {order_id} must have a matching path mapping. Static body values override mapped values. Response fields use JSON object paths, for example {"status": "order.status"}.
Use concise responses. Private networks, localhost, cloud metadata and redirects are blocked. Calls have a configurable timeout of up to 30 seconds and a response size limit. External services may have their own limits and charges.
The audio transport continues while a tool runs, but the model may wait for its result before answering. A timeout does not prove that a write failed: EVA does not automatically retry writes. Check the destination before repeating a side-effecting test.
See the Function request contract to connect your own server.
