crm-cli

by jdanielnd

Not rated
GitHub

About

A local-first personal CRM for the terminal — manage contacts, deals, interactions, and tasks from Claude with 18 built-in tools, all stored in a local SQLite file.

Details

Author
jdanielnd
Categories
Productivity, Other, Project Management

Setup

Install crm-cli in your MCP client (Claude Desktop, Cursor, Windsurf, and others).

Repository: https://github.com/jdanielnd/crm-cli

Follow the installation instructions in the repository README, then restart your MCP client.

A local-first personal CRM that lives in your terminal. Manage contacts, organizations, interactions, deals, and tasks — all from the command line. Ships with a built-inMCP serverso AI agents like Claude can read and update your CRM directly.

Single static binary. SQLite database. No cloud. No accounts. Your data stays on your machine.

- People & Organizations— contacts with full profiles, linked to companies
- Interaction Log— track calls, emails, meetings, notes, and messages
- Deals & Pipeline— sales opportunities with stages, values, and a pipeline view
- Tasks— follow-ups with due dates, priorities, and completion tracking
- Tags— labels on any entity for flexible organization
- Relationships— person-to-person links (colleague, mentor, referred-by, …)
- Full-Text Search— find anything across all entities instantly
- Context Briefing— one command to get everything about a person before a meeting
- AI-Ready— built-in MCP server for Claude and other AI agents
- Multiple Output Formats— table, JSON, CSV, TSV — pipe into anything
- Zero Dependencies— single binary, pure-Go SQLite, runs anywhere

# Homebrew (macOS/Linux) brew install jdanielnd/tap/crm # Go go install github.com/jdanielnd/crm-cli/cmd/crm@latest # Or download a binary from GitHub Releases # https://github.com/jdanielnd/crm-cli/releases
# Add a company crm org add "Acme Corp" --domain acme.com # Add a contact and link them to the org crm person add "Jane Smith" --email jane@example.com --org 1 # Log a call crm log call 1 --subject "Intro call" # Get a full briefing before your next meeting crm context 1 # See your dashboard crm status
crm person add "Jane Smith" --email jane@example.com --phone 555-1234 --org 1 crm person list # all contacts crm person list --tag vip --limit 10 # filtered crm person show 1 # full details crm person edit 1 --title "CTO" --company "Acme Corp" crm person delete 1 # soft-delete (recoverable)
crm org add "Acme Corp" --domain acme.com --industry SaaS crm org list crm org show 1 --with-people # show org + its members crm org edit 1 --domain acme.io crm org delete 1
crm log call 1 --subject "Discussed roadmap" --content "Agreed on Q2 timeline" crm log email 1 --subject "Follow-up" --direction outbound crm log meeting 1 2 --subject "Product demo" --at "2026-03-05 14:00" crm log note 1 --subject "Quick check-in" --content "Seemed interested" crm log list --person 1 --limit 5 # recent interactions with person
crm deal add "Website Redesign" --value 15000 --person 1 --stage proposal crm deal list --open # exclude won/lost crm deal list --stage proposal crm deal show 1 crm deal edit 1 --stage won --closed-at 2026-03-15 crm deal delete 1 crm deal pipeline # summary by stage
crm task add "Follow up on proposal" --person 1 --due 2026-03-14 --priority high crm task list # open tasks crm task list --overdue # past due crm task list --all # include completed crm task show 1 crm task edit 1 --priority medium crm task done 1 # mark completed crm task delete 1
crm tag apply person 1 "vip" crm tag apply deal 1 "q2" crm tag show person 1 # tags on a person crm tag remove person 1 "vip" crm tag list # all tags crm tag delete "old-tag" # remove tag entirely
crm person relate 1 2 --type colleague --notes "Met at ReactConf" crm person relationships 1 # list all relationships crm person unrelate 1 # remove by relationship ID

Relationship types:colleague,friend,manager,mentor,referred-by

crm search "jane" # searches people, orgs, interactions, deals crm search "roadmap" --type interaction # filter by entity type
crm context 1 # full briefing by person ID crm context "Jane Smith" # or by name

