Skip to content

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 ​

  1. Open Build → Tools and choose API Request, Function or Slack message.
  2. Give it a short name such as lookup_order and explain when the agent should use it.
  3. 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.
  4. Save. Choose Test, enter sample arguments and press Run tool. This calls the real service and can change data or send a message.
  5. 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 ​

ToolUse it for
API RequestCall a REST API that accepts mapped inputs and returns JSON.
FunctionRun logic on your own HTTPS server with a correlated EVA request/response.
Slack messageSend a plain-text update to a fixed connected channel.
DTMFPress telephone keypad digits during a SIP call. Enable send_dtmf directly in the agent configuration.
Hang UpEnd 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.

EVA Company · Understanding the conversation.