A high-performance Model Context Protocol (MCP) server and CLI for OWL ontology management, written in Rust.
Built as a drop-in replacement for ai4curation/owl-mcp, designed to eliminate the crashes and timeouts inherent to the Python implementation. Axioms are expressed in OWL Functional Syntax.
- 11 MCP tools — add, remove, search, and inspect axioms; manage prefixes, labels, and ontology IRIs; scan for modeling pitfalls; evaluate ontology quality
- CLI mode — every tool is also available as a direct CLI subcommand (
owl-mcp find-axioms ...) - 2 transport modes —
stdio(default, for Cursor/Claude Desktop) andhttp(Streamable HTTP + SSE) - Live file watching — automatically reloads ontology files modified externally
- OFN and RDF/XML support — reads and writes both formats; format is auto-detected from file extension and content
- Never crashes — errors are returned as MCP tool failures, not panics
npx owl-mcp servenpm install -g owl-mcp
owl-mcp --helpRequires Rust 1.75+.
git clone https://github.com/Minitour/owl-mcp
cd owl-mcp
cargo build --release
./target/release/owl-mcp --helpowl-mcp has two modes: serve (MCP server) and CLI (direct commands).
owl-mcp serve [OPTIONS]
Options:
--transport <stdio|http> Transport to use [default: stdio]
--host <HOST> Host to bind (HTTP only) [default: 127.0.0.1]
--port <PORT> Port to bind (HTTP only) [default: 8080]
--sse-support Enable legacy SSE endpoint [default: true]Every MCP tool is available as a subcommand:
owl-mcp add-axiom --file ontology.owl --axiom "SubClassOf(:Dog :Animal)"
owl-mcp find-axioms --file ontology.owl --pattern "Dog" --limit 50
owl-mcp get-all-axioms --file ontology.owl --include-labels
owl-mcp test-pitfalls --file ontology.owl
owl-mcp test-quality --file ontology.owlRun owl-mcp --help for a full list of commands, or owl-mcp <command> --help for details on a specific command.
Add the server to your MCP client configuration.
Cursor (~/.cursor/mcp.json or .cursor/mcp.json in your project):
{
"mcpServers": {
"owl-mcp": {
"command": "npx",
"args": ["-y", "owl-mcp", "serve"]
}
}
}HTTP transport (useful for remote/shared setups):
{
"mcpServers": {
"owl-mcp": {
"url": "http://localhost:8080/mcp"
}
}
}Start the server with:
owl-mcp serve --transport http --port 8080All tools operate on OWL files by absolute path. The manager lazily loads files on first access and caches them for subsequent calls.
| Tool | Description |
|---|---|
add_axiom |
Add a single axiom in OWL Functional Syntax |
add_axioms |
Add multiple axioms in one call |
remove_axiom |
Remove an axiom |
find_axioms |
Search axioms with a regex pattern |
get_all_axioms |
List all axioms (up to a limit) |
| Tool | Description |
|---|---|
add_prefix |
Add a prefix mapping (ex: → http://example.org/) |
ontology_metadata |
Return ontology-level annotation axioms |
get_labels_for_iri |
Look up rdfs:label (or custom property) values for an IRI |
set_ontology_iri |
Set or update the ontology IRI and version IRI |
| Tool | Description |
|---|---|
test_pitfalls |
Scan for 31 common modeling pitfalls (inspired by OOPS!) |
test_quality |
Evaluate ontology quality using the OQuaRE framework (ISO/IEC 25000 SQuaRE) |
find_axioms and get_all_axioms accept include_labels: true to annotate each axiom with human-readable labels appended as ## <IRI> # label comments.
test_quality uses the whelk OWL EL reasoner to compute inferred class hierarchy and returns a JSON report containing 19 raw and scaled metrics (ANOnto, AROnto, CBOOnto, CROnto, DITOnto, INROnto, LCOMOnto, NACOnto, NOCOnto, NOMOnto, RFCOnto, RROnto, TMOnto, WMCOnto, and variants), 22 subcharacteristics, 7 quality characteristics (Structural, Functional Adequacy, Maintainability, Operability, Reliability, Transferability, Compatibility), and an overall OQuaRE score on a 1–5 scale.
# Run tests
cargo test
# Check formatting and lints
cargo fmt --check
cargo clippy --all-targets -- -D warnings
# Build release binary
cargo build --releaseMIT