Labsco
MCP SERVER

CRM CLI

by jdanielnd

A local-first personal CRM in a single Go binary — people, orgs, interactions, deals and tasks in SQLite — with a built-in MCP server so an assistant can read and update it.

CRM & Sales Pipeline
Summary
The contact summary is designed to be maintained by the agent, and that is the interesting bit.

Rather than treating the CRM as a form to fill in, the `summary` field is a dossier the assistant reads before a meeting and rewrites afterwards with new facts and preferences — which is the one piece of CRM hygiene humans reliably skip. Pasting `AGENT.md` into your project instructions is what makes that behaviour consistent; without it the agent will use the tools but not the habit.

What it is

A terminal CRM that ships an MCP server inside the same binary. Contacts, organisations, interaction logs, deals and tasks live in a local SQLite database with full-text search; the CLI is for you and the MCP tools are for an agent, both against the same data. No cloud, no account — the database is a file on your machine.

What you get
  • People searched by name, email, tag or organisation, read in full, created, updated, archived and linked to each other — `crm_person_search`, `crm_person_get`, `crm_person_create`, `crm_person_update`, `crm_person_delete`, `crm_person_relate`
  • Organisations searched and read with their members — `crm_org_search`, `crm_org_get`
  • Calls, emails, meetings and notes logged against a person and listed back — `crm_interaction_log`, `crm_interaction_list`
  • Full-text search across every entity at once, and a complete briefing for one person — `crm_search`, `crm_context`
  • Deals created and moved through stages, tasks created and listed, tags applied, and summary statistics — `crm_deal_create`, `crm_deal_update`, `crm_task_create`, `crm_task_list`, `crm_tag_apply`, `crm_stats`
  • A `summary` field on each contact that acts as a living dossier — read before meetings, updated after interactions
  • The same data from the terminal with table, JSON, CSV and TSV output, Unix exit codes (`0` success, `1` error, `2` usage, `3` not found, `4` conflict, `10` database error), and composition with tools like jq and fzf
  • Relationship types between people: `colleague`, `friend`, `manager`, `mentor`, `referred-by`
Requirements

Nothing — no account, no key, no cloud. Install with `brew install jdanielnd/tap/crm`, `go install github.com/jdanielnd/crm-cli/cmd/crm@latest`, or a binary from GitHub Releases. Register the MCP server with `claude mcp add crm -- crm mcp serve`, or point a client at the full binary path with the `mcp serve` arguments — `which crm` gives you the path, since Homebrew's location differs between Apple Silicon and Intel. The database lives at `~/.crm/crm.db` by default; `--db` or `CRM_DB` moves it, including into iCloud Drive for cross-machine backup, though the README warns against writing from two machines at once even with SQLite WAL mode. Building from source needs Go 1.23+ and no CGO. The repository's `AGENT.md` is meant to be pasted into your project or Claude project instructions — it teaches the assistant when to log interactions and how to maintain contact summaries.

Setup effort

One command — brew install jdanielnd/tap/crm