# Buildertrend MCP tools

> Every Buildertrend MCP tool on the Cotlet server: tool names, input schemas, a tools/call example and an example result for each tool.

Source: https://cotlet.dev/docs/mcp/buildertrend

Docs sections: [Get started](https://cotlet.dev/docs.md) · [REST API](https://cotlet.dev/docs/api.md) · [MCP](https://cotlet.dev/docs/mcp.md) · [SDKs & CLI](https://cotlet.dev/docs/sdks.md) · [Integrations](https://cotlet.dev/docs/integrations.md)

12 tools for Buildertrend on the Cotlet MCP server. Your agent picks them from tools/list.

- MCP server: `https://cotlet.dev/mcp/v1`
- Connects with: Your own Buildertrend company user account (the role decides which jobs and actions you see)
- Integration page: https://cotlet.dev/integrations/buildertrend-api-mcp-server

## Endpoints

| Endpoint | Access | Description |
|---|---|---|
| `buildertrend_list_jobs` | read | Jobs in your company with status, address, project manager and dates. |
| `buildertrend_get_schedule` | read | Schedule items with start and end dates, assignees, predecessors and status. |
| `buildertrend_list_daily_logs` | read | Daily logs, newest first, with notes, author and who they are shared with. |
| `buildertrend_list_change_orders` | read | Change orders with title, amount, line items and approval status. |
| `buildertrend_list_selections` | read | Selections with options, allowance and approval status. |
| `buildertrend_list_tasks` | read | Tasks with assignees, deadline, checklist and status. |
| `buildertrend_create_daily_log` | write | New daily log with notes for a job. Internal unless you share it. |
| `buildertrend_create_task` | write | New task on a job with assignees, deadline and checklist. |
| `buildertrend_update_schedule_item` | write | Move or resize a schedule item and optionally notify its assignees. |
| `buildertrend_create_change_order` | write | New change order with line items, saved unreleased. The client sees nothing yet. |
| `buildertrend_release_change_order` | write | Send a change order to the client to approve or decline in their portal. |
| `buildertrend_approve_selection_choice` | write | Approve a choice on the client's behalf, with a comment. |

## List jobs

MCP tool: `buildertrend_list_jobs`

Access: read.

Returns the jobs your account can see, with status, address and project manager. Use job_id from each item in the other tools. Status filters open, closed or presale jobs; the default is open. Search matches job name, address or client name.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `status` | enum | no | open, closed, presale or all. Default: open. |
| `search` | string | no | Match job name, address or client name. |
| `limit` | integer | no | 1 to 100. Default: 50. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "buildertrend_list_jobs",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "jobs": [
      {
        "job_id": "4815162",
        "name": "Maple Street Addition",
        "status": "open",
        "address": "214 Maple St, Austin, TX",
        "project_manager": "Dana Ortiz",
        "start_date": "2026-08-17"
      },
      {
        "job_id": "4815390",
        "name": "Hargrove Kitchen Remodel",
        "status": "open",
        "address": "88 Hargrove Ln, Austin, TX",
        "project_manager": "Dana Ortiz",
        "start_date": "2026-09-14"
      }
    ]
  },
  "isError": false
}
```

## Get schedule

MCP tool: `buildertrend_get_schedule`

Access: read.

Returns schedule items in date order for one job, or for all open jobs when job_id is empty. Each item lists its assignees and predecessors, so your agent sees what follows a slipped item. The window defaults to today through 14 days ahead.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `job_id` | string | no | One job, ID from list_jobs. Leave empty for all open jobs. |
| `from` | date | no | Items ending on or after this date. Default: today. |
| `to` | date | no | Items starting on or before this date. Default: 14 days ahead. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "buildertrend_get_schedule",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "items": [
      {
        "schedule_item_id": "90211734",
        "job_id": "4815390",
        "title": "Drywall hang",
        "start_date": "2026-10-12",
        "end_date": "2026-10-14",
        "assignees": [
          "Lone Star Drywall"
        ],
        "predecessors": [
          "Insulation"
        ],
        "status": "scheduled"
      }
    ]
  },
  "isError": false
}
```

## List daily logs

MCP tool: `buildertrend_list_daily_logs`

Access: read.

