ask your data a question

The Arraylake MCP server lets AI assistants and agents discover, explore, and query your scientific data in natural language — no client library, no glue code.

works with the assistants your team already uses

Claude
OpenAI
Cursor

and anything else that speaks MCP

Agents are blind to scientific data

Language models are good at reasoning about data and bad at finding it. A petabyte archive of tensors has no schema an assistant can read, no endpoint it can call, and no way to check whether the answer it produced came from the array it thought it did.

So the work falls back to a human: locate the repository, read the metadata, write the subsetting code, plot the result, and paste it into the conversation.

  • No discovery — an assistant cannot list what data you have, let alone what is inside it.

  • No safe access — handing an agent cloud credentials to read a bucket is not a permissions model.

  • No grounding — without a real query against real arrays, an answer about your data is a guess.

One endpoint, and the assistant can see

Earthmover runs a hosted Model Context Protocol server at https://app.earthmover.io/mcp. Point any MCP client at it, sign in once, and the assistant can browse your Arraylake repositories, read their schemas, run Compute queries, and render maps — chaining the tools itself based on what you asked.

Tools inherit the permissions of whoever signed in. An assistant sees exactly the repositories you can see, and queries exactly the services you are allowed to query — the same rules as the web app, enforced in the same place.

you ask

"Show me a temperature plot in Fahrenheit for tonight in Narragansett, Rhode Island using the earthmover/aifs repo."

the assistant does

  1. 1 finds the repo and reads its xarray schema
  2. 2 works out the latest initialization and the lead times covering tonight
  3. 3 runs an EDR position query at the nearest grid point
  4. 4 converts to Fahrenheit and plots it, citing the commit it read

Five groups of tools

You never call these directly — the assistant picks and chains them based on your question. Knowing what is there helps you ask better ones.

Discover

List the organizations you belong to, browse and filter repositories, and search the Marketplace by name, org, or description.

list_orgslist_reposget_repo_infosearch_marketplace

Explore

Walk a repo's group and array tree, read xarray schemas with dimensions and attributes, and follow commit history and diffs — without downloading anything.

get_repo_treeget_dataset_infolist_refslist_commitsget_commit

Query

Run OGC EDR position, area, and cube queries against live Compute services and get back CSV, CoverageJSON, NetCDF, or GeoTIFF.

query_edrlist_compute_serviceslist_service_datasetsdiagnose_compute_service

Visualize

Render an interactive pan/zoom map of any variable straight into the conversation, or mint a ticketed XYZ tile URL to drop into MapLibre, Leaflet, or deck.gl.

render_dataset_mapget_tile_url

Guide agents

Load Arraylake agent skills — focused guidance for the Python client, the MCP tools, and reading and writing Icechunk, Zarr, and Xarray data.

list_arraylake_skillsload_arraylake_skill

Server-side Python

on the roadmap

The server does not yet run arbitrary Python next to the data. We are extending Compute to cover more flexible workloads.

Any client that speaks MCP

The server supports the Streamable HTTP transport and OAuth 2.1, so setup is a URL and a sign-in. Nothing to install and nothing to run.

Claude.ai

Settings → Connectors → Add custom connector

  Name  Arraylake
  URL   https://app.earthmover.io/mcp

Then complete the sign-in flow in the popup.

On Team and Enterprise plans, only workspace admins can add custom connectors.

Claude Code

claude mcp add --transport http \
  arraylake https://app.earthmover.io/mcp

Opens a browser for authentication on first use.

ChatGPT

Settings → Apps → Advanced → enable Developer mode
Settings → Apps → Create app

  Name            Arraylake
  MCP Server URL  https://app.earthmover.io/mcp
  Authentication  OAuth

The app appears in the composer's + → Apps menu.

Cursor

{
  "mcpServers": {
    "arraylake": {
      "url": "https://app.earthmover.io/mcp"
    }
  }
}

In ~/.cursor/mcp.json. Restart Cursor; the first call triggers OAuth.

Codex CLI

codex mcp add arraylake \
  --url https://app.earthmover.io/mcp

Runs the OAuth flow immediately.

Anything else

Authorization: Bearer ema_XXXXXXXXXXXX

Any client that supports a static header can use an Arraylake API token and skip OAuth entirely — good for CI and headless setups.

Guidance that travels with the tools

Knowing which tool to call is only half of it. The server also publishes Arraylake agent skills — focused instructions for the workflows a coding agent actually runs, so it writes correct client code the first time instead of guessing at an API.

Skills-aware agents load them before writing Arraylake code or chaining MCP calls. Clients that have installed them locally with `arraylake skills install` already have them; everything else can pull them over the wire.

  • Python client and CLI — creating repositories, committing data, managing refs.

  • Data access — reading and writing Icechunk, Zarr, and Xarray correctly.

  • MCP querying — chaining discovery into EDR and tile queries without dead ends.

The MCP server is under active development. If there is a workflow you want to drive from an assistant or agent, we want to hear about it — support@earthmover.io.

Point your assistant at your data