openOM

Grounding AI agents in openOM

General-purpose AI extraction of an offering memorandum hallucinates - it will confidently invent an NOI, a cap rate, or a lease term that looks right and isn't. In CRE that is a liability, not a convenience. openOM removes the guess: for an openOM-enabled OM your agent reads a broker-asserted, hash-verified payload deterministically - no vision parse, no re-extraction, no hallucination.

The one thing to get right: it's an opinion, not a fact

An OM is an advertisement - the broker's opinion of value, agreed to by the seller before publication. So openOM tells your agent who asserted a figure, that it is unaltered, and as of when - never that it is true. Ground the model on "the broker asserted NOI = $143,750, unaltered, as of 2026-05-31", never "NOI is $143,750." Verified means provenance, not truth. Underwriting still happens at the deal desk off the broker-of-record file.

Connect the deterministic MCP server

openOM ships a deterministic MCP server - seven read/validate/inspect tools, zero inference, no API key, no per-call cost. It is free and self-hostable: run it locally over stdio.

# pip install openom-mcp, then point your MCP client at it:
{ "mcpServers": { "openom": { "command": "om-mcp" } } }

The same server also runs over Streamable HTTP (om-mcp-http) for a hosted deployment. Any public instance you connect to should be access-gated (Cloudflare Access service token or equivalent) - the open server holds no secrets, but a public HTTP endpoint is an open door you own; don't run one unauthenticated.

Then the agent uses:

Tell your agent how to treat it (system-prompt snippet)

When an openOM payload is present, use it as the broker's ASSERTED OPINION, not fact.
- Attribute every figure: "<assertedBy> asserts <field> = <value>, as of <assertedDate>".
- If verification.hashValid is not true, do NOT use the payload - it may be altered.
- Never state an OM figure as verified truth; it is an advertisement / opinion of value.
- For OMs with no openOM payload, extraction is a guess - flag it as unverified.

Why this beats re-extraction

Cold-start reality: most OMs aren't openOM-enabled yet, so your agent still needs an extractor for those - treat that output as an unverified guess, and prefer openOM-enabled OMs as the trusted path. See the developer quick-start and the verify tool.