Galaxy MCP Server - Python Implementation
This is the Python implementation of the Galaxy MCP server, providing a Model Context Protocol server for interacting with Galaxy instances.
Features
- Complete Galaxy API integration through BioBlend
- Optional OAuth login flow for HTTP deployments
- Interactive Workflow Composer (IWC) integration
- FastMCP2 server with remote deployment support
- Type-annotated Python codebase
Requirements
- Python 3.10+
- FastMCP 2.3.0+
Installation
From PyPI (Recommended)
# Install from PyPI
pip install galaxy-mcp
# Or using uv (recommended)
uvx galaxy-mcp
From Source
# Clone the repository
git clone https://github.com/galaxyproject/galaxy-mcp.git
cd galaxy-mcp/mcp-server-galaxy-py
# Install with uv (recommended)
uv sync --all-extras
Configuration
At minimum the server needs to know which Galaxy instance to target:
export GALAXY_URL="https://usegalaxy.org.au/"
How you authenticate depends on your transport:
-
Stdio / long-lived sessions – provide an API key:
export GALAXY_API_KEY="your-api-key"
-
HTTP / OAuth – configure the public URL that users reach and a signing secret for session tokens. The server mints short-lived Galaxy API keys on behalf of each user.
export GALAXY_MCP_PUBLIC_URL="https://mcp.example.com" export GALAXY_MCP_SESSION_SECRET="$(openssl rand -hex 32)"
Optionally set
GALAXY_MCP_CLIENT_REGISTRYto control where OAuth client registrations are stored.
You can also steer the transport with GALAXY_MCP_TRANSPORT (stdio, streamable-http, or sse).
All variables can be placed in a .env file for convenience.
Usage
Quick Start with uvx
# Local stdio transport (no network listener)
uvx galaxy-mcp
# Remote/browser clients with HTTP + OAuth
export GALAXY_URL="https://usegalaxy.org.au/"
export GALAXY_MCP_PUBLIC_URL="https://mcp.example.com"
export GALAXY_MCP_SESSION_SECRET="$(openssl rand -hex 32)"
uvx galaxy-mcp --transport streamable-http --host 0.0.0.0 --port 8000
Installed CLI
pip install galaxy-mcp
galaxy-mcp --transport streamable-http --host 0.0.0.0 --port 8000
If --transport is omitted the server defaults to stdio and reads/writes MCP messages via stdin/stdout.
Working from a checkout
uv sync
uv run galaxy-mcp --transport streamable-http --host 0.0.0.0 --port 8000
See USAGE_EXAMPLES.md for detailed tool usage patterns.
Available MCP Tools
The Python implementation provides the following MCP tools:
connect: Establish connection to a Galaxy instancesearch_tools_by_name: Find Galaxy tools by nameget_tool_details: Retrieve detailed tool informationrun_tool: Execute a Galaxy tool with parametersget_tool_panel: Retrieve the Galaxy tool panel structureget_tool_run_examples: Retrieve XML-defined test lessons that show how to run a toolget_user: Get current user informationget_histories: List available Galaxy historieslist_history_ids: Get simplified list of history IDs and namesget_history_details: Get detailed information about a specific historyupload_file: Upload local files to Galaxyupload_file_from_url: Upload files from URLs to Galaxylist_workflows: List available workflows in Galaxy instanceget_workflow_details: Get detailed information about a specific workflowinvoke_workflow: Execute/run a workflow with specified inputscancel_workflow_invocation: Cancel a running workflow invocationget_invocations: View workflow executionsget_iwc_workflows: Access Interactive Workflow Composer workflowssearch_iwc_workflows: Search IWC workflows by keywordsimport_workflow_from_iwc: Import an IWC workflow to Galaxy
Testing
The project includes a comprehensive test suite using pytest with mock-based testing.
Running Tests
# Install test dependencies
uv pip install -r requirements-test.txt
# Run all tests
uv run pytest
# Run with coverage report
uv run pytest --cov=main --cov-report=html
# Run specific test file
uv run pytest tests/test_history_operations.py
# Run tests with verbose output
uv run pytest -v
Test Structure
Tests are organized by functionality:
test_connection.py- Galaxy connection and authenticationtest_history_operations.py- History-related operationstest_dataset_operations.py- Dataset upload/downloadtest_tool_operations.py- Tool search and executiontest_workflow_operations.py- Workflow import and invocationtest_integration.py- End-to-end scenarios
See tests/README.md for more details on the testing strategy.
Development
Code Style Guidelines
- Use Python 3.10+ features
- Employ type hints where appropriate
- Follow PEP 8 style guidelines
- Use ruff for code formatting and linting
- All code should pass type checking with mypy
Development Setup
# Install development dependencies
make install-dev
# Set up pre-commit hooks (required for contributing)
uv run pre-commit install
Pre-commit hooks will automatically format your code and run linting checks when you commit. All contributors should install these hooks to maintain consistent code quality.
Development Commands
We use a Makefile for consistent development commands:
# Show all available commands
make help
# Install dependencies
make install # Install all dependencies
# Code quality
make lint # Format code and run all checks
# Testing
make test # Run tests with coverage
# Building
make clean # Clean build artifacts
make build # Build distribution packages
# Running
make run # Run the MCP server
make dev # Run FastMCP2 dev server
Using uv directly
All commands can also be run directly with uv:
# Install dependencies
uv sync --all-extras
# Format and lint code
uv run pre-commit run --all-files
# Run tests with coverage
uv run pytest --cov=galaxy_mcp --cov-report=html
# Update dependencies
uv lock --upgrade
Cross-version Testing
Test across multiple Python versions using tox:
# Test on all supported Python versions
tox
# Test on specific version
tox -e py312
# Run only linting
tox -e lint
# Run type checking
tox -e type
Pre-commit Hooks
The project uses pre-commit hooks for automatic code quality checks:
# Install pre-commit hooks (one-time setup)
uv run pre-commit install
# Run pre-commit manually on all files
uv run pre-commit run --all-files
# Skip pre-commit for a single commit (not recommended)
git commit --no-verify
Pre-commit runs automatically on git commit and includes:
- Code formatting with ruff
- Linting with ruff
- Trailing whitespace removal
- File cleanup (EOF, YAML/JSON/TOML validation)
- Large file detection
- Merge conflict detection
License
Metadata
Release files for iflow-mcp_galaxyproject-galaxy-mcp 1.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| iflow_mcp_galaxyproject_galaxy_mcp-1.3.0.tar.gz | 60.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| iflow_mcp_galaxyproject_galaxy_mcp-1.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 98.9 kB
Release files / iflow_mcp_galaxyproject_galaxy_mcp-1.3.0.tar.gz
| Download URL | iflow_mcp_galaxyproject_galaxy_mcp-1.3.0.tar.gz |
|---|---|
| Size | 60.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
24ab5b73fbc6bb162add3b68698375395f9b234bc652df8f33d6493ccb828082
|
|
BLAKE2b-256 checksum How to use checksums |
2d63e8dc68a7ad7f355c4ef0b9fcdd4f79b3f7067dd4cadd80539ebf2dbcb44b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / iflow_mcp_galaxyproject_galaxy_mcp-1.3.0-py3-none-any.whl
| Download URL | iflow_mcp_galaxyproject_galaxy_mcp-1.3.0-py3-none-any.whl |
|---|---|
| Size | 38.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6fb790ce66f86dbc7e84f9eb564f429595de381afbda27432ff76559dd6a46f1
|
|
BLAKE2b-256 checksum How to use checksums |
79bebbba27dc738f8834e70454d7c8ae588749b279d419780ce88d104ba71d5b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|