Skip to content

Local Development

How to get each MESA component running on your laptop.

This documentation site (cyverse/mesa)

git clone https://github.com/cyverse/mesa.git
cd mesa
python3 -m venv .venv
source .venv/bin/activate
pip install zensical
zensical serve            # http://localhost:8000

Edit any file under docs/ and the browser will hot-reload. Build the static site with:

zensical build --clean    # output in ./site/

mesa-mcp (Python)

git clone https://github.com/cyverse/mesa-mcp.git
cd mesa-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
cp config.yaml.example config.yaml
mesa-mcp --config config.yaml
pytest -q
ruff check src/ tests/

mesa-ducklake (Python library)

git clone https://github.com/cyverse/mesa-ducklake.git
cd mesa-ducklake
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytest -q
ruff check src/ tests/

You'll need a Postgres instance for the catalog. The test suite spins up a disposable Postgres via testcontainers when DOCKER_HOST is reachable.

irods-mcp-server (Go)

git clone https://github.com/cyverse/irods-mcp-server.git
cd irods-mcp-server
make build                # produces ./bin/irods-mcp-server
make test

For Docker:

docker pull cyverse/irods-mcp-server

formation-mcp (Go)

git clone https://github.com/cyverse-de/formation-mcp.git
cd formation-mcp
just build                # uses Justfile
just test

terrain-mcp (Node.js ≥ 20)

git clone https://github.com/cyverse/terrain-mcp.git
cd terrain-mcp
npm install
npm run build
npm test

End-to-end test stack

For an end-to-end loop (mesa-mcpmesa-ducklake ↔ Postgres ↔ iRODS), use the docker-compose stack in mesa-mcp/deploy/dev-stack/:

cd mesa-mcp/deploy/dev-stack
docker compose up -d
mesa-mcp --config config.dev.yaml

This spins up Postgres, MinIO (object storage for Parquet), and a local iRODS server. See the upstream dev-stack README for connection details.