Personal CRM MCP server managing contacts, companies, interactions, tasks, notes, journals, and tags via 42+ tools.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Keepsake MCP.
list_contactsList all contacts with pagination and sorting
get_contactGet a contact with recent interactions, tags, and stats
create_contactCreate a new contact
update_contactUpdate contact fields
delete_contactPermanently delete a contact
search_contactsAccent-insensitive search by name, email, company
MCP server for Keepsake β the personal CRM that helps you nurture your relationships.
Connect your AI assistant (Claude, Cursor, or any MCP-compatible client) to your Keepsake data: contacts, interactions, tasks, notes, daily intentions, companies, and tags.
Your AI assistant becomes a personal relationship manager. Ask it to:
Sign up at keepsake.place, then go to Account > API Keys to generate one.
No installation required. Works with Claude iOS, Claude web, Claude Desktop Connectors, and any MCP client that supports Streamable HTTP.
Endpoint: https://app.keepsake.place/api/mcp
Authentication: Pass your API key as a Bearer token in the Authorization header.
Claude Desktop (Connectors):
Add a remote MCP server in Claude Desktop settings with:
https://app.keepsake.place/api/mcpksk_ API keyAny MCP client (Streamable HTTP):
Runs locally via npx. Useful for Claude Code, Cursor, and local development.
Claude Desktop:
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
Claude Code:
Then set KEEPSAKE_API_KEY in your environment.
Cursor:
Add to .cursor/mcp.json in your project:
On connection, the server sends MCP instructions β injected into the client's system
prompt. It is the only channel that reaches an agent before it goes looking for a
capability, so it stays short and points at the rest: call get_agent_instructions for
the full doctrine, and put editorial remarks in a note's margin (create_note_comment)
rather than in the chat, which disappears.
| Prompt | Arguments | Description |
|---|---|---|
review_note | note_id | Act as the editor of a note: read it, judge form and substance, leave anchored remarks in the margin, never rewrite the text |
| Tool | Description |
|---|---|
list_contacts | List all contacts with pagination and sorting |
get_contact | Get a contact with recent interactions, tags, and stats |
create_contact | Create a new contact |
update_contact | Update contact fields |
delete_contact | Permanently delete a contact |
search_contacts | Accent-insensitive search by name, email, company |
get_contact_timeline | Unified chronological feed of all items for a contact |
| Tool | Description |
|---|---|
list_companies | List all companies |
get_company | Get company with linked contacts and tags |
create_company | Create a new company |
update_company | Update company fields |
delete_company | Soft-delete (or permanent delete) a company |
search_companies | Accent-insensitive company search |
| Tool | Description |
|---|---|
list_entries | List interactions (calls, emails, meetings, etc.) |
create_entry | Log a new interaction β supports #tag# and [[tag]] syntax |
update_entry | Update an interaction |
delete_entry | Delete an interaction |
| Tool | Description |
|---|---|
list_tasks | List tasks with status/date filters |
create_task | Create a task β supports #tag# and [[tag]] syntax |
update_task | Update task fields |
delete_task | Delete a task |
complete_task | Mark as completed (auto-creates next occurrence for recurring tasks) |
uncomplete_task | Mark as pending again |
snooze_task | Reschedule to a new date |
get_tasks_today | Today's tasks: overdue + due today + ASAP |
get_tasks_overdue | Only overdue tasks |
| Tool | Description |
|---|---|
list_notes | List notes (filter by pinned/archived) |
get_note | Get one note by ID with its tags, contacts, tasks and linked notes |
create_note | Create a note β supports #tag# and [[tag]] syntax |
update_note | Update note content |
delete_note | Soft-delete (or permanent) |
pin_note | Pin to top |
archive_note | Archive a note |
restore_note | Restore a deleted/archived note |
Material kept alongside a note without entering its text β an idea, a reference, an excerpt pasted to rewrite a passage later. Anchored to a passage by quoting it, or to the whole note. Never published, and temporary by design: anything worth keeping becomes a note or a linked task.
| Tool | Description |
|---|---|
list_note_comments | List the marginalia attached to a note |
create_note_comment | Attach a marginalia to a passage (pass quote) or to the whole note |
update_note_comment | Edit the content of a marginalia |
delete_note_comment | Permanently delete a marginalia |
| Tool | Description |
|---|---|
list_days | List days with their intention or question of the day, by date range |
get_day | Get a day and its intention or question (field note) |
update_day | Set a day's intention or question β one short line, not a journal (upsert) |
| Tool | Description |
|---|---|
list_day_blocks | List a day's time blocks, in timeline order |
create_day_block | Create a block, auto-placed first-fit (or pinned via anchor_time) |
update_day_block | Update a block (title, duration, anchor, note, done) |
delete_day_block | Delete a block and prune its timeline ref |
| Tool | Description |
|---|---|
list_tags | List tags (lightweight β ordering arrays omitted), with optional name search (q) |
get_tag | Get a tag by ID with all properties, including tasks_order (section markers h:<header_id>) |
create_tag | Create a new tag |
update_tag | Update a tag (name, description, color, icon, view mode, favorite) |
delete_tag | Permanently delete a tag and all its links |
get_tag_items | Get items linked to a tag β filter by types/status, summary mode, task sections included |
link_tag | Link any entity to a tag |
unlink_tag | Remove a tag link |
| Tool | Description |
|---|---|
list_task_headers | List all task headers (section separators) |
get_task_header | Get a task header by ID |
create_task_header | Create a task header (section) |
update_task_header | Update a task header (name, description, collapsed) |
delete_task_header | Permanently delete a task header |
| Tool | Description |
|---|---|
link_note_contact | Link a contact to a note |
unlink_note_contact | Remove a contact link from a note |
link_entry_contact | Link a contact to an entry |
unlink_entry_contact | Remove a contact link from an entry |
link_task_contact | Link a contact to a task |
unlink_task_contact | Remove a contact link from a task |
link_task_note | Link a note to a task (non-destructive, the note survives) |
unlink_task_note | Remove a note link from a task |
link_notes | Link two notes together (symmetric, non-destructive) |
unlink_notes | Remove the manual link between two notes |
link_note_date | Attach a note to a calendar day (it surfaces in that day's view) |
unlink_note_date | Remove a note from a calendar day (the note survives) |
| Tool | Description |
|---|---|
search | Global search across all data types |
get_changelog | Items modified since a timestamp (for sync) |
get_agent_instructions | Best practices for AI agents |
All tools include MCP safety annotations:
list_*, get_*, search_*): marked readOnlyHint: truedestructiveHint: falsedestructiveHint: false, idempotentHint: truedestructiveHint: true, idempotentHint: trueEvery write operation (create, update, delete) performed through the API is recorded in an Activity Feed visible to the user inside Keepsake. Each action shows the entity type, a content preview, and which API key was used.
This means your user can see everything you do. Be transparent and precise. If you make a mistake, let the user know so they can verify in the activity feed.
Call get_agent_instructions at the start of each session for the full best practices guide.
| Variable | Required | Description |
|---|---|---|
KEEPSAKE_API_KEY | Yes | Your API key (starts with ksk_) |
KEEPSAKE_API_URL | No | Custom API URL (default: https://app.keepsake.place/api/v1) |
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/nicolascroce-keepsake-mcp)<a href="https://allmcps.com/mcp/nicolascroce-keepsake-mcp"><img src="https://allmcps.com/api/badge/nicolascroce-keepsake-mcp?style=directory" alt="Keepsake MCP on AllMCPs" /></a>