Skip to main content
The oleander MCP server exposes your context graph - lake tables, catalogs, pipeline runs, lineage, costs, logs, and traces - to any MCP-compatible agent.

Endpoint

Authenticate with your oleander API key via Authorization: Bearer. Most MCP clients handle this automatically after the OAuth flow. The server is published to the official MCP registry as dev.oleander/oleander, so most clients can install it by name.

Example workflow

A typical agent task chains three tools:
The agent calls these in sequence, each result informing the next, without you specifying the order.

Tools

Queries

Reads and writes go to different tools. query_run is annotated read-only so clients can skip the confirmation prompt; query_submit is annotated as a write and asks first.
lake_query is gone. It pinned DuckDB and returned rows for reads and writes alike; query_run and query_submit replace it and route instead. See Query routing.

Saved query schedules

A schedule points at a saved query, so saved_queries_list/saved_queries_create are here too - without them there’s no query id to schedule. A saved query has at most one schedule; scheduling an already-scheduled query reschedules it in place rather than adding a second. Every new schedule needs an execution_principal_id - the connected user or an Application principal the user holds Describe and Manage grants on - and that principal’s roles govern the runs. saved_queries_schedules_create requires confirm: true - it starts recurring billable compute and overwrites its destination table on every run. See Scheduled queries with time-travel for what these schedules do.

Identity

Catalogs and tables

External connections

BigQuery, Snowflake, and Postgres tables are queried through query_run as connection.schema.table - no source-specific query tool. Those queries always run on DuckDB.

Spark

Runs and pipelines

Lineage

Investigations

Docs


Registry listings

The server ships a server.json manifest and is listed where agents look for tools, so most clients can add it without a hand-written config. Two agent-readable surfaces are served from the site itself:

Annotations

Every tool carries MCP annotations so clients can decide what needs confirmation:
  • readOnlyHint is true for anything that only reads. query_run is guarded to keep that promise - a statement that could mutate is rejected rather than run.
  • destructiveHint is true for drops and aborts.
  • Tools that start compute or change data take an explicit confirm argument on top of the annotation.

Confirming destructive tools

Four tools remove something that cannot be recovered from the agent’s side: catalogs_tables_drop, catalogs_columns_drop, saved_queries_schedules_delete, and spark_jobs_abort. On top of confirm: true, the server asks you directly before running any of them. When your client supports form elicitation, the first call returns a confirmation prompt instead of running. The prompt names exactly what is about to go - the fully qualified catalog.namespace.table and every column path, the schedule id, or the run id. Your client shows it to you and retries the call with your answer:
  • Accept with confirm: true runs the operation.
  • Decline or cancel returns an error to the agent and nothing is dropped, deleted, or aborted.
Clients that do not declare form elicitation skip the prompt and rely on the confirm argument and the destructiveHint annotation as before. That includes any client still on the 2025 protocol handshake and the in-app chat.

Editor setup