27 tools for Claude. One REST API for everything else.
Claude Desktop and Claude Code use the MCP server over stdio. Your own apps use the REST API. Both read and write the same SQLite database.
Updated
Built for agents, not forms.
01
Typed, not free text
Every tool has a schema, so the agent sends structured claims instead of prose.
02
Same data, two doors
MCP for Claude, REST for your apps, both on one database.
03
Local by default
One SQLite file on your server, with no hosted service in between.
The tools
Everything the evidence chain needs. Nothing it doesn't.
Evidence tools · 15
Ingest, claim, cite, flag.
Fifteen tools cover the evidence chain: save artifacts, add and supersede observations, write briefs, and open or resolve conflicts.
- ingest_artifact, get_artifact, list_artifacts
- add_observation, supersede_observation, retract_observation
- create_brief, create_conflict, resolve_conflict
Entity tools · 10
Contacts, companies, deals and the links between them.
Ten tools manage entities and relationships, with structured filters, full-text search, graph traversal and the event history of each record.
- create_entity, update_entity, get_entity, search_entities, archive_entity
- link_entities, unlink_entities, list_relationships, traverse_graph
- get_entity_history for every change to a record
REST API
The same records over HTTP.
A JSON API on port 8787 exposes the same entities, claims and conflicts for your own apps and scripts.
- Filter observations by entity, artifact or lifecycle
- List conflicts by entity or status
- Idempotency keys and agent headers on entity writes
What the 27 tools cover.
Entities · 5
Create, update, get, search and archive contacts, companies and deals.
Relationships and history · 5
Link, unlink, list and traverse relationships, and read each record's event history.
Artifacts · 3
Ingest raw evidence and read it back.
Observations · 5
Add, read, list, supersede and retract claims.
Briefs and conflicts · 7
Write briefs that cite, and open, list and resolve conflicts.
Import and export · 2
Move every record in or out as JSON.
Running in three steps.
Clone and install
Node and npm are all you need.
git clone https://github.com/Attri-Inc/open-crm.git && cd open-crm && npm installSeed sample data
Loads sample contacts, companies and deals.
cp .env.example .env && npm run seedConnect Claude
Run this from the open-crm folder.
claude mcp add opencrm -e CRM_DB_PATH=$PWD/data/crm.db -- $PWD/node_modules/.bin/tsx $PWD/src/mcp.ts
Every tool, by group.
Names as registered in the MCP server.
| Group | Tools | Count |
|---|---|---|
| Entities | create_entity, update_entity, get_entity, search_entities, archive_entity | 5 |
| Relationships | link_entities, unlink_entities, list_relationships, traverse_graph | 4 |
| History | get_entity_history | 1 |
| Artifacts | ingest_artifact, get_artifact, list_artifacts | 3 |
| Observations | add_observation, get_observation, list_observations, supersede_observation, retract_observation | 5 |
| Briefs | create_brief, get_brief, list_briefs | 3 |
| Conflicts | create_conflict, get_conflict, list_conflicts, resolve_conflict | 4 |
| Data | export_data, import_data | 2 |
Tool names and counts read from src/mcp.ts in Attri-Inc/open-crm on September 21, 2026.
Questions.
Which MCP transport does it use?
stdio. Claude Desktop and Claude Code start the server as a local process. Remote MCP isn't built yet; Attri sets it up in managed deployments.
Can an agent erase history?
Observations are superseded or retracted, not removed, and artifacts can't be edited. Entities are archived rather than deleted, over MCP and REST. import_data does replace records that share an id, so treat it as an admin tool.
Does it work with agents other than Claude?
Any MCP client that can start a stdio server can use it, and anything that speaks HTTP can use the REST API.
How do I attribute a change to a specific agent?
Send x-agent-id, x-tool-call-id and x-prompt-hash headers when you create, update or archive an entity, or link or unlink a relationship, over REST. They're stored on the event for that change.
Every fact should show its source. Start with the agents you already run.
Run OpenCRM on sample data in minutes, or have Attri deploy it inside your environment with sign-in and connectors.