Returns daily logs newest first for one job, or for all open jobs. Each log shows its notes, author and visibility. Visibility is internal, subs and vendors, or client; private logs of other users are not returned.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `job_id` | string | no | One job, ID from list_jobs. Leave empty for all open jobs. |
| `since` | date | no | Logs dated on or after this date. |
| `limit` | integer | no | 1 to 100. Default: 20. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "buildertrend_list_daily_logs",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "daily_logs": [
      {
        "daily_log_id": "23094417",
        "job_id": "4815162",
        "date": "2026-10-09",
        "title": "Framing, second floor",
        "author": "Sam Reyes",
        "shared_with": [
          "internal"
        ],
        "notes": "Second floor walls framed and sheathed."
      }
    ]
  },
  "isError": false
}
```

## List change orders

MCP tool: `buildertrend_list_change_orders`

Access: read.

Returns the change orders of one job with their line items, total and approval status. Filter by pending, approved or declined to see what still waits on the client.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `job_id` | string | yes | Job ID from list_jobs. |
| `approval_status` | enum | no | pending, approved, declined or all. Default: all. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "buildertrend_list_change_orders",
    "arguments": {
      "job_id": "job_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "change_orders": [
      {
        "change_order_id": "771204",
        "job_id": "4815162",
        "title": "Added kitchen outlets",
        "total": 640,
        "approval_status": "pending",
        "released": true,
        "deadline": "2026-10-20"
      }
    ]
  },
  "isError": false
}
```

## List selections

MCP tool: `buildertrend_list_selections`

Access: read.

Returns selections for one job, or for all open jobs when job_id is empty. Each selection lists its options, the allowance and its status. Status defaults to pending, the selections still waiting on the client.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `job_id` | string | no | One job, ID from list_jobs. Leave empty for all open jobs. |
| `status` | enum | no | pending, approved, declined or all. Default: pending. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "buildertrend_list_selections",
    "arguments": {
      "status": "pending"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "selections": [
      {
        "selection_id": "55120",
        "job_id": "4815390",
        "title": "Kitchen backsplash tile",
        "allowance": 1800,
        "status": "pending",
        "options": [
          {
            "choice_id": "o_1",
            "title": "White subway 3x6"
          },
          {
            "choice_id": "o_2",
            "title": "Green zellige"
          }
        ]
      }
    ]
  },
  "isError": false
}
```

## List tasks

MCP tool: `buildertrend_list_tasks`

Access: read.

Returns tasks for one job or for all jobs, with assignees, deadline and checklist. Status defaults to open. Set assigned_to_me to see only your own.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `job_id` | string | no | One job. Leave empty for all jobs. |
| `status` | enum | no | open, completed or all. Default: open. |
| `assigned_to_me` | boolean | no | Only tasks assigned to you. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "buildertrend_list_tasks",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "tasks": [
      {
        "task_id": "338810",
        "job_id": "4815162",
        "title": "Order window units",
        "assignees": [
          "Dana Ortiz"
        ],
        "deadline": "2026-10-16T17:00:00-05:00",
        "status": "open",
        "checklist": [
          {
            "item": "Confirm sizes",
            "done": true
          },
          {
            "item": "Place order",
            "done": false
          }
        ]
      }
    ]
  },
  "isError": false
}
```

## Create daily log

MCP tool: `buildertrend_create_daily_log`

Access: write. Confirm: waits for the user's OK before it runs.

Creates a daily log on one job under your name. Visibility defaults to internal only; add subs or client to share it. Sharing reaches other people, which is why you confirm by default. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `job_id` | string | yes | Job ID from list_jobs. |
| `date` | date | no | Log date. Default: today. |
| `title` | string | no | Short title for the log. |
| `notes` | string | yes | Work completed, site conditions and issues. |
| `share_with` | string[] | no | Any of internal, subs, client. Default: internal. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "buildertrend_create_daily_log",
    "arguments": {
      "job_id": "4815162",
      "date": "2026-10-09",
      "title": "Framing, second floor",
      "notes": "Second floor walls framed and sheathed. Window rough openings checked against plans.",
      "share_with": [
        "internal"
      ]
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "daily_log_id": "23094417",
    "job_id": "4815162",
    "date": "2026-10-09",
    "title": "Framing, second floor",
    "shared_with": [
      "internal"
    ],
    "url": "https://buildertrend.net/app/DailyLogs/23094417"
  },
  "isError": false
}
```

## Create task

MCP tool: `buildertrend_create_task`

Access: write. Confirm: waits for the user's OK before it runs.

Creates a task on one job. Assignees, deadline and checklist are optional. A task assigned to other people reaches them, so you confirm by default. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `job_id` | string | yes | Job ID from list_jobs. |
| `title` | string | yes | What needs doing. |
| `assignee_ids` | string[] | no | Internal users or subs to assign. |
| `deadline` | datetime | no | ISO 8601 with time zone. |
| `checklist` | string[] | no | Checklist items, in order. |
| `notes` | string | no | Details for the assignees. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "buildertrend_create_task",
    "arguments": {
      "job_id": "job_8c41d2",
      "title": "title"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "task_id": "338811",
    "job_id": "4815162",
    "title": "Order window units",
    "assignees": [
      "Dana Ortiz"
    ],
    "deadline": "2026-10-16T17:00:00-05:00",
    "status": "open"
  },
  "isError": false
}
```

