Local services & SaaS
Faire
Orders, inventory, reorders and messages for wholesale brands.
12 endpoints
Your AI agent logs calls as leads, follows up open proposals, fills the crews' schedule and chases unpaid invoices. Sign in to SingleOps once in your own Cloud Browser. No API token, no developer.
6 tools Read and write
SingleOps has no MCP server, no ChatGPT or Claude app and no Zapier app. Its API only enters leads: "It is not a general-purpose job-creation or read/write API" (SingleOps help, checked 9 Nov 2026). Cotlet runs 6 SingleOps tools hosted, over MCP for agents and REST for scripts, in your own SingleOps login.
| What you need | SingleOps API | By hand | Cotlet |
|---|---|---|---|
| Create leads | Yes, with a token | Yes | Yes |
| Proposals and jobs | No | Yes, one by one | Yes |
| Schedule visits | No | Yes, one by one | Yes, after your OK |
| Ask in ChatGPT or Claude | No | No | Yes |
| Developer needed | Yes | No | No |
Checked 8 Nov 2026. Sources: SingleOps help: Lead Entry API · SingleOps by Granum · SingleOps help: scheduling visits and tasks
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 SingleOps password, and no visit is scheduled until you approve it. Who can see your session
Sign in to SingleOps in a Cloud Browser. Create a Cotlet account, open SingleOps in its Cloud Browser, sign in with your SingleOps 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.
SingleOps shares the address https://cotlet.dev/mcp/v1 with every other app you enable, so one connector covers them all. Turned SingleOps on after connecting? Refresh the connector and the 6 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: singleops_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: singleops_write Search by name, address and phone. New leads reach no one, so they run at once.
Returns clients with ID, property address, open proposals and unpaid balance.
MCP callsingleops_read → list_clients
REST endpointGET https://cotlet.dev/api/v1/singleops/clients
| Name | Type | Description |
|---|---|---|
| query string | string | Name, address or phone. |
| page integer | integer | Page number. Default: 1. |
{
"clients": [
{
"client_id": "SO-40921",
"name": "Tom and Karen Bedford",
"address": "4410 Glenwood Ave, Raleigh, NC",
"open_proposals": 1,
"balance": "0.00"
}
],
"page": 1
} Adds the lead with the request and property, ready for an estimator. Reaches no one, so it runs at once.
MCP callsingleops_write → create_lead
REST endpointPOST https://cotlet.dev/api/v1/singleops/leads
| Name | Type | Description |
|---|---|---|
| name string required | string | Client name. |
| address string required | string | Property address. |
| phone string | string | Phone. |
| request string required | string | What they asked for. |
{
"name": "Dr. Alan Pierce",
"address": "88 Lake Boone Trail, Raleigh, NC",
"request": "Remove dead oak by driveway"
} {
"lead_id": "LD-8812",
"client": "Dr. Alan Pierce",
"request": "Remove dead oak by driveway",
"status": "New"
} Open proposals by age, accepted jobs with work left to schedule. Scheduling a visit waits for your OK.
Returns proposals and proposal groups with client, total, status and days since sent.
MCP callsingleops_read → list_proposals
REST endpointGET https://cotlet.dev/api/v1/singleops/proposals
| Name | Type | Description |
|---|---|---|
| status string | string | Draft, Sent, Accepted, Rejected. |
| min_days integer | integer | Only proposals sent at least this many days ago. |
| page integer | integer | Page number. Default: 1. |
{
"proposals": [
{
"proposal_id": "P-5521",
"client": "Maple Ridge HOA",
"total": "6,800.00",
"status": "Sent",
"days_since_sent": 12
}
],
"page": 1
} Returns jobs with client, work, crew, scheduled visits and whether anything is left to schedule.
MCP callsingleops_read → list_jobs
REST endpointGET https://cotlet.dev/api/v1/singleops/jobs
| Name | Type | Description |
|---|---|---|
| to_schedule boolean | boolean | Only jobs with work left to schedule. |
| page integer | integer | Page number. Default: 1. |
{
"jobs": [
{
"job_id": "J-2207",
"client": "Tom and Karen Bedford",
"work": "Crown reduction, 2 maples",
"next_visit": null,
"to_schedule": true
}
],
"page": 1
} Puts the visit on the calendar the way Scheduling does. Your settings decide whether the client hears about it. By default you confirm each call; you can switch that off for this tool.
MCP callsingleops_write → schedule_visit
REST endpointPOST https://cotlet.dev/api/v1/singleops/jobs/{job_id}/visit/schedule
| Name | Type | Description |
|---|---|---|
| job_id string required | string | Job ID from list_jobs. |
| date string required | string | ISO date. |
| crew string | string | Crew name. |
{
"job_id": "job_8c41d2",
"date": "date"
} {
"job_id": "J-2207",
"visit_id": "V-9930",
"date": "2026-11-13",
"crew": "Crew 2",
"status": "Scheduled"
} Unpaid invoices by days past due. Payments stay in SingleOps.
Returns invoices with client, balance and days past due from the Invoices page.
MCP callsingleops_read → list_unpaid_invoices
REST endpointGET https://cotlet.dev/api/v1/singleops/unpaid-invoices
| Name | Type | Description |
|---|---|---|
| min_days_past_due integer | integer | Only invoices at least this many days past due. |
{
"invoices": [
{
"invoice_id": "INV-6631",
"client": "Maple Ridge HOA",
"balance": "2,400.00",
"days_past_due": 19
}
]
} Your signed-in SingleOps profile, AES-256-GCM encrypted, in Finland. No password.
The 6 SingleOps tools, never the session cookie.
What your login sees: clients, leads, proposals, jobs, invoices.
Payments, route optimization, timesheets, pricing, deletes.
You sign in again yourself, in the same Cloud Browser.
Disable for agents, reset the browser, or change your SingleOps 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 SingleOps moves a button on a job 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 lead | Yes, reject or edit it in SingleOps |
| Schedule a visit | Yes, move or remove it in Scheduling |
1 of 6 tools ask first: schedule_visit. New leads reach no customer, so they run at once. You can turn the wait off per tool once you trust a routine.
{
"name": "create_lead",
"arguments": {
"name": "Dr. Alan Pierce",
"address": "88 Lake Boone Trail, Raleigh, NC",
"request": "Remove dead oak by driveway"
}
} curl -X POST https://cotlet.dev/api/v1/singleops/leads \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Dr. Alan Pierce","address":"88 Lake Boone Trail, Raleigh, NC","request":"Remove dead oak by driveway"}' {
"lead_id": "LD-8812",
"client": "Dr. Alan Pierce",
"request": "Remove dead oak by driveway",
"status": "New"
} A cron job or n8n flow can call the same tools over REST at /api/v1/singleops with the same key and price, in JSON. Failed calls are free. Each tool row above shows its REST path.
About $25 a monthfor a tree care company with 3 crews, 4,380 credits. Your SingleOps plan stays as it is.
| Job | Calls | Credits |
|---|---|---|
| Lead logged from a call | 2 × 60 | 1,200 |
| Proposals followed up, weekly | 1 × 4 | 40 |
| Visit scheduled | 2 × 50 | 1,000 |
| Unpaid invoices, weekly | 1 × 4 | 40 |
| Property looked up | 3 × 20 | 600 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 4,380 |
SingleOps 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 |
|---|---|---|
| Lead Entry API | Web form leads straight into SingleOps. | Leads only; token from support; a developer wires it up. |
| Third-party MCP servers | Community servers on GitHub. | Built on the same lead-only API; you run them yourself. |
| By hand | Every screen of SingleOps, one job at a time. | Your office's time. |
If you only need web form leads in SingleOps, the Lead Entry API does that. To follow up proposals, schedule crews and chase invoices from ChatGPT or Claude this week, Cotlet works in the SingleOps 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 SingleOps tools go to contact@cotlet.dev.
Sign up free at https://cotlet.dev, open SingleOps under Integrations in the console and sign in to SingleOps in its Cloud Browser. The trial starts with your first app and asks for no card.
Sign up at cotlet.dev, log in to SingleOps 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 SingleOps account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in SingleOps: log calls as leads; follow up proposals; fill next week. You ask in plain words, and anything that reaches other people waits for your OK first.
No. SingleOps has no ChatGPT or Claude connector of its own and SingleOps has no official MCP server (checked 9 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 logs calls and emails as SingleOps leads with the property and request, ready for your estimator.
Yes, with Cotlet. ChatGPT lists proposals sent a while ago that are still open, with their totals, so your office knows whom to call.
Yes, with Cotlet. ChatGPT finds accepted jobs with nothing scheduled and books visits with the crew you name, after your OK.
Yes. SingleOps is now SingleOps by Granum, with the same app at app.singleops.com. Cotlet works in that app with your own login.
Only in how it is called. Both carry the same 6 tools, inputs, answers, API key and price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with SingleOps or its owner Granum.
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