> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.simplified.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.simplified.com/_mcp/server.

# PM boards

A PM board tracks work through a set of status columns. Each task belongs to a status; that status determines its board. Tasks can have owners, dates, subtasks, attachments, and dependencies.

Use [creative projects](/mcp/projects) to store campaign deliverables. PM boards manage the plan for producing them. These are separate resources, even when their names describe the same campaign.

## 1. Find or create a board

Call `pm_listBoards` with `search` to find the board by title, then read it with `pm_getBoard`. Save the board UUID. Use `expand: "statuses"` to inspect its columns inline where supported.

To create a board, call `pm_createBoard`. This example creates a private task board with an explicit review stage:

```json
{
  "title": "Autumn launch",
  "primary_type": "pm",
  "access": 0,
  "statuses": [
    {"title": "To do"},
    {"title": "In progress"},
    {"title": "Review"},
    {"title": "Completed"}
  ]
}
```

Board access values are `0` for private, `1` for workspace-shared, and `2` for public. Select visibility deliberately. When statuses are omitted, the board receives the default Draft, To Do, In Progress, and Completed columns.

## 2. Resolve columns and people

Use `pm_listStatuses` to obtain the board's status UUIDs. Use `pm_listWorkspaceMembers` to resolve an assignee; its `options[].value` is the integer user ID, while `label` contains the display name and email.

Do not pass a column title as a status UUID or a member's display name as an assignee ID. Keep the chosen `space_id` on related calls.

## 3. Create a task

Call `pm_createTask` with the destination `status` UUID. Add the title, description, and any required dates, owners, or tags:

```json
{
  "status": "STATUS_UUID_FROM_LIST",
  "title": "Review the launch copy",
  "description": "Review the approved project item and record any required revisions.",
  "assignees": [123],
  "tags": ["autumn-launch", "review"]
}
```

Replace `123` with a discovered member ID. Dates use ISO 8601 date-time values. Read the new task with `pm_getTask` and `expand: "assignees,tags,status_details"`: assignees are not included in the initial creation response.

## 4. Find and update work

For a board view or targeted search, call `pm_searchTasks` with both `board` and `status`, one column at a time. Follow pagination to cover the entire column. Add `search` or supported filters for a narrower query.

Subtasks are excluded by default; set `include_subtasks: true` when searching them. Use `pm_searchRecentTasks` for a workspace-wide view of recently modified work.

To move one task to Review, use `pm_updateTask` with the Review status UUID. Changing a column's position is a different operation: use `pm_updateStatus` with `order`.

## 5. Maintain ownership and task details

Use the dedicated tools for focused updates:

| Tool                        | Input to resolve first                                               |
| --------------------------- | -------------------------------------------------------------------- |
| `pm_updateTaskAssignees`    | Integer member IDs to add or remove                                  |
| `pm_updateTaskTags`         | Tag names; unknown names are created                                 |
| `pm_updateTaskAttachments`  | Attachment UUIDs from the supported attachment flow or expanded task |
| `pm_updateTaskCustomFields` | Existing custom-field UUIDs and values matching their types          |

An asset ID or URL is not automatically an attachment UUID. Read the current task and schema before changing attachments. Retrieve the task directly to verify writes; search indexing can lag behind changes.

## 6. Break work into subtasks and dependencies

Create a subtask with `pm_createTask`, providing its `parent` task UUID, destination status, and `task_type: "SUBTASK"`. Inspect direct children with `pm_listSubtasks`.

Before adding a dependency, call `pm_getTaskDependencies`. To express “copy review blocks publishing,” call `pm_addTaskDependency` on the review task with the publishing task as `target_task_id` and `relation_type: "BLOCKS"`.

Other supported relations include `RELATES_TO` and `DUPLICATES`. To remove a relationship, use its `relationship_id` from the dependency response, not the counterpart task ID.

## 7. Review progress and maintain the board

Use `pm_getTaskActivity` for status changes, assignee changes, and other recorded edits. Ask for a report of blocked tasks, unassigned tasks, and upcoming deadlines based on the retrieved data.

`pm_cloneTask` copies the selected fields; `pm_cloneBoard` copies statuses and top-level tasks. Verify the clone's contents and access rather than assuming every nested resource was copied.

To retire a column, first move its tasks. `pm_moveStatus` bulk-moves all tasks from a source column to a destination status; it does not reorder the column. Delete the empty column with `pm_deleteStatus`. Board and task deletion cannot be reversed through these API tools, so use it only when removal is the intended outcome.

## API reference

For request fields, response shapes, and direct HTTP integrations:

* [Boards](/api-reference/project-manager/boards/list-boards)
* [Task search and filters](/api-reference/project-manager/search/tasks)
* [Task dependencies](/api-reference/project-manager/dependencies/get-task-dependencies)

These endpoint pages describe REST requests. For MCP calls, use the current tool schema, including any additional convenience fields.