Skip to content
Data
MCP

open-ontologies

Ships with open-ontologies: Plan, apply and roll back changes to a production ontology, with a blast radius report and a proof an auditor can re-check.

From plugin
open-ontologies
2.9k1 skill1 MCP

Claude Code

$ git clone https://github.com/fabio-rovai/open-ontologies

Clone the repository

Security report

Info

Not enough data

  • Known flaws

    Not published

  • Signed build

    Not published

  • Maintained

    Nov 10, 2026

    Last push

  • Licence

    MIT

  • Runs as

    Local process

    On your machine

  • Deprecated

    Not published

Signals from public registries, not an audit. Checked Nov 11, 2026.

open-ontologies README

Open Ontologies

Plan a change to a production ontology. See every consequence before you apply it. Then give the reviewer a proof that they can check without trust in you. Open Ontologies is written in Rust. It ships as one binary.

tesseractsemantics.com

Tesseract Semantics

Stars

MIT

GHCR

Sponsors

GitHub Trending Repository of the Day

English · 简体中文

Try it in the browser

Put in one spreadsheet. Get one ontology, with the evidence for each line. Then change one cell, and see the shape find the error. The page runs the released binary.

Look for enterprise support? tesseractsemantics.com The engine is MIT, and it stays MIT. The platform is the hosted version of the engine.


A hand-drawn animation of ies-core.ttl. A person asserts the grey edges. The engine derives the green edges, and Lean 4 checks the one certificate that holds them. Four provers read the clauses and give opinions. A forged red line is refused, and a question the file cannot be asked comes back unasked.

426 asserted, 259 certified, 1 rejected. The engine derived the green edges. A Lean 4 checker then proved them. One certificate holds all 259, and one run of the checker accepts it. The red edge is a forged line. The same checker refused that line, gave exit 1, and named the rule. The run supplies each count. Nobody writes a count into the caption.

HQDM as two shipped files side by side. Left, the RDFS rendering: 23 terms used as a class but never declared drawn as hollow red rings and 12 rdfs:range declarations naming a relation drawn as red edges. Right, the OWL rendering: 190 named classes this engine found satisfiable and 39 it found unsatisfiable drawn red, with a red ring on the 39 that HermiT calls unsatisfiable, the same 39.

The same machinery, on a file from a different group, two times. HQDM ships as two files. hqdmTop/hqdmFramework publishes an RDFS file. MagmaCore keeps a copy of that file, byte for byte. gchq/HQDM publishes an OWL file. The two files fail different checks. The RDFS file has no owl: term and no disjointness axiom. Thus no named class in that file can be unsatisfiable. But the file has 23 terms that it uses as a class and never declares. It has 12 rdfs:range declarations that name a relation and not a class. It also has 13 pairs of names that differ by one final underscore. Three of those pairs have the same domain and the same range. The OWL file passes all three checks, and the OWL file is not coherent. The tableaux of this engine finds 190 of its named classes satisfiable. The tableaux finds 39 unsatisfiable. HermiT calls the same 39 unsatisfiable, and HermiT is an opinion in the vocabulary of this repository. This figure proves nothing, and the figure does not claim a proof. A test computes each count again, and the test also computes that intersection. For the source and the method, read docs/assets/hqdm/PROVENANCE.md.

One triple. Nothing added, nothing removed, blast radius zero. 901 consequences that were not there before.

$ printf 'load base.ttl\nplan proposed.ttl\n' | open-ontologies batch -
#   the whole change:  ex:hasParent rdfs:domain ex:Person

added_classes         0
removed_classes       0
blast_radius          0 triples affected
risk_score            low
                      ────────────────────────────────────────────
conservativity        not_conservative_under_rule_table
new consequences      901          rule table owl-rl, in 0.04s

Each number from a shape diff tells you that this change is safe. But the change gave a new type to each individual that the property already had. The tool closes this gap. A text diff cannot show you the gap. The change is one correct line, and the text diff is one line long.

Then give the reviewer the proof. The run writes a certificate. A different person re-verifies months later. That person needs no instance of this software and no network. The command is oo-cert asserted.tsv derivations.tsv. The exit code is 0, and the theorem OOCert.certificate_sound covers the result.

The checker also refuses a forged proof. Write a false conclusion into the derivation file. The same checker exits 1 and names the rule that does not hold. This is the red edge in the figure above. This refusal, and not the headline, is the part that survives examination.

