Model or dataset
fabio-rovai/open-ontologies avatar
fabio-rovai/open-ontologies

Open Ontologies: a Rust MCP server for AI-built RDF/OWL graphs

AI-native ontology engine: a Rust MCP server with tools for building, validating, querying, and reasoning over RDF/OWL ontologies. In-memory Oxigraph triple store, native OWL2-DL tableaux reasoner, SHACL validation, SPARQL, versioning. Single binary, no JVM.

501 stars66 forksRustMIT

At a glance

What is it?
Open Ontologies exposes an in-memory Oxigraph store, a native OWL2-DL reasoner and SHACL validation to an LLM over MCP, so ontology scaffolding and checking stay server-side while the model does the thinking. The catch is that most of its 70+ tools assume a client that can call them correctly.
Who is it for?
Adopt it if you already drive an MCP-capable model and want ontology scaffolding, SHACL checks and OWL2-DL classification inside one Rust binary instead of a JVM stack around Protégé. Do not adopt it as a replacement for a shared, persistent triplestore: the store is in-memory, and the README does not describe a durability or clustering story.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The gap Open Ontologies is aimed at

Ask a language model to produce an ontology and you get something that parses. Whether it is consistent, whether every class has a satisfiable definition, whether the shapes you care about actually hold over the asserted triples, are separate questions that a chat interface will not answer for you. Open Ontologies is built for that second step. The README describes it as a Rust MCP server and desktop Studio for AI-native ontology engineering, exposing 70+ tools so that a connected model can build, validate, query, diff, lint, version, reason over, align, plan, certify and govern RDF/OWL ontologies. The target user is someone already working through an MCP client, most likely Claude, who wants the checking machinery to live next to the model rather than in a separate desktop application. The README states the design convention plainly: the server provides validation and scaffolding, the connected LLM does the intelligence, with no internal LLM clients, no API keys and no provider abstractions. That is a real architectural commitment, not a slogan. It means the project ships no inference of its own and no model configuration, so anything you get out depends on the client you attach.

Oxigraph in memory, tableaux reasoning, and where the LLM sits

The engine is a single Rust binary. Triples live in an in-memory Oxigraph store, and the README lists a native OWL2-DL tableaux reasoner, SHACL validation, SPARQL and versioning alongside it. The absence of a JVM is stated twice, once as a feature line and once as the closing line of the introduction, which tells you the authors consider the Protégé and Java toolchain the thing they are displacing. Reasoning is not delegated to an external service; the reasoner is native to the binary. The three-layer stack added in the current release is where the architecture gets more opinionated. Dynamics ships an ActionSchema type plus four tools (onto_action_register, onto_action_applicable, onto_action_apply, onto_action_list) with concurrent atomic ticks, static causal laws, default-value laws, ramification through OWL-RL closure, and non-deterministic outcomes driven by a reproducible seed. Causal adds onto_certify_action with optional PyWhy backdoor identification, gated behind a causal-pywhy Cargo feature, defaulting to a structural proxy with a graceful fallback. Planner compiles PDDL and validates plans, but the README is explicit that the solver stays client-side: the server compiles and validates, it does not solve. That split is the most interesting design decision in the project. It keeps the binary free of a bundled planner and free of Python, at the cost of requiring the orchestrator to run Fast Downward itself and bind the resulting IRIs back into the graph.

Getting it running: binaries, cargo, and the pipeline example

The README gives three install routes. Pre-built binaries are listed first, with a macOS Apple Silicon block that the supplied text truncates before the command completes, so treat that path as documented but not fully quoted here. A container image is published to GHCR, referenced by the badge linking to the open-ontologies package. Building from source uses cargo, and the README's own end-to-end check is cargo run --example three_layer_pipeline. That example is worth reading before you wire anything into a client, because the README says it walks Dynamics register, PDDL compile, Fast-Downward-shaped sas_plan parse, orchestrator-side IRI bind, sandbox validate, CIVeX certify, apply with OWL-RL ramification, and final state inspection, and that it needs no external dependencies such as Python, DoWhy or Fast Downward. In other words, the example exercises each layer through its public API while stubbing the parts that would otherwise require a solver. Tool names follow a consistent onto_ prefix, and the newer primitives cluster around specific jobs: onto_owl_shacl_coevolve_check and onto_owl_shacl_coevolve_incremental for SHACL against the OWL-RL closure with dependency-graph routing so only shapes touching changed IRIs revalidate; onto_classify_el for OWL-EL classification; onto_cq_run, onto_verify_cq and onto_cq_verdicts_list for competency questions; onto_policy_register, onto_policy_list and onto_policy_check for an authorisation gate that the README says composes with onto_certify_action, splitting risk from authorisation. Configuration is largely per-tool rather than a single config file, and the one build-time switch named in the material is the causal-pywhy Cargo feature.

