📇 ☁️ - Personal CRM: manage contacts, interactions, tasks, notes, a daily journal and tags
keepsake-mcp
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
MCP server for Keepsake (keepsake.place), the app where creators and solo entrepreneurs empty their heads: ideas, tasks and the people who matter, together and linked in one place, all the way to publishing.
Connect your AI assistant (Claude, Cursor, or any MCP-compatible client) to your Keepsake data: contacts, interactions, tasks, notes, daily intentions, companies, and tags.
Why
Your AI assistant forgets between conversations; Keepsake remembers. Ask it to:
- "Capture this idea for my next article in #newsletter#"
- "Who did I last talk to at Acme Corp?"
- "Add a note that I ran into Sarah at the conference"
- "What tasks are overdue?"
- "Show me everything related to the #house-project tag"
- "Create a follow-up task for my meeting with John next week"
Quick start
1. Get your API key
Sign up at keepsake.place, then go to **Account > API Keys** to generate one.
2. Choose your connection method
Option A: Remote (HTTP) — recommended
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:
- URL: https://app.keepsake.place/api/mcp
- Authentication: Bearer token with your ksk_ API key
**Any MCP client (Streamable HTTP):**
Option B: Local (stdio)
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:
Server instructions
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.
Prompts (1)
| 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 |
Available tools (88)
Contacts
| Tool | Description |
|------|-------------|
| list_contacts | List contacts with pagination, sorting, field selection and filters (linked company, has_company, updated_since) |
| get_contact | Get a contact with recent interactions, tags, and stats |
| create_contact | Create a new contact (company links it to a company record, created if missing) |
| update_contact | Update contact fields |
| delete_contact | Permanently delete a contact |
| search_contacts | Accent-insensitive search by name, email, notes, phone and linked company names |
| get_contact_timeline | Unified chronological feed of all items for a contact |
Companies
| 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 |
| link_contact_company | Link a contact to a company (optional role) |
| unlink_contact_company | Remove a contact–company link |
| merge_companies | Merge a duplicate company into another (contacts, entries, tags, details, notes) |
Entries (Interactions)
| Tool | Description |
|------|-------------|
| list_entries | List interactions (calls, emails, meetings, etc.) — filter by type, contact, company, page (tag_id), dates |