This is not an ontology editor. Use Protégé to draw class hierarchies. You run Open Ontologies on the change, before the change goes to production.

The tool is like Terraform, and this is on purpose. But the plan checks what a change means and what it breaks, not only its text. A text diff is git diff, and you have git diff already.

You do not need a JVM. You do not need Protégé. The engine speaks MCP to Claude, to Cursor, and to other clients of that protocol.

See the engine at work

A terminal runs the Lean certificate checker while a supplier graph lights up beside it: three asserted edges in grey, three derived edges in green that the checker accepts, then one conclusion forged and the same checker refusing it in red

Three triples go in, and three triples come out. A person asserted only that ex:Northwind is in a sanctioned jurisdiction. The engine derived the need for enhanced due diligence. A different person can check that derivation. That person does not have to trust you, or this engine, or the model that wrote the ontology.

Watch the last seconds. Somebody forges one conclusion, and leaves the two premises exactly as they were. The same checker refuses the conclusion and names the rule. oo-horn printed each line in that terminal for the fixtures in tests/fixtures/horn/supplier/. A test runs the checker again. The test fails if the figure and the checker do not agree.

With a proof, and without a proof

An ordinary reasonerOpen Ontologies
The answerNorthwind needs enhanced due diligencethe same answer
Why the answer holds"the reasoner says so"a certificate that names each rule and each premise
Who can check the answera second implementation can agree, and some reasoners give an explanation. No verified checker accepts either oneanybody, with a checker that shares no code with the engine
If the engine has a defecta second implementation can disagree. Then you know only that one of the two is wrongthe checker refuses the answer, exit 1
If a person edits the outputyou cannot find the editthe checker refuses it, and names the line and the rule
If a rule was yours, not the standard'sthe report is the samea different verdict word, and a test holds that word
What an auditor receivesa screenshota file that the auditor can check again
Guarantee on an unsatisfiability answerassertednone, and the tool says so

If the tool measures a property, the tool says measured. If a prover gives an opinion, that opinion never takes the vocabulary of the checker. Read what the tool proves, and what it does not prove.

What the tool does

CapabilityWhat you get
Reason over OWL and RDFSMaterialised inferences and a derivation certificate that a proved checker accepts
Use your own rulesSWRL, RIF Core or a Horn table, evaluated, with a verdict word that says the rules were yours
Validate against SHACLA report from an evaluator with a measurement against the W3C suite, not an assertion of success
Ask if something is satisfiableA finite model, replayed and checked, and not only a yes
Ask if something is inconsistentA refutation, if one is certifiable. If not, an honest opinion from the engine
Retrieve a slice for RAGEntailment preservation for each claim, because 99% coverage can still lose the one triple that mattered
Change an ontology in productionPlan, blast radius, risk score, locked IRIs, apply, monitor, drift, rollback
Load real dataCSV, JSON, XML, YAML, XLSX, Parquet, PostgreSQL and DuckDB into RDF
Give the problem to a proverTPTP, CLIF, SMT-LIB and LADR from one translation. The tool names and counts what it cannot export
Work from an assistantAn MCP server, so Claude or Cursor operates all of it in conversation

Run the checker yourself

The repository holds the three files. The output shows only the important fields.

@fabio-rovai
Ships withopen-ontologies
2.9k1 skill1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
2.9k
Star history of fabio-rovai/open-ontologies on GitHub, a chart by star-history.com

More MCP servers from other plugins.

mem0
Auto-invoked

mem0

MCP

Stores and retrieves long term memories for AI agents to personalize their responses.

mem04d69k
@mem0ai@mem0aiInstall MCP
phrocs

phrocs

MCP

Ships with posthog: :hedgehog: PostHog is the leading platform for building self-driving products. Our developer tools – AI…

posthog10d41k
@posthog@posthogInstall MCP
agentmemory
Auto-invoked

agentmemory

MCP

Ships with agentmemory: #1 Persistent memory for AI coding agents based on real-world benchmarks

@rohitg00@rohitg00Install MCP
skill-seekers

skill-seekers

MCP

Ships with skill-seekers: 🧠 The data layer for AI systems. Skill Seekers turns documentation sites, GitHub repos, PDFs, videos,…

Questions about open-ontologies.

Which coding agents can use open-ontologies?
open-ontologies works in any agent that reads an MCP config file: Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf. Each agent reads it from its own file; this page names the file for each one.