The tool count is a surface area problem, not a feature list

Seventy-plus tools is a lot of schema for a model to hold. Every one of them is a decision point: which alignment tool, which validation path, which of the two co-evolution checks. The README partially addresses this by naming a desktop Studio with an AI chat panel offering /build for what it calls IES-level depth and /sketch for quick prototypes, which suggests the authors expect users to reach the tools through shortcuts rather than by picking them individually. That is a reasonable mitigation and it is also an admission that the raw tool surface is not the intended interface. The second constraint is the in-memory store. Nothing in the supplied material describes persistence, snapshotting to disk, or running more than one server against shared state, and versioning is listed as a capability without detail on where versions are kept. If your ontology needs to survive a process restart or be read by another service, the README does not tell you how. The third is the client-side solver boundary: the Planner layer compiles and validates, so a deployment that expects the server to return a plan will not get one. None of these are defects in isolation, but together they narrow the set of situations where the project fits.

Where Protégé and a JVM stack still win

The obvious comparison is Protégé with an OWL reasoner such as HermiT or ELK behind it, and the README invites it by closing the introduction with the line No JVM. No Protégé. The difference in approach is not the reasoning algorithm so much as the integration boundary. A Protégé setup is a human-facing editor where a person loads a file, edits axioms by hand, and runs a reasoner to see inferred hierarchy; the model, if there is one, sits outside. Open Ontologies inverts that: the model is the primary author and the server is a validation and scaffolding service it calls through MCP, with the Studio as a secondary visual layer. If your workflow is a domain expert curating an ontology in a GUI, Protégé remains the better fit, and the absence of a JVM buys you nothing. If your workflow is a model generating candidate axioms that need to be checked, classified and certified before they land, the MCP boundary is the whole point. A second comparison worth drawing is against a general-purpose triplestore such as Oxigraph used directly, since that is the storage layer here. Using Oxigraph on its own gives you SPARQL and persistence without the ontology tooling; Open Ontologies adds the reasoner, SHACL, the alignment and policy tools, and the MCP surface on top. The trade is that you inherit the project's opinions about how those pieces compose.

Maintenance, release cadence and the MIT licence

The release history in the supplied material shows v1.2.0 in mid-August 2026, v1.2.1 on 2 September 2026 tagged as a heritage-aerial paper release, and v1.3.0 on 4 September 2026, with the last push to the default branch on 5 September 2026. That is a fast cadence, and v1.3.0 carries the three-layer architecture plus 13 new primitives, which is a large amount of new API in one version. The practical upgrade cost is that tool names and semantics are still moving; a client configured against v1.2.x tool descriptions should not be assumed to work unchanged against v1.3.0 without checking the new primitives. On the build side, the README states zero new external Rust dependencies in this release and that everything optional gates behind Cargo features, with the full test suite of 160+ tests green on the default build and cargo clippy --lib --tests --examples -- -D warnings clean across both default and causal-pywhy configurations. Those are claims from the README, not measurements I have taken. The licence is MIT, which is permissive and places few obligations on how you redistribute or modify the code; as with any dependency, read the LICENSE file in the repository rather than relying on a summary, and check the licences of anything you link against through Cargo features.

Editorial conclusion

Adopt it if you already drive an MCP-capable model and want ontology scaffolding, SHACL checks and OWL2-DL classification inside one Rust binary instead of a JVM stack around Protégé. Do not adopt it as a replacement for a shared, persistent triplestore: the store is in-memory, and the README does not describe a durability or clustering story. Before committing, verify three things against your own data: that the OWL2-DL tableaux reasoner terminates on your TBox, that the single-binary install path you intend to use (pre-built binary, GHCR image, or cargo) actually exists for your platform, and that the 160+ test suite still passes on the release tag you pin.

Official sources

  1. fabio-rovai/open-ontologies on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Community notes

Community notes