Local services & SaaS
Buildertrend
Schedules, daily logs, change orders and selections for builders.
12 endpoints
Bolster lists API access only on its Enterprise plan and publishes no MCP server (checked 13 Nov 2026). Cotlet runs a hosted Bolster MCP server with 10 tools that ChatGPT and Claude use in your own contractor account. Proposals, bid requests and payment requests wait for your OK.
10 tools Read and write
Bolster lists API access on its custom Enterprise plan only and publishes no API reference or self-serve key page. Its Zapier integration runs through API webhooks. No Bolster MCP server and no official ChatGPT or Claude connector was verified.
| What you need | Bolster API | Zapier | Cotlet |
|---|---|---|---|
| Ask ChatGPT or Claude to do the work | No MCP server verified | Triggers between apps | Hosted MCP server |
| Available on your current plan | Enterprise plan only | Any plan, your Zapier account | Any plan, your own login |
| Estimates, proposals, bids and payment requests | Endpoints not published | Event data, not the documents | 10 tools, writes after your OK |
| Run from n8n or a script | After sales, your own code | Inside Zapier | REST, same key |
Checked 13 Nov 2026. Sources: Bolster pricing · Bolster integrations · Bolster Construction Intelligence · Estimates · Takeoff · Presentations · Upsells and selections · Scheduling · Job budgets and material lists · Vendor management · CRM pipeline · Payments
Once, in a browser we host for you.
One address in its settings.
The agent drafts the estimate, you approve it.
Your agent works in your own signed-in Cloud Browser. Anything that reaches a client or a vendor, or asks for money, waits for your OK. Who can see your session
Sign in to Bolster in a Cloud Browser. Open app.bolsterbuilt.com in your Cotlet Cloud Browser and sign in with your own Bolster 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.
Bolster uses the shared address https://cotlet.dev/mcp/v1 together with every other app you turn on, so a single connector is enough. Enabled Bolster after connecting? Refresh the connector to load the 10 Bolster 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: bolster_read One tool per Bolster feature page, from the pipeline to payments. Most take an `action`: `list` and `get` only read, the other actions write and ask first.
Every lead, estimate, booked job and payment by stage, with the proposal opens Bolster tracks. Read only.
Bolster moves each client and job through the Pipeline stages by itself, from lead to estimate, booking, progress and payment. This tool reads that board and, for one job, the proposal interactions Bolster tracks, such as when the client opened or changed the quote. It changes nothing and runs without asking.
MCP callbolster_read → manage_crm_pipeline
REST endpointGET https://cotlet.dev/api/v1/bolster/crm-pipelines/manage
| Name | Type | Description |
|---|---|---|
| stage string | string | Pipeline stage to read, in Bolster's words: lead, estimate sent, booked, in progress or payment. Leave empty for all. |
| job string | string | One client or job to open, with its interactions. Leave empty for the list. |
{
"stage": "estimate sent",
"jobs": [
{
"job": "Maple Street deck",
"client": "Example Homeowner",
"estimate": 10590,
"proposal_opened": "2026-11-12"
},
{
"job": "Hill Road basement",
"client": "Sample Client",
"estimate": 38200,
"proposal_opened": null
}
]
} From a plain-words description or measurements to the presentation the client signs. The agent enters the dimensions you give it; it does not measure plans.
Bolster describes this on its Construction Intelligence and estimating pages: describe the job or upload a past estimate, and Bolster builds quantities and costs. The agent returns the draft lines for you to check and saves nothing past what Bolster AI creates. Read the result with create_estimates before it goes into a proposal. By default you confirm each call; you can switch that off for this tool.
MCP callbolster_write → generate_ai_estimates
REST endpointPOST https://cotlet.dev/api/v1/bolster/ai-estimates/generate
| Name | Type | Description |
|---|---|---|
| job string required | string | Job or client name, as list in manage_crm_pipeline returns it. |
| prompt string | string | The job in plain words, for example "Composite deck, 20 x 16, with stairs and railing". |
| past_estimate_url string | string | Optional: a link to an old estimate file the Cloud Browser can download, to start from instead of the prompt. |
{
"job": "job"
} {
"job": "Maple Street deck",
"prompt": "Composite deck, 20 x 16, with stairs and railing",
"draft": [
{
"item": "Composite decking",
"quantity": 320,
"unit": "sq ft"
},
{
"item": "Aluminum railing",
"quantity": 52,
"unit": "lf"
},
{
"item": "Stairs, 4 steps",
"quantity": 1,
"unit": "each"
}
]
} Bolster's takeoff measures areas, lengths and counts on plans, satellite images or a drawing, and links them to items, assemblies or calculations. The agent enters the measurements you give it; it does not measure drawings by itself. Takeoff is on Bolster's Pro plan and up. By default you confirm each call; you can switch that off for this tool.
MCP callbolster_write → measure_takeoffs
REST endpointPOST https://cotlet.dev/api/v1/bolster/takeoffs/measure
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `get`, `create`. `list` and `get` only read. |
| job string required | string | Job or client name, as list in manage_crm_pipeline returns it. |
| measurements array | array | For `create`: label, type (`area`, `length` or `count`), value and unit, plus the estimate item each one feeds. |
{
"action": "action",
"job": "job"
} {
"job": "Maple Street deck",
"measurements": [
{
"label": "Deck surface",
"type": "area",
"value": 320,
"unit": "sq ft",
"item": "Composite decking"
},
{
"label": "Railing run",
"type": "length",
"value": 52,
"unit": "lf",
"item": "Aluminum railing"
}
],
"saved": true
} Bolster estimates are built from items and pre-built assemblies with costs and profit; items can carry formulas tied to dimensions or a takeoff, and AutoCost can fill live material and labor prices on plans that include it. The agent shows you the lines and total before it saves. A revision to an estimate the client has seen triggers a new approval in Bolster. By default you confirm each call; you can switch that off for this tool.
MCP callbolster_write → create_estimates
REST endpointPOST https://cotlet.dev/api/v1/bolster/estimates
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `create`, `update`. `list` and `get` only read. |
| job string required | string | Job or client name, as list in manage_crm_pipeline returns it. |
| estimate string | string | Estimate name, for `get` and `update`. |
| lines array | array | For `create` and `update`: item or assembly, quantity, unit and unit cost per line. Leave unit cost empty to keep the price Bolster fills in. |
{
"action": "create",
"job": "Maple Street deck",
"lines": [
{
"item": "Composite decking",
"quantity": 320,
"unit": "sq ft",
"unit_cost": 18
},
{
"item": "Aluminum railing",
"quantity": 52,
"unit": "lf",
"unit_cost": 65
},
{
"item": "Stairs, 4 steps",
"quantity": 1,
"unit": "each",
"unit_cost": 1450
}
]
} {
"job": "Maple Street deck",
"estimate": "Composite deck, 20 x 16",
"lines": 3,
"total": 10590,
"saved": true
} An optional item can be added or removed by the client in the presentation; upgrades give "good, better, best" alternatives priced to the estimate dimensions; a selection combines style, color and finish choices. These change what the client can choose and pay, so the agent shows the choices before saving. By default you confirm each call; you can switch that off for this tool.
MCP callbolster_write → manage_selections
REST endpointPOST https://cotlet.dev/api/v1/bolster/selections/manage
| Name | Type | Description |
|---|---|---|
| job string required | string | Job or client name, as list in manage_crm_pipeline returns it. |
| item string required | string | Estimate item or assembly, for example Composite decking. |
| kind string required | string | One of `optional`, `upgrade`, `selection`. |
| choices array | array | For `upgrade` and `selection`: the alternatives, each with a name and its cost. |
{
"job": "job",
"item": "item",
"kind": "kind"
} {
"job": "Maple Street deck",
"item": "Composite decking",
"kind": "upgrade",
"choices": [
{
"name": "Standard composite",
"cost": 5760
},
{
"name": "Capped composite",
"cost": 7040
}
],
"saved": true
} Bolster builds the presentation from the finished estimate. The client picks options, signs the embedded contract, pays the deposit and picks a start date on the same page. A sent proposal reaches your client and cannot be pulled back by the agent. By default you confirm each call; you can switch that off for this tool.
MCP callbolster_write → create_presentations
REST endpointPOST https://cotlet.dev/api/v1/bolster/presentations
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `get`, `send`. `list` and `get` only read. |
| job string required | string | Job or client name, as list in manage_crm_pipeline returns it. |
| channel string | string | For `send`: `email` or `sms`. |
| message string | string | For `send`: a short note to the client. |
{
"action": "action",
"job": "job"
} {
"job": "Maple Street deck",
"proposal": "Composite deck, 20 x 16",
"total": 10590,
"channel": "email",
"sent": true
} The schedule Bolster built from the estimate, the budget and material list, and vendor bids on estimate items.
Bolster creates the schedule from the estimate items when a job is booked, grouped into project stages your client can see. Assigning notifies the crew or sub. Approving a task the team marked complete makes Bolster send the client a payment request through the client portal, so `approve` is money as well as scheduling. Job scheduling is on the Pro plan and up. By default you confirm each call; you can switch that off for this tool.
MCP callbolster_write → schedule_jobs
REST endpointPOST https://cotlet.dev/api/v1/bolster/jobs/schedule
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `update`, `assign`, `approve`. `list` and `get` only read. |
| job string required | string | Job or client name, as list in manage_crm_pipeline returns it. |
| task string | string | Schedule task, for `update`, `assign` and `approve`. |
| start_date string | string | For `update`: ISO date. |
| assignee string | string | For `assign`: an employee or a subcontractor. |
| notify string | string | For `assign`: `email`, `sms` or `chat` (Bolster Chat). |
{
"action": "action",
"job": "job"
} {
"job": "Maple Street deck",
"task": "Footings and posts",
"assignee": "Example Concrete",
"notify": "sms",
"start_date": "2026-11-18",
"saved": true
} Bolster builds the material list and the budget from the estimate when the job is booked, laid out to your dimensions. When a cost differs, you update the actuals column in the job's budget tab; this tool does that line by line after your OK. `get` reads and changes nothing. By default you confirm each call; you can switch that off for this tool.
MCP callbolster_write → manage_job_budget
REST endpointPOST https://cotlet.dev/api/v1/bolster/job-budget/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `get`, `update`. `list` and `get` only read. |
| job string required | string | Job or client name, as list in manage_crm_pipeline returns it. |
| view string | string | For `get`: `budget` or `materials`. |
| line string | string | For `update`: the budget line. |
| actual number | number | For `update`: the actual cost to enter. |
{
"action": "action",
"job": "job"
} {
"job": "Maple Street deck",
"view": "budget",
"lines": [
{
"line": "Composite decking",
"budget": 5760,
"actual": 5615
},
{
"line": "Aluminum railing",
"budget": 3380,
"actual": null
},
{
"line": "Stairs",
"budget": 1450,
"actual": null
}
]
} Bids come back into Bolster lined up against the budget, so `list` shows who is under or over. An awarded bid becomes a vendor order in Bolster. Sending and awarding reach vendors outside your company, so the agent names them before it acts. RFQ management is on the Premium plan and up. By default you confirm each call; you can switch that off for this tool.
MCP callbolster_write → send_rfq_requests
REST endpointPOST https://cotlet.dev/api/v1/bolster/rfq-requests
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `send`, `award`. `list` and `get` only read. |
| job string required | string | Job or client name, as list in manage_crm_pipeline returns it. |
| items array | array | For `send`: the estimate items to price. |
| vendors array | array | For `send`: suppliers or subcontractors who should bid. |
| due_date string | string | For `send`: ISO date the bids are due. |
| vendor string | string | For `award`: the vendor whose bid wins. |
{
"action": "action",
"job": "job"
} {
"job": "Maple Street deck",
"items": [
"Aluminum railing"
],
"bids": [
{
"vendor": "Example Rail Supply",
"amount": 3290,
"versus_budget": -90
},
{
"vendor": "Sample Fabrication",
"amount": 3510,
"versus_budget": 130
}
]
} Payment requests go through the Bolster client portal. Approving a finished task in schedule_jobs starts one too.
Bolster bills from finished work: the client pays online through the client portal, by card or bank transfer, and the money lands in Bolster Wallet (US and Canada). On Pro and up payments sync to QuickBooks Online. A payment request reaches your client, so it waits for your OK. By default you confirm each call; you can switch that off for this tool.
MCP callbolster_write → collect_customer_payments
REST endpointPOST https://cotlet.dev/api/v1/bolster/customer-payments/collect
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `request`. `list` and `get` only read. |
| job string required | string | Job or client name, as list in manage_crm_pipeline returns it. |
| milestone string | string | For `request`: the stage or finished work being billed. |
| amount number | number | For `request`: the amount, when it is not set by the payment schedule. |
{
"action": "action",
"job": "job"
} {
"job": "Maple Street deck",
"payments": [
{
"milestone": "Deposit",
"amount": 3177,
"status": "paid"
},
{
"milestone": "Framing complete",
"amount": 4236,
"status": "requested"
},
{
"milestone": "Final",
"amount": 3177,
"status": "scheduled"
}
]
} Your signed-in Bolster browser profile, AES-256-GCM encrypted, in Finland. Never your password.
The 10 Bolster tools. The session cookie stays in the Cloud Browser.
The jobs, estimates and payments your Bolster user can open, limited by your plan.
Bolster Wallet payouts and bank details, vendor bill payments, your users and the QuickBooks Online and CompanyCam connections.
You sign in again yourself, in the same Cloud Browser.
Disable Bolster for agents, reset the browser, or change your Bolster password.
You enter your Bolster password yourself; the agent only works with the session that sign-in leaves. Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results).
Bolster ships new versions of Construction Intelligence and moves screens around. Cotlet updates the Bolster server when that happens, so your agent and your scripts keep their calls as they are.
What the agent can reach follows your Bolster plan. Moving from Core to Pro opens takeoff and job scheduling to it; Premium adds RFQ management.
If Bolster signs you out, one click in the Cotlet console reopens the Cloud Browser so you can sign in again.
| Action | How to put it right |
|---|---|
| Estimate lines, upgrades, schedule dates | Call create_estimates, manage_selections or schedule_jobs again with the earlier values |
| Budget actual | Enter the right actual with manage_job_budget |
| Proposal or bid request sent | Already with the client or vendor: follow up with them directly |
| Approved task, payment requested | The client has the request in the portal: talk to them before you change it |
9 of the 10 tools ask first: by default you confirm each call, and you can switch that off per tool. manage_crm_pipeline only reads and runs at once.
{
"name": "create_estimates",
"arguments": {
"action": "create",
"job": "Maple Street deck",
"lines": [
{
"item": "Composite decking",
"quantity": 320,
"unit": "sq ft",
"unit_cost": 18
},
{
"item": "Aluminum railing",
"quantity": 52,
"unit": "lf",
"unit_cost": 65
},
{
"item": "Stairs, 4 steps",
"quantity": 1,
"unit": "each",
"unit_cost": 1450
}
]
}
} curl -X POST https://cotlet.dev/api/v1/bolster/estimates \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"create","job":"Maple Street deck","lines":[{"item":"Composite decking","quantity":320,"unit":"sq ft","unit_cost":18},{"item":"Aluminum railing","quantity":52,"unit":"lf","unit_cost":65},{"item":"Stairs, 4 steps","quantity":1,"unit":"each","unit_cost":1450}]}' {
"job": "Maple Street deck",
"estimate": "Composite deck, 20 x 16",
"lines": 3,
"total": 10590,
"saved": true
} The example prices 320 sq ft of composite decking at $18, 52 lf of railing at $65 and one set of stairs at $1,450: $10,590 in all. A cron job or n8n flow can make the same call over REST at /api/v1/bolster with the same key and price, in JSON. Failed calls are free.
About $23 a monthfor a remodeler quoting about a dozen jobs a month, 4,000 credits. Your Bolster plan stays as it is.
| Job | Calls | Credits |
|---|---|---|
| Morning pipeline check | 1 × 20 | 200 |
| AI draft, takeoff, estimate and upgrades | 4 × 12 | 480 |
| Proposals sent | 1 × 12 | 120 |
| Weekly task assignments | 10 × 4 | 400 |
| Actual costs into budgets | 1 × 60 | 600 |
| Vendor bid requests and awards | 2 × 10 | 200 |
| Approved tasks and payment requests | 2 × 25 | 500 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 250 calls | 4,000 |
The smallest pack, 5,000 credits for $29, covers this month with credits left over. More jobs or daily bid follow-ups use more calls.
Credit packs are one-time purchases, not a subscription. The month above is our own example, 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 |
|---|---|---|
| Bolster API | Listed on the Enterprise plan for teams of 6+ users. | Through sales, no public reference; you write, host and fix the client. |
| Zapier integration | Bolster events into other apps through API webhooks, for example a calendar event for a new task. | Moves data on triggers; no agent builds or sends anything in Bolster. |
| Bolster AI | Bolster's own assistant scopes a job from a prompt or past estimate. | Inside Bolster only; no official ChatGPT or Claude connector was verified. |
| By hand | Open each job in Bolster and click through. | One screen at a time, only while you are at the desk. |
If you are on Enterprise and the Bolster API covers your job, use it: it is the vendor's own route. Cotlet fits when you want ChatGPT, Claude or a script working in Bolster on the plan you already have, 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), in business since 2019 and led by its founders Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Questions about the Bolster tools go to contact@cotlet.dev.
Sign up free at https://cotlet.dev/signup?app=bolster, turn on Bolster under Integrations in the console and sign in at https://app.bolsterbuilt.com/ in your Cloud Browser. Then connect your AI agent and ask it about your pipeline. The trial needs no card.
Bolster lists API access only on its custom Enterprise plan and connects to Zapier through API webhooks, with no public API reference (checked 13 Nov 2026). No Bolster MCP server and no official ChatGPT or Claude connector was verified; Bolster AI is the vendor's own estimating assistant. Cotlet does not use that API: it works in your own signed-in Bolster account.
The tools follow your plan. Bolster's pricing page lists takeoff and job scheduling from Pro, and RFQ and PO management from Premium, so on Core those tools find nothing to work on. Estimates, AI estimating and the CRM are on every plan.
Bolster AI is Bolster's own assistant that scopes a job from a prompt or a past estimate, inside Bolster. Cotlet is separate: it lets ChatGPT, Claude or a script you choose work across your Bolster account, and generate_ai_estimates hands a prompt to Bolster AI for you.
No. The tools request payments from your clients and send bid requests to vendors, but no tool pays a bill or moves money out of Bolster Wallet. You pay vendors in Bolster yourself.
Only in how it is called. Both carry the same 10 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 Bolster.
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