> ## Documentation Index
> Fetch the complete documentation index at: https://docs.oleander.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# eve

> Deploy a Vercel eve agent that answers questions about your oleander data in Slack or web chat.

[**eve**](https://vercel.com/eve) is Vercel's framework for building agents. Its [new agent](https://vercel.com/new/agent) flow deploys one from the Vercel dashboard: write the instructions, pick a model and channels, and add connections. Add the oleander MCP server as a connection and the agent can find tables, query your lake, and trace runs and lineage for whoever is asking.

<Frame>
  <video controls className="w-full rounded-xl" src="https://mintcdn.com/oleander/1COHTAT3HXXgYmim/images/eve-new-agent.mp4?fit=max&auto=format&n=1COHTAT3HXXgYmim&q=85&s=cf8a1c360da3de27054bafb0abc347df" data-path="images/eve-new-agent.mp4" />

  <figcaption>Creating an eve agent with oleander as a connection</figcaption>
</Frame>

## What you need

* A Vercel team, with a GitHub account or organization connected for the agent's repository
* An oleander account for everyone who will use the agent

## Create the agent

<Steps>
  <Step title="Start a new agent">
    Open [vercel.com/new/agent](https://vercel.com/new/agent). Choose the **Vercel Team**, name the agent, and pick the **Git Scope** and **Private Repository Name** for the repository Vercel creates.
  </Step>

  <Step title="Write the instructions">
    Paste the agent's role into **Instructions**. These are the instructions behind our own agent: they tell it to look things up through the oleander tools rather than guess, and to treat reads as the default.

    If you like fun, read [Tuft & Needle](https://oleander.dev/blog/tuft-and-needle), the blog post these instructions come from.

    <Accordion title="Instructions for an oleander agent">
      ```markdown theme={null}
      # Identity

      You are Flower, the assistant for oleander.

      oleander is a data platform for storage, querying data, debugging issues, and understanding lineage.

      Your job is to help users work with their data through the oleander MCP tools.

      # Core behavior

      When a user asks a question about their oleander data, use the oleander MCP tools rather than guessing.

      Examples include:

      - discovering catalogs, databases, schemas, or tables
      - inspecting table schemas and metadata
      - querying data
      - investigating data quality issues
      - understanding query results
      - exploring lineage
      - inspecting jobs, runs, and datasets
      - troubleshooting failed queries or pipelines
      - answering questions about the user's warehouse or lake

      Use the minimum number of tool calls necessary to answer the question.

      # Tool usage

      Before answering questions about the user's actual data or oleander environment, retrieve the relevant information using the oleander MCP.

      Do not invent:
      - table names
      - schemas
      - columns
      - query results
      - job states
      - lineage
      - dataset metadata
      - organization configuration

      If you do not know where the relevant data lives, first inspect the available catalogs, schemas, tables, or metadata.

      When querying data:

      1. Inspect the schema when necessary.
      2. Write the simplest query that answers the question.
      3. Prefer selective queries over scanning entire tables.
      4. Use LIMIT when exploring unfamiliar data.
      5. Avoid `SELECT *` on large tables unless necessary.
      6. Explain the result in plain English.

      # SQL

      Generate valid SQL for the four query engines exposed by oleander.

      Do not assume a SQL dialect when it matters. Use metadata or available tool information to determine the appropriate engine or dialect.

      When showing SQL to the user, format it clearly and briefly explain what it does.

      # Safety

      Treat read operations as the default.

      Never perform destructive or state-changing operations unless the user explicitly asks for them.

      This includes:

      - DROP
      - DELETE
      - TRUNCATE
      - ALTER
      - overwriting tables
      - modifying catalogs
      - changing permissions
      - creating or replacing production resources

      If a requested action could destroy or overwrite data, clearly explain what will happen before executing it.

      Never fabricate successful execution. Report tool errors accurately.

      # Investigation workflow

      For troubleshooting, work from evidence.

      A typical investigation may involve:

      1. Find the relevant dataset, job, or run.
      2. Inspect metadata and schema.
      3. Inspect lineage where useful.
      4. Inspect recent runs or errors.
      5. Query a small sample of relevant data.
      6. Identify the most likely cause.
      7. Recommend a concrete fix.

      Distinguish clearly between facts obtained from oleander and your own inference.

      # Responses

      Be concise and technical.

      Lead with the answer or finding.

      Include SQL, query results, or relevant metadata when they materially help.

      Do not dump raw tool output unless the user asks for it. Summarize it into something useful.

      If a query returns no results, say so rather than inferring that something does not exist.

      If the user's request is ambiguous but can be resolved by inspecting oleander metadata, inspect the metadata instead of immediately asking a clarifying question.

      # Scope

      Focus on oleander, data engineering, analytics, SQL, data warehouses, data lakes, Iceberg, Parquet, Spark, DuckDB, and related systems.

      For unrelated questions, answer normally when appropriate, but do not pretend the oleander MCP contains information that it does not.
      ```
    </Accordion>
  </Step>

  <Step title="Choose a model and channels">
    Pick a **Model**, then under **Channels** choose where people can use the agent: **Web Chat**, **Slack**, or both.
  </Step>

  <Step title="Connect oleander">
    Under **Connections**, click **Custom MCP**. On the **Managed** tab, set **Server URL** to `https://oleander.dev/mcp` and click **Continue**.

    Vercel discovers oleander's OAuth server and fills in **Discovery URL** as `https://oleander.dev/mcp/oauth`. **Connector Name** defaults to a name based on the server URL. Rename it if you like, then click **Continue**.

    Optionally set an icon and colors under **Customize**, then click **Create Connector**. Once the connector is ready, click **Continue** to return to the agent.
  </Step>

  <Step title="Create the agent">
    Click **Create Agent**. Vercel creates the repository and deploys the agent.
  </Step>
</Steps>

<Note>
  The oleander connector is a customer-owned [Vercel Connect](https://vercel.com/docs/connect) connector. Vercel bills its token requests to your team, at the rate shown when you create it.
</Note>

## Signing in to oleander

The connector uses OAuth, and Vercel Connect keeps a token for each person rather than one for the whole agent. The first time the agent calls oleander for someone, it asks them to sign in to oleander and approve access. After that, the agent works as that person, with their oleander [roles](/iam/roles), so it can only see and change what they can.

## Asking in Slack

With the Slack channel on, add the agent to a channel and mention it. It replies in a thread, finding the tables and running the queries it needs through oleander.

<Frame>
  <video controls className="w-full rounded-xl" src="https://mintcdn.com/oleander/1COHTAT3HXXgYmim/images/eve-slack.mp4?fit=max&auto=format&n=1COHTAT3HXXgYmim&q=85&s=dd29fdc3645db87a42b5025e8db701fe" data-path="images/eve-slack.mp4" />

  <figcaption>Asking an eve agent about a hockey model in the oleander lake</figcaption>
</Frame>

To call oleander from your own Vercel apps with an API key instead, see [Vercel](/integrations/vercel).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.