# UndoCRM > A CRM where AI agents are the users. Shared memory and contact rules for agents that talk to people (AI SDRs, recruiters, receptionists), over MCP and HTTP. UndoCRM runs no LLM: your agent decides what matters and saves it; UndoCRM stores it, enforces the rules, and keeps agents from colliding. Object and property names follow HubSpot. Connect over MCP (Streamable HTTP): https://undocrm.com/mcp with header `Authorization: Bearer `. Claude Code: `claude mcp add --transport http undocrm https://undocrm.com/mcp --header "Authorization: Bearer ucrm_agt_..."` ## The loop 1. `read(person)` — the brief, before acting. 2. `can_contact(person, channel)` — before any outbound message. BLOCKED means do not send. ALLOWED also claims the person for you (24h). 3. Send with your own tools. 4. `create(type: "interaction", person, properties: {channel, direction, summary}, facts: {...}, tasks: [...])` — one call. A person is any one string: a contact id (`ct_...`), email, phone (`+14155550100`), or handle (`linkedin:janedoe`, `x:@jane`). New people are created on first log or claim; identities that belong together are merged into one record. ## Tools - `read(target, view?, query?, purpose?, max_tokens?, filter?)`: a person's brief (rules, deals, tasks, facts, history; ranked by purpose, cut to budget), any record by id (`dl_`, `co_`, `fu_`, `ix_`), or a collection: `contacts`, `interactions` (full-text search over every conversation), `deals`, `tasks`, `pipelines`, `properties`, `companies`. - `create(type, person?, properties, facts?, tasks?, completes_tasks?)`: `interaction`, `contact`, `company`, `deal`, `task`, `pipeline`. - `update(target, properties)`: change only what you pass. People: `jobtitle`, `company`, `lifecyclestage`, identities, custom properties (appended, never overwritten), `do_not_contact`. Deals: `dealstage`, `amount`, `closedate`. Tasks: `status: done|cancelled`, or `due` to reschedule. - `delete(target, property?, reason?)`: archive or retract; a human can restore. `property` retracts one wrong value. - `can_contact(person, channel, purpose?, claim?, release?, ttl_minutes?)`: ALLOWED or BLOCKED (do-not-contact, or claimed by another agent). ## Rules that never bend - Facts (custom properties) are append-only. A new value joins the history; the old one stays, with which agent wrote it and when. - Do-not-contact is checked on every `can_contact`. Agents cannot lift it. - One live claim per person. Two agents asking at the same moment: exactly one gets ALLOWED. - Every write is attributed to the agent's key and lands in an audit log humans can undo from. ## Plans UndoCRM is a hosted service at https://undocrm.com. Sign up at https://undocrm.com/app/signup. | Plan | Price | Contacts | Workspaces | API limits | | --- | --- | --- | --- | --- | | Free | $0 | 1,000 | 1 | 60 req/min, 5,000/day | | Beginner | $10/mo | 5,000 | 1 | 600 req/min, 100,000/day | | Pro | $29/mo | 25,000 | 3 | Unlimited (fair use) | | Ultimate | $299/mo | 500,000 | 10 | Unlimited (fair use) | | Enterprise | Custom | Custom | Custom | Contact us | ## Docs - [Quickstart](https://undocrm.com/docs/quickstart.md): sign up, create a workspace and an agent key, connect over MCP - [Concepts](https://undocrm.com/docs/concepts.md): people, identities, properties, deals, claims, rules, audit and undo - [MCP tools](https://undocrm.com/docs/mcp-tools.md): every tool, every parameter, example outputs - [HTTP API](https://undocrm.com/docs/http-api.md): the same operations over REST, plus workspace and key management - [Performance](https://undocrm.com/docs/performance.md): measured latencies at 1M contacts in a workspace, and known limits ## Optional - [Everything in one file](https://undocrm.com/llms-full.txt)