MCP for retrieving things from the Ontology Lookup Service
Project description
ols-mcp
A Model Context Protocol (MCP) server for retrieving information from the Ontology Lookup Service (OLS).
This package provides tools for searching ontologies, retrieving ontology details, and accessing ontology terms through a standardized MCP interface.
Installation
From PyPI
pip install ols-mcp
From Source
# Clone the repository
git clone https://github.com/contextualizer-ai/ols-mcp.git
cd ols-mcp
# Install with uv (recommended)
uv sync --group dev
# Or with pip
pip install -e .
Usage
As MCP Server
The primary use case is as an MCP server that provides ontology search capabilities to AI agents and applications.
Claude Desktop Integration
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"ols-mcp": {
"command": "ols-mcp",
"args": []
}
}
}
Claude Code Integration
claude mcp add ols-mcp
Goose Integration
goose session start --with-mcp "ols-mcp"
Available Tools
The MCP server provides three main tools:
search_all_ontologies- Search across all ontologies in OLSget_ontology_info- Get detailed information about a specific ontologyget_terms_from_ontology- Retrieve terms from a specific ontology
Direct Python Usage
from ols_mcp.tools import search_all_ontologies, get_ontology_info, get_terms_from_ontology
# Search for biological terms
results = search_all_ontologies("apoptosis", max_results=5)
# Get information about Gene Ontology
go_info = get_ontology_info("go")
# Get terms from a specific ontology
terms = get_terms_from_ontology("go", max_results=10)
CLI Usage
Running the MCP Server
Run the MCP server directly:
ols-mcp
Testing Individual Tools
You can test the tools directly using Python:
# Search for biological terms across all ontologies
uv run python -c "from ols_mcp.tools import search_all_ontologies; print(search_all_ontologies('apoptosis', max_results=3))"
# Get information about Gene Ontology
uv run python -c "from ols_mcp.tools import get_ontology_info; print(get_ontology_info('go'))"
# Get terms from a specific ontology
uv run python -c "from ols_mcp.tools import get_terms_from_ontology; print(get_terms_from_ontology('go', max_results=3))"
MCP Protocol Testing
Test the MCP protocol directly:
# Test basic protocol handshake
make test-mcp
# Test extended protocol with tool calls
make test-mcp-extended
Development
Prerequisites
- Python 3.11+
- uv (recommended) or pip
Setup
# Clone the repository
git clone https://github.com/contextualizer-ai/ols-mcp.git
cd ols-mcp
# Install development dependencies
uv sync --group dev
Available Make Targets
Development
make dev- Install development dependenciesmake install- Install production dependencies onlymake clean- Clean build artifacts
Testing
make test-unit- Run unit tests (fast, mocked)make test-real-api- Run integration tests against live OLS APImake test-mcp- Test MCP protocol functionality
Code Quality and Maintenance
make format- Format code with Blackmake lint- Run Ruff linter with fixesmake mypy- Run type checkingmake deptry- Check for unused dependenciesmake test-coverage- Run all tests with coverage reportmake test-integration- Run integration tests
Build & Release
make build- Build package distributionsmake upload-test- Upload to TestPyPImake upload- Upload to PyPImake release- Complete release workflow (test → build → upload)
Server Operations
make server- Run the MCP server locallymake all- Run complete CI pipeline
Running Tests
# Run all tests
make test-coverage
# Run only unit tests (fast)
make test-unit
# Run integration tests against real OLS API
make test-real-api
# Run with specific pytest options
uv run pytest tests/ -v -k "test_search"
Code Quality Tools
The project uses modern Python tooling:
- uv - Fast Python package manager
- ruff - Fast Python linter and formatter
- black - Code formatting (alternative to ruff format)
- mypy - Static type checking
- pytest - Testing framework with coverage reporting
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Run the test suite:
make all - Submit a pull request
Release Process
Releases are automated via GitHub Actions:
-
Create and push a version tag:
git tag v0.1.4 git push origin v0.1.4
-
GitHub Actions will automatically:
- Run the full test suite
- Build the package
- Publish to PyPI
Architecture
Project Structure
ols-mcp/
├── src/ols_mcp/
│ ├── __init__.py
│ ├── main.py # FastMCP server setup
│ ├── api.py # OLS API wrapper functions
│ └── tools.py # MCP tools that wrap API functions
├── tests/
│ ├── test_api.py # Unit tests for API functions
│ ├── test_tools.py # Unit tests for MCP tools
│ └── test_integration.py # Integration tests with real OLS API
├── .github/workflows/ # CI/CD pipelines
├── Makefile # Development automation
└── pyproject.toml # Project configuration
Key Components
api.py- Low-level functions that interact with OLS REST APItools.py- Higher-level MCP tools that provide simplified interfacesmain.py- FastMCP server that exposes tools via MCP protocol
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ols_mcp-0.1.5.tar.gz.
File metadata
- Download URL: ols_mcp-0.1.5.tar.gz
- Upload date:
- Size: 11.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7028123ac004a3845ea99c107b355610752dfe34ffd438fb0c315f4ee7491152
|
|
| MD5 |
682fbe0cb35c99adf89d407595c7131b
|
|
| BLAKE2b-256 |
a780d857f3626b5bdb5c6dc7604aabdd3e014d1fcc7edb2f8175b627c214ec2a
|
File details
Details for the file ols_mcp-0.1.5-py3-none-any.whl.
File metadata
- Download URL: ols_mcp-0.1.5-py3-none-any.whl
- Upload date:
- Size: 9.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
06641b42eda82fa485592e8b69c187a508a7f80aef8c508ca1198b512b5d765f
|
|
| MD5 |
d8491e87d8f35e856b09aee5b874adb7
|
|
| BLAKE2b-256 |
a22e4a90d95c70568fba4066b6318fdd8146e9d0012218c2190e90bbfcc7ca79
|