keepsake-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| KEEPSAKE_API_KEY | Yes | Your Keepsake API key (starts with ksk_) | |
| KEEPSAKE_API_URL | No | Custom API URL (default: https://app.keepsake.place/api/v1) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_contactsA | List all contacts in the user's Keepsake CRM. Supports pagination, sorting, and optional last_interaction_date enrichment. |
| get_contactA | Get a single contact by ID, including recent entries (interactions), tags, last_interaction_date, and total_entries count. |
| create_contactA | Create a new contact. first_name is required. last_name is optional (useful for contacts where you only know the first name). |
| update_contactA | Update an existing contact. Only send the fields you want to change. |
| delete_contactA | Permanently delete a contact and all associated data. |
| search_contactsA | Search contacts by name, email, company, etc. Search is accent-insensitive. |
| list_companiesA | List all companies/organizations in the user's Keepsake CRM. Supports pagination and sorting. |
| get_companyA | Get a single company by ID, including linked contacts (with roles) and tags. |
| create_companyB | Create a new company/organization. Only 'name' is required. |
| update_companyA | Update an existing company. Only send the fields you want to change. |
| delete_companyA | Soft-delete a company. Use permanent=true for hard delete. |
| search_companiesA | Search companies by name, email, website, or address. Search is accent-insensitive. |
| list_entriesA | List interaction entries (calls, emails, meetings, events, etc.). Supports filtering by type, contact, and date range. |
| create_entryA | 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. |
| update_entryA | Update an existing entry. Only send fields you want to change. |
| delete_entryA | Delete an interaction entry. |
| list_tasksB | List tasks. Filter by status (pending/completed), date_type, or specific date. |
| create_taskA | 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. |
| update_taskA | Update an existing task. Only send fields you want to change. |
| delete_taskB | Delete a task. |
| complete_taskA | Mark a task as completed. If the task is recurring, this automatically creates the next occurrence. |
| uncomplete_taskA | Mark a completed task as pending again. |
| snooze_taskB | Reschedule a task to a new date. |
| list_notesA | List notes. QuickNotes (inbox, not yet archived) and Notes (archived, permanent). Filter by pinned or archived status. |
| create_noteA | 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. |
| update_noteA | Update an existing QuickNote or Note. |
| delete_noteA | Soft-delete a QuickNote or Note. Use permanent=true for hard delete. |
| pin_noteA | Pin a QuickNote or Note so it appears at the top of the Inbox. |
| archive_noteA | Transform a QuickNote into a permanent Note (archive it). Notes appear on contact pages, tag pages, and the Notes section. |
| restore_noteA | Restore a Note back to a QuickNote in the Inbox (unarchive), or restore a deleted note from trash. |
| list_daysA | List daily journal summaries. Filter by date range. |
| get_dayA | Get a specific day's journal summary by date. |
| update_dayA | Create or update a daily journal summary. If a day entry already exists for this date, it will be updated (upsert). |
| list_tagsB | List all tags. Tags organize contacts, entries, tasks, notes, and companies. |
| get_tagA | Get a single tag by ID with all its properties (name, description, color, icon, view mode, favorite status). |
| get_tag_itemsA | Get all items linked to a specific tag: contacts, entries, tasks, notes, and companies with counts. |
| create_tagA | 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. |
| update_tagA | Update an existing tag. Only send the fields you want to change. Supports name, description, color, icon, view mode, and favorite status. |
| delete_tagA | Permanently delete a tag and all its links to contacts, entries, tasks, notes, and companies. |
| link_tagA | Link an entity (contact, entry, task, note, or company) to a tag. |
| unlink_tagA | Remove the link between an entity and a tag. |
| list_task_headersA | List all task headers (section separators used to group tasks on tag pages and day views). |
| get_task_headerA | Get a single task header by ID. |
| create_task_headerA | Create a new task header (section separator). Add it to a tag's items_order to position it. |
| update_task_headerA | Update a task header. Only send the fields you want to change. |
| delete_task_headerB | Permanently delete a task header. |
| link_note_contactA | Link an existing contact to a note. |
| unlink_note_contactA | Remove the link between a contact and a note. |
| link_entry_contactB | Link an existing contact to an entry. |
| unlink_entry_contactA | Remove the link between a contact and an entry. |
| link_task_contactA | Link an existing contact to a task. |
| unlink_task_contactA | Remove the link between a contact and a task. |
| link_task_noteA | 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. |
| unlink_task_noteA | Remove the link between a note and a task. Both the task and the note survive. |
| link_notesA | 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 in a note's content. |
| unlink_notesA | Remove the manual link between two notes (both notes survive). Links derived from inline label markdown in a note's content are preserved — edit the content to remove those. |
| get_contact_timelineA | 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_tasks_todayA | 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. |
| get_tasks_overdueA | Get only overdue tasks (pending tasks with a due date before today). Sorted by date ascending (oldest first). |
| get_changelogA | 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. |
| searchA | Search across all Keepsake data — contacts, entries, tasks, notes, and companies. Search is accent-insensitive (e.g., 'berenice' finds 'Bérénice'). |
| get_agent_instructionsA | Get best practices and instructions for being an effective Keepsake AI agent. Call this at the start of each session to refresh your instructions. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nicolascroce/keepsake-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server