Keepsake MCP server
MCP server for Keepsake — the personal CRM for nurturing your relationships
1 stars72 downloads/wk
Reviews
Write oneNobody has reviewed Keepsake yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
Keepsake tools (73, 35 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
archive_noteTransform a QuickNote into a permanent Note (archive it). Notes appear on contact pages, tag pages, and the Notes section.
complete_taskMark a task as completed. If the task is recurring, this automatically creates the next occurrence.
create_companywrite actionCreate a new company/organization. Only 'name' is required.
create_contactwrite actionCreate a new contact. first_name is required. last_name is optional (useful for contacts where you only know the first name).
create_day_blockwrite actionCreate a time block on a day's timeline. The block is auto-placed in the earliest free gap large enough for it (same first-fit engine as the app); pass anchor_time to pin it at a fixed hour instead. Its "b:<id>" ref is inserted into the day's timeline_order for you — never write timeline_order by hand.
create_entrywrite actionAn ENTRY is a dated interaction log tied to contacts. Records something that happened (call, meeting, email…) on a specific date. Create a new interaction entry. Content supports #tag# and [[tag]] syntax for automatic tag linking.
create_notewrite actionCreate a new QuickNote in the Inbox. QuickNotes are temporary captures — use archive_note to transform one into a permanent Note. Content supports #tag# and [[tag]] for automatic tag linking. Pass `dates` to attach the note to one or more days ("note for tomorrow", meeting prep for Thursday): it then surfaces in that day's view while staying in the notes list. A dated note is NOT a task (no action
create_note_commentwrite actioncreate_tagwrite actionA TAG is a thematic grouping space. Syntax: #name# or [[name]]. Groups notes, entries, tasks, and contacts. Create a new tag. If a tag with the same name already exists, returns the existing tag.
create_taskwrite actionA TASK is an action item to accomplish. Can have due date, recurrence, priority, linked to contacts and tags. Create a new task. Title supports #tag# and [[tag]] for automatic tag linking.
create_task_headerwrite actionCreate a new task header (section separator). Add it to a tag's items_order to position it.
delete_companywrite actionSoft-delete a company. Use permanent=true for hard delete.
delete_contactwrite actionPermanently delete a contact and all associated data.
delete_day_blockwrite actionDelete a time block. Its ref is pruned from the day's timeline_order; for a task bucket, the tasks themselves are untouched (they fall back to the day's computed bucket).
delete_entrywrite actionDelete an interaction entry.
delete_notewrite actionSoft-delete a QuickNote or Note. Use permanent=true for hard delete.
delete_note_commentwrite actionDelete a marginalia. Marginalia are temporary by design, so this is the normal way to retire one — there is no recoverable middle state.
delete_tagwrite actionPermanently delete a tag and all its links to contacts, entries, tasks, notes, and companies.
delete_taskwrite actionDelete a task.
delete_task_headerwrite actionPermanently delete a task header.
get_agent_instructionsGet best practices and instructions for being an effective Keepsake AI agent. Call this at the start of each session to refresh your instructions.
get_changelogGet all items modified since a given timestamp, across all entity types. Perfect for 'heartbeat' checks to see what changed since your last visit. Returns server_time to use as 'since' for the next call.
get_companyGet a single company by ID, including linked contacts (with roles) and tags.
get_contactGet a single contact by ID, including recent entries (interactions), tags, last_interaction_date, and total_entries count.
get_contact_timelineGet a unified, chronological feed of ALL items related to a contact — entries, tasks, and notes — sorted by date (most recent first). Much more efficient than fetching entries, tasks, and notes separately.
get_dayGet a specific day by date: its intention or question of the day (field `note`, one short line) AND the notes linked to that day (field `notes`, via link_note_date / `dates`). Always 200 — `exists: false` means no intention is stored yet, the linked notes are returned regardless.
get_noteGet a single note by ID, including its tags, linked contacts, linked tasks, linked notes and the days it is linked to (`dates`). Use this when the user points you at one specific note (e.g. gives you its URL — the UUID is the last path segment) instead of listing everything.
get_tagGet a single tag by ID with all its properties (name, description, color, icon, view mode, favorite status). Includes tasks_order, the manual ordering of the tag page's task list, where entries of the form "h:<header_id>" are section separators (see list_task_headers).
get_tag_itemsGet items linked to a tag. By default returns every type in full — on large tags that can be a huge response, so prefer types/status/summary to narrow it (e.g. types=['tasks'], status='pending', summary=true to review a project's open tasks). When tasks are included, the response also contains `sections`: the tag page's task sections with their task_ids (header_id null = tasks outside any section)
get_task_headerGet a single task header by ID.
get_tasks_overdueGet only overdue tasks (pending tasks with a due date before today). Sorted by date ascending (oldest first).
get_tasks_todayGet all tasks for today: overdue tasks + tasks due today + ASAP tasks. Each task has a 'category' field ('overdue', 'today', or 'asap'). Includes counts per category.
link_entry_contactLink an existing contact to an entry.
link_note_contactLink an existing contact to a note.
link_note_dateLink a note to a calendar day. The note then surfaces in that day's view (Today / Day page) while staying in the notes list — the note is the same object, the date is just another way in. Use it for "note for tomorrow", "what to bring Thursday", meeting prep for a given date. Idempotent. A note can be linked to several days. This is NOT the day's intention (update_day) and NOT a task (create_task)
link_notesLink two notes together (knowledge base, N-N, non-destructive). The link is symmetric: both notes list each other in their linked-notes section. Use this to connect related ideas — e.g. a note that made you think of another one. Notes can also be linked inline by writing [label](note:uuid) in a note's content.
link_tagLink an entity (contact, entry, task, note, or company) to a tag.
link_task_contactLink an existing contact to a task.
link_task_noteLink an existing note to a task (non-destructive, N-N). The note stays in the inbox/notes list and the task keeps a live link back to it — use this instead of deleting a note after creating a task from it. The note shows its linked tasks; the task shows the source note.
list_companiesList all companies/organizations in the user's Keepsake CRM. Supports pagination and sorting.
list_contactsList all contacts in the user's Keepsake CRM. Supports pagination, sorting, and optional last_interaction_date enrichment.
list_day_blocksList the time blocks of a day's timeline (Day view), in timeline order. A block is either an activity (type 'block') or a task bucket (type 'tasks' — groups the day's untimed tasks). The meta carries the day's raw timeline_order: "b:<uuid>" refs are blocks, bare uuids are tasks inside a bucket's run.
list_daysList days with their intention or question of the day (field `note`). Filter by date range.
list_entriesList interaction entries (calls, emails, meetings, events, etc.). Supports filtering by type, contact, and date range.
list_note_commentsList the marginalia attached to a note. A marginalia is working material the user keeps ALONGSIDE a note without it entering the text: an idea, a reference, a link, an excerpt pasted to rewrite a passage later. They are never published, and they are meant to be TEMPORARY — anything worth keeping becomes a note or a linked task. Each one is either attached to a specific passage (`quote` is set) or
list_notesList notes. QuickNotes (inbox, not yet archived) and Notes (archived, permanent). Filter by pinned or archived status, or by the day(s) a note is linked to (`date`, or `date_from`/`date_to`) — e.g. "what did I note for tomorrow?". Each note carries `dates`, the days it is linked to.
list_tagsList tags (lightweight: the manual tasks_order arrays are omitted — use get_tag for a tag's full ordering). Tags organize contacts, entries, tasks, notes, and companies. Use q to find a tag by name.
list_task_headersList all task headers (section separators used to group tasks on tag pages and day views).
list_tasksList tasks. Filter by status (pending/completed), date_type, or specific date.
pin_notePin a QuickNote or Note so it appears at the top of the Inbox.
restore_noteRestore a Note back to a QuickNote in the Inbox (unarchive), or restore a deleted note from trash.
searchSearch across all Keepsake data — contacts, entries, tasks, notes, and companies. Search is accent-insensitive (e.g., 'berenice' finds 'Bérénice').
search_companiesSearch companies by name, email, website, or address. Search is accent-insensitive.
search_contactsSearch contacts by name, email, company, etc. Search is accent-insensitive.
snooze_taskReschedule a task to a new date.
uncomplete_taskMark a completed task as pending again.
unlink_entry_contactwrite actionRemove the link between a contact and an entry.
unlink_note_contactwrite actionRemove the link between a contact and a note.
unlink_note_datewrite actionRemove a note from a calendar day (the note survives, untouched). To MOVE a note to another day, prefer update_note with the new `dates` array — one call instead of two. Idempotent.
unlink_noteswrite actionRemove the manual link between two notes (both notes survive). Links derived from inline [label](note:uuid) markdown in a note's content are preserved — edit the content to remove those.
unlink_tagwrite actionRemove the link between an entity and a tag.
unlink_task_contactwrite actionRemove the link between a contact and a task.
unlink_task_notewrite actionRemove the link between a note and a task. Both the task and the note survive.
update_companywrite actionUpdate an existing company. Only send the fields you want to change.
update_contactwrite actionUpdate an existing contact. Only send the fields you want to change.
update_daywrite actionCreate or update a day's intention or question of the day (upsert on the date). The `note` field is the intention or question of the day — one short line at the top of the Today view (a mantra, an intention, a single priority, or a question to keep in mind). Not a journal: never write a summary of the day here. NOT for attaching a note to a day: this field is a single line and you would overwrite
update_day_blockwrite actionUpdate a time block (title, duration, anchor, note, done). Only send fields you want to change. The block keeps its position in the timeline order.
update_entrywrite actionUpdate an existing entry. Only send fields you want to change.
update_notewrite actionUpdate an existing QuickNote or Note. `dates` REPLACES the full set of days the note is linked to — the way to move a note to another day ("not done, push it to tomorrow"). To add or remove a single day without touching the others, prefer link_note_date / unlink_note_date.
update_note_commentwrite actionEdit the content of a marginalia. There is no intermediate state: a marginalia exists, or it is deleted. A remark that should outlive the note's revision becomes a note or a linked task instead.
update_tagwrite actionUpdate an existing tag. Only send the fields you want to change. Supports name, description, color, icon, view mode, and favorite status.
update_taskwrite actionUpdate an existing task. Only send fields you want to change.
update_task_headerwrite actionUpdate a task header. Only send the fields you want to change.
Public scan report
scanner v0.1.9 · 2026-09-20 · same rubric, same numbers if you re-run it
- Code scan3 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitystatic API keys via environment variables6/15
- Maintenancelast push 14 days ago15/15
- Maintainer identityregistry namespace matches repository owner6/10
Install directly
Runs npx -y keepsake-mcp on your machine. Read the scan report first; the gateway never runs local packages.
claude mcp add keepsake -- npx -y keepsake-mcp
Keepsake: common questions
- Is Keepsake MCP server safe?
- Mostly: it is graded B (80/100). Read the Keepsake safety report
- How do I install Keepsake?
- It runs on your machine. Copy the Claude Code, Claude Desktop or Cursor config from the install section.
- Does Keepsake need an API key?
- Yes. The registry entry asks for
KEEPSAKE_API_KEY. - Is Keepsake maintained?
- The last commit was 14 days ago (2026-09-06). The latest release is v1.10.0.
- What can I use instead of Keepsake?
- Servers from other publishers that do the same job: Nimble CRM MCP server, BoondManager MCP Server and MIND MCP server. Compare all Keepsake alternatives.
Alternatives to Keepsake
Same job from other publishers: the closest match first, then the best rated.
- Nimble CRMConnect AI assistants to Nimble CRM to access and work with customer relationship data.not reviewedNewB
BoondManager MCP ServerMCP Server for BoondManager API - 182 tools, 12 prompts, 22 resources (ERP/CRM)not reviewedGrowingA- MINDMIND knowledge-graph memory for agents. 44 tools: CRM, Life, MoneyMIND, Budget, Sheets, Email, Sign.not reviewedGrowingB
MuninOpen-source all-in-one MCP-first customer platform: KB, Conversations, CRM, CMS, Outreach, Analyticsnot reviewedGrowingA
Kaseya BMS MCPCLI and MCP server for Kaseya BMS PSA: tickets, CRM, contracts, finance, and offline analytics.not reviewedGrowingB