Mmcp.market

Keepsake MCP server

by nicolascroce·io.github.nicolascroce/keepsake·v1.10.0

MCP server for Keepsake — the personal CRM for nurturing your relationships

B80/100grade B
What users say
No reviews yet
Be the first
Safety scan
B80/100

full report

Adoption
Growing

1 stars72 downloads/wk

Reviews

Write one

Nobody 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 posts

Read from the package source without running it. The installed server may list more.

  • archive_note

    Transform a QuickNote into a permanent Note (archive it). Notes appear on contact pages, tag pages, and the Notes section.

  • complete_task

    Mark a task as completed. If the task is recurring, this automatically creates the next occurrence.

  • create_companywrite action

    Create a new company/organization. Only 'name' is required.

  • create_contactwrite action

    Create a new contact. first_name is required. last_name is optional (useful for contacts where you only know the first name).

  • create_day_blockwrite action

    Create 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 action

    An 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 action

    Create 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 action
  • create_tagwrite action

    A 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 action

    A 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 action

    Create a new task header (section separator). Add it to a tag's items_order to position it.

  • delete_companywrite action

    Soft-delete a company. Use permanent=true for hard delete.

  • delete_contactwrite action

    Permanently delete a contact and all associated data.

  • delete_day_blockwrite action

    Delete 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 action

    Delete an interaction entry.

  • delete_notewrite action

    Soft-delete a QuickNote or Note. Use permanent=true for hard delete.

  • delete_note_commentwrite action

    Delete a marginalia. Marginalia are temporary by design, so this is the normal way to retire one — there is no recoverable middle state.

  • delete_tagwrite action

    Permanently delete a tag and all its links to contacts, entries, tasks, notes, and companies.

  • delete_taskwrite action

    Delete a task.

  • delete_task_headerwrite action

    Permanently delete a task header.

  • get_agent_instructions

    Get best practices and instructions for being an effective Keepsake AI agent. Call this at the start of each session to refresh your instructions.

  • get_changelog

    Get 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_company

    Get a single company by ID, including linked contacts (with roles) and tags.

  • get_contact

    Get a single contact by ID, including recent entries (interactions), tags, last_interaction_date, and total_entries count.

  • get_contact_timeline

    Get 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_day

    Get 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_note

    Get 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_tag

    Get 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_items

    Get 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_header

    Get a single task header by ID.

  • get_tasks_overdue

    Get only overdue tasks (pending tasks with a due date before today). Sorted by date ascending (oldest first).

  • get_tasks_today

    Get 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_contact

    Link an existing contact to an entry.

  • link_note_contact

    Link an existing contact to a note.

  • link_note_date

    Link 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_notes

    Link 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_tag

    Link an entity (contact, entry, task, note, or company) to a tag.

  • link_task_contact

    Link an existing contact to a task.

  • link_task_note

    Link 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_companies

    List all companies/organizations in the user's Keepsake CRM. Supports pagination and sorting.

  • list_contacts

    List all contacts in the user's Keepsake CRM. Supports pagination, sorting, and optional last_interaction_date enrichment.

  • list_day_blocks

    List 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_days

    List days with their intention or question of the day (field `note`). Filter by date range.

  • list_entries

    List interaction entries (calls, emails, meetings, events, etc.). Supports filtering by type, contact, and date range.

  • list_note_comments

    List 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_notes

    List 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_tags

    List 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_headers

    List all task headers (section separators used to group tasks on tag pages and day views).

  • list_tasks

    List tasks. Filter by status (pending/completed), date_type, or specific date.

  • pin_note

    Pin a QuickNote or Note so it appears at the top of the Inbox.

  • restore_note

    Restore a Note back to a QuickNote in the Inbox (unarchive), or restore a deleted note from trash.

  • search

    Search across all Keepsake data — contacts, entries, tasks, notes, and companies. Search is accent-insensitive (e.g., 'berenice' finds 'Bérénice').

  • search_companies

    Search companies by name, email, website, or address. Search is accent-insensitive.

  • search_contacts

    Search contacts by name, email, company, etc. Search is accent-insensitive.

  • snooze_task

    Reschedule a task to a new date.

  • uncomplete_task

    Mark a completed task as pending again.

  • unlink_entry_contactwrite action

    Remove the link between a contact and an entry.

  • unlink_note_contactwrite action

    Remove the link between a contact and a note.

  • unlink_note_datewrite action

    Remove 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 action

    Remove 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 action

    Remove the link between an entity and a tag.

  • unlink_task_contactwrite action

    Remove the link between a contact and a task.

  • unlink_task_notewrite action

    Remove the link between a note and a task. Both the task and the note survive.

  • update_companywrite action

    Update an existing company. Only send the fields you want to change.

  • update_contactwrite action

    Update an existing contact. Only send the fields you want to change.

  • update_daywrite action

    Create 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 action

    Update 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 action

    Update an existing entry. Only send fields you want to change.

  • update_notewrite action

    Update 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 action

    Edit 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 action

    Update an existing tag. Only send the fields you want to change. Supports name, description, color, icon, view mode, and favorite status.

  • update_taskwrite action

    Update an existing task. Only send fields you want to change.

  • update_task_headerwrite action

    Update 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

no findings
  • 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
Overall 80/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

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
Add to Cursor

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.

All Keepsake alternatives →
  • Nimble CRM
    Connect AI assistants to Nimble CRM to access and work with customer relationship data.
    B
  • BoondManager MCP Server
    MCP Server for BoondManager API - 182 tools, 12 prompts, 22 resources (ERP/CRM)
    A
  • MIND
    MIND knowledge-graph memory for agents. 44 tools: CRM, Life, MoneyMIND, Budget, Sheets, Email, Sign.
    B
  • Munin
    Open-source all-in-one MCP-first customer platform: KB, Conversations, CRM, CMS, Outreach, Analytics
    A
  • Kaseya BMS MCP
    CLI and MCP server for Kaseya BMS PSA: tickets, CRM, contracts, finance, and offline analytics.
    B

More from nicolascroce