Connections & channels
Two sides of the same coin:
- Connections — how your agent reaches out to other services (their tools become the agent's tools).
- Channels — how people reach your agent (Slack, web, GitHub, …).
Both live in the Integrations tab in Eve Studio, with a sub-tab for each.
Connections
A connection points your agent at an external service and exposes its tools to the model. Files live in agent/connections/; the filename is the connection name, and discovered tools are called as <name>__<tool> (e.g. linear__create_issue). The model finds them through connection_search, so the description you write matters — it's the routing signal.
MCP connections
Use MCP when the service already runs an MCP server that publishes its own tools.
import { connect } from "@vercel/connect/eve";
import { defineMcpClientConnection } from "eve/connections";
export default defineMcpClientConnection({
url: "https://mcp.linear.app/mcp",
description: "Linear workspace: issues, projects, cycles, and comments.",
auth: connect("mcp.linear.app/linear"),
});
OpenAPI connections
Use OpenAPI when the service publishes an HTTP API contract — Eve generates one tool per operation.
Authorizing with Vercel Connect
For OAuth-backed services, prefer Vercel Connect: it owns the browser consent flow, encrypted token storage, refresh, and project access, so credentials never touch model context. The connect() helper wires that lifecycle into the connection's auth.
- User-scoped (default):
connect("<connector-uid>")— the first call for a new user parks the turn on anauthorization.requiredevent with a sign-in URL, then resumes. - App-scoped:
connect({ connector: "<uid>", principalType: "app" })— the connection acts as the agent itself, non-interactively.
Static credentials
Not everything needs OAuth — a connection can also authenticate with a static bearer token from an environment variable, or a custom header. Set those in the Deploy → Environment panel.
Managing connections in Studio
Integrations → Connections shows two things:
- Custom connections — the connection files in
agent/connections/. Add one (MCP or OpenAPI, with a URL and an auth mode), and open, edit, or delete it. - Vercel Connect connectors — the connectors on your linked Vercel project. Create a connector (opens Vercel Connect), then Use in agent to write the connection (or channel) code wired to that connector's UID.
Channels
A channel is the edge adapter between a platform and your agent. It normalizes platform input into a message, owns the conversation's resume handle, and decides how a reply is delivered. Channel files live in agent/channels/; the file stem is the channel id. Local subagents don't declare channels.
The default HTTP channel
Eve's HTTP channel is always on — it's the session API the Studio chat, the terminal UI, and curl all talk to (POST /eve/v1/session, GET …/stream). You only add agent/channels/eve.ts to override defaults like route auth.
Platform channels
| Channel | Auth | | --- | --- | | Slack — @mentions, DMs, threads, HITL buttons | Vercel Connect | | GitHub — @mentions, PR review | Vercel Connect | | Linear — issue delegation, agent sessions | Vercel Connect | | Discord — slash commands, components | Env vars | | Microsoft Teams — messages + Adaptive Cards | Env vars | | Telegram — bot messages | Env vars | | Twilio — SMS & voice | Env vars | | Web Chat — a Next.js browser app | — | | Custom — your own webhook / WebSocket | your code |
Vercel Connect channels (Slack, GitHub, Linear)
These run credentials through Vercel Connect — no SLACK_BOT_TOKEN for you to manage. The channel file references the connector, e.g.:
import { connectSlackCredentials } from "@vercel/connect/eve";
import { slackChannel } from "eve/channels/slack";
export default slackChannel({
credentials: connectSlackCredentials("slack/my-agent"),
});
The connector must be attached with triggers pointed at Eve's route so the platform delivers events (see below).
Env-based channels (Discord, Teams, Telegram, Twilio)
These read credentials from environment variables. When you add one in Studio, it tells you exactly which vars to set (e.g. DISCORD_PUBLIC_KEY, DISCORD_APPLICATION_ID, DISCORD_BOT_TOKEN). Set them in Deploy → Environment, then restart.
Web Chat
Adds a Next.js Web Chat application so your agent has a browser UI. You can enable it when you first create an agent, or add it later.
Custom channels
For any surface Eve doesn't ship, author one with defineChannel from eve/channels — route handlers, an events map, and a send call to start or resume a session.
Adding a channel in Studio
Integrations → Channels shows what's configured and a catalog of the rest.
- Pick a channel from the catalog.
- Studio guides you by auth type:
- Connect channels (Slack/GitHub/Linear) → choose a Vercel Connect connector.
- Env channels → shows the variables to set.
- Web Chat → scaffolds the Next.js app.
- It writes
agent/channels/<kind>.ts.
Attaching a connector for triggers
For an event-driven channel, the platform needs to deliver events to Eve's route. Studio's Attach for triggers runs:
vercel connect attach <connector-uid> --triggers --trigger-path /eve/v1/<kind> --yes
That re-points the connector's trigger destination at Eve's channel route (e.g. /eve/v1/slack). Then deploy so the live agent starts receiving events.
Next
- Deploy to Vercel — ship the agent so channels can reach it.
- Hooks — observe results from connection tools.
