Local services & SaaS
Faire
Orders, inventory, reorders and messages for wholesale brands.
12 endpoints
Your AI agent writes estimates from your site notes, turns approved ones into scheduled jobs, invoices finished work and lists what is overdue. Sign in to Contractor+ once in your own Cloud Browser. No Pro Team API needed.
10 tools Read and write
Contractor+ has no MCP server and no ChatGPT or Claude app. Its public API uses an account API key, and the help center lists "Zapier & Developer API" only under the Pro Team plan (checked 8 Nov 2026). Cotlet runs 10 Contractor+ tools hosted, over MCP for agents and REST for scripts, in your own Contractor+ login on any plan.
| What you need | Contractor+ API | By hand | Cotlet |
|---|---|---|---|
| Estimates and jobs | Pro Team only | Yes, one by one | Yes |
| Send an estimate or invoice | Pro Team only | Yes, one by one | Yes, after your OK |
| Overdue list | Pro Team only | Yes, a filter | Yes |
| Ask in ChatGPT or Claude | No | No | Yes |
| Contractor+ plan needed | Pro Team | Any | Any |
Checked 8 Nov 2026. Sources: Contractor+ pricing plans (help center) · Contractor+ Public API · Contractor+ integrations
Once, in a browser we host for you.
One address in its settings.
It drafts the work, you OK what customers get.
We never keep your Contractor+ password, and no estimate or invoice reaches a client until you approve it. Who can see your session
Sign in to Contractor+ in a Cloud Browser. Create a Cotlet account, open Contractor+ in its Cloud Browser, sign in with your owner or admin login and press Enable for agents.
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.
Contractor+ shares the address https://cotlet.dev/mcp/v1 with every other app you enable, so one connector covers them all. Turned Contractor+ on after connecting? Refresh the connector and the 10 tools appear.
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" Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth // ~/.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: contractor_plus_read Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key>
Tool: contractor_plus_write Search matches name, phone, email and address, so a repeat customer is found before a duplicate is made.
Returns clients with ID, contact details and job address. Pass the client_id to create_estimate and create_job.
MCP callcontractor_plus_read → list_clients
REST endpointGET https://cotlet.dev/api/v1/contractor-plus/clients
| Name | Type | Description |
|---|---|---|
| query string | string | Name, phone, email or street address. |
| page integer | integer | Page number. Default: 1. |
{
"clients": [
{
"client_id": "CL-2291",
"name": "Grace Lin",
"phone": "555-0166",
"email": "grace@example.com",
"address": "9 Birch Ln, Austin, TX 78704"
}
],
"page": 1
} Creates the client. Search list_clients first so a repeat customer does not become a duplicate. Reaches no one, so it runs at once.
MCP callcontractor_plus_write → create_client
REST endpointPOST https://cotlet.dev/api/v1/contractor-plus/clients
| Name | Type | Description |
|---|---|---|
| name string required | string | Client or company name. |
| phone string | string | Phone number. |
| email string | string | Email. |
| address string | string | Job address. |
{
"name": "Jane Doe"
} {
"client_id": "CL-2340",
"name": "Sam Okafor",
"address": "41 Maple St, Austin, TX 78701"
} Estimates start as drafts and go out only after your OK. An approved estimate becomes a job with its lines, date and crew.
Returns estimates with client, total and status (Draft, Sent, Approved, Declined).
MCP callcontractor_plus_read → list_estimates
REST endpointGET https://cotlet.dev/api/v1/contractor-plus/estimates
| Name | Type | Description |
|---|---|---|
| status string | string | draft, sent, approved, declined or all. Default: all. |
| page integer | integer | Page number. Default: 1. |
{
"estimates": [
{
"estimate_id": "E-1188",
"client": "Grace Lin",
"total": "6,450.00",
"status": "Sent",
"date": "2026-10-30"
}
],
"page": 1
} Creates the estimate from your lines with your default terms. It stays a draft until send_estimate, so it runs at once.
MCP callcontractor_plus_write → create_estimate
REST endpointPOST https://cotlet.dev/api/v1/contractor-plus/clients/{client_id}/estimates
| Name | Type | Description |
|---|---|---|
| client_id string required | string | Client ID from list_clients. |
| items object[] required | object[] | Lines: description, quantity, unit price. |
| notes string | string | Notes or scope shown on the estimate. |
{
"client_id": "client_8c41d2",
"items": [
"items"
]
} {
"estimate_id": "E-1195",
"client": "Sam Okafor",
"total": "3,820.00",
"status": "Draft"
} Sends the estimate to the client's email or the addresses you pass, with the link to approve it. By default you confirm each call; you can switch that off for this tool.
MCP callcontractor_plus_write → send_estimate
REST endpointPOST https://cotlet.dev/api/v1/contractor-plus/estimates/{estimate_id}
| Name | Type | Description |
|---|---|---|
| estimate_id string required | string | Estimate number from list_estimates. |
| to string[] | string[] | Recipient emails. Default: the client's email. |
{
"estimate_id": "E-1195"
} {
"estimate_id": "E-1195",
"status": "Sent",
"sent_to": [
"sam@example.com"
]
} Returns jobs with client, scheduled date, assigned crew and status.
MCP callcontractor_plus_read → list_jobs
REST endpointGET https://cotlet.dev/api/v1/contractor-plus/jobs
| Name | Type | Description |
|---|---|---|
| status string | string | unscheduled, scheduled, in_progress or completed. |
| date_from string | string | ISO date. |
| date_to string | string | ISO date. |
| page integer | integer | Page number. Default: 1. |
{
"jobs": [
{
"job_id": "J-0742",
"client": "Grace Lin",
"title": "Kitchen remodel",
"scheduled": "2026-11-16",
"crew": [
"Luis"
],
"status": "Scheduled"
}
],
"page": 1
} Creates the job with its lines, schedule date and crew. Your Contractor+ settings decide whether crew members get notified.
MCP callcontractor_plus_write → create_job
REST endpointPOST https://cotlet.dev/api/v1/contractor-plus/jobs
| Name | Type | Description |
|---|---|---|
| estimate_id string | string | Approved estimate to copy lines from. |
| client_id string | string | Client, when there is no estimate. |
| title string required | string | Job title. |
| scheduled string | string | ISO date. |
| crew string[] | string[] | Crew member names. |
{
"title": "title"
} {
"job_id": "J-0751",
"client": "Grace Lin",
"title": "Kitchen remodel",
"from_estimate": "E-1188",
"scheduled": "2026-11-16",
"status": "Scheduled"
} An invoice is built from the completed job and stays unsent until you OK the send.
Returns invoices with client, total, balance and status. Use status unpaid for a collections list.
MCP callcontractor_plus_read → list_invoices
REST endpointGET https://cotlet.dev/api/v1/contractor-plus/invoices
| Name | Type | Description |
|---|---|---|
| status string | string | unpaid, overdue, paid or all. Default: all. |
| page integer | integer | Page number. Default: 1. |
{
"invoices": [
{
"invoice_id": "INV-0915",
"client": "Rivera Dental",
"total": "2,150.00",
"balance": "2,150.00",
"due": "2026-11-02",
"status": "Overdue"
}
],
"page": 1
} Creates the invoice from the job lines. It stays unsent until send_invoice, so it runs at once.
MCP callcontractor_plus_write → create_invoice
REST endpointPOST https://cotlet.dev/api/v1/contractor-plus/jobs/{job_id}/invoices
| Name | Type | Description |
|---|---|---|
| job_id string required | string | Job number from list_jobs. |
{
"job_id": "job_8c41d2"
} {
"invoice_id": "INV-0921",
"job_id": "J-0742",
"total": "6,450.00",
"status": "Draft"
} Sends the invoice with your payment link, if you set one up, to the client's email or the addresses you pass. By default you confirm each call; you can switch that off for this tool.
MCP callcontractor_plus_write → send_invoice
REST endpointPOST https://cotlet.dev/api/v1/contractor-plus/invoices/{invoice_id}
| Name | Type | Description |
|---|---|---|
| invoice_id string required | string | Invoice number from list_invoices. |
| to string[] | string[] | Recipient emails. Default: the client's email. |
{
"invoice_id": "invoice_8c41d2"
} {
"invoice_id": "INV-0921",
"status": "Sent",
"sent_to": [
"grace@example.com"
],
"total": "6,450.00"
} Your signed-in Contractor+ profile, AES-256-GCM encrypted, in Finland. No password.
The 10 Contractor+ tools, never the session cookie.
What your login sees: clients, estimates, jobs, invoices.
Card charges, payouts, payroll, plan and billing, deletes.
You sign in again yourself, in the same Cloud Browser.
Disable for agents, reset the browser, or change your Contractor+ password.
Cotlet never types your password: you sign in yourself, and the agent only uses the session. Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results).
When Contractor+ moves the Send button or renames an estimate status, we fix the tool and your agent calls it the same way. status.cotlet.dev checks the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Create an estimate or invoice | Yes, edit or delete the draft |
| Create a job | Yes, edit or cancel it in Contractor+ |
| Add a client | Yes, edit it |
| Send an estimate or invoice | No |
2 of 10 tools ask first: send_estimate, send_invoice. A new client, a draft estimate, a job or a draft invoice reach no customer, so they run at once. You can turn the wait off per tool once you trust a routine.
{
"name": "send_estimate",
"arguments": {
"estimate_id": "E-1195"
}
} curl -X POST https://cotlet.dev/api/v1/contractor-plus/estimates/E-1195 \
-H "Authorization: Bearer $COTLET_API_KEY" {
"estimate_id": "E-1195",
"status": "Sent",
"sent_to": [
"sam@example.com"
]
} A cron job or n8n flow can call the same tools over REST at /api/v1/contractor-plus with the same key and price, in JSON. Failed calls are free. Each tool row above shows its REST path.
About $19 a monthfor a flooring contractor with a crew of 3, 3,260 credits. Your Contractor+ plan stays as it is.
| Job | Calls | Credits |
|---|---|---|
| Estimate from site notes, sent | 4 × 25 | 1,000 |
| Approved estimate to job | 2 × 12 | 240 |
| Finished job invoiced and sent | 4 × 12 | 480 |
| Overdue list, weekly | 1 × 4 | 40 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 3,260 |
Contractor+ publishes no job counts, so the month is our example. Dollars at the $29 pack rate.
| 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 |
|---|---|---|
| Contractor+ Developer API | Clients, estimates, jobs and invoices for your own developer. | Pro Team plan; you build and host the code. |
| Zapier (Pro Team) | Fixed workflows between Contractor+ and other apps. | Pro Team plan and a Zapier plan; the workflow does what you built, not what you ask. |
| By hand | Every screen of Contractor+, one record at a time. | Your evenings. |
If you are on Pro Team and have a developer, the API is cheaper for simple reads. To estimate, schedule and invoice by asking in ChatGPT or Claude on any plan, Cotlet works in the Contractor+ account you already have.
Prefer code? Our public repo has a ready Contractor+ MCP config for Claude Code, ChatGPT and Cursor, an agent skill and a small command-line tool. Add your Cotlet API key and your agent works in your own Contractor+ account.
Take Group sp. z o.o. runs Cotlet. It is a software company registered in Poland, EU (VAT PL6342984273), in business since 2019, led by its founders Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Questions about the Contractor+ tools go to contact@cotlet.dev.
Sign up free at https://cotlet.dev, open Contractor+ under Integrations in the console and sign in to Contractor+ in its Cloud Browser. The trial starts with your first app and asks for no card.
Sign up at cotlet.dev, log in to Contractor+ once in its Cloud Browser and add Cotlet to ChatGPT or Claude, following the steps in your console. No API key is needed. ChatGPT and Claude then work in your Contractor+ account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in Contractor+: write estimates from site visit notes; turn approved estimates into jobs; invoice completed jobs. You ask in plain words, and anything that reaches other people waits for your OK first.
No. Contractor+ has no ChatGPT or Claude connector of its own and Contractor+ has no official MCP server (checked 8 Nov 2026). Cotlet is an independent one that works in ChatGPT, Claude, Cursor and any MCP client, on your signed-in account.
Yes, with Cotlet. Tell ChatGPT the client and the lines and it creates the estimate as a draft, then sends it for approval after your OK.
Yes, with Cotlet. ChatGPT builds the invoice from the completed job and emails it to the client after your OK.
Yes, with Cotlet. ChatGPT turns approved estimates into jobs with a date and crew, so nothing waits for the office.
No. Cotlet works through your own Contractor+ sign-in, so it needs no API key, which Contractor+ includes only with Pro Team. It can do what your plan and login can do.
No. Payments stay in Contractor+. The agent creates and sends invoices, and lists what is still unpaid.
Only in how it is called. Both carry the same 10 tools, inputs, answers, API key and price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with Contractor+.
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