A personal CRM to look after your relationships
Self-hosted. People, important dates and reminders, with encrypted notes and attachments.

The app, as it is
Real screenshots of the application with demo data.
Pick a frame or use keys 1 to 5.





Install
You need Docker with Compose v2 and Python 3 (only to generate the secrets).
Quick start
Clone and generate secrets
The script creates .env.docker with the Django secret, the encryption key and the Postgres password.
Start the stack
Docker Compose builds and starts the database, the backend, the frontend and the proxy.
Open the app
Go to 127.0.0.1:8080 and create your account at /register/. Registration closes after the first user.
git clone https://github.com/chaska-dev/SimpleCRM.gitcd SimpleCRMpython scripts/generate-secrets.pydocker compose --env-file .env.docker up -d --buildThen open http://127.0.0.1:8080 and create the first account at /register/.
Back up FIELD_ENCRYPTION_KEYS outside the server: if you lose it, encrypted notes and attachments cannot be recovered. On Linux or macOS the script may be python3.
What is included
People and contacts
One record per person with several channels, tags, favorites, contact cadence and an interaction log.
Birthdays and dates
Yearly dates with calculated age and a view of the upcoming ones.
Reminders and board
Statuses (to do, in progress, done), recurrence and a board view next to the list.
Organizations
Universities, companies and other organizations, with logos and each person's memberships.
Encrypted notes and attachments
Fernet encryption at rest. The key lives in your .env.docker, not in the database.
Import and export
vCard (.vcf) and Google Contacts CSV, with duplicate detection.
AI agents via MCP
Claude Code, Claude Desktop, Cursor or VS Code read and create data with a revocable token.
English and Spanish, themes and accent
English and Spanish interface, light and dark themes, and the accent color you prefer.
Connect an AI agent
The MCP server is optional and off by default. You turn it on in the app and can revoke access at any time.
Turn it on
In Settings > Integrations, switch on “Allow AI agent access (MCP)”.
Copy URL and token
Under Connection, copy the server URL and the token. If there is none, press “Generate token”; “Test connection” checks it.
Paste the block
Under Set up your client, pick Claude Code, Claude Desktop, Cursor or VS Code and paste the block, already filled with your URL and token.
What each client block looks like
claude mcp add --transport http simple-crm http://127.0.0.1:8080/mcp/ --header "Authorization: Bearer <TOKEN>"{
"mcpServers": {
"simple-crm": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://127.0.0.1:8080/mcp/", "--header", "Authorization:Bearer <TOKEN>"]
}
}
}{
"mcpServers": {
"simple-crm": {
"url": "http://127.0.0.1:8080/mcp/",
"headers": { "Authorization": "Bearer <TOKEN>" }
}
}
}{
"servers": {
"simple-crm": {
"type": "http",
"url": "http://127.0.0.1:8080/mcp/",
"headers": { "Authorization": "Bearer <TOKEN>" }
}
}
}In the app they come with your real URL and token; here <TOKEN> is a placeholder. Claude Desktop needs Node.js.
A localhost URL only works on the same computer. To connect from another device, open the app through your network IP and publish the port (see the configuration guide in the repository).
Import and export contacts
In Settings > Import and export. Nothing is written until you review the preview.
Import
Upload a .vcf exported from Android, iPhone (iCloud) or Google Contacts, or a Google Contacts CSV. You see the duplicates and choose to skip, complete or create them anyway.
Export
Export to vCard or Google CSV, all contacts or one tag. Notes are only included if you ask for them, and then they leave unencrypted.