Skip to content

REST + MCP API

Copy page

Base: http://127.0.0.1:3847/api/v1

Auth: Bearer plandesk_mcp_* or session cookie for UI (v1 single-user: optional password via env)

MethodPathPurpose
GET/healthHealth check { ok: true }
GET/projectsList projects
POST/projectsCreate project { name, description? }
GET/projects/:idProject detail + summary counts
GET/projects/:id/canvas{ nodes, edges, layout }
PUT/projects/:id/canvasUpsert nodes, edges, layout
PATCH/projects/:idRename / update { name?, description? }
DELETE/projects/:idDelete project (cascades children)
GET/projects/:id/documentsDocument tree
POST/projects/:id/documentsCreate doc { title, body, linkedNodeId? }
GET/documents/:idDocument body
PATCH/documents/:idUpdate title/body/status
DELETE/documents/:idDelete document
GET/projects/:id/tasksTask list (filter query params)
POST/projects/:id/tasksCreate task { label, status?, … }
PATCH/tasks/:idUpdate status, label, description, position
DELETE/tasks/:idDelete task (cascades edges, unlinks docs)
DELETE/projects/:id/edges/:edgeIdDelete a dependency edge
POST/documents/:id/commentsAdd comment { body, passage? }
GET/documents/:id/commentsComments for a document
GET/projects/:id/commentsComments across a project
PATCH/comments/:idEdit / resolve { body?, resolved? }
DELETE/comments/:idDelete a comment (UI only)
GET/eventsSSE stream
POST/agent-runsStart run { projectId, label? }
PATCH/agent-runs/:idAppend progress / complete

Endpoint: http://127.0.0.1:3847/mcp/ (Streamable HTTP transport)

Auth header: Authorization: Bearer plandesk_mcp_...

ToolPurpose
list_projectsList accessible projects
get_projectTasks, docs summary, canvas snapshot
create_projectCreate a new project
scaffold_project_from_planCreate a project + tasks + edges + docs in one call
get_next_taskNext actionable todo task (prerequisites all done)
create_taskAdd canvas node + task row
update_taskStatus, label, description, position
create_documentMarkdown body; optional link to task
update_documentPatch title/body/status line
get_documentFetch a document by id
list_documentsProject documents as a tree
create_noteCreate a free-form project note (Markdown body)
update_notePatch a note’s title or body
get_noteFetch a note by id
list_notesProject working notes
create_edgeLabeled dependency between tasks
list_commentsOpen (or all) document comments for a project
add_commentLeave a comment on a document
resolve_commentMark a comment resolved (no delete tool)
start_agent_runBegin external agent session
record_agent_progressAppend progress event
complete_agent_runClose run (completed or failed)
publish_projectRegister + first-push a project to a sync server
sync_pushPush the allow-list projection to shares
sync_pullFetch participant submissions into the triage inbox
list_submissionsList pulled submissions (triage inbox)
triage_submissionAccept a submission → real task (or reject)

27 tools in total. The last five are the collaboration tier — sharing a project with a client or team. At session start, list tools before calling them. Resolve the project from .plandesk/config.json when present — do not guess IDs. To stand up a whole plan at once use scaffold_project_from_plan; to execute it, loop get_next_taskupdate_task. There is no delete tool by design — resolve comments rather than deleting them.

  • Unknown project → tool error not_found
  • Invalid status enum → invalid_argument
  • Token revoked → HTTP 401

Programmatic access without Claude/Codex: install @plandesk/mcp-client from npm (or use packages/plandesk-mcp-client from a cloned repo) with PLANDESK_URL and PLANDESK_MCP_TOKEN.