Joist MCP Server
Estimates, invoices, clients and payments in Joist for contractors.
Размещённый MCP-сервер
npx add-mcp 'https://cotlet.dev/mcp/v1/joist'Устанавливается в Claude Code, Codex, Cursor и другие
Документация
Cotlet · Integrations · How it works · Security · For developers · For automation agencies · Blog · API docs · Help center · Changelog · Contact · Pricing · Sign up
Joist API and MCP server: Let your AI agent run your Joist paperwork.
Joist has no public API and no MCP server (checked 26 Oct 2026). Its help center and pricing page document no API and no webhooks. Cotlet runs 20 Joist tools hosted, over MCP for agents and REST for scripts.
Read Joist invoices, balances and document details through MCP or REST. Use your AI agent, n8n, Make, Zapier or a script to build your reporting workflow.
Connect an AI agent Use the REST API
- Free 7-day trial, no card
- Unofficial, not affiliated with Joist
- Page: https://cotlet.dev/integrations/joist-api-mcp-server
What can you automate in Joist?
- Draft an estimate from notes
- Turn an estimate into an invoice
- Record check and cash payments
- List overdue invoices
- Send a document to the client
- Pull revenue and sales tax
Does Joist have an MCP server or an API?
- The only link out of Joist is QuickBooks Sync, part of Joist Pro. It copies issued estimates and invoices to QuickBooks Online once a night and does not carry payments.
- The other way out is a CSV of estimates or invoices for one month, downloaded by hand on the web, without line items.
- We found no other Joist MCP server on GitHub and no Zapier app. The two other repositories named "joist" that mention MCP are an Elementor plugin and a coupling analysis tool.
| What you need | QuickBooks Sync and CSV | By hand in the app | Cotlet |
|---|---|---|---|
| Read invoices from a script | Nightly copy or a monthly CSV | No | Yes, live |
| Create an estimate with tax and deposit | No | Yes, one at a time | Yes, saved unsent |
| Convert an estimate to an invoice | No | Yes | Yes |
| Record a check or cash payment | No | Yes | Yes, after your OK |
| Email a document to the client | No | Yes | Yes, after your OK |
| Fixed for you when Joist changes | By Joist | Not needed | Yes, tested every 12 h |
Checked 26 Oct 2026. Sources: Joist Help Center: how does automatic QuickBooks Syncing work?, Joist Help Center: export your Joist data, Joist Help Center: record a payment on an invoice, Joist Help Center: understanding your Joist Reports data, Joist pricing, Joist Help Center: Quick Estimate and Invoice with AI
How does Cotlet connect to Joist?
- Sign in to Joist. Once, in a browser we keep for you.
- Choose MCP or REST. Connect your agent or create an API key.
- Run your workflow. Ask your agent or call the REST API.
We never save your Joist password, and sends and payments wait for your OK.
Connect Joist to your AI agent or workflow
Use MCP with ChatGPT, Claude, Cursor or Codex, or authenticated HTTP in n8n, Make or Zapier. The REST guide follows the agent setup.
Step by step with screenshots for ChatGPT, Claude, Grok and other agents: How to connect Joist to ChatGPT, Claude and any AI agent.
- Turn on Joist for agents. Create a Cotlet account, sign in to Joist in its Cloud Browser and press Enable for agents.
- Add the Cotlet address. Put https://cotlet.dev/mcp/v1/joist in the MCP or connector settings of your agent.
- Sign in or use a key. Chat apps ask you to sign in to Cotlet. Editors and scripts use an API key from the console.
A Joist account has one user, so you sign in with the login you use for Joist. You need your own Joist account first: the 14-day trial has every feature and asks for no card. One connection carries every app you enable, Joist among them. If you enabled Joist after connecting, refresh the connector so your agent sees the new tools.
Claude:
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/joist \
--header "Authorization: Bearer $COTLET_API_KEY"
ChatGPT:
Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth
Cursor:
// ~/.cursor/mcp.json
{
"mcpServers": {
"cotlet": {
"url": "https://cotlet.dev/mcp/v1/joist",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
}
Codex:
# ~/.codex/config.toml
[mcp_servers.cotlet]
url = "https://cotlet.dev/mcp/v1/joist"
bearer_token_env_var = "COTLET_API_KEY"
n8n:
MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: joist_read
Make, Zapier:
Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key>
Tool: joist_write
How to use the Joist REST API
Create your Cotlet API key
Sign in to Joist in its Cloud Browser and enable it for agents. Create a Cotlet API key scoped to Joist; read-only access is enough for these requests.
Calls use the permissions of your signed-in account.
Save your key as COTLET_API_KEY in your environment. Send Authorization: Bearer <your Cotlet API key>; never use an app password or cookie as the key.
Make your first Joist API request
This GET request reads data without changing it.
cURL: first read:
curl "https://cotlet.dev/api/v1/joist/invoices?limit=5" \
-H "Authorization: Bearer $COTLET_API_KEY"
A successful REST response puts the tool output in result. This example response excerpt omits call IDs, messages and credit details.
Example response excerpt:
{
"status": "success",
"app": "joist",
"tool": "list_invoices",
"result": {
"invoices": [
{
"invoice_id": "71977284",
"number": "1",
"client": "Example Client",
"total": 521.24,
"currency": "USD",
"status": "partial",
"amount_paid": 130.31,
"balance_due": 390.93,
"overdue": false
}
],
"next_cursor": null
}
}
Read invoice balances and fetch more pages
The default active view omits fully paid invoices. Choose view=all or paid when needed, or filter by search and client_id.
Pass the opaque next_cursor as cursor with the same filters until it is null. view=overdue filters after fetching each active page, so an empty or short page can still have a next cursor.
Overdue is computed from due date, balance and the user timezone; it is not the invoice status.
Use the returned currency rather than assuming USD. get_invoice reads one invoice with items, terms, balances and recorded payments and refunds.
Joist workflows with n8n, Make and Zapier
| Tool | Connect through | Example workflow |
|---|---|---|
| n8n | HTTP Request | Build an outstanding-balance dashboard from invoice records. |
| Make | HTTP > Make a request | Send an overdue-invoice digest through your email or Slack steps. |
| Zapier | Webhooks by Zapier > GET or Custom Request | Compare invoice details and payment state for a reconciliation review. |
Configure the schedule, destination and saved state in your automation tool. Cotlet reads the source; your configured destination step writes the report or sends the alert.
Compare existing record state as well as IDs when detecting changes. Python and Node.js can use the same HTTP endpoints without an SDK or agent.
Endpoint and tool reference. The REST API guide covers requests, errors and approvals.
Joist API endpoints and MCP tools
Clients and items
Search before you add: Joist does not refuse a duplicate client name. list_items also returns your tax rates for the estimate tools.
- List clients (
list_clients, read): Clients in your account with name, email, phone and address. - Get client (
get_client, read): One client card: every email and phone, billing and service address, notes and tags. - Add client (
add_client, write): New client in your Clients list, ready for estimates and invoices. - List items (
list_items, read): Saved items from your Items list with rate and description, plus your tax rates. - Add item (
add_item, write): Save a service or material to your Items list.
Estimates
create_estimate saves a draft and sends nothing. An estimate that already has an invoice cannot be converted again.
- List estimates (
list_estimates, read): Estimates with number, client, total, expiry, status, approval, and whether it was emailed or signed. - Get estimate (
get_estimate, read): Full estimate: client, line items, tax, discount, deposit, expiry, approval and signature. - Create estimate (
create_estimate, write): New saved estimate with line items, tax, discount, deposit and expiry. Nothing is sent to the client. - Update estimate (
update_estimate, write): Change an estimate's lines, tax, discount, deposit, expiry, notes or PO number. Nothing is sent. - Delete estimate (
delete_estimate, write): Delete an estimate for good. - Send estimate (
send_estimate, write, asks first): Email the estimate to the client from Joist with its link and PDF. - Convert estimate to invoice (
convert_estimate_to_invoice, write): Generate an invoice with everything from the estimate. Nothing is sent to the client.
Invoices and payments
Overdue is worked out from the invoice date plus its payment terms. An invoice with payments cannot be deleted.
- List invoices (
list_invoices, read): Invoices with client, total, amount paid, balance due, due date and overdue. Active, paid or all. - Get invoice (
get_invoice, read): Full invoice: client, line items, tax, discount, deposit, due date, balance and every payment. - Create invoice (
create_invoice, write): New saved invoice for a client without an estimate. Nothing is sent to the client. - Delete invoice (
delete_invoice, write): Delete an invoice that has no payments, for good. - Send invoice (
send_invoice, write, asks first): Email the invoice to the client from Joist with its link and PDF. - Record payment (
record_payment, write): Record a cash, check, credit card or bank transfer payment on an invoice; paid in full moves to Paid.
Reports and export
Joist refreshes report numbers once a day, so today shows tomorrow. Reports are part of Joist Elite and the trial.
- Get report (
get_report, read): A Joist report for a date range: revenue, invoices, estimates or sales tax, with the period total. - Export documents (
export_documents, read): Joist's monthly CSV of estimates or invoices: number, client, subtotal, tax, total, dates, payments.
Inputs, REST path and example response of every tool: https://cotlet.dev/integrations/joist-api-mcp-server#tools
Who can see my Joist session, and how do I revoke it?
- What we store. Your signed-in Joist profile, encrypted with AES-256-GCM in Finland. No password.
- What your agent gets. The 20 Joist tools. Never the cookie, the token or the login.
- What the session sees. What your Joist login sees: client names, emails, phones and addresses, estimates, invoices, prices and payments.
- What no tool touches. Joist Payments setup, card details, your password, your plan and your billing.
- If Joist signs you out. Your agent gets a link to sign in again. We never type your password.
- How to cut access. Disable Joist for agents, reset its browser or delete the key. The next call is refused.
A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results). We have no SOC 2 report and no third-party pentest yet.
Is it against Joist's terms? Account safety
apply systems to extract or modify information in the Service using technology or method such as those commonly referred to as "web scraping," "data scraping," or "screen scraping"
Our tools act in your signed-in Joist account, one request at a time, but these words still cover any tool that has no partner access. We found no public case of a Joist account closed for automation (checked 26 Oct 2026).
What we do about it:
- Your own Joist login, signed in by you
- A Cloud Browser of its own, with its own IP
- Sends and payments wait for your OK
- Sign-in and 2FA stay with you; we never bypass MFA
- Should Joist object, Joist tools pause for everyone within 24 h
Ask for the month or the client you need, not every document every hour. Load is what a ban on extraction tools is really about.
What happens when Joist changes?
- 12 h between tests of the Joist tools
- 23/23 checks passed on Nov 6, 2026
- $0 for a call to a tool paused for a fix
A request Joist refuses fails the call, and a failed call costs no credits. status.cotlet.dev checks the site, console and API every 3 minutes.
Approvals, undo and mistakes
- Finds the client. Searches by name, email or phone before it adds anyone.
- Drafts the document. Saves an estimate or invoice with your item rates and tax. Nothing is sent.
- Waits for your OK. A send or a payment is a request in your Cotlet console.
- Sends or records it. Joist emails the client its link and PDF, or marks the invoice paid.
| Action | Undo |
|---|---|
| Add a client or item | Delete it in Joist; no tool deletes clients or items |
| Create or change an estimate or invoice | update_estimate, or delete_estimate and delete_invoice |
| Convert an estimate to an invoice | delete_invoice; the estimate stays approved |
| Delete an estimate or invoice | No. It is final and runs without asking |
| Record a payment | Delete the payment in Joist; no tool does |
| Send a document | No. The client has the email |
2 of 20 tools ask first: send_estimate, send_invoice. The other 18 run at once: 9 only read, and the rest save drafts, clients and items or delete a document. Turn the wait off per tool for runs at night.
delete_estimate and delete_invoice do not ask and cannot be undone. delete_invoice refuses an invoice with payments on it. Tell your agent to confirm with you in chat before it deletes.
MCP call:
{
"name": "record_payment",
"arguments": {
"invoice_id": "71977284",
"amount": 390.93,
"method": "check",
"paid_on": "2026-10-27"
}
}
REST:
curl -X POST https://cotlet.dev/api/v1/joist/invoices/71977284/payments \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"amount":390.93,"method":"check","paid_on":"2026-10-27"}'
Tool output:
{
"payment_id": "0ff33ac4-01f9-4955-9fa8-aba4a78602aa",
"invoice_id": "71977284",
"number": "1",
"total": 521.24,
"amount_paid": 521.24,
"balance_due": 0,
"status": "paid",
"payments": [
{
"payment_id": "5b1f0c2e-8f3a-4d7e-9a61-2c4b8e7d1f90",
"type": "payment",
"amount": 130.31,
"method": "cash",
"paid_on": "2026-10-26",
"status": "succeeded",
"source": "manual"
},
{
"payment_id": "0ff33ac4-01f9-4955-9fa8-aba4a78602aa",
"type": "payment",
"amount": 390.93,
"method": "check",
"paid_on": "2026-10-27",
"status": "succeeded",
"source": "manual"
}
]
}
REST under /api/v1/joist takes the same tools from scripts and cron jobs, with the same key and price. The tools table lists the REST path of each tool.
How much do the Joist API and MCP server cost?
About $21 a month for a one-person contractor with about 25 estimates, 3,690 credits.
| Job | Calls | Credits |
|---|---|---|
| Estimate from site notes, not sent | 4 × 25 | 1,000 |
| Invoice approved estimates and send, weekly | 11 × 4 | 440 |
| Record checks and cash, weekly | 13 × 4 | 520 |
| Overdue list and reminders, weekly | 5 × 4 | 200 |
| Month-end report and CSV | 3 × 1 | 30 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 3,690 |
- Free 7-day trial, no card
- 10 credits per successful call, MCP or REST
- 50 credits a day for the Cloud Browser
- Packs valid 12 months, no subscription
Joist publishes no figure for documents per contractor, so the month is our example: 25 new estimates and a weekly pass over approved estimates, payments and overdue invoices. The browser is most of the bill. Joist itself is billed by Joist: Pro is $17 a month and reports need Elite at $32 (joist.com/pricing, 26 Oct 2026). Dollars at the $29 pack rate.
Joist MCP server on GitHub, QuickBooks Sync or hosted: which to use
| Option | What it does | Where it stops |
|---|---|---|
| QuickBooks Sync | Part of Joist Pro. Copies issued estimates and invoices to QuickBooks Online every night. | One way, out of Joist. No payments, nothing written back. |
| Monthly CSV export | Estimates or invoices for one month, downloaded on the web. | By hand, a month at a time, without line items. |
| GitHub and Zapier | No other Joist MCP server and no Zapier app. | Nothing else to run. |
Pick QuickBooks Sync if your books live in QuickBooks Online and you only need documents copied there. Pick the CSV if a monthly file is enough for your accountant. Pick Cotlet if an agent should draft estimates, convert them, record payments or read reports.
Run our Joist MCP server on your own computer
All 20 Joist tools are also public on GitHub, as an MCP server and REST API in Python. It reads your session from your own Chrome, so you can try it on your Joist account and see how each tool talks to Joist's web app. It is a trimmed version of what runs on cotlet.dev, free to use in your own business.
- Free for personal use, learning and testing
- Works while your computer is on and Chrome is logged in to Joist
- You update it yourself when Joist changes
- License Elastic 2.0: free in your own business; ChatGPT, your phone and 24/7 runs need hosted Cotlet
- Code: https://github.com/cotletdev/joist-api-mcp-server
Who runs Cotlet
Take Group sp. z o.o. runs Cotlet. It is a software company registered in Poland, EU (VAT PL6342984273), and has worked 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 Joist tools.
Joist API and MCP server: questions
Can I use the API without an AI agent?
Yes. Use a scoped Cotlet API key and the signed-in Joist Cloud Browser session. You do not need to connect MCP for REST. Start with the REST guide.
Can I use n8n, Make or Zapier?
Yes. Use authenticated HTTP requests with your Cotlet key, or an MCP client for agent workflows. You configure the schedule, destination and record state. See app-specific workflows.
How do I get access?
Sign up free at https://cotlet.dev, open Joist under Integrations in the console and sign in to Joist in its Cloud Browser. The free trial starts when you sign up and needs no card.
How do I connect Joist to ChatGPT or Claude?
Sign up at cotlet.dev, log in to Joist 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 Joist account through Cotlet, in their phone apps too.
What can ChatGPT do in Joist?
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in Joist: create estimates from a job description; invoice approved estimates; record check and cash payments on invoices. You ask in plain words, and anything that reaches other people waits for your OK first.
Do I need a paid Joist plan?
Joist gives every new account a 14-day trial with all features and no card. After it, Pro ($17 a month) covers unlimited estimates, invoices and clients, which is everything here except get_report. Reports are part of Elite ($32 a month). Basics ($10 a month) allows 5 documents a month (joist.com/pricing, checked 26 Oct 2026).
Can my team share one Joist login through Cotlet?
A Joist account has a single user with one login email and password (Joist Help Center), so Cotlet connects to that one account.
Which tools ask for my OK?
send_estimate, send_invoice and record_payment wait in the Cotlet console by default, because they email your client or change what is owed. Turn the wait off per tool for runs at night. Everything else runs at once: creating, changing and deleting estimates, invoices without payments, clients and items reach no one.
Does the client get an email when the agent creates or converts a document?
No. create_estimate, create_invoice, update_estimate and convert_estimate_to_invoice only save a draft. The client gets mail only from send_estimate or send_invoice, with the subject and message you saved in Joist unless you pass your own.
Why is my report empty or a day behind?
Joist updates report numbers once a day, so a document or payment from today shows in get_report tomorrow. The report covers at most one year per call. Reports need the Elite plan or the trial.
Which currency are the amounts in?
The currency of your Joist company. Every estimate and invoice carries a currency field, and totals are plain numbers in that currency.
What can it not do yet?
It does not edit invoices after they are made, edit or delete clients and items, or take online payments through Joist Payments (payments made there are recorded by Joist itself). It does not do change orders, work orders, jobs, visits, reviews, license and insurance, or attachments and photos. delete_invoice refuses an invoice with payments, and convert_estimate_to_invoice refuses an estimate that already has an invoice.
Can I get a Joist API key for my own business?
No. Joist offers no public API (checked 26 Oct 2026). A Cotlet API key reaches your own Joist login through the same tools as MCP.
Is the MCP server different from the REST API?
Only in how you call it. Both have the same 20 tools, inputs and answers, under one API key and one price. Agents use MCP; scripts, cron jobs and HTTP steps use REST.
What happens to my data if I leave?
Reset browser deletes your Joist profile on our side, and closing your Cotlet account deletes the browser too. Unused credits stay valid for 12 months from purchase.
Is Cotlet affiliated with Joist?
No. Cotlet is independent and not affiliated with Joist.
Give your AI agents your signed-in browser.
Product: Integrations · How it works · Pricing · Security
Resources: Blog · API docs · Help center · Changelog · GitHub
Solutions: For developers · For automation agencies
Company: About · AI info: company facts · Contact
Legal: Terms of service · Privacy policy · Refund policy · Acceptable use · Cookie policy · DPA · Subprocessors
Elsewhere: Status page · Cotlet on GitHub · Cotlet on X · Cotlet on LinkedIn · Cotlet on Product Hunt · Cotlet on Crunchbase · Cotlet on SaaSHub
Cotlet.dev is built by Bart Krawczyk and Jake Slugocki, the founders of Take Group sp. z o.o., ul. Wincentego Janasa 4, 40-855 Katowice, Poland. KRS 0000871398, NIP 6342984273, VAT EU: PL6342984273. About us
Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.