# Lambda ERP

Chat-first open-source ERP with a native MCP server, REST API and plugin seams for per-customer deployments.

Lambda ERP runs invoicing, sales and purchase cycles, stock and a double-entry general ledger, and is driven mainly by chat: a planner model calls document, master and report tools, and an Anthropic sub-agent writes custom analytics. Any MCP client can drive the same tools at POST /api/mcp with role-capped keys. Apache-2.0, one deployment per company, extended through a plugin repo rather than a fork.

Alternative to: NetSuite, Odoo

- Capabilities: adaptable, operable
- Vertical: invoicing-finance
- Shape: business-app
- Form factor: web-app
- Execution model: hybrid
- Provenance: mixed (recorded, never ranked)
- Repo: https://github.com/lambdadevelopment/lambda-erp (Apache-2.0), 30 stars, last commit 2026-08-29
- Last activity: 2026-08-29
- Page: apps/lambdadevelopment--lambda-erp.html
- JSON: apps/lambdadevelopment--lambda-erp.json

## Use it when

- I run a small company in Switzerland, Germany or with a generic chart and want to create quotes and invoices by asking, not clicking
- I am an implementation partner and want to hand each client an ERP my agent can operate over MCP and extend from a plugin repo

## Gotchas

- Localization packs exist only for Switzerland and Germany (SKR03/SKR04) plus a generic chart; other countries need a contributed pack
- Multi-currency, approval workflows, manufacturing and payroll are on the todo list
- First Docker boot runs a 3-year demo simulator and takes 2-3 minutes
- Real-software signal is thin: 30 stars, 6 forks, all issues from one account; kept on the Show HN thread and PyPI/npm releases

## Editions

- Free: Free, open source
  - source: https://github.com/lambdadevelopment/lambda-erp
  - container: cp .env.example .env && docker compose up --build
  - installable: pip install lambda-erp
- Hosted (dedicated instance per customer): Free, closed source

## Adaptable: make it yours

Effort: config-only (12 things to edit)

For a Swiss, German or generic-chart business the surface is the .env (OpenAI key for chat, optional Anthropic key for custom reports, seeded admin) plus the setup conversation that books the chart of accounts and tax templates. Branding, feature toggles and base currency belong in config/env in a customer repo; new doctypes, GL overrides and country packs are Python or TypeScript plugins loaded through LAMBDA_ERP_PLUGINS.

- Env vars: OPENAI_API_KEY, ANTHROPIC_API_KEY, ANTHROPIC_CODE_MODEL, LAMBDA_ERP_ADMIN_EMAIL, LAMBDA_ERP_ADMIN_PASSWORD, LAMBDA_ERP_ADMIN_NAME, LAMBDA_ERP_PLUGINS, LAMBDA_ERP_ENABLE_PUBLIC_DEMO, JWT_SECRET_KEY
- Config files: .env, docker-compose.yml, frontend/src/lib/doctypes.ts
- Prompt files: none
- Accounts you'll need: OpenAI API account; Anthropic API account (custom analytics only)

## Operable: what an agent can drive

Operability: native. Interface: mcp at https://github.com/lambdadevelopment/lambda-erp#what-works-today (published by the builder, local).

### Reach (partial coverage)

- Set up the company and chart of accounts: reachable. guided setup runs through chat; chat API (docs/chat-api.md) shares the same keys
- Quotation, sales order, delivery note, sales invoice, payment: reachable. MCP lists/creates/submits documents; REST POST /api/documents/{type} and .../submit
- Purchase cycle: reachable. README: buying equivalents of the sales cycle on the same Document lifecycle
- Returns, credit and debit notes: reachable. README what-works list; document conversions through .../convert
- Stock ledger and balances: reachable. stock_balances semantic dataset; Stock Entry documents
- General ledger and preset reports: reachable. MCP 'run reports'; REST /api/reports/…; Trial Balance, P&L, Balance Sheet, AR/AP aging
- Master data (customers, suppliers, items): reachable. REST /api/masters/{type}; MCP manage master data
- Custom analytics reports: reachable. chat tool create_custom_analytics_report; needs ANTHROPIC_API_KEY
- Create documents from PDF or image attachments: undetermined. README: attachments handled in chat; not confirmed for the chat API
- Users, roles and API keys: reachable. admin-role key reaches settings and user endpoints (docs/rest-api.md)

## Code stack

- Languages: Python, TypeScript
- Frameworks: FastAPI, React, Vite, Tailwind
- Package manager: pip / npm
- Database: SQLite, PostgreSQL
- Hosting target: Docker Compose, single VPS, Azure Container Apps (demo)

## Model stack

- Providers: OpenAI (orchestrator), Anthropic (code specialist)
- Models: claude-opus-4-7 default for ANTHROPIC_CODE_MODEL
- Keys you need (names only): OPENAI_API_KEY, ANTHROPIC_API_KEY, ANTHROPIC_CODE_MODEL
- Prompts live in: api/chat.py (tool schemas and reasoning loop), docs/agents/
- Tools: document CRUD, search_masters, get_master_fields, reports, aggregations, create_custom_analytics_report

## Evidence and confidence

- formFactor: React frontend plus FastAPI backend served on one origin (README How it works) (confidence 0.9)
- executionModel: planner model with whitelisted tools and semantic datasets; deterministic GL engine underneath (confidence 0.9)
- operability: README: MCP at POST /api/mcp built from the live registries; docs/rest-api.md and docs/chat-api.md from the Builder (confidence 0.85)
- effort: .env.example in repo; README Environment section; plugin seams documented in docs/core-extension-architecture.md (confidence 0.75)
- editions: Apache-2.0 source, PyPI and npm packages; README offers dedicated hosted instances without a price (confidence 0.8)
- active: GitHub pushedAt 2026-08-29; Show HN 2026-04-26
- reach:  (confidence 0.75)

## Open questions

- Gate 3 borderline (see gotchas); Curator to confirm
- Whether the chat API accepts attachments
- Exact MCP tool names (README describes them; no tool list fetched)

## Sources

- https://github.com/lambdadevelopment/lambda-erp (sourcing:invoicing-finance:community)
- https://github.com/lambdadevelopment/lambda-erp/blob/main/docs/rest-api.md (analysis:invoicing-finance)
- https://pypi.org/project/lambda-erp/ (analysis:invoicing-finance)