Returns person profile, organization, recent interactions, open deals, pending tasks, relationships, and tags — everything you need before a meeting.

Shows contact/org counts, open deals with total value, task counts, overdue items, pipeline breakdown, and recent activity.

crm person list # table (default in TTY) crm person list -f json # JSON (default when piped) crm person list -f csv # CSV crm person list -f tsv # TSV

Use-q/--quietfor minimal output (just IDs), useful for scripting:

crm person list --tag vip -q | xargs -I{} crm tag apply person {} "priority"

crmfollows Unix conventions — data to stdout, messages to stderr, structured exit codes — so it plays well with other tools:

# Bulk tag everyone at an org crm person list -f json | jq '.[] | select(.org_id == 1) | .id' | xargs -I{} crm tag apply person {} "acme-team" # Interactive selection with fzf crm person list -f tsv | fzf | cut -f1 | xargs crm person show # Export contacts to CSV crm person list -f csv > contacts.csv # Overdue task notifications crm task list --overdue -f json | jq -r '.[] | "OVERDUE: \(.title)"'

Exit codes:0success,1error,2usage,3not found,4conflict,10database error.

crmincludes a built-inMCPserver so AI agents can query and update your CRM over a structured protocol.

Then copyAGENT.mdinto your project asCLAUDE.mdso Claude knows how to use the CRM effectively.
-

Open the config file at~/Library/Application Support/Claude/claude_desktop_config.json

Add the CRM server (if the file already has other servers, add the"crm"entry inside the existingmcpServersobject):

{ "mcpServers": { "crm": { "command": "/opt/homebrew/bin/crm", "args": ["mcp", "serve"] } } }

Note:Use the full path to the binary. Homebrew on Apple Silicon installs to/opt/homebrew/bin/crm, on Intel Macs to/usr/local/bin/crm. Runwhich crmto find yours.

Create a newProject, click the project settings, and paste the contents ofAGENT.mdinto the project instructions. This teaches Claude when to log interactions, how to maintain contact summaries, tagging conventions, and more.

"Just had a great meeting with Jane. We agreed on the timeline, she'll sign next week."
- Log the interaction withcrm_interaction_log
- Update the deal stage withcrm_deal_update
- Create a follow-up task withcrm_task_create
- Update Jane's summary withcrm_person_update

Thesummaryfield on contacts acts as a living dossier that AI agents maintain — reading it before meetings for context, updating it after interactions with new facts and preferences.

The database lives at~/.crm/crm.dbby default. Override with:

# Flag (highest priority) crm --db /path/to/crm.db person list # Environment variable export CRM_DB=/path/to/crm.db

The database and directory are auto-created on first use.

Point your database to iCloud Drive for automatic backup across machines:

export CRM_DB="$HOME/Library/Mobile Documents/com~apple~CloudDocs/crm/crm.db"

SQLite WAL mode handles concurrent reads well, but avoid writing from two machines simultaneously.

git clone https://github.com/jdanielnd/crm-cli.git cd crm-cli go build -o crm ./cmd/crm go test ./...

Requires Go 1.23+. No CGO — builds anywhere Go runs.

An MCP server for integrating with Clio practice management software, tailored for Australian legal professionals.

A powerful, locally-hosted task management application with Obsidian integration and SQLite database support.

Manage your job search directly. List jobs, create applications, add events, run company research, generate templates, and more.

Customer-hosted, read-only MCP server for Jobber owner/admin operational queries.

A Jira-like project tracker for AI agents — epics, tasks, dependencies, and dashboards, all in local SQLite with zero setup.

A Todo and Task Manager server for creating, updating, and managing tasks, using a SQLite database.

FoundersOS - CRM, tasks, finances, feeds, and memory for founders, as an MCP server.

Interact with task, doc, and project data in Dart, an AI-native project management tool

Remote MCP server for MeisterTask. Create and manage projects, tasks, and notes from your AI assistant. Hosted (streamable-HTTP) — connect at https://mcp.meistertask.com/mcp

Remote MCP server for MindMeister. Create, edit, and organize mind maps from your AI assistant. Hosted (streamable-HTTP) — connect at https://mcp.mindmeister.com/mcp

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.