Read-only docs for the Accordo CRM framework: what it proves, and where it stops.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Build the customer and revenue system your business actually runs.
Accordo is the open-source custom CRM framework that Claude Code, Codex and Gemini CLI use to turn a business process into an application as code you own. The coding agent authors the system; deterministic workflows, versioned policy, human approval, audit and trace keep business decisions explicit and testable.
Human product overview: accordo.dev Β· coding-agent entry point: For AI agents Β· current implementation proof: claims ledger.
The name is chosen and the domain registered. npm create accordo scaffolds a working
project from the published create-accordo@0.1.0, the August 19 source snapshot.
Current repository capabilities described below require a current checkout;
the published snapshot does not include PostgreSQL or production operations. The accordo package itself remains
an empty 0.0.1 name reservation β nothing installs the framework as a library β and
the @accordo scope is claimed and deliberately empty. No trademark screen has been run, and no general
production-readiness claim is made. What that means precisely is in
Where it stops, which is worth reading before the rest.
That sentence, run for real β the scaffold, an agent advancing two renewals, and the β¬80,000 one stopping at the gate until a human decides:

Recorded from the real commands with VHS; the script is .github/demo.tape, so the recording can be reproduced rather than trusted.
Those adjacent terms are retrieval paths, not extra capability claims. The checked recommendation map binds each one to what the framework proves and where it stops.
Every CRM eventually asks you to bend your process to fit its model. The two usual escapes both cost something:
This framework is the third option: an agent generates the application, and the framework
supplies the parts teams always get wrong under deadline. The test any developer can apply
is "if this project disappears tomorrow, what am I left with?" Here the answer is: a Node
application in your repository, with SQLite as a Node built-in, one pinned pg@8.23.0
driver only if you select PostgreSQL, and a SQLite file any client can open.
Each line below is bound to a merged test. The full ledger β claim, evidence, and the limit
that travels with it β is site/claims.json, and the review discipline
behind it is docs/QUALITY_GATES.md.
| Capability | Where it stops | Evidence |
|---|---|---|
| A module manifest becomes a migration, service, REST resource, SDK method and Admin screens with no page code | generated CRUD only β workflows and approvals for custom objects are still handwritten | tests/module-factory-e2e.test.js, tests/generated-api-e2e.test.js, tests/admin-modules.test.js |
| Generated objects reference each other: foreign key, runtime target validation, Admin selector | generated-to-generated many-to-one only; no many-to-many, inverse collections or cascade | tests/reference-fields-e2e.test.js |
| Deterministic approval policy: a renewal at or above the threshold waits for a named human | the built-in renewal object and one value threshold | tests/workflow.test.js, tests/api.test.js |
| An agent cannot make the human's approval decision β asserted by a test, not by a convention | the actor is asserted, not authenticated; this holds against an honest agent, not an attacker | tests/workflow.test.js |
| Opportunities move through code-first pipeline stages under a server-authoritative action β the client asks, the server decides | proven on the built-in Opportunity module; configurable pipelines for generated custom objects are not claimed | tests/opportunity-pipeline-e2e.test.js, tests/pipeline-contract.test.js |
| Lead capture, enrichment, explainable versioned scoring, deterministic routing, qualification, conversion | enrichment runs against a fixture provider; no real data source is wired | tests/lead-intelligence-e2e.test.js, tests/lead-conversion-e2e.test.js |
| Server-priced composite quotes, immutable quote versions, versioned discount policy with approval | fixture catalog provider; integer cents with no FX β currencies are never summed | tests/commercial-e2e.test.js |
| Signature envelope β verified events β signed-artifact evidence β exactly one immutable Order | fixture signature provider, test-only webhook key, provider-reported artifact hash | tests/signature-order-e2e.test.js |
| Order activation and governed renewal/amendment into signed successor agreements | immutable history; no automatic renewal, cancellation execution or billing | tests/contracts-activation-e2e.test.js, tests/lifecycle-amendment-execution-e2e.test.js |
| Delivery handover into a project with work packages, milestones and an optional partner; human-driven execution | no resource scheduling, staffing or billing; deliverables and user-recorded acceptance exist, without authenticating the customer | tests/delivery-handover-e2e.test.js, tests/delivery-execution-e2e.test.js, tests/delivery-change-acceptance-e2e.test.js |
| Append-only time and expense evidence, costed by a versioned policy, with a reproducible contribution estimate | deliberately not a margin: no revenue recognition, no COGS, no ARR/MRR, no FX | tests/delivery-economics-e2e.test.js |
| A customer-authored domain package attaches and detaches with the kernel fingerprint unchanged | the scaffold that starts one writes an empty package and nothing else; no registry, no publication, no sandboxing β package code runs with the host's authority | tests/package-contract.test.js, tests/custom-package-e2e.test.js |
accordo package scaffold <name> β a minimal, empty, conforming local package, written atomically, dry-run by default | it invents no business logic, composes nothing, verifies no global identity uniqueness and installs or publishes nothing | tests/package-scaffold.test.js, tests/package-test-command.test.js |
crm app inspect β one deterministic, source-only JSON report of what an application contains | never opens the database, contacts a provider or reads a secret β and says so in its own output | tests/app-inspect.test.js |
crm solution check β a Solution Plan is a checked-in contract with a canonical fingerprint | a document contract, not a planner and not a runtime; nothing executes a plan | tests/solution-plan.test.js |
crm scenario run β two checked-in business scenarios run against real composed applications and report which JTBD rows they earned and which they did not | coverage is claimed by a scenario rather than discovered; it promotes no row, drives no browser, and each run speaks for one composition | tests/scenario-run.test.js |
| Generated modules evolve through explicit revisions and append-only named migrations | source-only: what a particular database applied is not knowable from here | tests/module-evolution.test.js |
The whole suite runs on every push, together with the smoke test. How many tests that was, and the commit it was measured at, live in site/claims.json under measuredAgainst β the one place in this repository a test count is written down, and the only one npm run gtm:check will let a number appear in.
Node.js 22.16 or newer. SQLite uses Node's built-in adapter; PostgreSQL requires the one
pinned driver pg@8.23.0 (tests/spine-v2-m3b-postgresql-adapter.test.js). No ORM, no
build step.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/agent-crm)<a href="https://allmcps.com/mcp/agent-crm"><img src="https://allmcps.com/api/badge/agent-crm?style=directory" alt="Agent Crm on AllMCPs" /></a>