Local services & SaaS
Faire
Orders, inventory, reorders and messages for wholesale brands.
12 endpoints
Your AI agent quotes from calls and voicemails, puts jobs on the schedule, invoices done work with UK VAT and chases what is unpaid. Sign in to JobSheet once in your own Cloud Browser. No API, no Zapier.
9 tools Read and write
JobSheet has no MCP server, no ChatGPT or Claude app, no public API and no Zapier app: it connects only to Xero, as a paid add-on, and Companies House (checked 8 Nov 2026). Cotlet runs 9 JobSheet tools hosted, over MCP for agents and REST for scripts, in your own JobSheet login.
| What you need | JobSheet API | By hand | Cotlet |
|---|---|---|---|
| Job sheets and schedule | No API | Yes, one by one | Yes |
| Quotes and invoices | No API | Yes, one by one | Yes, email after your OK |
| Unpaid invoices | No API | Yes | Yes |
| Ask in ChatGPT or Claude | No | No | Yes |
| Zapier app | None | None | Not needed |
Checked 8 Nov 2026. Sources: JobSheet product facts (llms.txt) · JobSheet pricing · JobSheet how-to: Create a job sheet
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 JobSheet password, and no quote or invoice is emailed until you approve it. Who can see your session
Sign in to JobSheet in a Cloud Browser. Create a Cotlet account, open JobSheet in its Cloud Browser, sign in with your JobSheet 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.
JobSheet shares the address https://cotlet.dev/mcp/v1 with every other app you enable, so one connector covers them all. Turned JobSheet on after connecting? Refresh the connector and the 9 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: jobsheet_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: jobsheet_write Job sheets reach only your team, so new jobs and done marks run at once.
Returns job sheets with customer, site address, assigned team member, date and status.
MCP calljobsheet_read → list_job_sheets
REST endpointGET https://cotlet.dev/api/v1/jobsheet/job-sheets
| Name | Type | Description |
|---|---|---|
| date_from string | string | ISO date. |
| date_to string | string | ISO date. |
| assignee string | string | Team member. |
| status string | string | Scheduled, Done, Invoiced. |
| page integer | integer | Page number. Default: 1. |
{
"job_sheets": [
{
"job_sheet_id": "JS-1042",
"customer": "Bramwell Heating Ltd",
"site": "14 Gloucester Rd, Bristol",
"assignee": "Dan",
"date": "2026-11-10",
"status": "Scheduled"
}
],
"page": 1
} Creates the job with description, site, date and team member. JobSheet sends no customer texts, and the job reaches only your team, so it runs at once.
MCP calljobsheet_write → create_job_sheet
REST endpointPOST https://cotlet.dev/api/v1/jobsheet/customers/{customer_id}/job-sheets
| Name | Type | Description |
|---|---|---|
| customer_id string required | string | Customer ID from list_customers. |
| description string required | string | What the job is. |
| date string required | string | ISO date. |
| assignee string | string | Team member. |
| repeat string | string | Weekly, Monthly, Yearly or empty. |
{
"customer_id": "customer_8c41d2",
"description": "description",
"date": "date"
} {
"job_sheet_id": "JS-1067",
"customer": "Priya Shah",
"assignee": "Dan",
"date": "2026-11-12",
"repeat": "None",
"status": "Scheduled"
} Marks the job complete with what was done, ready to invoice. Reaches no one, so it runs at once.
MCP calljobsheet_write → mark_done
REST endpointPOST https://cotlet.dev/api/v1/jobsheet/job-sheets/{job_sheet_id}/done/mark
| Name | Type | Description |
|---|---|---|
| job_sheet_id string required | string | Job sheet ID from list_job_sheets. |
| note string | string | What was done. |
{
"job_sheet_id": "job_sheet_8c41d2"
} {
"job_sheet_id": "JS-1042",
"status": "Done",
"note": "Replaced 2 radiator valves"
} Search matches name and postcode. Companies come in from Companies House by number.
Returns customers with ID, contact, address and open quotes or invoices.
MCP calljobsheet_read → list_customers
REST endpointGET https://cotlet.dev/api/v1/jobsheet/customers
| Name | Type | Description |
|---|---|---|
| query string | string | Name or postcode. |
| page integer | integer | Page number. Default: 1. |
{
"customers": [
{
"customer_id": "CU-310",
"name": "Bramwell Heating Ltd",
"postcode": "BS7 8AA",
"open_invoices": 1
}
],
"page": 1
} Creates the customer; with a company number it fills the details from Companies House. Reaches no one, so it runs at once.
MCP calljobsheet_write → create_customer
REST endpointPOST https://cotlet.dev/api/v1/jobsheet/customers
| Name | Type | Description |
|---|---|---|
| name string | string | Name, for a person. |
| company_number string | string | Companies House number, for a company. |
| email string | string | Email. |
| address string | string | Address. |
{
"customer_id": "CU-344",
"name": "Avon Lettings Ltd",
"source": "Companies House"
} Drafts run at once with UK VAT. Emailing a quote or invoice waits for your OK.
Creates the quote from line items or your price book, with UK VAT. Emailing it is a separate step.
MCP calljobsheet_write → create_quote
REST endpointPOST https://cotlet.dev/api/v1/jobsheet/customers/{customer_id}/quotes
| Name | Type | Description |
|---|---|---|
| customer_id string required | string | Customer ID from list_customers. |
| items array required | array | Lines: description or price book item, quantity, price, VAT rate. |
{
"customer_id": "CU-339",
"items": [
{
"description": "Consumer unit replacement",
"quantity": 1,
"price": "480.00",
"vat": 20
},
{
"description": "Extra double socket",
"quantity": 4,
"price": "40.00",
"vat": 20
}
]
} {
"quote_id": "Q-0218",
"customer": "Priya Shah",
"net": "640.00",
"vat": "128.00",
"total": "768.00",
"status": "Draft"
} Creates the invoice with UK VAT. Emailing it is a separate step, so drafting runs at once.
MCP calljobsheet_write → create_invoice
REST endpointPOST https://cotlet.dev/api/v1/jobsheet/customers/{customer_id}/invoices
| Name | Type | Description |
|---|---|---|
| customer_id string required | string | Customer ID from list_customers. |
| job_sheet_id string | string | Done job to invoice. |
| items array | array | Lines when not from a job. |
{
"customer_id": "customer_8c41d2"
} {
"invoice_id": "INV-0391",
"customer": "Bramwell Heating Ltd",
"total": "312.00",
"status": "Draft"
} Sends the PDF by email the way JobSheet does from its screen. By default you confirm each call; you can switch that off for this tool.
MCP calljobsheet_write → email_document
REST endpointPOST https://cotlet.dev/api/v1/jobsheet/documents/{document_id}/email
| Name | Type | Description |
|---|---|---|
| document_id string required | string | Quote or invoice ID. |
{
"document_id": "document_8c41d2"
} {
"document": "INV-0391",
"status": "Sent",
"sent_to": "accounts@bramwellheating.co.uk"
} Returns unpaid invoices with customer, total and days since sent.
MCP calljobsheet_read → list_unpaid_invoices
REST endpointGET https://cotlet.dev/api/v1/jobsheet/unpaid-invoices
| Name | Type | Description |
|---|---|---|
| min_days integer | integer | Only invoices sent at least this many days ago. |
{
"invoices": [
{
"invoice_id": "INV-0377",
"customer": "Tom Hargreaves",
"total": "186.00",
"days": 33
}
]
} Your signed-in JobSheet profile, AES-256-GCM encrypted, in Finland. No password.
The 9 JobSheet tools, never the session cookie.
What your login sees: job sheets, schedule, customers, quotes, invoices.
Credit notes, team members, subscription, Xero settings, deletes.
You sign in again yourself, in the same Cloud Browser.
Disable for agents, reset the browser, or change your JobSheet 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 JobSheet moves a button on a job sheet or renames a page, 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 a job sheet or quote | Yes, edit or delete it in JobSheet |
| Draft an invoice | Yes, before it is sent |
| Email a quote or invoice | No, it is in the customer's inbox; issue a credit note in JobSheet |
1 of 9 tools ask first: email_document. Job sheets, customers and draft quotes and invoices reach no customer, so they run at once. You can turn the wait off per tool once you trust a routine.
{
"name": "create_quote",
"arguments": {
"customer_id": "CU-339",
"items": [
{
"description": "Consumer unit replacement",
"quantity": 1,
"price": "480.00",
"vat": 20
},
{
"description": "Extra double socket",
"quantity": 4,
"price": "40.00",
"vat": 20
}
]
}
} curl -X POST https://cotlet.dev/api/v1/jobsheet/customers/CU-339/quotes \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"items":[{"description":"Consumer unit replacement","quantity":1,"price":"480.00","vat":20},{"description":"Extra double socket","quantity":4,"price":"40.00","vat":20}]}' {
"quote_id": "Q-0218",
"customer": "Priya Shah",
"net": "640.00",
"vat": "128.00",
"total": "768.00",
"status": "Draft"
} A cron job or n8n flow can call the same tools over REST at /api/v1/jobsheet with the same key and price, in JSON. Failed calls are free. Each tool row above shows its REST path.
About $30 a monthfor an electrical contractor with 4 engineers, 5,140 credits. Your JobSheet plan stays as it is.
| Job | Calls | Credits |
|---|---|---|
| Quote from a call or voicemail | 3 × 30 | 900 |
| Job sheet scheduled | 1 × 80 | 800 |
| Invoices for done jobs, daily | 5 × 22 | 1,100 |
| Invoice emailed | 1 × 80 | 800 |
| Unpaid invoices, weekly | 1 × 4 | 40 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 5,140 |
JobSheet 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 |
|---|---|---|
| Xero add-on | Invoices from JobSheet to Xero. | Paid add-on; accounting only, no jobs or quotes. |
| Calendar feed | Your work schedule in Google or Apple Calendar. | Read only; nothing changes in JobSheet. |
| By hand | Every screen of JobSheet, one job at a time. | Your evenings. |
JobSheet has no API or Zapier app, so there is nothing to connect a script to. To quote, schedule and invoice from ChatGPT or Claude this week, Cotlet works in the JobSheet account you already have.
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 JobSheet tools go to contact@cotlet.dev.
Sign up free at https://cotlet.dev, open JobSheet under Integrations in the console and sign in to JobSheet in its Cloud Browser. The trial starts with your first app and asks for no card.
Sign up at cotlet.dev, log in to JobSheet 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 JobSheet account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in JobSheet: quote from a voicemail; put jobs on the schedule; invoice the day's jobs. You ask in plain words, and anything that reaches other people waits for your OK first.
No. JobSheet has no ChatGPT or Claude connector of its own and JobSheet 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. ChatGPT finds or adds the customer and drafts the quote from your price book with UK VAT. Emailing it waits for your OK by default.
Yes, with Cotlet. ChatGPT creates job sheets on the work schedule for the team member and date you name, one-off or recurring, such as a yearly gas safety check.
Yes, with Cotlet. ChatGPT drafts invoices for done jobs, emails them after your OK and lists what is still unpaid.
Yes. Invoices your agent creates are normal JobSheet invoices, so the Xero add-on picks them up the same way.
Yes. Quotes and invoices use JobSheet's own VAT rates, 0, 5 or 20 percent, the same as when you fill them in yourself.
Only in how it is called. Both carry the same 9 tools, inputs, answers, API key and price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with JobSheet.
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