batondeck
v0.1.0https://mcp.batondeck.com/mcpAdd to your MCP client configuration:
Tools
create_project
Create a project (workspace). The caller becomes its admin.
Parameters
namestringrequiredargumentidempotencyKeystringargumentReturns
projectIdstringrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "create_project",
"arguments": {
"name": "string",
"idempotencyKey": "string"
}
}
}const result = await client.callTool("create_project", {
"name": "string",
"idempotencyKey": "string"
});result = await session.call_tool("create_project", arguments={
"name": "string",
"idempotencyKey": "string"
}){
"projectId": "string"
}list_projects
List the projects the caller is a member of (the discovery entry point).
Parameters
allbooleanargumentReturns
projectsArray<object>required{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "list_projects",
"arguments": {
"all": true
}
}
}const result = await client.callTool("list_projects", {
"all": true
});result = await session.call_tool("list_projects", arguments={
"all": true
}){
"projects": [
{
"projectId": "string",
"name": "string",
"role": "viewer"
}
]
}get_project
Get a project including members and settings.
Parameters
projectIdstringrequiredargumentReturns
projectobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "get_project",
"arguments": {
"projectId": "string"
}
}
}const result = await client.callTool("get_project", {
"projectId": "string"
});result = await session.call_tool("get_project", arguments={
"projectId": "string"
}){
"project": {
"id": "string",
"name": "string",
"createdBy": "string",
"createdAt": "string",
"members": {},
"settings": {
"quotaEnabled": true,
"txnCap": 0,
"reviewEnabled": true,
"transitionTable": {}
}
}
}delete_project
Delete a project and ALL nested data (boards, tasks, events, memory). Irreversible. Requires workspace admin or project admin.
Parameters
projectIdstringrequiredargumentReturns
okbooleanrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "delete_project",
"arguments": {
"projectId": "string"
}
}
}const result = await client.callTool("delete_project", {
"projectId": "string"
});result = await session.call_tool("delete_project", arguments={
"projectId": "string"
}){
"ok": true
}add_member
Add or update a member of a project (admin only). How agents join a project.
Parameters
projectIdstringrequiredargumentidentityIdstringrequiredargumentrolestringviewermemberadminagentrequiredargumentReturns
membersobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "add_member",
"arguments": {
"projectId": "string",
"identityId": "string",
"role": "viewer"
}
}
}const result = await client.callTool("add_member", {
"projectId": "string",
"identityId": "string",
"role": "viewer"
});result = await session.call_tool("add_member", arguments={
"projectId": "string",
"identityId": "string",
"role": "viewer"
}){
"members": {}
}remove_member
Remove a member from a project (admin only; cannot remove the last admin).
Parameters
projectIdstringrequiredargumentidentityIdstringrequiredargumentReturns
okbooleanrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "remove_member",
"arguments": {
"projectId": "string",
"identityId": "string"
}
}
}const result = await client.callTool("remove_member", {
"projectId": "string",
"identityId": "string"
});result = await session.call_tool("remove_member", arguments={
"projectId": "string",
"identityId": "string"
}){
"ok": true
}update_settings
Update project settings (admin only): review toggle, quota cap, and the status transition table.
Body
projectIdstringrequiredreviewEnabledbooleanquotaEnabledbooleantxnCapinteger | nulltransitionTableobjectReturns
settingsobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "update_settings",
"arguments": {
"projectId": "string",
"reviewEnabled": true,
"quotaEnabled": true,
"txnCap": 0,
"transitionTable": {}
}
}
}const result = await client.callTool("update_settings", {
"projectId": "string",
"reviewEnabled": true,
"quotaEnabled": true,
"txnCap": 0,
"transitionTable": {}
});result = await session.call_tool("update_settings", arguments={
"projectId": "string",
"reviewEnabled": true,
"quotaEnabled": true,
"txnCap": 0,
"transitionTable": {}
}){
"projectId": "string",
"reviewEnabled": true,
"quotaEnabled": true,
"txnCap": 0,
"transitionTable": {}
}{
"settings": {
"quotaEnabled": true,
"txnCap": 0,
"reviewEnabled": true,
"transitionTable": {}
}
}create_board
Create a board in a project. Default columns if omitted.
Body
projectIdstringrequirednamestringrequiredcolumnsArray<object>idempotencyKeystringReturns
boardobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "create_board",
"arguments": {
"projectId": "string",
"name": "string",
"columns": [
{
"name": "string",
"status": "BACKLOG",
"wipLimit": 0
}
],
"idempotencyKey": "string"
}
}
}const result = await client.callTool("create_board", {
"projectId": "string",
"name": "string",
"columns": [
{
"name": "string",
"status": "BACKLOG",
"wipLimit": 0
}
],
"idempotencyKey": "string"
});result = await session.call_tool("create_board", arguments={
"projectId": "string",
"name": "string",
"columns": [
{
"name": "string",
"status": "BACKLOG",
"wipLimit": 0
}
],
"idempotencyKey": "string"
}){
"projectId": "string",
"name": "string",
"columns": [
{
"name": "string",
"status": "BACKLOG",
"wipLimit": 0
}
],
"idempotencyKey": "string"
}{
"board": {
"id": "string",
"projectId": "string",
"name": "string",
"columns": [
{
"id": "string",
"name": "string",
"order": 0,
"status": "BACKLOG",
"wipLimit": 0
}
]
}
}add_column
Add a column (mapped to a status) to a board.
Body
projectIdstringrequiredboardIdstringrequirednamestringrequiredstatusstringBACKLOGREADYIN_PROGRESSBLOCKEDREVIEWDONECANCELLEDrequiredwipLimitinteger | nullordernumberidempotencyKeystringReturns
columnobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "add_column",
"arguments": {
"projectId": "string",
"boardId": "string",
"name": "string",
"status": "BACKLOG",
"wipLimit": 0,
"order": 0,
"idempotencyKey": "string"
}
}
}const result = await client.callTool("add_column", {
"projectId": "string",
"boardId": "string",
"name": "string",
"status": "BACKLOG",
"wipLimit": 0,
"order": 0,
"idempotencyKey": "string"
});result = await session.call_tool("add_column", arguments={
"projectId": "string",
"boardId": "string",
"name": "string",
"status": "BACKLOG",
"wipLimit": 0,
"order": 0,
"idempotencyKey": "string"
}){
"projectId": "string",
"boardId": "string",
"name": "string",
"status": "BACKLOG",
"wipLimit": 0,
"order": 0,
"idempotencyKey": "string"
}{
"column": {
"id": "string",
"name": "string",
"order": 0,
"status": "BACKLOG",
"wipLimit": 0
}
}list_boards
List boards in a project.
Parameters
projectIdstringrequiredargumentReturns
boardsArray<object>required{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "list_boards",
"arguments": {
"projectId": "string"
}
}
}const result = await client.callTool("list_boards", {
"projectId": "string"
});result = await session.call_tool("list_boards", arguments={
"projectId": "string"
}){
"boards": [
{
"id": "string",
"projectId": "string",
"name": "string",
"columns": [
{
"id": "string",
"name": "string",
"order": 0,
"status": "BACKLOG",
"wipLimit": 0
}
]
}
]
}get_board
Get a board with per-column task counts.
Parameters
projectIdstringrequiredargumentboardIdstringrequiredargumentReturns
boardobjectrequiredtaskCountsobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "get_board",
"arguments": {
"projectId": "string",
"boardId": "string"
}
}
}const result = await client.callTool("get_board", {
"projectId": "string",
"boardId": "string"
});result = await session.call_tool("get_board", arguments={
"projectId": "string",
"boardId": "string"
}){
"board": {
"id": "string",
"projectId": "string",
"name": "string",
"columns": [
{
"id": "string",
"name": "string",
"order": 0,
"status": "BACKLOG",
"wipLimit": 0
}
]
},
"taskCounts": {}
}update_column
Update a board column: rename, change its mapped status, WIP limit, or order.
Body
projectIdstringrequiredboardIdstringrequiredcolumnIdstringrequirednamestringstatusstringBACKLOGREADYIN_PROGRESSBLOCKEDREVIEWDONECANCELLEDwipLimitinteger | nullordernumberReturns
boardobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "update_column",
"arguments": {
"projectId": "string",
"boardId": "string",
"columnId": "string",
"name": "string",
"status": "BACKLOG",
"wipLimit": 0,
"order": 0
}
}
}const result = await client.callTool("update_column", {
"projectId": "string",
"boardId": "string",
"columnId": "string",
"name": "string",
"status": "BACKLOG",
"wipLimit": 0,
"order": 0
});result = await session.call_tool("update_column", arguments={
"projectId": "string",
"boardId": "string",
"columnId": "string",
"name": "string",
"status": "BACKLOG",
"wipLimit": 0,
"order": 0
}){
"projectId": "string",
"boardId": "string",
"columnId": "string",
"name": "string",
"status": "BACKLOG",
"wipLimit": 0,
"order": 0
}{
"board": {
"id": "string",
"projectId": "string",
"name": "string",
"columns": [
{
"id": "string",
"name": "string",
"order": 0,
"status": "BACKLOG",
"wipLimit": 0
}
]
}
}remove_column
Remove a board column (must be empty; cannot remove the last column).
Parameters
projectIdstringrequiredargumentboardIdstringrequiredargumentcolumnIdstringrequiredargumentReturns
boardobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "remove_column",
"arguments": {
"projectId": "string",
"boardId": "string",
"columnId": "string"
}
}
}const result = await client.callTool("remove_column", {
"projectId": "string",
"boardId": "string",
"columnId": "string"
});result = await session.call_tool("remove_column", arguments={
"projectId": "string",
"boardId": "string",
"columnId": "string"
}){
"board": {
"id": "string",
"projectId": "string",
"name": "string",
"columns": [
{
"id": "string",
"name": "string",
"order": 0,
"status": "BACKLOG",
"wipLimit": 0
}
]
}
}create_task
Create a task on a board (defaults to the first column / its status).
Body
projectIdstringrequiredboardIdstringrequiredtitlestringrequireddescriptionstringprioritystringlownormalhighurgentlabelsArray<string>requiredCapabilitiesArray<string>parentTaskIdstring | nullcolumnIdstringcustomFieldsobjectidempotencyKeystringReturns
taskobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "create_task",
"arguments": {
"projectId": "string",
"boardId": "string",
"title": "string",
"description": "string",
"priority": "low",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"parentTaskId": "string",
"columnId": "string",
"customFields": {},
"idempotencyKey": "string"
}
}
}const result = await client.callTool("create_task", {
"projectId": "string",
"boardId": "string",
"title": "string",
"description": "string",
"priority": "low",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"parentTaskId": "string",
"columnId": "string",
"customFields": {},
"idempotencyKey": "string"
});result = await session.call_tool("create_task", arguments={
"projectId": "string",
"boardId": "string",
"title": "string",
"description": "string",
"priority": "low",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"parentTaskId": "string",
"columnId": "string",
"customFields": {},
"idempotencyKey": "string"
}){
"projectId": "string",
"boardId": "string",
"title": "string",
"description": "string",
"priority": "low",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"parentTaskId": "string",
"columnId": "string",
"customFields": {},
"idempotencyKey": "string"
}{
"task": {
"id": "string",
"projectId": "string",
"boardId": "string",
"columnId": "string",
"title": "string",
"description": "string",
"status": "BACKLOG",
"priority": "low",
"assignee": "string",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"estimate": 0,
"dueAt": "string",
"parentTaskId": "string",
"order": "string",
"customFields": {},
"blockedBy": [
"string"
],
"blocks": [
"string"
],
"contextSummary": "string",
"version": 0,
"claim": {
"owner": "string",
"leaseId": "string",
"expiresAt": "string"
},
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string"
}
}get_task
Get a task by id.
Parameters
projectIdstringrequiredargumenttaskIdstringrequiredargumentReturns
taskobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "get_task",
"arguments": {
"projectId": "string",
"taskId": "string"
}
}
}const result = await client.callTool("get_task", {
"projectId": "string",
"taskId": "string"
});result = await session.call_tool("get_task", arguments={
"projectId": "string",
"taskId": "string"
}){
"task": {
"id": "string",
"projectId": "string",
"boardId": "string",
"columnId": "string",
"title": "string",
"description": "string",
"status": "BACKLOG",
"priority": "low",
"assignee": "string",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"estimate": 0,
"dueAt": "string",
"parentTaskId": "string",
"order": "string",
"customFields": {},
"blockedBy": [
"string"
],
"blocks": [
"string"
],
"contextSummary": "string",
"version": 0,
"claim": {
"owner": "string",
"leaseId": "string",
"expiresAt": "string"
},
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string"
}
}list_tasks
List tasks on a board with optional filters and pagination.
Body
projectIdstringrequiredboardIdstringrequiredstatusstringBACKLOGREADYIN_PROGRESSBLOCKEDREVIEWDONECANCELLEDassigneestring | nulllabelstringunblockedOnlybooleanlimitinteger<= 200cursorstringReturns
tasksArray<object>requirednextCursorstring{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "list_tasks",
"arguments": {
"projectId": "string",
"boardId": "string",
"status": "BACKLOG",
"assignee": "string",
"label": "string",
"unblockedOnly": true,
"limit": 0,
"cursor": "string"
}
}
}const result = await client.callTool("list_tasks", {
"projectId": "string",
"boardId": "string",
"status": "BACKLOG",
"assignee": "string",
"label": "string",
"unblockedOnly": true,
"limit": 0,
"cursor": "string"
});result = await session.call_tool("list_tasks", arguments={
"projectId": "string",
"boardId": "string",
"status": "BACKLOG",
"assignee": "string",
"label": "string",
"unblockedOnly": true,
"limit": 0,
"cursor": "string"
}){
"projectId": "string",
"boardId": "string",
"status": "BACKLOG",
"assignee": "string",
"label": "string",
"unblockedOnly": true,
"limit": 0,
"cursor": "string"
}{
"tasks": [
{
"id": "string",
"projectId": "string",
"boardId": "string",
"columnId": "string",
"title": "string",
"description": "string",
"status": "BACKLOG",
"priority": "low",
"assignee": "string",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"estimate": 0,
"dueAt": "string",
"parentTaskId": "string",
"order": "string",
"customFields": {},
"blockedBy": [
"string"
],
"blocks": [
"string"
],
"contextSummary": "string",
"version": 0,
"claim": {
"owner": "string",
"leaseId": "string",
"expiresAt": "string"
},
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string"
}
],
"nextCursor": "string"
}update_task
Update task fields (optimistic concurrency via version).
Body
projectIdstringrequiredtaskIdstringrequiredversioninteger[0, 9007199254740991]requiredpatchobjectrequiredReturns
taskobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "update_task",
"arguments": {
"projectId": "string",
"taskId": "string",
"version": 0,
"patch": {
"title": "string",
"description": "string",
"priority": "low",
"labels": [
"string"
],
"assignee": "string",
"estimate": 0,
"dueAt": "string",
"requiredCapabilities": [
"string"
],
"customFields": {}
}
}
}
}const result = await client.callTool("update_task", {
"projectId": "string",
"taskId": "string",
"version": 0,
"patch": {
"title": "string",
"description": "string",
"priority": "low",
"labels": [
"string"
],
"assignee": "string",
"estimate": 0,
"dueAt": "string",
"requiredCapabilities": [
"string"
],
"customFields": {}
}
});result = await session.call_tool("update_task", arguments={
"projectId": "string",
"taskId": "string",
"version": 0,
"patch": {
"title": "string",
"description": "string",
"priority": "low",
"labels": [
"string"
],
"assignee": "string",
"estimate": 0,
"dueAt": "string",
"requiredCapabilities": [
"string"
],
"customFields": {}
}
}){
"projectId": "string",
"taskId": "string",
"version": 0,
"patch": {
"title": "string",
"description": "string",
"priority": "low",
"labels": [
"string"
],
"assignee": "string",
"estimate": 0,
"dueAt": "string",
"requiredCapabilities": [
"string"
],
"customFields": {}
}
}{
"task": {
"id": "string",
"projectId": "string",
"boardId": "string",
"columnId": "string",
"title": "string",
"description": "string",
"status": "BACKLOG",
"priority": "low",
"assignee": "string",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"estimate": 0,
"dueAt": "string",
"parentTaskId": "string",
"order": "string",
"customFields": {},
"blockedBy": [
"string"
],
"blocks": [
"string"
],
"contextSummary": "string",
"version": 0,
"claim": {
"owner": "string",
"leaseId": "string",
"expiresAt": "string"
},
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string"
}
}move_task
Move a task to a column/status and/or reorder it (version-checked).
Parameters
projectIdstringrequiredargumenttaskIdstringrequiredargumentversioninteger[0, 9007199254740991]requiredargumenttoColumnIdstringargumenttoStatusstringBACKLOGREADYIN_PROGRESSBLOCKEDREVIEWDONECANCELLEDargumentorderstringargumentReturns
taskobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "move_task",
"arguments": {
"projectId": "string",
"taskId": "string",
"version": 0,
"toColumnId": "string",
"toStatus": "BACKLOG",
"order": "string"
}
}
}const result = await client.callTool("move_task", {
"projectId": "string",
"taskId": "string",
"version": 0,
"toColumnId": "string",
"toStatus": "BACKLOG",
"order": "string"
});result = await session.call_tool("move_task", arguments={
"projectId": "string",
"taskId": "string",
"version": 0,
"toColumnId": "string",
"toStatus": "BACKLOG",
"order": "string"
}){
"task": {
"id": "string",
"projectId": "string",
"boardId": "string",
"columnId": "string",
"title": "string",
"description": "string",
"status": "BACKLOG",
"priority": "low",
"assignee": "string",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"estimate": 0,
"dueAt": "string",
"parentTaskId": "string",
"order": "string",
"customFields": {},
"blockedBy": [
"string"
],
"blocks": [
"string"
],
"contextSummary": "string",
"version": 0,
"claim": {
"owner": "string",
"leaseId": "string",
"expiresAt": "string"
},
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string"
}
}add_context_item
Append a context item (note/decision/field) to a task.
Parameters
projectIdstringrequiredargumenttaskIdstringrequiredargumentkindstringnotedecisionfieldrequiredargumentbodystringrequiredargumentidempotencyKeystringargumentReturns
itemobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "add_context_item",
"arguments": {
"projectId": "string",
"taskId": "string",
"kind": "note",
"body": "string",
"idempotencyKey": "string"
}
}
}const result = await client.callTool("add_context_item", {
"projectId": "string",
"taskId": "string",
"kind": "note",
"body": "string",
"idempotencyKey": "string"
});result = await session.call_tool("add_context_item", arguments={
"projectId": "string",
"taskId": "string",
"kind": "note",
"body": "string",
"idempotencyKey": "string"
}){
"item": {
"id": "string",
"taskId": "string",
"kind": "note",
"body": "string",
"author": "string",
"ts": "string"
}
}set_summary
Set a task's rolling context summary (version-checked).
Parameters
projectIdstringrequiredargumenttaskIdstringrequiredargumentversioninteger[0, 9007199254740991]requiredargumentsummarystringrequiredargumentReturns
taskobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "set_summary",
"arguments": {
"projectId": "string",
"taskId": "string",
"version": 0,
"summary": "string"
}
}
}const result = await client.callTool("set_summary", {
"projectId": "string",
"taskId": "string",
"version": 0,
"summary": "string"
});result = await session.call_tool("set_summary", arguments={
"projectId": "string",
"taskId": "string",
"version": 0,
"summary": "string"
}){
"task": {
"id": "string",
"projectId": "string",
"boardId": "string",
"columnId": "string",
"title": "string",
"description": "string",
"status": "BACKLOG",
"priority": "low",
"assignee": "string",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"estimate": 0,
"dueAt": "string",
"parentTaskId": "string",
"order": "string",
"customFields": {},
"blockedBy": [
"string"
],
"blocks": [
"string"
],
"contextSummary": "string",
"version": 0,
"claim": {
"owner": "string",
"leaseId": "string",
"expiresAt": "string"
},
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string"
}
}claim_task
Claim a READY task (exclusive lease); moves it to IN_PROGRESS.
Parameters
projectIdstringrequiredargumenttaskIdstringrequiredargumentleaseSecondsinteger<= 86400argumentReturns
leaseIdstringrequiredtaskobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "claim_task",
"arguments": {
"projectId": "string",
"taskId": "string",
"leaseSeconds": 0
}
}
}const result = await client.callTool("claim_task", {
"projectId": "string",
"taskId": "string",
"leaseSeconds": 0
});result = await session.call_tool("claim_task", arguments={
"projectId": "string",
"taskId": "string",
"leaseSeconds": 0
}){
"leaseId": "string",
"task": {
"id": "string",
"projectId": "string",
"boardId": "string",
"columnId": "string",
"title": "string",
"description": "string",
"status": "BACKLOG",
"priority": "low",
"assignee": "string",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"estimate": 0,
"dueAt": "string",
"parentTaskId": "string",
"order": "string",
"customFields": {},
"blockedBy": [
"string"
],
"blocks": [
"string"
],
"contextSummary": "string",
"version": 0,
"claim": {
"owner": "string",
"leaseId": "string",
"expiresAt": "string"
},
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string"
}
}heartbeat_task
Extend an active lease without bumping the task version.
Parameters
projectIdstringrequiredargumenttaskIdstringrequiredargumentleaseIdstringrequiredargumentleaseSecondsinteger<= 86400argumentReturns
expiresAtstringrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "heartbeat_task",
"arguments": {
"projectId": "string",
"taskId": "string",
"leaseId": "string",
"leaseSeconds": 0
}
}
}const result = await client.callTool("heartbeat_task", {
"projectId": "string",
"taskId": "string",
"leaseId": "string",
"leaseSeconds": 0
});result = await session.call_tool("heartbeat_task", arguments={
"projectId": "string",
"taskId": "string",
"leaseId": "string",
"leaseSeconds": 0
}){
"expiresAt": "string"
}release_task
Release a lease; IN_PROGRESS → READY.
Parameters
projectIdstringrequiredargumenttaskIdstringrequiredargumentleaseIdstringrequiredargumentReturns
taskobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "release_task",
"arguments": {
"projectId": "string",
"taskId": "string",
"leaseId": "string"
}
}
}const result = await client.callTool("release_task", {
"projectId": "string",
"taskId": "string",
"leaseId": "string"
});result = await session.call_tool("release_task", arguments={
"projectId": "string",
"taskId": "string",
"leaseId": "string"
}){
"task": {
"id": "string",
"projectId": "string",
"boardId": "string",
"columnId": "string",
"title": "string",
"description": "string",
"status": "BACKLOG",
"priority": "low",
"assignee": "string",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"estimate": 0,
"dueAt": "string",
"parentTaskId": "string",
"order": "string",
"customFields": {},
"blockedBy": [
"string"
],
"blocks": [
"string"
],
"contextSummary": "string",
"version": 0,
"claim": {
"owner": "string",
"leaseId": "string",
"expiresAt": "string"
},
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string"
}
}complete_task
Complete work: → REVIEW (or DONE when the board skips review). Clears the lease.
Parameters
projectIdstringrequiredargumenttaskIdstringrequiredargumentleaseIdstringrequiredargumentReturns
taskobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "complete_task",
"arguments": {
"projectId": "string",
"taskId": "string",
"leaseId": "string"
}
}
}const result = await client.callTool("complete_task", {
"projectId": "string",
"taskId": "string",
"leaseId": "string"
});result = await session.call_tool("complete_task", arguments={
"projectId": "string",
"taskId": "string",
"leaseId": "string"
}){
"task": {
"id": "string",
"projectId": "string",
"boardId": "string",
"columnId": "string",
"title": "string",
"description": "string",
"status": "BACKLOG",
"priority": "low",
"assignee": "string",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"estimate": 0,
"dueAt": "string",
"parentTaskId": "string",
"order": "string",
"customFields": {},
"blockedBy": [
"string"
],
"blocks": [
"string"
],
"contextSummary": "string",
"version": 0,
"claim": {
"owner": "string",
"leaseId": "string",
"expiresAt": "string"
},
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string"
}
}block_task
Mark a task BLOCKED (records blockers); releases the lease.
Parameters
projectIdstringrequiredargumenttaskIdstringrequiredargumentleaseIdstringrequiredargumentreasonstringrequiredargumentblockedByArray<string>argumentReturns
taskobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "block_task",
"arguments": {
"projectId": "string",
"taskId": "string",
"leaseId": "string",
"reason": "string",
"blockedBy": [
"string"
]
}
}
}const result = await client.callTool("block_task", {
"projectId": "string",
"taskId": "string",
"leaseId": "string",
"reason": "string",
"blockedBy": [
"string"
]
});result = await session.call_tool("block_task", arguments={
"projectId": "string",
"taskId": "string",
"leaseId": "string",
"reason": "string",
"blockedBy": [
"string"
]
}){
"task": {
"id": "string",
"projectId": "string",
"boardId": "string",
"columnId": "string",
"title": "string",
"description": "string",
"status": "BACKLOG",
"priority": "low",
"assignee": "string",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"estimate": 0,
"dueAt": "string",
"parentTaskId": "string",
"order": "string",
"customFields": {},
"blockedBy": [
"string"
],
"blocks": [
"string"
],
"contextSummary": "string",
"version": 0,
"claim": {
"owner": "string",
"leaseId": "string",
"expiresAt": "string"
},
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string"
}
}handoff_task
Hand a task to another agent: release lease, reassign, leave a note.
Parameters
projectIdstringrequiredargumenttaskIdstringrequiredargumentleaseIdstringrequiredargumenttoAgentstringrequiredargumentmemoryNotestringrequiredargumentReturns
taskobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "handoff_task",
"arguments": {
"projectId": "string",
"taskId": "string",
"leaseId": "string",
"toAgent": "string",
"memoryNote": "string"
}
}
}const result = await client.callTool("handoff_task", {
"projectId": "string",
"taskId": "string",
"leaseId": "string",
"toAgent": "string",
"memoryNote": "string"
});result = await session.call_tool("handoff_task", arguments={
"projectId": "string",
"taskId": "string",
"leaseId": "string",
"toAgent": "string",
"memoryNote": "string"
}){
"task": {
"id": "string",
"projectId": "string",
"boardId": "string",
"columnId": "string",
"title": "string",
"description": "string",
"status": "BACKLOG",
"priority": "low",
"assignee": "string",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"estimate": 0,
"dueAt": "string",
"parentTaskId": "string",
"order": "string",
"customFields": {},
"blockedBy": [
"string"
],
"blocks": [
"string"
],
"contextSummary": "string",
"version": 0,
"claim": {
"owner": "string",
"leaseId": "string",
"expiresAt": "string"
},
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string"
}
}next_task
Highest-priority unblocked, unclaimed, eligible task on a board (or null).
Parameters
projectIdstringrequiredargumentboardIdstringrequiredargumentcapabilitiesArray<string>argumentReturns
taskobject | nullrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "next_task",
"arguments": {
"projectId": "string",
"boardId": "string",
"capabilities": [
"string"
]
}
}
}const result = await client.callTool("next_task", {
"projectId": "string",
"boardId": "string",
"capabilities": [
"string"
]
});result = await session.call_tool("next_task", arguments={
"projectId": "string",
"boardId": "string",
"capabilities": [
"string"
]
}){
"task": {
"id": "string",
"projectId": "string",
"boardId": "string",
"columnId": "string",
"title": "string",
"description": "string",
"status": "BACKLOG",
"priority": "low",
"assignee": "string",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"estimate": 0,
"dueAt": "string",
"parentTaskId": "string",
"order": "string",
"customFields": {},
"blockedBy": [
"string"
],
"blocks": [
"string"
],
"contextSummary": "string",
"version": 0,
"claim": {
"owner": "string",
"leaseId": "string",
"expiresAt": "string"
},
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string"
}
}wait_for_task
Long-poll next_task: blocks until a claimable READY task appears on the board, or timeoutSec (default 25, max 50) elapses — then returns {task: null}. Re-call in a loop instead of polling next_task.
Parameters
projectIdstringrequiredargumentboardIdstringrequiredargumenttimeoutSecinteger<= 50argumentReturns
taskobject | nullrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "wait_for_task",
"arguments": {
"projectId": "string",
"boardId": "string",
"timeoutSec": 0
}
}
}const result = await client.callTool("wait_for_task", {
"projectId": "string",
"boardId": "string",
"timeoutSec": 0
});result = await session.call_tool("wait_for_task", arguments={
"projectId": "string",
"boardId": "string",
"timeoutSec": 0
}){
"task": {
"id": "string",
"projectId": "string",
"boardId": "string",
"columnId": "string",
"title": "string",
"description": "string",
"status": "BACKLOG",
"priority": "low",
"assignee": "string",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"estimate": 0,
"dueAt": "string",
"parentTaskId": "string",
"order": "string",
"customFields": {},
"blockedBy": [
"string"
],
"blocks": [
"string"
],
"contextSummary": "string",
"version": 0,
"claim": {
"owner": "string",
"leaseId": "string",
"expiresAt": "string"
},
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string"
}
}write_memory
Write a memory entry (scope task/agent/shared, optional TTL).
Body
projectIdstringrequiredtaskIdstringrequiredscopestringtaskagentsharedrequiredkeystringrequiredvalueanylargeArtifactobjectttlstringidempotencyKeystringReturns
entryIdstringrequireduploadUrlstring{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "write_memory",
"arguments": {
"projectId": "string",
"taskId": "string",
"scope": "task",
"key": "string",
"largeArtifact": {
"fileName": "string",
"mimeType": "string"
},
"ttl": "string",
"idempotencyKey": "string"
}
}
}const result = await client.callTool("write_memory", {
"projectId": "string",
"taskId": "string",
"scope": "task",
"key": "string",
"largeArtifact": {
"fileName": "string",
"mimeType": "string"
},
"ttl": "string",
"idempotencyKey": "string"
});result = await session.call_tool("write_memory", arguments={
"projectId": "string",
"taskId": "string",
"scope": "task",
"key": "string",
"largeArtifact": {
"fileName": "string",
"mimeType": "string"
},
"ttl": "string",
"idempotencyKey": "string"
}){
"projectId": "string",
"taskId": "string",
"scope": "task",
"key": "string",
"largeArtifact": {
"fileName": "string",
"mimeType": "string"
},
"ttl": "string",
"idempotencyKey": "string"
}{
"entryId": "string",
"uploadUrl": "string"
}read_memory
Read memory entries for a task (agent scope is private to the caller).
Parameters
projectIdstringrequiredargumenttaskIdstringrequiredargumentscopestringtaskagentsharedargumentkeystringargumentReturns
entriesArray<object>required{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "read_memory",
"arguments": {
"projectId": "string",
"taskId": "string",
"scope": "task",
"key": "string"
}
}
}const result = await client.callTool("read_memory", {
"projectId": "string",
"taskId": "string",
"scope": "task",
"key": "string"
});result = await session.call_tool("read_memory", arguments={
"projectId": "string",
"taskId": "string",
"scope": "task",
"key": "string"
}){
"entries": [
{
"id": "string",
"taskId": "string",
"scope": "task",
"key": "string",
"gcsUri": "string",
"author": "string",
"ts": "string",
"ttl": "string"
}
]
}get_task_context
Composed, token-budgeted briefing for a task (summary, fields, items, deps, attachments, memory).
Parameters
projectIdstringrequiredargumenttaskIdstringrequiredargumentincludeArray<string>summaryfieldsitemsdepsattachmentsmemoryargumentlimitinteger<= 100argumentcursorstringargumentReturns
summarystringrequiredfieldsobjectrequireditemsArray<object>requireddepsobjectrequiredattachmentsArray<object>requiredmemoryArray<object>requirednextCursorstring{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "get_task_context",
"arguments": {
"projectId": "string",
"taskId": "string",
"include": [
"summary"
],
"limit": 0,
"cursor": "string"
}
}
}const result = await client.callTool("get_task_context", {
"projectId": "string",
"taskId": "string",
"include": [
"summary"
],
"limit": 0,
"cursor": "string"
});result = await session.call_tool("get_task_context", arguments={
"projectId": "string",
"taskId": "string",
"include": [
"summary"
],
"limit": 0,
"cursor": "string"
}){
"summary": "string",
"fields": {},
"items": [
{
"id": "string",
"taskId": "string",
"kind": "note",
"body": "string",
"author": "string",
"ts": "string"
}
],
"deps": {
"blockedBy": [
"string"
],
"blocks": [
"string"
],
"edges": [
{
"id": "string",
"projectId": "string",
"fromTaskId": "string",
"toTaskId": "string",
"type": "blocks",
"createdBy": "string",
"ts": "string"
}
]
},
"attachments": [
{
"id": "string",
"taskId": "string",
"gcsUri": "string",
"mimeType": "string",
"bytes": 0,
"sha256": "string",
"thumbUri": "string",
"extractedText": "string",
"kind": "file",
"status": "pending",
"createdBy": "string",
"ts": "string"
}
],
"memory": [
{
"id": "string",
"taskId": "string",
"scope": "task",
"key": "string",
"gcsUri": "string",
"author": "string",
"ts": "string",
"ttl": "string"
}
],
"nextCursor": "string"
}add_dependency
Add a dependency edge (blocks/relates). Rejects cycles in the blocks graph.
Parameters
projectIdstringrequiredargumentfromTaskIdstringrequiredargumenttoTaskIdstringrequiredargumenttypestringblocksrelatesargumentidempotencyKeystringargumentReturns
edgeobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "add_dependency",
"arguments": {
"projectId": "string",
"fromTaskId": "string",
"toTaskId": "string",
"type": "blocks",
"idempotencyKey": "string"
}
}
}const result = await client.callTool("add_dependency", {
"projectId": "string",
"fromTaskId": "string",
"toTaskId": "string",
"type": "blocks",
"idempotencyKey": "string"
});result = await session.call_tool("add_dependency", arguments={
"projectId": "string",
"fromTaskId": "string",
"toTaskId": "string",
"type": "blocks",
"idempotencyKey": "string"
}){
"edge": {
"id": "string",
"projectId": "string",
"fromTaskId": "string",
"toTaskId": "string",
"type": "blocks",
"createdBy": "string",
"ts": "string"
}
}remove_dependency
Remove a dependency edge.
Parameters
projectIdstringrequiredargumentedgeIdstringrequiredargumentReturns
okbooleanrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "remove_dependency",
"arguments": {
"projectId": "string",
"edgeId": "string"
}
}
}const result = await client.callTool("remove_dependency", {
"projectId": "string",
"edgeId": "string"
});result = await session.call_tool("remove_dependency", arguments={
"projectId": "string",
"edgeId": "string"
}){
"ok": true
}add_subtask
Create a child task under a parent (same board).
Parameters
projectIdstringrequiredargumentparentTaskIdstringrequiredargumenttitlestringrequiredargumentdescriptionstringargumentprioritystringlownormalhighurgentargumentidempotencyKeystringargumentReturns
taskobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "add_subtask",
"arguments": {
"projectId": "string",
"parentTaskId": "string",
"title": "string",
"description": "string",
"priority": "low",
"idempotencyKey": "string"
}
}
}const result = await client.callTool("add_subtask", {
"projectId": "string",
"parentTaskId": "string",
"title": "string",
"description": "string",
"priority": "low",
"idempotencyKey": "string"
});result = await session.call_tool("add_subtask", arguments={
"projectId": "string",
"parentTaskId": "string",
"title": "string",
"description": "string",
"priority": "low",
"idempotencyKey": "string"
}){
"task": {
"id": "string",
"projectId": "string",
"boardId": "string",
"columnId": "string",
"title": "string",
"description": "string",
"status": "BACKLOG",
"priority": "low",
"assignee": "string",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"estimate": 0,
"dueAt": "string",
"parentTaskId": "string",
"order": "string",
"customFields": {},
"blockedBy": [
"string"
],
"blocks": [
"string"
],
"contextSummary": "string",
"version": 0,
"claim": {
"owner": "string",
"leaseId": "string",
"expiresAt": "string"
},
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string"
}
}list_subtasks
List child tasks of a parent.
Parameters
projectIdstringrequiredargumentparentTaskIdstringrequiredargumentReturns
tasksArray<object>required{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "list_subtasks",
"arguments": {
"projectId": "string",
"parentTaskId": "string"
}
}
}const result = await client.callTool("list_subtasks", {
"projectId": "string",
"parentTaskId": "string"
});result = await session.call_tool("list_subtasks", arguments={
"projectId": "string",
"parentTaskId": "string"
}){
"tasks": [
{
"id": "string",
"projectId": "string",
"boardId": "string",
"columnId": "string",
"title": "string",
"description": "string",
"status": "BACKLOG",
"priority": "low",
"assignee": "string",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"estimate": 0,
"dueAt": "string",
"parentTaskId": "string",
"order": "string",
"customFields": {},
"blockedBy": [
"string"
],
"blocks": [
"string"
],
"contextSummary": "string",
"version": 0,
"claim": {
"owner": "string",
"leaseId": "string",
"expiresAt": "string"
},
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string"
}
]
}attach_file
Create a pending attachment and return a V4 signed PUT URL for upload.
Parameters
projectIdstringrequiredargumenttaskIdstringrequiredargumentfileNamestringrequiredargumentmimeTypestringrequiredargumentkindstringfileimageaudiovideorequiredargumentbytesinteger[0, 9007199254740991]requiredargumentidempotencyKeystringargumentReturns
attachmentIdstringrequireduploadUrlstringrequiredexpiresAtstringrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "attach_file",
"arguments": {
"projectId": "string",
"taskId": "string",
"fileName": "string",
"mimeType": "string",
"kind": "file",
"bytes": 0,
"idempotencyKey": "string"
}
}
}const result = await client.callTool("attach_file", {
"projectId": "string",
"taskId": "string",
"fileName": "string",
"mimeType": "string",
"kind": "file",
"bytes": 0,
"idempotencyKey": "string"
});result = await session.call_tool("attach_file", arguments={
"projectId": "string",
"taskId": "string",
"fileName": "string",
"mimeType": "string",
"kind": "file",
"bytes": 0,
"idempotencyKey": "string"
}){
"attachmentId": "string",
"uploadUrl": "string",
"expiresAt": "string"
}list_attachments
List a task’s attachments with signed download URLs (manifest; never raw bytes).
Parameters
projectIdstringrequiredargumenttaskIdstringrequiredargumentReturns
attachmentsArray<object>required{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "list_attachments",
"arguments": {
"projectId": "string",
"taskId": "string"
}
}
}const result = await client.callTool("list_attachments", {
"projectId": "string",
"taskId": "string"
});result = await session.call_tool("list_attachments", arguments={
"projectId": "string",
"taskId": "string"
}){
"attachments": [
{
"id": "string",
"taskId": "string",
"gcsUri": "string",
"mimeType": "string",
"bytes": 0,
"sha256": "string",
"thumbUri": "string",
"extractedText": "string",
"kind": "file",
"status": "pending",
"createdBy": "string",
"ts": "string",
"downloadUrl": "string"
}
]
}search_tasks
Search tasks by text (title/description/labels/fields; attachment text on the in-memory backend).
Parameters
projectIdstringrequiredargumentquerystringrequiredargumentboardIdstringargumentkinteger<= 50argumentReturns
resultsArray<object>required{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "search_tasks",
"arguments": {
"projectId": "string",
"query": "string",
"boardId": "string",
"k": 0
}
}
}const result = await client.callTool("search_tasks", {
"projectId": "string",
"query": "string",
"boardId": "string",
"k": 0
});result = await session.call_tool("search_tasks", arguments={
"projectId": "string",
"query": "string",
"boardId": "string",
"k": 0
}){
"results": [
{
"task": {
"id": "string",
"projectId": "string",
"boardId": "string",
"columnId": "string",
"title": "string",
"description": "string",
"status": "BACKLOG",
"priority": "low",
"assignee": "string",
"labels": [
"string"
],
"requiredCapabilities": [
"string"
],
"estimate": 0,
"dueAt": "string",
"parentTaskId": "string",
"order": "string",
"customFields": {},
"blockedBy": [
"string"
],
"blocks": [
"string"
],
"contextSummary": "string",
"version": 0,
"claim": {
"owner": "string",
"leaseId": "string",
"expiresAt": "string"
},
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string"
},
"score": 0
}
]
}list_agent_sessions
List the CALLER'S OWN recent MCP agent sessions (connection telemetry): which of your agents/clients connected, when, with what client, and how active. Scoped to the caller — never returns other users' sessions.
Parameters
limitinteger<= 200argumentallbooleanargumentReturns
sessionsArray<object>required{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "list_agent_sessions",
"arguments": {
"limit": 0,
"all": true
}
}
}const result = await client.callTool("list_agent_sessions", {
"limit": 0,
"all": true
});result = await session.call_tool("list_agent_sessions", arguments={
"limit": 0,
"all": true
}){
"sessions": [
{
"sessionKey": "string",
"agentName": "string",
"identityId": "string",
"kind": "service_account",
"clientName": "string",
"clientVersion": "string",
"firstSeenAt": "string",
"lastSeenAt": "string",
"sessionCount": 0,
"requestCount": 0,
"toolCounts": {},
"lastTool": "string",
"lastProjectId": "string"
}
]
}check_access
Check workspace access status for an identity (self-only; admins may check anyone).
Parameters
emailstringrequiredargumentReturns
statusstringadminapprovedpendingdeniednonerequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "check_access",
"arguments": {
"email": "string"
}
}
}const result = await client.callTool("check_access", {
"email": "string"
});result = await session.call_tool("check_access", arguments={
"email": "string"
}){
"status": "admin"
}request_access
Register/request workspace access (self-only, idempotent). In auto mode the account is approved immediately (and rostered so an admin can later disable it); in approval mode it creates a pending request an admin must approve.
Parameters
emailstringrequiredargumentReturns
statusstringadminapprovedpendingdeniednonerequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "request_access",
"arguments": {
"email": "string"
}
}
}const result = await client.callTool("request_access", {
"email": "string"
});result = await session.call_tool("request_access", arguments={
"email": "string"
}){
"status": "admin"
}list_access_requests
ADMIN: list workspace access requests (pending + decided), newest first.
Parameters
limitinteger<= 500argumentReturns
requestsArray<object>required{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "list_access_requests",
"arguments": {
"limit": 0
}
}
}const result = await client.callTool("list_access_requests", {
"limit": 0
});result = await session.call_tool("list_access_requests", arguments={
"limit": 0
}){
"requests": [
{
"email": "string",
"status": "pending",
"requestedAt": "string",
"decidedAt": "string",
"decidedBy": "string"
}
]
}decide_access
ADMIN: approve or deny a workspace access request.
Parameters
emailstringrequiredargumentdecisionstringapproveddeniedrequiredargumentReturns
requestobjectrequired{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "decide_access",
"arguments": {
"email": "string",
"decision": "approved"
}
}
}const result = await client.callTool("decide_access", {
"email": "string",
"decision": "approved"
});result = await session.call_tool("decide_access", arguments={
"email": "string",
"decision": "approved"
}){
"request": {
"email": "string",
"status": "pending",
"requestedAt": "string",
"decidedAt": "string",
"decidedBy": "string"
}
}Resources
board
Column layout + per-column task counts
Parameters
projectIdstringrequiredpathboardIdstringrequiredpathReturns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "resources/read",
"params": {
"uri": "conductor://{projectId}/board/{boardId}"
}
}const result = await client.readResource("conductor://{projectId}/board/{boardId}");result = await session.read_resource("conductor://{projectId}/board/{boardId}"){
"content": [
{
"type": "text",
"text": "..."
}
]
}task
The task document
Parameters
projectIdstringrequiredpathtaskIdstringrequiredpathReturns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "resources/read",
"params": {
"uri": "conductor://{projectId}/task/{taskId}"
}
}const result = await client.readResource("conductor://{projectId}/task/{taskId}");result = await session.read_resource("conductor://{projectId}/task/{taskId}"){
"content": [
{
"type": "text",
"text": "..."
}
]
}task-context
Composed briefing (summary, items, memory, deps)
Parameters
projectIdstringrequiredpathtaskIdstringrequiredpathReturns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "resources/read",
"params": {
"uri": "conductor://{projectId}/task/{taskId}/context"
}
}const result = await client.readResource("conductor://{projectId}/task/{taskId}/context");result = await session.read_resource("conductor://{projectId}/task/{taskId}/context"){
"content": [
{
"type": "text",
"text": "..."
}
]
}board-feed
Recent events for a board
Parameters
projectIdstringrequiredpathboardIdstringrequiredpathReturns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "resources/read",
"params": {
"uri": "conductor://{projectId}/board/{boardId}/feed"
}
}const result = await client.readResource("conductor://{projectId}/board/{boardId}/feed");result = await session.read_resource("conductor://{projectId}/board/{boardId}/feed"){
"content": [
{
"type": "text",
"text": "..."
}
]
}Prompts
pick_up_next_task
Claim and start the next eligible task on a board.
Parameters
projectIdstringrequiredargumentboardIdstringrequiredargumentReturns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "prompts/get",
"params": {
"name": "pick_up_next_task",
"arguments": {
"projectId": "<projectId>",
"boardId": "<boardId>"
}
}
}const result = await client.getPrompt("pick_up_next_task", {
projectId: "<projectId>",
boardId: "<boardId>",
});result = await session.get_prompt("pick_up_next_task", arguments={
"projectId": "<projectId>",
"boardId": "<boardId>",
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}triage_inbox
Triage BACKLOG tasks: set priority/labels and move ready ones to READY.
Parameters
projectIdstringrequiredargumentboardIdstringrequiredargumentReturns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "prompts/get",
"params": {
"name": "triage_inbox",
"arguments": {
"projectId": "<projectId>",
"boardId": "<boardId>"
}
}
}const result = await client.getPrompt("triage_inbox", {
projectId: "<projectId>",
boardId: "<boardId>",
});result = await session.get_prompt("triage_inbox", arguments={
"projectId": "<projectId>",
"boardId": "<boardId>",
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}summarize_for_handoff
Write a rolling summary capturing state before handing a task off.
Parameters
projectIdstringrequiredargumenttaskIdstringrequiredargumentReturns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "prompts/get",
"params": {
"name": "summarize_for_handoff",
"arguments": {
"projectId": "<projectId>",
"taskId": "<taskId>"
}
}
}const result = await client.getPrompt("summarize_for_handoff", {
projectId: "<projectId>",
taskId: "<taskId>",
});result = await session.get_prompt("summarize_for_handoff", arguments={
"projectId": "<projectId>",
"taskId": "<taskId>",
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}decompose_into_subtasks
Break a task into actionable subtasks.
Parameters
projectIdstringrequiredargumenttaskIdstringrequiredargumentReturns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "prompts/get",
"params": {
"name": "decompose_into_subtasks",
"arguments": {
"projectId": "<projectId>",
"taskId": "<taskId>"
}
}
}const result = await client.getPrompt("decompose_into_subtasks", {
projectId: "<projectId>",
taskId: "<taskId>",
});result = await session.get_prompt("decompose_into_subtasks", arguments={
"projectId": "<projectId>",
"taskId": "<taskId>",
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}