Skip to content

mesa-mcp

MCP server that exposes the CyVerse Data Store (iRODS) as a set of ds_* tools, layers an ontology-driven AVU metadata workflow on top, and mirrors every AVU change into a per-project DuckLake catalog.

Repository github.com/cyverse/mesa-mcp
Language Python ≥ 3.11
License Apache 2.0
Status Pre-alpha
MCP transports stdio · SSE · Streamable-HTTP

What it does

mesa-mcp is the centerpiece of MESA's agentic stack. It exposes three families of tools to AI clients:

  • ds_* — CyVerse Data Store operations: list, search, read, write, copy, move, delete files and collections; manage AVU metadata; manage iRODS tickets; manage access controls.
  • mesa_ols_* — OBO / EMBL-EBI Ontology Lookup Service queries. Map natural-language tag suggestions to canonical ontology terms (ENVO biomes, GO functions, ChEBI compounds, …) before writing them as AVUs.
  • mesa_ducklake_* — read or update the project's DuckLake AVU-history catalog. Time-travel through metadata, audit who changed what, run analytical SQL.

It is the Python sibling of irods-mcp-server and the agent-facing counterpart of the ontology UI in the CyVerse ESIIL portal.

Deployment modes

mesa-mcp ships in three deployment modes:

A single shared instance runs as a systemd unit behind nginx + Let's Encrypt + CyVerse Keycloak OIDC. Several users connect with their own bearer tokens.

Live instance: https://mesa-mcp.cis240692.projects.jetstream-cloud.org

For MCP client config, see your first analysis.

pip install mesa-mcp into a venv on your laptop; your MCP client launches it as a stdio subprocess. No HTTP, no OIDC, no public hostname.

python3 -m venv .venv
source .venv/bin/activate
pip install mesa-mcp
cp config.yaml.example config.yaml
mesa-mcp --config config.yaml

Launch a JupyterLab, RStudio Server, or Cloud Shell app on de.cyverse.org and pip install mesa-mcp inside the pod, where your iRODS credentials are already mounted.

Quick start

# From a clean venv:
pip install -e ".[dev]"

# Run the server over stdio with an example config:
cp config.yaml.example config.yaml
mesa-mcp --config config.yaml

# Run the test suite:
pytest -q

# Lint:
ruff check src/ tests/

Status

Pre-alpha. The current scaffold registers a single liveness tool, ds_ping, which echoes a message and the running version. The full ds_*, mesa_ols_*, and mesa_ducklake_* tool surfaces land in subsequent PRs — see the upstream CLAUDE.md for the development plan.

Documentation

Detailed documentation lives in the upstream repository under docs/: