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.
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/:
- Users — getting started · configuration · tools reference · Claude Desktop wiring · examples.
- Developers — architecture · adding tools · porting from Go · OLS internals · testing.
- Operators — systemd · HTTP / SSE · OIDC · Nginx + TLS · Postgres · monitoring.