Invoicing & freelance CRM
Obat
Quotes, invoices, reminders and clients for your Obat account.
14 endpoints
Tolteck publishes no public API and has no official MCP server (checked 14 Nov 2026). Cotlet runs a hosted Tolteck MCP server with 13 tools that ChatGPT and Claude use in your own Tolteck account. Emails to your clients and credit notes wait for your OK.
13 tools Read and write
Tolteck publishes no public API: neither tolteck.com nor its help center documents one. Tolteck has no official MCP server, and the Zapier and n8n directories list no Tolteck app. Data leaves Tolteck as an Excel export or a PDF, made by hand.
| What you need | Tolteck alone | Cotlet |
|---|---|---|
| Ask ChatGPT or Claude to do the work | No API or MCP server | Hosted MCP server |
| Quotes and deposit invoices | By hand, line by line | 13 tools, emails after your OK |
| Unpaid invoice reminders | One invoice at a time | On request or every week |
| Run from n8n or a script | Excel export only | REST, same key |
Checked 14 Nov 2026. Sources: Tolteck website · Tolteck pricing · Tolteck legal notice · Help: main features · Help: How to Export Data from Tolteck · Help: unpaid invoice reminders
Once, in a browser we host for you.
One address in its settings.
It bills the deposit, you check the amount.
Your agent works in your own signed-in Cloud Browser. Emails to clients and credit notes wait for your OK. Who can see your session
Sign in to Tolteck in a Cloud Browser. Open tolteck.app in your Cotlet Cloud Browser and sign in with the user who makes your quotes and invoices.
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.
Tolteck shares the address https://cotlet.dev/mcp/v1 with every other app you turn on, so one connector covers them all. Turned on Tolteck after connecting? Refresh the connector and its 13 tools appear.
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: tolteck_read Each tool does what one Tolteck screen does: the "Devis & factures" tab, the client base, your materials library and the dashboard. Reads run at once; sending an email and issuing a credit note ask first.
Find any devis, facture or avoir with the tab's filters, read its lines and totals, write a new quote or bill a deposit from a signed one.
Returns one row per document: id, type, number, site name, client, status, date and total. It reads the same list the tab shows with the same filters, so an unnumbered draft appears without a number. It changes nothing.
MCP calltolteck_read → list_documents
REST endpointGET https://cotlet.dev/api/v1/tolteck/documents
| Name | Type | Description |
|---|---|---|
| type string | string | Document type as Tolteck names it: quote (devis), invoice, deposit invoice, interim invoice, progress invoice or credit note (avoir). Omit for all. |
| status string | string | Status as shown in the app, for example Finalisée or Payée. Omit for all. |
| from string | string | Start of the period, YYYY-MM-DD. |
| to string | string | End of the period, YYYY-MM-DD. |
| client string | string | Part of the client name. |
{
"documents": [
{
"id": "doc_8f21c4",
"type": "invoice",
"number": "F-2026-0017",
"site": "Rénovation salle de bain",
"client": "Martin Dupont",
"status": "Finalisée",
"date": "2026-10-28",
"total_ttc": 2400
},
{
"id": "doc_7a90b2",
"type": "quote",
"number": "D-2026-0042",
"site": "Rénovation salle de bain",
"client": "Martin Dupont",
"status": "Finalisée",
"date": "2026-10-10",
"total_ttc": 4620
}
]
} Returns the header (client, site name, number, status, dates), every line with its quantity and unit price, the totals before and after tax and the deposits listed on the document. It does not download the PDF. It changes nothing.
MCP calltolteck_read → get_document
REST endpointGET https://cotlet.dev/api/v1/tolteck/documents/{document_id}
| Name | Type | Description |
|---|---|---|
| document_id string required | string | Document id from list_documents. |
{
"document_id": "document_8c41d2"
} {
"id": "doc_7a90b2",
"type": "quote",
"number": "D-2026-0042",
"site": "Rénovation salle de bain",
"client": "Martin Dupont",
"status": "Finalisée",
"lines": [
{
"kind": "labor",
"label": "Main d'œuvre",
"quantity": 2,
"unit": "day",
"unit_price_ht": 320
},
{
"kind": "material",
"label": "Carrelage et colle",
"quantity": 1,
"unit": "lot",
"unit_price_ht": 3560
}
],
"total_ht": 4200,
"vat": 420,
"total_ttc": 4620
} Returns the quote id, its number and its totals. The quote is saved, not sent: sending is a separate call. Each line is also saved in your materials library, as when you type it by hand. It reaches no one and you can delete it in Tolteck, so it does not wait for your OK.
MCP calltolteck_write → create_quote
REST endpointPOST https://cotlet.dev/api/v1/tolteck/clients/{client_id}/quotes
| Name | Type | Description |
|---|---|---|
| site_name string required | string | Name of the site (chantier) the quote belongs to. |
| client_id string required | string | Client id from list_clients or create_client. |
| lines array required | array | Lines as objects: kind (material, labor or work), label, quantity, unit_price_ht. |
| deposit_percent number | number | Deposit as a percentage of the quote. Omit for no deposit. |
{
"site_name": "site name",
"client_id": "client_8c41d2",
"lines": "lines"
} {
"document_id": "doc_7a90b2",
"number": "D-2026-0042",
"total_ht": 4200,
"vat": 420,
"total_ttc": 4620,
"deposit_ttc": 1386
} Does what Actions > Faire une facture d'acompte does on a quote. Returns the invoice id, its number and the amounts. The deposit invoice does not repeat the quote lines. It is created but not sent, and it reaches no one until send_document runs, so it does not wait for your OK.
MCP calltolteck_write → create_deposit_invoice
REST endpointPOST https://cotlet.dev/api/v1/tolteck/quotes/{quote_id}/deposit-invoices
| Name | Type | Description |
|---|---|---|
| quote_id string required | string | Quote id from list_documents. |
| percent number required | number | Deposit as a percentage of the quote total. |
{
"quote_id": "doc_7a90b2",
"percent": 30
} {
"document_id": "doc_9d3e51",
"number": "F-2026-0018",
"type": "deposit invoice",
"quote_id": "doc_7a90b2",
"percent": 30,
"amount_ht": 1260,
"vat": 126,
"amount_ttc": 1386
} Does what Actions > Annuler la facture (full) or Faire une facture d'avoir (partial) does. Returns the credit note number and amount. A credit note is a legal accounting document and stays in your numbering. By default you confirm each call; you can switch that off for this tool.
MCP calltolteck_write → create_credit_note
REST endpointPOST https://cotlet.dev/api/v1/tolteck/invoices/{invoice_id}/credit-notes
| Name | Type | Description |
|---|---|---|
| invoice_id string required | string | Invoice id from list_documents. It must have been created in Tolteck. |
| amount_ttc number | number | Amount to credit. Omit to cancel the invoice at 100%. |
{
"invoice_id": "invoice_8c41d2"
} {
"document_id": "doc_a41f07",
"number": "A-2026-0003",
"type": "credit note",
"invoice_id": "doc_9d3e51",
"amount_ttc": 1386
} Email a document from Tolteck, list the "Factures en attente de paiement" and set paid ones to "Payée".
Does what Send > Send by email does and returns the recipient and the time. The client replies land in your own mailbox. The email cannot be recalled. By default you confirm each call; you can switch that off for this tool.
MCP calltolteck_write → send_document
REST endpointPOST https://cotlet.dev/api/v1/tolteck/documents/{document_id}
| Name | Type | Description |
|---|---|---|
| document_id string required | string | Document id from list_documents, create_quote or create_deposit_invoice. |
| message string | string | Text of the email. Omit to use Tolteck's standard text. |
{
"document_id": "document_8c41d2"
} {
"document_id": "doc_8f21c4",
"number": "F-2026-0017",
"sent_to": "martin.dupont@example.com",
"sent_at": "2026-11-14T09:02:00Z"
} Returns the same list as Invoices awaiting payment on the dashboard: invoice number, client, amount, issue date and due date. Newest first. A paid invoice leaves the list once it has the status Payée. It changes nothing.
MCP calltolteck_read → list_unpaid_invoices
REST endpointGET https://cotlet.dev/api/v1/tolteck/unpaid-invoices
| Name | Type | Description |
|---|---|---|
| client string | string | Part of the client name. |
{
"invoices": [
{
"id": "doc_8f21c4",
"number": "F-2026-0017",
"client": "Martin Dupont",
"total_ttc": 2400,
"issued": "2026-10-28",
"due": "2026-11-27"
},
{
"id": "doc_6c11e9",
"number": "F-2026-0012",
"client": "SCI Les Tilleuls",
"total_ttc": 960,
"issued": "2026-09-15",
"due": "2026-10-15"
}
]
} Sets the status Payée. The invoice leaves the unpaid list and counts in your turnover tracking. It reaches no one and you can change the status back in Tolteck, so it does not wait for your OK.
MCP calltolteck_write → mark_invoice_paid
REST endpointPOST https://cotlet.dev/api/v1/tolteck/documents/{document_id}/invoice-paid/mark
| Name | Type | Description |
|---|---|---|
| document_id string required | string | Invoice id from list_unpaid_invoices. |
{
"document_id": "document_8c41d2"
} {
"document_id": "doc_8f21c4",
"number": "F-2026-0017",
"status": "Payée"
} Search the client base before adding anyone, so no client is created twice.
Returns each client with id, type (individual or company), name, email, phone and city. It shows whether a client already exists, so an agent does not create a duplicate. It changes nothing.
MCP calltolteck_read → list_clients
REST endpointGET https://cotlet.dev/api/v1/tolteck/clients
| Name | Type | Description |
|---|---|---|
| search string | string | Part of a name, email or phone. |
{
"clients": [
{
"id": "cli_41d7",
"type": "individual",
"name": "Martin Dupont",
"email": "martin.dupont@example.com",
"phone": "0612345678",
"city": "Lyon"
}
]
} Returns the details of the client sheet (address, phone, email, SIREN or SIRET and VAT number for a company), the notes and the ids of the client's documents. It changes nothing.
MCP calltolteck_read → get_client
REST endpointGET https://cotlet.dev/api/v1/tolteck/clients/{client_id}
| Name | Type | Description |
|---|---|---|
| client_id string required | string | Client id from list_clients. |
{
"client_id": "client_8c41d2"
} {
"id": "cli_41d7",
"type": "individual",
"name": "Martin Dupont",
"address": "12 rue des Lilas, 69003 Lyon",
"email": "martin.dupont@example.com",
"phone": "0612345678",
"notes": "Key with the neighbor, access by the courtyard",
"document_ids": [
"doc_7a90b2",
"doc_8f21c4"
]
} Returns the new client id. Tolteck refuses an email in the wrong format or a phone number with dots, and the error names the field. The sheet reaches no one and you can edit it in the Clients tab, so it does not wait for your OK.
MCP calltolteck_write → create_client
REST endpointPOST https://cotlet.dev/api/v1/tolteck/clients
| Name | Type | Description |
|---|---|---|
| type string required | string | individual or company. |
| name string required | string | Name of the person or company. |
| address string | string | Postal address. |
| email string | string | Email address, in a valid format. |
| phone string | string | Phone number without dots, for example 0612345678. |
| siret string | string | SIREN or SIRET, for a company. |
{
"type": "type",
"name": "Jane Doe"
} {
"client_id": "cli_41d7",
"name": "Martin Dupont",
"type": "individual",
"created": true
} The materials, labor and works you have quoted before, and the quoted, invoiced and paid figures for a period.
Returns items from your own library with label, kind and unit price. Tolteck saves every material or work you use in a quote there. Items from supplier price lists you connected appear only if they are in your library. It changes nothing.
MCP calltolteck_read → list_materials
REST endpointGET https://cotlet.dev/api/v1/tolteck/materials
| Name | Type | Description |
|---|---|---|
| search string | string | Part of the item name. |
{
"items": [
{
"id": "mat_203",
"kind": "material",
"label": "Carrelage grès cérame 60x60",
"unit": "m2",
"unit_price_ht": 38.5
},
{
"id": "mat_377",
"kind": "material",
"label": "Colle carrelage",
"unit": "bag",
"unit_price_ht": 24
}
]
} Returns the figures the dashboard shows for the period, such as quoted, invoiced and paid amounts. Tolteck counts an invoice in turnover once it has the status Payée, so unpaid invoices are not in the paid figure. It changes nothing.
MCP calltolteck_read → get_dashboard
REST endpointGET https://cotlet.dev/api/v1/tolteck/dashboard
| Name | Type | Description |
|---|---|---|
| from string | string | Start of the period, YYYY-MM-DD. |
| to string | string | End of the period, YYYY-MM-DD. |
{
"from": "2026-10-01",
"to": "2026-10-31",
"quoted_ttc": 9180,
"invoiced_ttc": 6840,
"paid_ttc": 4440
} Your signed-in Tolteck browser profile, AES-256-GCM encrypted, in Finland. Never your password.
The 13 Tolteck tools. The session cookie stays in the Cloud Browser.
The quotes, invoices and clients your Tolteck user can open, and nothing more.
Electronic invoicing (Factur-X) and its platform, quote signatures, CEE and MaPrimeRénov' premiums, supplier catalog links, document headers, users and your Tolteck subscription.
You sign in again yourself, in the same Cloud Browser.
Disable Tolteck for agents, reset the browser, or change your password.
You type your Tolteck password yourself, and the agent works only in the session that sign-in opens. Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results).
Tolteck updates its screens, for example with the move to electronic invoicing in France. The tools keep working because they go through the pages you use yourself, and Cotlet watches the apps it serves and updates the Tolteck server when a screen changes.
New Tolteck features become available to the agent. It still sees only what your own Tolteck user can see.
Cotlet never sees or stores your password. If Tolteck 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 |
|---|---|
| Quote saved with a wrong line | Not sent yet: edit or delete it in "Devis & factures" |
| Invoice set to "Payée" too early | Change the status back in Tolteck; it returns to the unpaid list |
| Deposit invoice on the wrong amount | Cancel it with create_credit_note, then bill the right percentage |
| Credit note issued | It keeps its number in your accounts; bill again if needed |
| Quote or invoice emailed | Already with your client: follow up with them directly |
2 of the 6 write tools ask first: emailing a document and issuing a credit note. By default you confirm each call, and you can switch that off per tool. Clients, quotes, deposit invoices and payment statuses save at once, because they reach no one and you can change them in Tolteck.
{
"name": "create_deposit_invoice",
"arguments": {
"quote_id": "doc_7a90b2",
"percent": 30
}
} curl -X POST https://cotlet.dev/api/v1/tolteck/quotes/doc_7a90b2/deposit-invoices \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"percent":30}' {
"document_id": "doc_9d3e51",
"number": "F-2026-0018",
"type": "deposit invoice",
"quote_id": "doc_7a90b2",
"percent": 30,
"amount_ht": 1260,
"vat": 126,
"amount_ttc": 1386
} The example bills 30% of a 4,200 EUR bathroom quote at the 10% renovation VAT rate: 1,260 EUR before tax plus 126 EUR VAT, 1,386 EUR in total, saved and not yet emailed. A cron job or n8n flow can make the same call over REST at /api/v1/tolteck with the same key and price, in JSON. Failed calls are free.
About $18 a monthfor a tiler or plumber working alone, about fifteen quotes a month, 3,040 credits. Your Tolteck subscription stays as it is.
| Job | Calls | Credits |
|---|---|---|
| New clients from calls and emails | 2 × 10 | 200 |
| Quotes written from a job description | 3 × 15 | 450 |
| Quotes emailed to the client | 1 × 15 | 150 |
| Deposit invoices on signed quotes, sent | 2 × 8 | 160 |
| Invoices checked and emailed | 2 × 10 | 200 |
| Weekly unpaid check and reminders | 4 × 4 | 160 |
| Payments set to "Payée" | 1 × 18 | 180 |
| Monday look at the dashboard | 1 × 4 | 40 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 154 calls | 3,040 |
The $29 pack covers a typical month for most owners: 5,000 credits for $29. A crew with more quotes out makes 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 |
|---|---|---|
| Tolteck's own AI | No AI assistant appears on the features list or the pricing page. | Nothing for ChatGPT or Claude to call. |
| Official API | None: no developer docs on tolteck.com or in the help center. | No code route into quotes or invoices. |
| Zapier and n8n | Neither directory lists a Tolteck app (both pages answer 404). | No triggers or actions to build on. |
| "Export to Excel" | The "Devis & factures" tab exports filtered documents for your accountant. | A read-only file: nothing goes back into Tolteck. |
| By hand | Open each quote or invoice and click "Envoyer". | One document at a time, after the day on site. |
Only Cotlet lets your agent do the daily Tolteck work on every screen you use, reading and writing, from ChatGPT, Claude or any MCP client, with no API key from Tolteck and on the subscription you already have.
Cotlet is run by Take Group sp. z o.o., a software company registered in Poland, EU (VAT PL6342984273) and in business since 2019. Its founders are Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Write to contact@cotlet.dev with questions about the Tolteck tools.
Sign up free at https://cotlet.dev/signup?app=tolteck, turn on Tolteck under Integrations in the console and sign in at https://tolteck.app in your Cloud Browser. Then connect your AI agent and ask it which invoices are still awaiting payment. The trial needs no card.
No. Tolteck sells one offer with all features, at a monthly or an annual price, so Cotlet works in whichever plan you have (checked 14 Nov 2026, Tolteck pricing page). It works in your own Tolteck account, with the same rights you have when you sign in yourself.
Yes. Tolteck lists unpaid invoices on the dashboard and sends reminders by email from each invoice, by hand. Your agent does the same with list_unpaid_invoices and send_document. Each email waits for your OK by default.
Yes. The agent reads Tolteck's French screens as they are, statuses such as "Finalisée" and "Payée" included, and answers in your language. Quotes and invoices keep the French wording your clients expect.
Tolteck lets several users share one account. Sign in as the user who writes and sends the quotes; the agent sees only what that user can see.
Only in how it is called. Both carry the same 13 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 Tolteck or Saint-Gobain.
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