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
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม 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": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add --transport http keepsake https://app.keepsake.place/api/mcpclaude mcp add keepsake --env KEEPSAKE_API_KEY='ใส่ค่าของคุณ' -- 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": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .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": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ChatGPT ต่อได้เฉพาะ server ที่อยู่บนอินเทอร์เน็ต:
https://app.keepsake.place/api/mcpชื่อเมนูอาจต่างกันเล็กน้อยตามแพ็กเกจและรุ่นของแอป
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
server ให้ล็อกอินก่อนจึงจะแสดงรายการเครื่องมือ
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 6 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub nicolascroce ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตอบกลับใน 335 ms (HTTP 401)
ประกาศวิธีล็อกอินแบบ OAuth ให้โปรแกรม AI พาไปล็อกอินเอง
ยังไม่ได้ตรวจ เราอ่านรายการเครื่องมือตอนตรวจ endpoint
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 3 จาก 3 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: KEEPSAKE_API_KEY
ได้ทั้งสองแบบ จะลงในเครื่องหรือต่อผ่านคลาวด์ก็ได้
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.18.0) เข้า registry เมื่อวานซืน
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต่อผ่าน URL จึงใช้กับโปรแกรมที่รับ remote MCP ได้ เช่น ChatGPT ที่เปิดโหมดนักพัฒนา
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, yontu
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
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.
Türkçe yazı denetimi: TDK kuralları, yapay zekâ izleri, metin türüne göre üslup.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ 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
ตัดมาแค่ช่วงต้น อ่านต่อใน repo