Open sourceApache 2.0Self-hosted

Purchasing and stockyour AI can't fudge.

OpenERP is an open-source ERP with an MCP server. Purchasing, stock and sales post to a double-entry ledger. A bill that doesn't match its order and the goods received is refused, and stock can't go below zero.

Explore the demoSample business, no sign-up

The demo app is part of a deployment Attri runs for you. The MCP server and the SQLite database are the open-source repo.

Ask the records what your agents did.

Nobody checks every order an agent raises. In OpenERP, every document posts as it happens, so the records answer these three questions.

Did we forget to bill anyone?

One order shipped and was never invoiced, and $1,700 of goods arrived that no supplier has billed yet. The order carries delivered and invoiced quantities, and the goods sit in the GRNI account until a bill clears them.

What stops a bill that doesn't match?

The three-way match. A bill must agree with the purchase order on price and with the goods received on quantity, or it's refused with every discrepancy listed and nothing written.

Why do we only have 53?

Every stock move names the document behind it. Two brackets were written off after a count, with the reason, and their cost moved to expenses in the same transaction.

How it works

Your agent raises the documents.OpenERP decides whether they post.

Agent requests

OpenERP

Checks every document

  • Bill matches order and receipts
  • Stock never below zero
  • Debits equal credits
  • Audit row, same transaction

Stock value = Inventory account

create_purchase_order · PO-0004 · $1,800.00

Read back as

  • JournalEvery line names its document
  • Stock valuationAverage cost, per item
  • Unbilled receiptsReceived, not yet billed
  • Audit logEvery change, append-only

Claude reads them through the same 47 MCP tools it writes with. Read-only SQL covers anything else.

  1. 01

    Raise

    Your agent creates the order, receipt, bill or delivery. Partners and items resolve by code or name, so it can pass "Northwind Components" or "SKU-100" directly.

  2. 02

    Check

    The server runs the rules before anything is written: the three-way match on bills, the stock floor on deliveries, the balance on every journal entry. A failure returns the reason and writes nothing.

  3. 03

    Post

    The document, its stock moves, its journal entry and its audit row commit in one transaction. A posting is never edited; reverse_entry adds a contra entry instead.

Compared with an ERP behind a connector

Connectors decide who may write.OpenERP decides what can post.

An MCP connector puts your agent in front of an ERP built for people clicking through forms. The call goes through, with whatever checks that system has switched on.

An ERP behind an MCP connector

Your agent calls someone else's API

Controls who may writeAPI keys, roles and approval steps decide which agent can call which method.
Matching is a policyBilling against ordered rather than received quantities is a setting an admin can choose.
Negative stock is a settingSome ERPs let stock fall below zero so entries can be caught up later.
Often copyleftMany open-source ERPs ship under GPL or AGPL, which some regulated buyers' legal teams rule out.
OpenERPThe rules sit in the write path
Controls what can be writtenA bill that disagrees with its order or the goods received is refused, whichever agent sends it.
Matching blocks the billPrice against the order, quantity against receipts. Every discrepancy comes back at once, and nothing posts.
Stock can't go below zeroA delivery or write-off larger than what's on hand is refused with both numbers.
Apache 2.0A patent grant, and no copyleft terms on the code you build around it.

Read the three-way match in the OpenERP README

Use cases

For any team letting agents touch operations.Wherever a number might be questioned later.

Sample: a parts distributor

Agents raise the orders. The bills have to match.

Purchase orders, receipts and supplier bills raised by agents. A bill posts only when its price matches the order and its quantity matches what arrived.

  • Three-way match on every vendor bill
  • Every discrepancy listed in one refusal
  • Goods received but not billed, as one balance

Enterprise

Run it yourself, or let Attri run it.Either way, the records stay in your environment.

Self-hosted

Free and open source

Run OpenERP on your own machine and connect your agents to it today.

Hosted by you

  • Full source code under Apache 2.0
  • One SQLite file and one Python process
  • Community support on GitHub
View on GitHub

Managed by Attri

Built into your environment

The rules are open source. Attri runs OpenERP inside your infrastructure, next to the systems your operations team already uses.

In your environment, run by Attri

  • Access control and approval rules for agent writes
  • Connectors to the systems you already run
  • Support from the team that builds OpenERP
Talk to AttriSOC 2 Type II, stated by AttriHIPAA BAA available
  • Three-way match on every bill

    Price against the purchase order, quantity against the goods received. A mismatch is refused.

  • Stock that can't go negative

    A delivery or write-off larger than what's on hand is refused.

  • Balanced on write

    Every document posts a journal entry whose debits equal its credits, in whole cents.

  • Audited in the same transaction

    Each document and its audit row commit together, so the log can't fall behind.

Open source

Read the code. Run it today.Apache 2.0, running in minutes.

$ git clone https://github.com/Attri-Inc/open-erp.git
$ cd open-erp
$ python3 -m venv .venv && source .venv/bin/activate
$ pip install -e ".[dev]"
$ python scripts/seed.py
$ python run_mcp.py
# MCP server over stdio, sample business in data/openerp.db
  • 47MCP tools for Claude
  • SQLiteOne file, one Python process
  • Apache 2.0License

Seeds a small business, mid-cycle, with one command. Access control, approval rules and connectors to your systems come with an Attri deployment.

Read the README on GitHub

Open source by Attri

Part of Open Tooling.Standalone projects, all Apache 2.0.

  • OperationsPython

    OpenERP

    Purchasing, stock and sales your AI can't fudge. Bills must match; stock can't go below zero.

    MCP tools
    47
    local-first
    SQLite
    You're hereGitHub
  • AccountingPython

    OpenLedger

    Books your agents can write to, and can't break. Every posting balances; corrections are reversals.

    MCP tools
    15
    local-first
    SQLite
  • AI observabilityPython

    OpenWatch

    Traces every AI session, tool call and dollar to the person behind it.

    MCP tools
    14
    REST endpoints
    23
  • CRM memoryTypeScript

    OpenCRM

    CRM memory for AI agents where every fact links to the email or transcript behind it.

    MCP tools
    27
    self-hosted
    SQLite

Let your agents run purchasing and stock.Keep the rules on the server.

Run OpenERP on a sample business in minutes, or have Attri deploy it inside your environment with access control and approval rules.