Docket MCP server
2026년 10월 4일 커밋AI agent가 다양한 개발 도구에서 작성하고 관리할 수 있는 로컬 우선 방식의 프로젝트별 작업 목록을 제공합니다.
다른 이름 pasichDev/docket, @pasichdev/docket
- 스타
- 10
- Tools
- —
- 다운로드, 30일
- —
- 최신 버전
- 3.1.0
- 마지막 커밋
- 2026년 10월 4일
- 라이선스
- MIT
Docket MCP란?
Docket은(는) MCP server입니다. AI agent가 다양한 개발 도구에서 작성하고 관리할 수 있는 로컬 우선 방식의 프로젝트별 작업 목록을 제공합니다.
프로젝트 README에서 생성된 요약
Docket MCP server 정보
Docket은 AI agent가 개발 세션 중에 생각과 아이디어를 캡처하고 정리할 수 있도록 설계된 로컬 우선 작업 관리 시스템입니다. GitLab이나 Notion처럼 공식적인 추적이 필요한 단계 이전의 작업들을 관리하기 위한 가벼운 레이어 역할을 합니다. SaaS 계정 없이 로컬에서 실행되므로 다양한 개발 환경에서 개인정보 보호와 속도를 보장합니다.
개발자는 Claude Code, Cursor, Windsurf, Codex, Zed, Warp를 포함한 다양한 MCP host와 함께 사용할 수 있습니다. 이 MCP server는 git remote를 사용하여 프로젝트 컨텍스트를 자동으로 파악하므로, 저장소가 서로 다른 로컬 경로에 클론되더라도 동일한 워크스페이스를 유지할 수 있습니다. 또한 localhost:8787에서 제공되는 웹 대시보드를 통해 작업, 카테고리, 우선순위를 시각화할 수 있습니다.
단순한 할 일 목록을 넘어, 이 서버는 요약(digest) 시스템을 포함하고 있습니다. agent는 pull request, commit, 기존 작업들을 취합하여 진행 상황에 대한 상위 수준의 개요를 작성할 수 있습니다. 이를 통해 가공되지 않은 agent의 활동과 공식적인 프로젝트 관리 워크플로우 사이를 연결해 줍니다.
활용 사례
- 1휘발성 개발 아이디어 캡처AI agent가 코딩 세션 중에 아이디어를 잊어버리기 전에 빠르게 작업을 기록할 수 있습니다.
- 2세션 간 연속성 유지새 세션이 시작될 때 시스템이 열려 있는 프로젝트 작업을 자동으로 주입하여 컨텍스트를 제공할 수 있습니다.
- 3프로젝트 상태 요약 생성agent에게 merge request와 로컬 commit을 포함한 최근 작업 요약을 작성하도록 지시할 수 있습니다.
- 4공식 트래커로 작업 연결개발자는 소스 URL을 사용하여 로컬 작업을 특정 GitLab issue나 Notion 페이지에 연결할 수 있습니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
Docket MCP 설치 방법
형식 확인: 2026년 11월 10일Cursor에 추가Goose에 추가Claude Code에 Docket MCP 설치
$ claude mcp add docket -- npx -y @pasichdev/docketCursor에 Docket MCP 설치
~/.cursor/mcp.json
{
"mcpServers": {
"docket": {
"command": "npx",
"args": [
"-y",
"@pasichdev/docket"
]
}
}
}VS Code에 Docket MCP 설치
.vscode/mcp.json
{
"servers": {
"docket": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@pasichdev/docket"
]
}
}
}VS Code CLI에 Docket MCP 설치
$ code --add-mcp '{"name":"docket","type":"stdio","command":"npx","args":["-y","@pasichdev/docket"]}'Claude Desktop에 Docket MCP 설치
claude_desktop_config.json
{
"mcpServers": {
"docket": {
"command": "npx",
"args": [
"-y",
"@pasichdev/docket"
]
}
}
}Codex에 Docket MCP 설치
$ codex mcp add docket -- npx -y @pasichdev/docketCodex config.toml에 Docket MCP 설치
~/.codex/config.toml
[mcp_servers.docket] command = "npx" args = ["-y", "@pasichdev/docket"]
Gemini CLI에 Docket MCP 설치
$ gemini mcp add -s user docket npx -- -y @pasichdev/docketGemini settings.json에 Docket MCP 설치
~/.gemini/settings.json
{
"mcpServers": {
"docket": {
"command": "npx",
"args": [
"-y",
"@pasichdev/docket"
]
}
}
}자동 검사
2026년 11월 14일에 실행됨전체 보고서 →아직 인증되지 않았습니다. 서버는 80점 이상의 점수, 심각한 결함 없음, 그리고 검사에 충분한 데이터를 갖추어야 합니다. 검사 방식 · 점수를 높이기 위해 수정할 항목
- 소스 저장소 연결 및 접근 가능pasichdev/docket is public and reachablegithub.com/pasichdev/docket ↗통과
- 패키지가 이 저장소를 소스로 명시@pasichdev/docket names pasichdev/docket as sourcenpmjs.com/package/@pasichdev/docket ↗통과
- 빌드 출처(Sigstore 증명)Sigstore attestation for @pasichdev/docketnpmjs.com/package/@pasichdev/docket/v/3.1.0#provenance ↗통과
- 오픈 소스 라이선스 (OSI)MITspdx.org/licenses/MIT.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-10-04github.com/pasichdev/docket ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음@pasichdev/docket looks like docvet결함 발견
- 패키지 및 해당 종속성에 중요한 보안 권고 없음128 resolved dependencies checked; no critical advisoryosv.dev ↗통과
- 모델에 대한 숨겨진 지침 없음0 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨검사되지 않음
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기Docket
One list every AI tool you use can write to — Claude Code, Codex, Cursor, Warp — across every project, before the work is worth a ticket. Local-first, self-hostable, no SaaS account.
Quick start
You need: Node.js 18+ and at least one MCP host — Claude Code, Codex, Cursor, Windsurf, Claude Desktop, Zed or Warp.
npx -y @pasichdev/docket setup
That configures every host it finds on this machine and ends by telling you which ones. Then restart your agent and ask it "add a todo: buy milk" — it shows up at http://localhost:8787, a dashboard that started by itself the moment the agent connected.
Only want Claude Code, and nothing written anywhere else?
claude mcp add docket -- npx -y @pasichdev/docket does just that part.
Other hosts: Supported hosts.
npm install -g @pasichdev/docket # the hook runs a command, so it needs one on PATH
docket hook install # then: docket hook doctor
hook install works without the global install too — it pins the command to
this exact copy of docket and tells you it did — but the short form survives
moving or reinstalling, and npx leaves nothing on PATH.
Why
A thought that shows up mid-session is worth capturing but not worth the ceremony: a Notion template, a GitLab issue format, a ticket id you have to invent. So today it evaporates. Docket is the layer underneath all of that — work lands here at the speed an agent can type, from any tool, in any project, and graduates to Notion/GitLab/Obsidian when it's earned it.
Nobody else occupies this space, and it isn't an accident: Anthropic will not integrate Claude Code with Cursor, and Cursor will not integrate with Codex. Every vendor optimises its own closed loop. The space between the tools is structurally nobody's.
One list, many projects
Docket files every item under the project it was captured in, automatically — resolved from the git remote of wherever the agent is running. You never type it, and no agent has to remember to.
~/work/backend claude-code, codex ─┐
~/side/tracker claude-code ─┼──▶ docket ──▶ one list, three scopes
~/side/notes codex, warp ─┘
todo_listin~/work/backendshows that project's open items, not all three projects' — compact, one line each.- The web dashboard has a workspace switcher with per-project open counts.
- Items with no project context land under Unfiled and stay visible, never guessed at.
Using the git remote rather than the path means the same repo cloned to
~/src/backend on a laptop and /work/backend on a desktop is one
workspace — which matters precisely because sync exists. Full resolution
order and the .docket.json override: docs/workspaces.md.
Upgrading from 2.x
Read this before you upgrade if you have existing items.
3.0 migrates your store from data format v7 to v8 on first run, automatically. The migration itself is safe and is not the risk. Downgrading afterwards is.
docket 2.3.1 writes the store from its own v7 shape: it has never heard of the fields v8 adds, so its very first write after a reinstall silently strips them from every item. Nothing errors, and a later re-upgrade hands out fresh sequence numbers that no longer mean what your paired devices think they mean. 2.3.1 is published and cannot be patched, so 3.0 defends the only way it can — by keeping a copy of your pre-migration store:
~/.docket/todos.v7-pre-upgrade.enc
It is written once, before the first v8 write, and never overwritten. The upgrade prints its path on the run that creates it.
To go back to 2.x, restore it first:
docket restore --from-v7 # puts the v7 store back; moves the v8 one aside
npm install -g @pasichdev/docket@2.3.1
In that order. restore --from-v7 deletes nothing — your v8 store is renamed
aside, so you can come forward again later.
If you would rather have a portable copy as well, docket backup ./pre-v3.backup
before upgrading gives you one that includes your identity and paired peers.
Bridges, not replaces
Docket is deliberately not where work lives forever. It's where work lands first, before anyone knows whether it deserves a ticket. Most of it doesn't and gets closed by hand; the rest graduates.
sourceUrl is the bridge in both directions. Set it whenever an item maps to
something with a URL — a GitLab issue, a Notion page, an Obsidian
share link, a Slack thread, a GitHub PR — and the card carries a clickable
link straight back to it.
Why not just use GitHub Issues? Because an issue costs a title you have to phrase for an audience, a repo you have to pick, and labels you have to maintain — and because your Cursor session can't write one for you while you're mid-thought in a different project. Docket costs one sentence, from whichever tool you already have open. When the item turns out to matter, it becomes an issue, and
sourceUrlremembers where it went.
Supported hosts
Any MCP host works — the tools are identical everywhere:
{
"mcpServers": {
"docket": { "command": "npx", "args": ["-y", "@pasichdev/docket"] }
}
}
| Host | Config file |
|---|---|
| Claude Code | claude mcp add docket -- npx -y @pasichdev/docket |
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) / %APPDATA%\Claude\claude_desktop_config.json (Windows) |
| Cursor | .cursor/mcp.json or Global MCP settings |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| Codex | ~/.codex/config.toml (mcp_servers) |
| Zed | ~/.config/zed/settings.json — uses context_servers, see below |
{
"context_servers": {
"docket": { "command": { "env": {}, "path": "npx", "args": ["-y", "@pasichdev/docket"] } }
}
}
The one hook
Claude Code additionally gets a SessionStart hook, and only that one:
docket hook install # writes .claude/settings.json (--global for user-wide)
docket hook doctor # proves it fires, and reports measured latency
docket hook uninstall # removes only the entries docket owns
When a session starts it injects the items open in that project — compact, at most 7, under 120 tokens. Nothing at all when the project has nothing open. Its whole job is continuity: you come back to a terminal and the thread is already there.
Don't want it? export DOCKET_HOOKS=off disables it immediately, without
editing any config or uninstalling anything. docket hook doctor measures the
real round trip and says so if it is slow enough to notice.
It fails open, always. Server not running, request timed out, malformed
response, DOCKET_HOOKS=off — every one of those exits 0 and prints nothing.
A tool that degrades your session when the tool itself is broken gets
uninstalled, at which point it helps nobody. docket hook doctor runs the
configured command for real and reports what a session would actually see, so
a hook that never fires is visible rather than merely silent.
No PreToolUse, no blocking, no other hosts — the hook's only job in this
release is continuity, not enforcement.
Guidance for non-Claude-Code agents
The tools work everywhere; the guidance ships as a Claude Code plugin. For
any other agent, copy skills/docket/SKILL.md
(everything below the --- frontmatter) into whichever file your agent reads
— AGENTS.md for Codex, .cursor/rules/docket.mdc for Cursor,
.windsurfrules for Windsurf, CLAUDE.md for Claude Desktop, or Warp's
custom-instructions setting.
/plugin marketplace add pasichDev/docket
/plugin install docket@docket
Tools
| Tool | Description |
|---|---|
todo_add(title, description?, list?, category?, priority?, dueDate?, sourceUrl?, workspace?) |
Capture an item. Filed under the current project automatically. |
todo_list(filter?, list?, category?, agent?, session?, inProgress?, workspace?, verbose?, limit?, offset?) |
Scoped to the current project and compact by default. workspace:"*" for everything. |
todo_edit(id, ...) |
Edit any subset of fields by id. Pass "" to clear an optional field. |
todo_claim(id) / todo_release(id) |
Mark an item in progress, or drop the claim. Auto-expires after 15 minutes. |
todo_complete(id) |
Mark done (also clears any claim). |
todo_history(id) |
Full change log for one item. |
todo_delete(id) |
Permanently remove an item. |
todo_version() / todo_check_update() |
Data-format version; read-only npm version check. |
digest_publish(title, summary, sections?, metrics?, highlights?, sources?, windowFrom?, windowTo?) |
Save a digest an agent compiled from your GitLab/GitHub/Notion/git — see Digests. |
digest_list(limit?) / digest_get(id) / digest_delete(id) |
Recent digests, one in full, remove one (everywhere it synced). |
digest_take(item) |
Hand item 7 (or D-7K2F9A/7) to the calling agent: its brief, plus a docket task claimed in its name. |
digest_seen() |
Items the user marked seen, so the next digest leaves them out. |
Full field and workflow reference: skills/docket/SKILL.md.
Digests
Ask your agent "make a digest" (or "зроби дайджест"). The docket:digest
skill reads your merge requests, pull requests, Notion tickets, local commits
and docket items, checks every status at the source, and publishes the result —
which becomes the dashboard's home page: what needs you, what shipped, what is
in review, what is stuck, each item linked back to where it lives and one click
away from becoming a task.
Docket never holds a GitLab, GitHub or Notion credential: the agent reads them
with the CLIs and MCP servers it already has, and Docket only keeps what it
wrote — on this machine in Local Mode (synced to paired devices), or on the
Docket Server in Self-hosted Mode, shared by every client. Anything else the agent can reach — Jira, Linear or Sentry through their MCP
servers, an Obsidian vault, a project's docs folder — can be added as a source, and
the digest can be split into groups such as work, learning and side projects. What to read is local to each machine, in ~/.config/docket/digest.json
(the docket:digest-setup skill writes it); the digests themselves sync to
paired devices. Details: docs/digests.md.
- What changed since the previous digest is computed when it is published — new items, status changes, what dropped out — not left to the agent's memory.
- Who does what: every item can name its owner (you, a teammate, the agent); By person turns the digest into numbered next steps per person.
- Depth where it matters: routine items stay one line; blocked, failing or stale ones carry the agent's analysis of the actual cause and next step.
- Hand it off by number: tell any agent "take 7" —
digest_takegives it the brief and a task claimed in its name; it closes the task with the reason. - Seen hides an item until its status changes; marks sync across devices.
- Yours to shape: groups, people, presets ("digest work", "digest week"), environment checks, mail and chat via MCP, a daily run — and the skill keeps short notes on what you keep correcting.
CLI
docket list [-w <project>] [--all] What's open, scoped like the MCP default
docket workspaces Projects, with open counts and last activity
docket sessions Agent sessions open right now, and where
docket stats | export | import Inspection and round-tripping
docket hook install | uninstall | doctor Claude Code SessionStart hook
docket serve | pair | devices | status Self-hosted server & devices
docket backend use <url> | localize Switch deployment mode
docket backup <file> | restore <file> Encrypted full-device backup
docket web Ensure the Web UI is running
docket check-update | update Version management
docket help prints the canonical, always-current list. Full reference:
docs/cli.md.
Deployment modes
| Local Mode | Self-hosted Mode | |
|---|---|---|
| Default? | Yes — zero config | Opt-in |
| Where state lives | This machine (~/.docket) |
The Docket Server you run |
| Setup | docket setup |
docket setup, choose "Self-hosted", or docket pair <url> |
| Web UI | Runs on this machine | Served by the Docket Server |
| Multi-machine | Optional P2P sync between your own devices | Every paired device talks to one server |
| Claims | Advisory — a claim can be taken over, and across P2P it can be up to one pull interval stale | Atomic — a racing claim gets a 409, decided by one authority |
| Good for | A single machine, or a few you personally use | An always-on Raspberry Pi, mini PC, NAS, home server, or VPS |
| If the connection drops | N/A | Every read/write/claim fails clearly — never a silent local fallback |
Both modes install from the same package and expose the same MCP tools. Full
self-hosted setup and what it deliberately doesn't do:
docs/self-hosting.md.
P2P sync is deprecated as of v3.0. It still works, and nothing is removed in this release — but its 15-second pull interval means claims are advisory across it, so it cannot deliver an atomic guarantee. Self-hosted Mode is the supported multi-machine path. See
docs/p2p-sync.md.
Web UI
A real-time read/write dashboard — http://localhost:8787 by default in Local
Mode (override with DOCKET_WEB_PORT), or the Docket Server's own URL in
Self-hosted Mode. The home page (/) shows the latest digest next
to the task list at a glance; the list itself is at /tasks. Workspace switcher with per-project open counts, an active-
sessions panel, light/dark theme, search, sort, inline edit, undo-delete,
responsive mobile layout.
In Local Mode it starts itself: the first MCP client to connect spawns it
detached in the background if nothing's listening yet. Updates push live over
Server-Sent Events (/api/events), no polling.
Opening it from another device on your LAN (phone, tablet) requires an explicit Viewer Gate approval from the host machine first — see Security.
Security
Docket has four separate threat models (encrypted local storage, P2P sync, the LAN Viewer Gate, and self-hosted client/server traffic) — a guarantee from one does not apply to another. The basics:
- At rest:
todos.json.encandhistory.json.encare AES-256-GCM encrypted with a locally generated key — protects against accidental exposure, not against someone with read access to your own user account. - P2P sync: X25519 ECDH + HKDF-derived per-pair secrets, HMAC-signed requests with replay protection, AES-256-GCM encrypted responses.
- LAN Viewer Gate: any browser other than the host machine needs explicit human approval before it can open the dashboard; that local traffic itself is plain HTTP, not TLS (documented tradeoff, not an oversight).
- Self-hosted mode: per-device HMAC signatures with timestamp+nonce replay protection. The server is not end-to-end encrypted against its own operator.
- Updates: every release is published with Sigstore-backed npm provenance,
verifiable with
npm audit signatures.
Full threat model, exact primitives and limitations:
docs/security.md.
Data & encryption
Authoritative data lives on this machine (~/.docket) in Local Mode, or on
the Docket Server in Self-hosted Mode — either way on infrastructure you
control, never a hosted account.
todos.json.enc— the store, AES-256-GCM encryptedhistory.json.enc— the full audit log, kept off the store's write pathdigests.json.enc— digests, AES-256-GCM encrypted, with their own sync cursorkey— a locally generated 256-bit key,chmod 600device.json— this machine's id, name, and X25519 identity keypairpeers.json.enc— paired P2P devices and their derived sync secretssessions.json— which agent sessions are open right now (plain, local-only, never synced; it holds process metadata, not content)
Set DOCKET_DATA_DIR to relocate the directory; startup refuses to silently
split an existing store rather than guessing.
Backup & updating
docket backup <file> bundles the whole data directory into one
password-protected file (AES-256-GCM, scrypt-derived key); docket restore
writes it back, renaming what's on disk aside rather than overwriting.
docket check-update # read-only — reports current vs. latest
docket update # checks, confirms, installs, self-tests, rolls back on failure
Testing
npm test
Runs the full node:test suite — sync delivery and pagination, the
cross-process file lock under real contention, workspace resolution and
scoping, the session registry, agent-facing token budgets, and the hook's
fail-open behaviour.
License
MIT — see LICENSE.
Docket MCP 질문
Docket MCP를 Claude Code에 추가하려면 어떻게 하나요?
터미널에서 claude mcp add docket -- npx -y @pasichdev/docket를 실행합니다. 모든 프로젝트에서 사용할 수 있게 하려면 --scope user를 추가합니다.
Docket MCP를 Cursor에 추가하려면 어떻게 하나요?
~/.cursor/mcp.json를 열고 mcpServers 아래에 서버를 추가합니다. 위 설치 섹션에 표시된 Cursor 구성을 사용합니다.
어떤 AI 도구에서 Docket을 사용할 수 있나요?
Docket은 Claude Code, Codex, Cursor, Windsurf, Claude Desktop, Zed, Warp를 포함한 모든 MCP host에서 작동합니다.
Docket을 사용하려면 SaaS 계정이 필요한가요?
아니요, Docket은 로컬 우선 방식이며 SaaS 계정 없이도 셀프 호스팅이 가능합니다.
Docket은 서로 다른 프로젝트를 어떻게 처리하나요?
agent가 실행 중인 위치의 git remote를 확인하여 항목을 해당 프로젝트 아래로 자동 분류합니다.
Notion이나 GitLab 같은 기존 도구와 함께 사용할 수 있나요?
네, Docket은 작업이 Notion, GitLab, Obsidian 같은 도구로 넘어가기 전 거치는 중간 가교 역할을 하며, 소스 URL을 통해 연결할 수 있습니다.