Local services & SaaS
Buildertrend
Schedules, daily logs, change orders and selections for builders.
12 endpoints
BuildBook publishes no public API and no MCP server (checked 13 Nov 2026). Cotlet runs a hosted BuildBook MCP server with 30 tools that ChatGPT, Claude and your scripts use in your own BuildBook account. Estimates, change orders, invoices and anything a homeowner sees wait for your OK.
30 tools Read and write
BuildBook publishes no public API. Its site and Help Center show no developer documentation, API keys or API pricing, and no BuildBook MCP server or official ChatGPT or Claude connector was verified.
| What you need | BuildBook official | By hand | Cotlet |
|---|---|---|---|
| Ask ChatGPT or Claude to do the work | No MCP server or connector | Copy and paste | Hosted MCP server |
| Estimates, change orders and invoices | No public API | One screen at a time | 30 tools, writes after your OK |
| Bills and expenses into accounting | QuickBooks Online sync | Typed in by hand | Entered in BuildBook; the sync stays yours |
| Run from n8n or a script | No public API | Manual only | REST, same key |
Checked 13 Nov 2026. Sources: BuildBook · BuildBook pricing · BuildBook Help Center · Help: Connect BuildBook to QuickBooks Online · Help: Roles and Permissions in BuildBook · Help: Pro Dashboard · Help: Client Dashboard · Help: How to Create an Opportunity · Help: Create and Edit an Estimate · Help: Share Your Estimate · Help: Convert an Opportunity into a Project · Help: Create and Manage Projects · Help: Using Daily Logs · Help: Create a Task · Help: Build Your Schedule · Help: Working with Dependencies · Help: Managing Financials · Help: Create Bills & Expenses · Help: Change Orders · Help: Change Order Approvals · Help: Create Invoices · Help: Send Selection for Approval · Help: Setting Up Your Portfolio
Once, in a browser we host for you.
One address in its settings.
Draft the estimate, then approve it.
Your agent works in your own signed-in Cloud Browser. Writes, and anything a homeowner, sub or vendor would see, wait for your OK. Who can see your session
Sign in to BuildBook in a Cloud Browser. Open app.buildbook.co in your Cotlet Cloud Browser and log in with your own BuildBook user.
Add the Cotlet address. Enter https://cotlet.dev/mcp/v1 as the MCP server or connector URL in your agent.
Let the agent in. Chat apps open a Cotlet sign-in page. Editors, n8n and scripts send an API key made in the console.
BuildBook uses the shared address https://cotlet.dev/mcp/v1, the same one as every other app you turn on, so a single connector reaches them all. Enabled BuildBook after connecting? Refresh the connector to load the 30 BuildBook tools.
Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet \
https://cotlet.dev/mcp/v1 \
--header "Authorization: Bearer $COTLET_API_KEY" // ~/.cursor/mcp.json
{
"mcpServers": {
"cotlet": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY" MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: buildbook_read Grouped from the owner workflows of the BuildBook Help Center. Read tools run at once. Write tools take an `action`; `list` and `get` only read, the other actions change BuildBook and ask first.
Read only. The Pro Dashboard, a project's Up Next and activity feed, the client's view, Global Search and project chat.
Returns the snapshot BuildBook shows on the Pro Dashboard for your user: what is coming up, your tasks and the latest activity on every project and opportunity you can open. Nothing is changed.
MCP callbuildbook_read → view_pro_dashboard
REST endpointGET https://cotlet.dev/api/v1/buildbook/pro-dashboards/view
No parameters.
{
"up_next": [
{
"item": "Tile install",
"type": "Task",
"project": "Maple Street bath remodel",
"due": "2026-11-16"
}
],
"tasks_open": 6,
"latest_activity": [
{
"project": "Maple Street bath remodel",
"event": "Daily log posted"
}
]
} Up Next lists phases, tasks, change orders, selection categories and payments due within the week, grouped as Overdue, Today and This Week. The feed lists what everyone did on the project: new tasks, uploaded files, selections, comments and chats.
MCP callbuildbook_read → view_project_activity
REST endpointGET https://cotlet.dev/api/v1/buildbook/project-activities/view
| Name | Type | Description |
|---|---|---|
| project string required | string | Project name, as manage_projects `list` returns it. |
| mine boolean | boolean | True for My Items only; the default is All Items. |
{
"project": "project"
} {
"project": "Maple Street bath remodel",
"overdue": [
{
"item": "Vanity selection",
"type": "Selection Category"
}
],
"today": [],
"this_week": [
{
"item": "Tile install",
"type": "Task"
}
],
"activity": [
{
"who": "Site lead",
"event": "Uploaded 4 files"
}
]
} The Client Dashboard shows the daily logs you shared as Updates, the schedule in Calendar View with every phase, and the budget, selections and tasks you gave the client access to. Use it to check what a homeowner sees before a call.
MCP callbuildbook_read → view_client_dashboard
REST endpointGET https://cotlet.dev/api/v1/buildbook/client-dashboards/view
| Name | Type | Description |
|---|---|---|
| project string required | string | Project name, as manage_projects `list` returns it. |
{
"project": "project"
} {
"project": "Maple Street bath remodel",
"updates": 3,
"phases": [
"Demolition",
"Rough-in",
"Tile"
],
"shared_tasks": 2,
"selections": [
"Vanity",
"Floor tile"
]
} Archived projects are included. Global Search matches task names but not assignees, and does not search budget items, selection items, chats, comments, or an opportunity's client name and address. New items become searchable within a few minutes.
MCP callbuildbook_read → search_projects
REST endpointGET https://cotlet.dev/api/v1/buildbook/projects/search
| Name | Type | Description |
|---|---|---|
| query string required | string | Words to search for. |
{
"query": "query"
} {
"query": "vanity",
"results": [
{
"type": "Task",
"title": "Order vanity",
"project": "Maple Street bath remodel"
},
{
"type": "Opportunity",
"title": "Oak Court vanity swap"
}
]
} BuildBook keeps a Team Chat and a Client Chat per project; clients only see the Client Chat. The tool reads messages and does not post, so nobody is notified.
MCP callbuildbook_read → read_project_chat
REST endpointGET https://cotlet.dev/api/v1/buildbook/project-chats/read
| Name | Type | Description |
|---|---|---|
| project string required | string | Project name, as manage_projects `list` returns it. |
| room string | string | `team` or `client`. Defaults to `team`. |
{
"project": "project"
} {
"project": "Maple Street bath remodel",
"room": "client",
"messages": [
{
"from": "Example Homeowner",
"text": "Can we see the vanity options this week?"
}
]
} People are created when you invite someone to a project, when an opportunity gets client details, or by hand. Pending invitees show as pending until they accept.
MCP callbuildbook_read → list_people
REST endpointGET https://cotlet.dev/api/v1/buildbook/peoples
| Name | Type | Description |
|---|---|---|
| role string | string | Filter: `Pro Team`, `Collaborator` or `Client`. |
{
"people": [
{
"name": "Example Homeowner",
"type": "Client",
"role": "Client"
},
{
"name": "Sample Tile Co",
"type": "Tile Setter",
"role": "Collaborator",
"pending": true
}
]
} From a new opportunity to the proposal the homeowner reads. Items come from your Price Book with their cost codes.
Creating an opportunity with client details also creates that client in People. Converting carries over the address, project type, the approved estimate, its selections and the payment schedule; tasks, notes, client info, files and the planned schedule stay behind. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → manage_opportunities
REST endpointPOST https://cotlet.dev/api/v1/buildbook/opportunities/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `create`, `convert_to_project`. `list` and `get` only read. |
| title string | string | Opportunity title, for example the address or the type of remodel. |
| client object | object | For `create`: first_name and last_name (required), email and phone (optional). |
| address string | string | Job address. |
| estimate_version string | string | For `convert_to_project`: the estimate version to carry over, or none. |
{
"action": "action"
} {
"opportunity": "Maple Street bath remodel",
"client": "Example Homeowner",
"stage": "New",
"saved": true
} `list` reads the Global Estimates page (Pro Team Admins and Owners): name, stage, status (Draft, Published, Approved, Declined), last update and total. Items without a cost code fall under 99-000 Uncategorized. Copying an estimate leaves its payment schedule behind. `share` publishes the proposal to your client. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → manage_estimates
REST endpointPOST https://cotlet.dev/api/v1/buildbook/estimates/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `create`, `update`, `share`. `list` and `get` only read. |
| opportunity string | string | The opportunity the estimate belongs to. |
| source string | string | For `create`: `price_book`, `copy` (from another estimate) or `scratch`. |
| items array | array | Name, cost_code, type, quantity and unit_price per item. |
| visibility object | object | For `share`: which categories, line items, descriptions, prices and quantities the client sees, and `summary` or `detailed` totals. |
{
"action": "create",
"opportunity": "Maple Street bath remodel",
"source": "price_book",
"items": [
{
"name": "Demolition",
"cost_code": "02-100",
"type": "Labor",
"quantity": 1,
"unit_price": 1800
},
{
"name": "Floor and wall tile",
"cost_code": "09-300",
"type": "Material",
"quantity": 85,
"unit_price": 22
},
{
"name": "Vanity install",
"cost_code": "06-400",
"type": "Labor",
"quantity": 1,
"unit_price": 950
}
]
} {
"opportunity": "Maple Street bath remodel",
"estimate": "Version 1",
"status": "Draft",
"items": 3,
"total": 4620
} Defaults apply to new estimates only; estimates you already made keep their text. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → configure_estimate_defaults
REST endpointPOST https://cotlet.dev/api/v1/buildbook/estimate-defaults/configure
| Name | Type | Description |
|---|---|---|
| fields object | object | cover_image_url, about_us, contract, scope_of_work, in BuildBook's own section names. |
{
"about_us": "Family-owned remodelers since 2009.",
"contract": "Standard remodel agreement",
"saved": true
} Price Book items carry a cost code and feed estimates and budgets. Bills, expenses and invoices with unmatched cost codes do not push to QuickBooks Online; the match itself is done in QuickBooks and BuildBook's sync settings, which no tool changes. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → manage_price_book
REST endpointPOST https://cotlet.dev/api/v1/buildbook/price-book/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `add_item`, `add_cost_code`, `export_cost_codes`. `list` and `export_cost_codes` only read. |
| item object | object | For `add_item`: name, cost_code, type, unit and price. |
| cost_code object | object | For `add_cost_code`: category number (up to 6 digits), category name, code number and title. |
| unmatched_only boolean | boolean | For `export_cost_codes`. |
{
"action": "action"
} {
"cost_codes": [
{
"code": "02-100",
"title": "Demolition"
},
{
"code": "09-300",
"title": "Tile"
}
],
"unmatched": 1
} The default applies to new budgets and estimates. Until you set one, the default is Do Not Tax. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → manage_tax_rates
REST endpointPOST https://cotlet.dev/api/v1/buildbook/tax-rates/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `add`, `set_default`. `list` only reads. |
| name string | string | Tax name. |
| rate number | number | One rate; for a combined rate, enter the sum. |
{
"action": "action"
} {
"taxes": [
{
"name": "County sales tax",
"rate": 7.25,
"default": true
}
]
} Create the project, lay out phases and dependencies, assign tasks and keep the daily log and files current.
Most tools take a project, so `list` is usually the first call. A project can start from an opportunity with an approved proposal or from a template; unchecked working days are left out of the schedule. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → manage_projects
REST endpointPOST https://cotlet.dev/api/v1/buildbook/projects/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `create`, `update`. `list` and `get` only read. |
| project string | string | Project name, for `get` and `update`. |
| fields object | object | name, address, type, working_days, template, start_date and opportunity. |
{
"action": "action"
} {
"project": "Maple Street bath remodel",
"type": "Bathroom Remodel",
"address": "14 Maple Street, Springfield",
"saved": true
} A template copies tasks, schedule, financials, selections and files; statuses, comments, chats and users are reset, and chat, logs and the client dashboard are not included. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → manage_project_templates
REST endpointPOST https://cotlet.dev/api/v1/buildbook/project-templates/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `create_from_project`, `add_from_gallery`. `list` only reads. |
| project string | string | For `create_from_project`. |
| gallery string | string | For `add_from_gallery`: New Construction, Kitchen Remodel or Bathroom Remodel. |
| keep_assignments boolean | boolean | Keep task assignments in the template. |
{
"action": "action"
} {
"template": "Bathroom remodel, standard",
"from": "Maple Street bath remodel",
"saved": true
} Phases are shared with clients automatically. In Auto mode, moving a predecessor reschedules its successors and respects non-working days; Fixed and Ignore leave them in place. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → manage_schedule
REST endpointPOST https://cotlet.dev/api/v1/buildbook/schedule/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `add_phase`, `update_phase`, `set_dependency_mode`. Every action writes. |
| project string required | string | Project name, as manage_projects `list` returns it. |
| phase string | string | Phase name, required with a date range. |
| start string | string | ISO date. |
| end string | string | ISO date. |
| depends_on string | string | Predecessor phase or task. |
| mode string | string | For `set_dependency_mode`: `auto`, `fixed` (the default) or `ignore`. |
{
"action": "action",
"project": "project"
} {
"project": "Maple Street bath remodel",
"phase": "Tile",
"start": "2026-11-16",
"end": "2026-11-19",
"depends_on": "Rough-in",
"saved": true
} A project schedule has phases (shared with clients) and tasks (not shared by default), each with dates and dependencies. The Global Schedule shows every active project you are part of plus opportunities with a Planned Schedule.
MCP callbuildbook_read → view_schedule
REST endpointGET https://cotlet.dev/api/v1/buildbook/schedules/view
| Name | Type | Description |
|---|---|---|
| project string | string | Project name. Leave empty for the Global Schedule. |
| types array | array | Global Schedule filter: Phases, Tasks, Selections, Payments, Change Orders. |
{
"project": "Maple Street bath remodel",
"phases": [
{
"name": "Demolition",
"start": "2026-11-09",
"end": "2026-11-10",
"status": "complete"
},
{
"name": "Tile",
"start": "2026-11-16",
"end": "2026-11-19",
"status": "incomplete"
}
]
} Assignees get an email once they have accepted the project invite. Copied tasks are added beside the existing ones, never over them. Bulk updates change status, assignees or client visibility, or delete. A public link lets anyone with it read the task. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → manage_tasks
REST endpointPOST https://cotlet.dev/api/v1/buildbook/tasks/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `create`, `update`, `assign`, `copy_from`, `bulk_update`, `share`. `list` only reads. |
| project string required | string | Project name, as manage_projects `list` returns it. |
| title string | string | Task title, the only required field for `create`. |
| assignees array | array | Project members, pending invitees or No Access contacts. |
| due string | string | ISO date or date range. Only tasks with a due date appear on the schedule. |
| status string | string | Not Started, In Progress, On Hold, Completed, or your own statuses. |
| source_project string | string | For `copy_from`: the project or template to copy tasks from. |
| share string | string | For `share`: `client` or `public_link`. |
{
"action": "action",
"project": "project"
} {
"project": "Maple Street bath remodel",
"task": "Order vanity",
"assignees": [
"Office"
],
"due": "2026-11-14",
"status": "In Progress",
"saved": true
} A status change applies to every project and adds or renames a column in the Card View. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → manage_task_statuses
REST endpointPOST https://cotlet.dev/api/v1/buildbook/task-statuses/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `add`, `rename`, `delete`. `list` only reads. |
| status string | string | Status name. |
| new_name string | string | For `rename`. |
| move_to string | string | For `delete`: the status that takes its tasks. |
{
"action": "action"
} {
"statuses": [
"Not Started",
"In Progress",
"Waiting on Client",
"On Hold",
"Completed"
]
} Returns the report as text for a job-site sheet or a meeting, filtered by assignee or tag if you ask. Nothing in BuildBook changes.
MCP callbuildbook_read → print_tasks
REST endpointGET https://cotlet.dev/api/v1/buildbook/tasks/print
| Name | Type | Description |
|---|---|---|
| project string required | string | Project name, as manage_projects `list` returns it. |
| show array | array | Details to include: Assigned, Due Date, Phase, Notes, Subtasks, Tags, Attachments, Comments. |
| completed boolean | boolean | True for completed tasks only, false for incomplete. |
| sort string | string | `due_date` or `custom`. |
{
"project": "project"
} {
"project": "Maple Street bath remodel",
"tasks": [
{
"title": "Order vanity",
"assigned": "Office",
"due": "2026-11-14"
},
{
"title": "Tile install",
"assigned": "Sample Tile Co",
"due": "2026-11-16"
}
]
} A posted log is visible to team members and collaborators with access to Logs. Shared logs appear on the client's Updates tab. The agent writes only what you gave it. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → manage_daily_logs
REST endpointPOST https://cotlet.dev/api/v1/buildbook/daily-logs/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `create`, `share_with_client`. `list` only reads. |
| project string required | string | Project name, as manage_projects `list` returns it. |
| date string | string | ISO date. Defaults to today; a past date backlogs the entry. |
| entry string | string | Weather, site condition and progress, in your words. |
| file_urls array | array | Photos or documents to attach, up to 10 per upload. |
{
"action": "action",
"project": "project"
} {
"project": "Maple Street bath remodel",
"date": "2026-11-13",
"entry": "Cement board up in the shower. Tile starts Monday.",
"shared_with_client": false,
"saved": true
} Files are visible to your Pro Team and collaborators with Everything access by default; sharing with clients is a separate choice in BuildBook. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → manage_project_files
REST endpointPOST https://cotlet.dev/api/v1/buildbook/project-files/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `upload`, `create_folder`. `list` only reads. |
| project string required | string | Project name, as manage_projects `list` returns it. |
| file_urls array | array | For `upload`: links the Cloud Browser downloads from, up to 10 per upload. |
| folder string | string | Folder name. |
{
"action": "action",
"project": "project"
} {
"project": "Maple Street bath remodel",
"folder": "Plans",
"uploaded": [
"Bath layout rev B.pdf"
]
} BuildBook emails each person a link to join. Pro Team invitations need a Team or Business plan, and a team member must accept before you can add them to a project. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → invite_people
REST endpointPOST https://cotlet.dev/api/v1/buildbook/people/invite
| Name | Type | Description |
|---|---|---|
| scope string required | string | `team` (account level) or `project`. |
| project string | string | For `project`. |
| people array | array | Email, and role: Admin or Member for the team; Pro Team Member, Collaborator or Client for a project. |
{
"scope": "scope"
} {
"scope": "project",
"project": "Maple Street bath remodel",
"invited": [
{
"email": "tile@example.com",
"role": "Collaborator"
}
]
} Budget lines, bills, expenses and imported card transactions, with the Financials summary and the budget report.
Cost totals the bills and expenses. Price includes items, selections, markup, taxes and management fees; approved change orders and credits are added or subtracted below it, and paid invoices are shown beneath the total price.
MCP callbuildbook_read → view_project_financials
REST endpointGET https://cotlet.dev/api/v1/buildbook/project-financials/view
| Name | Type | Description |
|---|---|---|
| project string required | string | Project name, as manage_projects `list` returns it. |
{
"project": "project"
} {
"project": "Maple Street bath remodel",
"cost": 3120,
"estimated": 4620,
"price": 5180,
"change_orders_approved": 560,
"invoices_paid": 2310
} A budget can also come from converting an estimate. An item of type Selection becomes a selection category with an allowance; deleting it deletes the category and its items. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → manage_budget
REST endpointPOST https://cotlet.dev/api/v1/buildbook/budget/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `add_from_price_book`, `add_item`. `list` only reads. |
| project string required | string | Project name, as manage_projects `list` returns it. |
| items array | array | Name, cost_code, type (for example Labor, Material or Selection), quantity, unit and price. |
{
"action": "action",
"project": "project"
} {
"project": "Maple Street bath remodel",
"items": [
{
"name": "Demolition",
"cost_code": "02-100",
"price": 1800
},
{
"name": "Floor and wall tile",
"cost_code": "09-300",
"price": 1870
}
]
} An expense needs a vendor, the date paid and the cost. Unassociated costs do not count against a budget line. `list` reads the global Bills & Expenses page, limited to projects where you have financial permissions. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → manage_bills_and_expenses
REST endpointPOST https://cotlet.dev/api/v1/buildbook/bills-and-expenses/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `add_bill`, `add_expense`, `import_transactions`. `list` only reads. |
| projects array | array | One project, or several to split across (Admins and Owners). |
| vendor string | string | Vendor or payee; a new name creates a vendor. |
| date string | string | ISO date; for an expense, the date paid. |
| lines array | array | budget_line and cost per line; the rest stays Unassociated Cost. |
| csv_url string | string | For `import_transactions`: a CSV with account, payee, received, spent, date and description, positive values only. |
{
"action": "action"
} {
"project": "Maple Street bath remodel",
"type": "Expense",
"vendor": "Example Supply",
"date": "2026-11-12",
"lines": [
{
"budget_line": "Floor and wall tile",
"cost": 640
}
],
"total": 640,
"saved": true
} The report carries your logo, the project name and address. Nothing in BuildBook changes; the agent returns the file.
MCP callbuildbook_read → export_budget_report
REST endpointGET https://cotlet.dev/api/v1/buildbook/budget-reports/export
| Name | Type | Description |
|---|---|---|
| project string required | string | Project name, as manage_projects `list` returns it. |
| sections array | array | Summary, Budget, Selections, Change Orders, Credits, Payments, Bills & Expenses. |
| format string | string | `pdf` or `excel`. |
{
"project": "project"
} {
"project": "Maple Street bath remodel",
"format": "pdf",
"sections": [
"Summary",
"Change Orders"
],
"file": "Maple Street bath remodel budget.pdf"
} Vendors are businesses you buy from, kept apart from People. Bills and expenses point at them, so add a supplier here first. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → manage_vendors
REST endpointPOST https://cotlet.dev/api/v1/buildbook/vendors/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `create`, `update`. `list` and `get` only read. |
| name string | string | Business name, for example a lumberyard or supplier. |
| fields object | object | category, phone, email, address and notes. |
{
"action": "action"
} {
"name": "Example Supply",
"category": "Tile and stone",
"email": "orders@example.com",
"saved": true
} Everything here reaches the homeowner or changes what they pay. Drafting and sending are separate actions.
Statuses are Draft, Pending, Approved and Declined. `request_approval` emails the client a link with Approve and Decline buttons; `mark_approved` records a verbal approval. Approved change orders add to the project price. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → manage_change_orders
REST endpointPOST https://cotlet.dev/api/v1/buildbook/change-orders/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `create`, `request_approval`, `mark_approved`. `list` and `get` only read. |
| project string required | string | Project name, as manage_projects `list` returns it. |
| title string | string | Short name of the change. |
| description string | string | What changes in the work. |
| items array | array | Name, cost_code, quantity, unit_price, markup and tax per line. |
{
"action": "action",
"project": "project"
} {
"project": "Maple Street bath remodel",
"change_order": "Heated floor mat",
"total": 560,
"status": "Pending",
"sent_to": "Example Homeowner"
} Sending for approval emails and notifies the client, sets the status to Pending and locks the description and photos until the client approves or declines. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → manage_selections
REST endpointPOST https://cotlet.dev/api/v1/buildbook/selections/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `create_category`, `add_option`, `request_approval`, `mark_approved`. `list` only reads. |
| project string required | string | Project name, as manage_projects `list` returns it. |
| category string | string | Selection category, for example Vanity. |
| allowance number | number | Allowance for the category. |
| option object | object | For `add_option`: name, price and description. |
| due string | string | ISO due date of the category. |
{
"action": "action",
"project": "project"
} {
"project": "Maple Street bath remodel",
"category": "Vanity",
"allowance": 1200,
"options": 2,
"approval": "Pending"
} `list` reads the global Invoices page with its Draft, Invoiced, Outstanding, Overdue and Paid totals. Only Draft invoices can be edited. A sent invoice has reached your client; the agent cannot pull it back. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → manage_invoices
REST endpointPOST https://cotlet.dev/api/v1/buildbook/invoices/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `create`, `set_status`, `send`. `list` and `get` only read. |
| project string | string | Project the invoice belongs to. |
| description string | string | What the invoice is for. |
| items array | array | Description and amount per line. |
| status string | string | Draft, Open, Paid or Void. Overdue is set by BuildBook. |
| send_by string | string | For `send`: `email` or `link`. |
{
"action": "action"
} {
"project": "Maple Street bath remodel",
"invoice": "Progress payment, tile",
"status": "Draft",
"total": 2310,
"sent": false
} Your public page for leads: headline, collections of project photos, services and testimonials.
The Portfolio is public, and its contact form creates opportunities for you. BuildBook asks for a featured image at least 1200 pixels wide; sections left blank do not show. By default you confirm each call; you can switch that off for this tool.
MCP callbuildbook_write → manage_portfolio
REST endpointPOST https://cotlet.dev/api/v1/buildbook/portfolio/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `get`, `update`, `create_collection`, `add_photos`, `feature_collections`. `list` and `get` only read. |
| fields object | object | headline (up to 100 words), featured_image_url, services, testimonials, social links. |
| collection string | string | Collection name and description. |
| photo_urls array | array | For `add_photos`: up to 10 per upload. |
| featured array | array | For `feature_collections`: up to five collections; the first is featured. |
{
"action": "action"
} {
"headline": "Kitchens and baths, built to last",
"collections": [
"Maple Street bath",
"Oak Court kitchen"
],
"saved": true
} Your signed-in BuildBook browser profile, AES-256-GCM encrypted, in Finland. Never your password.
The 30 BuildBook tools. The session cookie stays in the Cloud Browser.
The projects and financials your BuildBook role and project permissions open. Global Estimates and Invoices need an Admin or Owner.
Account settings, roles and permissions, notifications, and the QuickBooks Online connection and sync.
You log in again yourself, in the same Cloud Browser.
Disable BuildBook for agents, reset the browser, or change your BuildBook password.
You type your BuildBook password yourself; the agent only uses the session that login leaves behind. Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results).
BuildBook keeps adding to its screens: its Help Center describes the new document-style change orders and the global Bills & Expenses page. Cotlet updates the BuildBook server when those screens change, with nothing for you to redeploy.
The agent works with your user's permissions. A collaborator login without Financials access gives the agent no invoices or bills either.
If BuildBook logs you out, one click in the Cotlet console reopens the Cloud Browser so you can log in again.
share call sends the proposal. | Action | How to put it right |
|---|---|
| Task, phase or project details | Call manage_tasks, manage_schedule or manage_projects again with the earlier values |
| Invoice still in Draft | Edit it; only Draft invoices can change |
| Change order sent for approval | Cancel the request in BuildBook, then edit and send again |
| Selection sent for approval | Locked until the client approves or declines; talk to them |
| Invoice already sent | With your client now: move it back to Draft or Void and explain |
All 20 write tools ask first: by default you confirm each call, and you can switch that off per tool. The 10 read tools, from the Pro Dashboard to the budget report, run at once.
{
"name": "manage_estimates",
"arguments": {
"action": "create",
"opportunity": "Maple Street bath remodel",
"source": "price_book",
"items": [
{
"name": "Demolition",
"cost_code": "02-100",
"type": "Labor",
"quantity": 1,
"unit_price": 1800
},
{
"name": "Floor and wall tile",
"cost_code": "09-300",
"type": "Material",
"quantity": 85,
"unit_price": 22
},
{
"name": "Vanity install",
"cost_code": "06-400",
"type": "Labor",
"quantity": 1,
"unit_price": 950
}
]
}
} curl -X POST https://cotlet.dev/api/v1/buildbook/estimates/manage \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"create","opportunity":"Maple Street bath remodel","source":"price_book","items":[{"name":"Demolition","cost_code":"02-100","type":"Labor","quantity":1,"unit_price":1800},{"name":"Floor and wall tile","cost_code":"09-300","type":"Material","quantity":85,"unit_price":22},{"name":"Vanity install","cost_code":"06-400","type":"Labor","quantity":1,"unit_price":950}]}' {
"opportunity": "Maple Street bath remodel",
"estimate": "Version 1",
"status": "Draft",
"items": 3,
"total": 4620
} The example prices demolition at $1,800, 85 sq ft of tile at $22 and the vanity install at $950: $4,620 in all, saved as a Draft. A cron job or n8n flow can make the same call over REST at /api/v1/buildbook with the same key and price, in JSON. Failed calls are free.
About $23 a monthfor a remodeler running two jobs at a time, 4,000 credits. Your BuildBook plan stays as it is.
| Job | Calls | Credits |
|---|---|---|
| Morning dashboard and overdue check | 2 × 20 | 400 |
| Daily log on two jobs | 2 × 20 | 400 |
| Task updates and assignments | 2 × 20 | 400 |
| Bills and expenses entered | 1 × 40 | 400 |
| Friday job cost report | 6 × 4 | 240 |
| Schedule moves | 2 × 8 | 160 |
| New lead to draft estimate | 3 × 6 | 180 |
| Selections sent for approval | 2 × 6 | 120 |
| Change orders and invoices | 2 × 10 | 200 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 250 calls | 4,000 |
The smallest pack, 5,000 credits for $29, covers this month with room to spare. More jobs at once means more calls.
Credit packs are one-time purchases, not a subscription. The month above is built from our own assumptions, not measured customer usage.
| Credits | Price, one time | Calls at 10 credits | Per 1,000 credits |
|---|---|---|---|
| 5,000 | $29 | 500 | $5.80 |
| 15,000 | $79 | 1,500 | $5.27 |
| 32,000 | $149 | 3,200 | $4.66 |
| 60,000 | $249 | 6,000 | $4.15 |
Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.
| Option | What it does | Where it stops |
|---|---|---|
| QuickBooks Online sync | BuildBook's own link: pushes bills, expenses and invoices with matched cost codes. | Accounting only; nothing for estimates, schedules or an AI agent. |
| Client Dashboard | Homeowners follow updates, the schedule and selections themselves. | For your clients, not a way to automate your office. |
| By hand | Open each project in BuildBook and click through. | One screen at a time, only while you are at the desk. |
If BuildBook ever publishes an API that covers your job, use it: it is the vendor's own route. Until then Cotlet is how ChatGPT, Claude or a script works in BuildBook from your own login, with nothing to host.
Take Group sp. z o.o. runs Cotlet: a software company registered in Poland, EU (VAT PL6342984273), trading since 2019 and led by Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Questions about the BuildBook tools go to contact@cotlet.dev.
Sign up free at https://cotlet.dev/signup?app=buildbook, turn on BuildBook under Integrations in the console and log in at https://app.buildbook.co/ in your Cloud Browser. Then connect your AI agent and ask it about a project. The trial needs no card.
BuildBook publishes no public API: its site and Help Center show no developer documentation, API keys or API pricing (checked 13 Nov 2026). No BuildBook MCP server or official ChatGPT or Claude connector was verified; its documented integration is QuickBooks Online. Cotlet does not need one: it works in your own signed-in BuildBook account.
The one the job needs in BuildBook. Global Estimates and Global Invoices are for Pro Team Admins and Owners, the global Bills & Expenses page for admins, and invoices for the Pro Team and collaborators with Everything on Financials. The agent inherits whatever your user has.
No. BuildBook documents its own QuickBooks Online connection, sync settings and cost code matching in its Help Center. No Cotlet tool connects, unlinks or changes that sync; manage_price_book can only export your cost codes for matching.
Only through actions that already reach clients in BuildBook: sharing an estimate, a daily log or a task, requesting approval of a change order or selection, and sending an invoice. Each waits for your OK. read_project_chat reads the chat and never posts.
Only in how it is called. Both carry the same 30 tools, inputs, answers, API key and price. Agents use MCP; scripts and n8n HTTP steps use REST.
No. Cotlet is independent and not affiliated with BuildBook.
Free 7-day trial with 2,000 credits, no card needed.
May we use Google Analytics to see which pages help people? It sets cookies only if you accept. No ads, and we never sell data. Cookie policy