ontary — the ontology SDK¶
Author an ontology once — typed objects, links, actions, functions, and a security policy — and get a governed runtime: scope- and sensitivity-aware reads, audited business-verb actions, and an MCP server for AI agents. The engine is domain-agnostic; the ticket domain below is just an example.
Python 3.12+ · pydantic-only core · mypy --strict · offline make verify.
Release metadata: version
0.19.0, store schema v14. Releases are annotated tags (v0.19.0).
Documentation: https://ryoochi0112.github.io/ontary/ (English / 日本語).
Install¶
From PyPI:
pip install "ontary[mcp]"
mcp serves the ontology to AI agents; postgres adds PostgresStore. The
core depends only on pydantic. Pin an exact version: ontary is pre-1.0 and
any minor may break you (see Compatibility).
uv add "ontary[mcp]==0.19.0"
or in pyproject.toml:
[project]
dependencies = ["ontary[mcp]==0.19.0"]
Without an index, install the tagged git ref:
uv add "ontary @ git+https://github.com/ryoochi0112/ontary@v0.19.0"
Quickstart¶
Two object types, one business-verb action, a SQLite store, and an MCP server
for one queue-scoped agent. Runs as-is (tests/test_docs.py executes it).
from ontary import (
ActionContext, ActionError, ActionParams, Consumer, DirectProperty,
ObjectStore, Ontology, OntologyObject, SelfScope, Source,
build_mcp_server, prop, target,
)
ontology = Ontology(name="tickets", scope_levels=["queue"])
@ontology.object(layer="L0", scope=[SelfScope(level="queue")])
class Queue(OntologyObject):
id: str = prop(primary_key=True)
name: str
@ontology.object(
layer="L0", owned={"escalated": False},
scope=[DirectProperty(level="queue", property_name="queue_id")],
)
class Ticket(OntologyObject):
id: str = prop(primary_key=True)
subject: str
queue_id: str = prop(scope_level="queue")
escalated: bool | None = prop(default=False)
class EscalateTicket(ActionParams):
ticket_id: str = target(Ticket)
@ontology.action(
EscalateTicket, target=Ticket, roles=["Agent"],
display_name="Escalate ticket", description="Mark a ticket urgent.",
api_name="EscalateTicket",
)
def escalate(ctx: ActionContext, params: EscalateTicket) -> dict[str, str]:
ticket = ctx.get(Ticket, params.ticket_id)
if ticket is None:
raise ActionError("ticket does not exist", code="PRECONDITION_FAILED")
ticket.escalated = True
ctx.save(ticket)
return {"ticket_id": params.ticket_id}
ontology.validate()
store = ObjectStore(ontology.registry) # ObjectStore(registry, "tickets.db") persists
source = Source(source_system="demo")
store.insert("Queue", {"id": "queue-a", "name": "Billing"}, source)
ticket_id = store.insert(
"Ticket", {"subject": "Invoice mismatch", "queue_id": "queue-a"}, source
)
agent = Consumer(actor_id="agent-1", role="Agent", scope_level="queue",
scope_id="queue-a", kind="human")
client = ontology.bind(store).for_consumer(agent)
client.execute(EscalateTicket(ticket_id=ticket_id))
assert client.get(Ticket, ticket_id).escalated is True
server = build_mcp_server(ontology, store, agent) # server.run() serves stdio
The full Org → Queue → Ticket → Comment ontology with functions and a
multi-consumer MCP server is examples/tickets/.
Command line¶
The package installs ontary and ontary-mcp.
ontary validate pkg.module:attrvalidates an ontology and reports diagnostics. Use--jsonfor JSON output.ontary serve pkg.module:attr --dev [--store PATH] [--port N]serves an ontology over localhost MCP.ontary versionprints the version.
ontary serve your_app.ontology:ontology --dev --store ./dev.sqlite --port 8000
ontary-mcp is a placeholder that exits with instructions. Full flags and
exit codes: CLI reference.
Where to go¶
| Learn about | Destination |
|---|---|
| The docs site (EN / 日本語) | https://ryoochi0112.github.io/ontary/ |
| Tutorials | |
| First ontology in ten minutes | Getting started · 日本語 |
| Model a leave-request approval | Leave-request tutorial |
| How-to guides | |
| Testing your ontology | Testing · 日本語 |
| Storage and tenancy | Storage, tenancy, and schema |
| MCP serving | MCP serving |
| Worked recipes | Tickets reference app |
| Reference | |
| Names and errors | API reference · error codes · 日本語 |
| Command line | CLI reference · 日本語 |
| Compatibility | Compatibility |
| Explanation | |
| Authoring an ontology | Ontology design guide · 日本語 |
| Project | |
| What is planned | Roadmap |
| Change history | CHANGELOG.md |
| Cutting a release (maintainers) | Releasing |
| Reporting a vulnerability | Security policy |
License¶
MIT — see LICENSE. ontary continues the ontos SDK, which
Atrae, Inc. authored and released to the author for open-source development.