Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Keepsake (keepsake.place), the app where creators and solo entrepreneurs empty their heads
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
KEEPSAKE_API_KEY标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
适用于网页版、桌面版和手机版 Claude:
https://app.keepsake.place/api/mcp打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"keepsake": {
"command": "npx",
"args": [
"-y",
"keepsake-mcp"
],
"env": {
"KEEPSAKE_API_KEY": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add --transport http keepsake https://app.keepsake.place/api/mcpclaude mcp add keepsake --env KEEPSAKE_API_KEY=your-value -- npx -y keepsake-mcp运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"keepsake": {
"url": "https://app.keepsake.place/api/mcp"
}
}
}粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"keepsake": {
"command": "npx",
"args": [
"-y",
"keepsake-mcp"
],
"env": {
"KEEPSAKE_API_KEY": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"keepsake": {
"type": "http",
"url": "https://app.keepsake.place/api/mcp"
}
}
}粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"keepsake": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"keepsake-mcp"
],
"env": {
"KEEPSAKE_API_KEY": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
ChatGPT 只能连接互联网上的服务器:
https://app.keepsake.place/api/mcp菜单名称可能因套餐和版本不同而略有差异。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
服务器要求先登录,才会列出它的工具。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 nicolascroce 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
在 335 毫秒内响应(HTTP 401)
声明支持 OAuth 登录,你的 AI 应用可以带你去登录
尚未检查;我们会在检查端点时读取工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 3 项适用的基础检查中通过了 3 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:KEEPSAKE_API_KEY
两种方式都可以:安装在你的电脑上,或者连接云端版本。
GitHub 仓库最后更新于–,最新版本(1.18.0)于前天进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Python MCP
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Local-only Python MCP server for the Files.com API.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
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.
Your AI assistant forgets between conversations; Keepsake remembers. 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
The official MCP registry entry (server.json) publishes this URL as a streamable-http remote, plus the project title and website. The npm package version stays on the release that was published; the registry entry version is the version field of server.json.
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):
{
"mcpServers": { "keepsake": { "type": "streamable-http", "url": "https://app.keepsake.place/api/mcp", "headers": { "Authorization": "Bearer ksk_YOUR_API_KEY" } } } }
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):
{
"mcpServers": { "keepsake": { "command": "npx", "args": ["-y", "keepsake-mcp"], "env": { "KEEPSAKE_API_KEY": "ksk_YOUR_API_KEY" } } } }
Claude Code:
claude mcp add keepsake -- npx -y keepsake-mcp
Then set KEEPSAKE_API_KEY in your environment.
Cursor:
Add to .cursor/mcp.json in your project:
{
"mcpServers": { "keepsake": { "command": "npx", "args": ["-y", "keepsake-mcp"], "env": { "KEEPSAKE_API_KEY": "ksk_YOUR_API_KEY" } } } }
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 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 |
| 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) |
| Tool | Description |
|---|---|
list_entries | List interactions (calls, emails, meetings, etc.) — filter by type, contact, company, page (tag_id), dates |
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 — filter by status, date, company, page (tag_id) |
get_task | Get a task with its tags, contacts, companies and linked notes |
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, day, company, page (tag_id), publication-flow stage (status) |
list_note_statuses | The stages of the user's publication flow (Idea → In progress → To review → Ready → Published by default — the user can rename, add or remove them) |
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; archived creates a permanent Note directly (no Inbox), status puts it straight into the publication flow |
update_note | Update note content, links, days, or its publication-flow stage (status) |
delete_note | Soft-delete (or permanent) |
pin_note | Pin as a post-it (short reference always at hand) |
unpin_note | Unpin a note (it stays where it is) |
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 (the one in force, which stays until changed), by date range |
get_day | Get a day, its intention in force (intention, carried over until changed) and what was written that day (note) |
update_day | Set a day's intention or question — one short line, not a journal (upsert); it stays in place on the following days until changed |
| Tool | Description |
|---|---|
list_day_blocks | List a day's time blocks, in timeline order (creates that day's recurring blocks first) |
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 (on a recurring block: remove it from that day only) |
| Tool | Description |
|---|---|
list_recurring_blocks | List the blocks that come back on chosen weekdays (the user's ideal week and habits) |
create_recurring_block | Make a block recurring — from an existing block, or from scratch |
update_recurring_block | Change a recurring block from a date onward (title, duration, fixed time, weekdays) — the past is never rewritten |
stop_recurring_block | Stop a repetition from a date onward; past days keep their blocks |
keep_recurring_block_note | Keep a note in a recurring block: every occurrence shows it from a date onward (a running log, a routine checklist) |
stop_keeping_recurring_block_note | Stop keeping a note in a recurring block from a date onward; earlier days keep it |
| Tool | Description |
|---|---|
list_tags | List tags (lightweight — ordering arrays omitted), with optional name search (q) and archived / favorite filters |
get_tag | Get a tag by ID with all properties, including tasks_order (section markers h: ) |
create_tag | Create a new tag |
update_tag | Update a tag (name, description, color, icon, favorite, archived to close a project without deleting anything, order of tasks and sections via tasks_order) |
delete_tag | Permanently delete a tag and all its links |
merge_tag | Merge a duplicate tag into another: links moved, #source# rewritten as the target's name, source deleted |
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) — insert h: in the tag's tasks_order to place it |
update_task_header | Update a task header (name, description, collapsed) |
delete_task_header | Permanently delete a task header |
| Tool | Description |
|---|---|
link_note_company / unlink_note_company | Link / unlink a company to a note |
link_note_contact | Link a contact to a note |
unlink_note_contact | Remove a contact link from a note |
link_entry_company / unlink_entry_company | Add / remove a company as participant of an entry |
link_entry_contact | Link a contact to an entry |
unlink_entry_contact | Remove a contact link from an entry |
link_task_company / unlink_task_company | Link / unlink a company to a task |
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_day_block_note | Link a note to a time block (prepare before, write what happened after) |
unlink_day_block_note | Remove a note link from a time block |
link_entry_note | Link a note to an entry (its write-up) |
unlink_entry_note | Remove a note link from an entry |
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 surf
只显示了开头部分;其余内容请在仓库中阅读