## Update schedule item

MCP tool: `buildertrend_update_schedule_item`

Access: write. Confirm: waits for the user's OK before it runs.

Changes the start date or duration of one schedule item. With notify_assignees on, Buildertrend notifies the assigned users and subs, and only does so when the schedule is Online. Items that depend on it follow the schedule rules of the job. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `schedule_item_id` | string | yes | Schedule item ID from get_schedule. |
| `start_date` | date | no | New start date. |
| `duration_days` | integer | no | New duration in working days. |
| `notify_assignees` | boolean | no | Notify the assigned users and subs. Default: true. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "buildertrend_update_schedule_item",
    "arguments": {
      "schedule_item_id": "90211734",
      "start_date": "2026-10-14",
      "notify_assignees": true
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "schedule_item_id": "90211734",
    "start_date": "2026-10-14",
    "end_date": "2026-10-16",
    "notified": [
      "Lone Star Drywall"
    ]
  },
  "isError": false
}
```

## Create change order

MCP tool: `buildertrend_create_change_order`

Access: write. Confirm: waits for the user's OK before it runs.

Creates a change order on one job and leaves it unreleased, so the client sees nothing until release_change_order. The total is the sum of the line items: quantity times unit cost, plus markup percent. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `job_id` | string | yes | Job ID from list_jobs. |
| `title` | string | yes | Change order title. |
| `description` | string | no | Scope of the change, shown to the client. |
| `line_items` | object | yes | List of { description, cost_code, quantity, unit_cost, markup_percent }. |
| `deadline` | date | no | Date by which the client should respond. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "buildertrend_create_change_order",
    "arguments": {
      "job_id": "4815162",
      "title": "Added kitchen outlets",
      "description": "Eight added outlets along the kitchen island and back wall.",
      "line_items": [
        {
          "description": "Add 8 outlets, kitchen",
          "cost_code": "16-100",
          "quantity": 8,
          "unit_cost": 80,
          "markup_percent": 0
        }
      ],
      "deadline": "2026-10-20"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "change_order_id": "771204",
    "job_id": "4815162",
    "title": "Added kitchen outlets",
    "total": 640,
    "released": false,
    "deadline": "2026-10-20"
  },
  "isError": false
}
```

## Release change order

MCP tool: `buildertrend_release_change_order`

Access: write. Confirm: waits for the user's OK before it runs.

Releases one change order, so the client can approve or decline it in the Buildertrend portal. It reaches the client and involves money. Use list_change_orders to see the decision. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `change_order_id` | string | yes | Change order ID from create_change_order or list_change_orders. |
| `message` | string | no | Note to the client with the release. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "buildertrend_release_change_order",
    "arguments": {
      "change_order_id": "change_order_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "change_order_id": "771204",
    "released": true,
    "approval_status": "pending"
  },
  "isError": false
}
```

## Approve selection choice

MCP tool: `buildertrend_approve_selection_choice`

Access: write. Confirm: waits for the user's OK before it runs.

Approves one option of a selection for the client, the way Buildertrend lets a builder approve when a client cannot. A comment records why. It affects orders and costs, so you confirm by default. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `selection_id` | string | yes | Selection ID from list_selections. |
| `choice_id` | string | yes | Choice to approve. |
| `comments` | string | no | Why you approve for the client, e.g. verbal OK on site. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "buildertrend_approve_selection_choice",
    "arguments": {
      "selection_id": "selection_8c41d2",
      "choice_id": "choice_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "selection_id": "55120",
    "choice_id": "o_1",
    "status": "approved",
    "approved_on_behalf": true
  },
  "isError": false
}
```
