Customer support
Zendesk
Tickets, replies, macros and views in your Zendesk, worked by your agent.
12 endpoints
Your agent searches tickets, adds notes and logs time in Autotask PSA. You sign in once, with no API user, no integration code and no server to host. It works inside the ChatGPT and Claude apps.
11 tools Read and write
Autotask has an official REST API and, since this year, an official MCP server from Kaseya in alpha (checked 6 Nov 2026). Both run as an API user with an integration code that an admin sets up. Cotlet adds 11 Autotask tools hosted, over MCP for agents and REST for scripts, with none of that setup.
| What you need | Official REST API | Kaseya MCP (alpha) | Cotlet |
|---|---|---|---|
| Search tickets by company, status or queue | Yes, you code it | Yes | Yes |
| Add a note to a ticket | Yes, you code it | Yes | Yes, after your OK |
| Create and update tickets, log time | Yes, you code it | Yes, with a preview | Yes, after your OK |
| No API user or integration code | No | No | Yes, your own sign-in |
| Changes logged under your name | Under the API user | Under the API user | Yes, your own login |
| Runs in the ChatGPT and Claude apps, 24/7 | No | Claude Desktop and Code | Yes, hosted |
Checked 6 Nov 2026. Sources: Autotask developer help: General information about Autotask APIs · Autotask developer help: Defining an API User · Autotask developer help: REST API supportability, thresholds and limits · GitHub: kaseya/mcp-servers (Autotask, alpha) · Zapier: Autotask MCP
Use your own login.
Paste one Cotlet address.
Your agent works the tickets.
We never keep your Autotask password, and no note or ticket change happens until you approve it. Who can see your session
Use MCP with your AI agent, or the same tools over REST in n8n, Make and scripts.
Enable Autotask for agents. Sign up, log in to Autotask in its Cloud Browser, then press Enable for agents.
Add the Cotlet address. Add https://cotlet.dev/mcp/v1 as an MCP server or connector in your agent.
Approve the connection. Chat apps ask you to sign in to Cotlet. Editors, n8n and scripts use an API key from the console.
One shared address, https://cotlet.dev/mcp/v1, also carries Autotask next to your other apps. If you enable Autotask after connecting, refresh the connector so the new tools show up.
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet-autotask \
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-autotask": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet-autotask]
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: autotask_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: autotask_write Read the options first, so status, priority and queue are your own labels. A label Autotask does not have fails at once and the error lists the valid ones.
Returns tickets with number, title, company, status, priority, queue, assignee, created and last activity date. Results come in pages: follow next_cursor until it is empty. You see the tickets your Autotask security level lets you see.
MCP callautotask_read → search_tickets
REST endpointGET https://cotlet.dev/api/v1/autotask/tickets/search
| Name | Type | Description |
|---|---|---|
| query string | string | Text to look for in the ticket title. |
| company_id integer | integer | Company ID from search_companies. |
| status string | string | Status label as Autotask shows it; labels from list_ticket_options. |
| queue string | string | Queue label; labels from list_ticket_options. |
| priority string | string | Priority label; labels from list_ticket_options. |
| assigned_to string | string | A resource name, "me" for your own tickets, or "unassigned". |
| updated_before string | string | ISO date. Only tickets with no update since then. |
| cursor string | string | Next page cursor from the previous call. |
{
"tickets": [
{
"ticket_id": 48213,
"number": "T20261104.0007",
"title": "Printer offline on reception",
"company": "Acme Dental",
"status": "New",
"priority": "Medium",
"queue": "Service Desk",
"assignee": null,
"created": "2026-11-04",
"last_activity": "2026-11-04"
},
{
"ticket_id": 48190,
"number": "T20261103.0011",
"title": "Cannot open shared drive",
"company": "Brightwell Legal",
"status": "In Progress",
"priority": "High",
"queue": "Service Desk",
"assignee": "Sam Okafor",
"created": "2026-11-03",
"last_activity": "2026-11-05"
}
],
"next_cursor": null
} Returns the title, description, company, contact, status, priority, queue, assignee, due date and the ticket fields as Autotask shows them. Notes and time entries come from list_ticket_notes and list_time_entries.
MCP callautotask_read → get_ticket
REST endpointGET https://cotlet.dev/api/v1/autotask/tickets/{ticket_id}
| Name | Type | Description |
|---|---|---|
| ticket_id integer required | integer | Ticket ID from search_tickets. |
{
"ticket_id": 1
} {
"ticket_id": 48213,
"number": "T20261104.0007",
"title": "Printer offline on reception",
"description": "The reception printer shows offline since this morning. Restarting did not help.",
"company": "Acme Dental",
"contact": "Lena Ortiz",
"status": "New",
"priority": "Medium",
"queue": "Service Desk",
"assignee": null,
"due": "2026-11-06"
} Returns the labels as your Autotask account shows them, so your agent uses your own names and not a guess. Call it before update_ticket or create_ticket.
MCP callautotask_read → list_ticket_options
REST endpointGET https://cotlet.dev/api/v1/autotask/ticket-options
No parameters.
{
"statuses": [
"New",
"In Progress",
"Waiting Customer",
"Complete"
],
"priorities": [
"Low",
"Medium",
"High",
"Critical"
],
"queues": [
"Service Desk",
"Projects",
"Triage"
]
} Creates the ticket as you and returns its ID and number. Autotask then runs its own rules for new tickets, such as workflow rules and notifications to the contact. By default you confirm each call; you can switch that off for this tool.
MCP callautotask_write → create_ticket
REST endpointPOST https://cotlet.dev/api/v1/autotask/companies/{company_id}/tickets
| Name | Type | Description |
|---|---|---|
| company_id integer required | integer | Company ID from search_companies. |
| title string required | string | Ticket title. |
| description string | string | What the customer reported. |
| contact_id integer | integer | Contact ID from search_contacts. |
| priority string | string | Priority label from list_ticket_options. |
| queue string | string | Queue label from list_ticket_options. |
{
"company_id": 1,
"title": "title"
} {
"ticket_id": 48230,
"number": "T20261106.0003",
"status": "New",
"url": "https://ww5.autotask.net/Mvc/ServiceDesk/TicketDetail.mvc?ticketId=48230"
} Changes only the fields you pass and returns the ticket as it is now. A label that Autotask does not have fails at once and the error lists the valid ones. Autotask rules and notifications can react to the change, for example to the assignee. By default you confirm each call; you can switch that off for this tool.
MCP callautotask_write → update_ticket
REST endpointPATCH https://cotlet.dev/api/v1/autotask/tickets/{ticket_id}
| Name | Type | Description |
|---|---|---|
| ticket_id integer required | integer | Ticket ID from search_tickets. |
| status string | string | Status label from list_ticket_options. |
| priority string | string | Priority label from list_ticket_options. |
| queue string | string | Queue label from list_ticket_options. |
| assignee string | string | A resource name. |
{
"ticket_id": 1
} {
"ticket_id": 48213,
"status": "In Progress",
"priority": "High",
"queue": "Service Desk",
"assignee": "Sam Okafor"
} Notes can reach a customer or technician through Autotask notifications. Notes cannot be removed by these tools.
Returns each note with its title, text, author, date and publish setting. Newest first. Follow next_cursor for older notes.
MCP callautotask_read → list_ticket_notes
REST endpointGET https://cotlet.dev/api/v1/autotask/ticket-notes
| Name | Type | Description |
|---|---|---|
| ticket_id integer required | integer | Ticket ID from search_tickets. |
| cursor string | string | Next page cursor from the previous call. |
{
"ticket_id": 1
} {
"notes": [
{
"note_id": 90417,
"title": "Status update",
"body": "Driver reinstalled. Waiting for the client to test a print.",
"author": "Sam Okafor",
"created": "2026-11-05",
"publish": "Internal"
}
],
"next_cursor": null
} Saves the note on the ticket and returns its ID and the publish setting Autotask applied. A note can reach the customer or the technician through Autotask notifications. By default you confirm each call; you can switch that off for this tool.
MCP callautotask_write → add_ticket_note
REST endpointPOST https://cotlet.dev/api/v1/autotask/tickets/{ticket_id}/note
| Name | Type | Description |
|---|---|---|
| ticket_id integer required | integer | Ticket ID from search_tickets. |
| body string required | string | Note text. |
| title string | string | Note title. |
{
"ticket_id": 48213,
"title": "Triage",
"body": "Looks like a driver issue after the update. Moving to Service Desk, priority High."
} {
"note_id": 90431,
"ticket_id": 48213,
"title": "Triage",
"publish": "Internal",
"created": "2026-11-06"
} Autotask can refuse time on a Complete ticket when its Service Desk setting prohibits it. The error says so.
Returns each entry with ticket, person, date, hours and summary. It adds up the hours per ticket in total_hours. You see the entries your Autotask security level lets you see.
MCP callautotask_read → list_time_entries
REST endpointGET https://cotlet.dev/api/v1/autotask/time-entries
| Name | Type | Description |
|---|---|---|
| ticket_id integer | integer | Ticket ID from search_tickets. Leave out to read by person and date. |
| resource string | string | A resource name or "me". Used with date. |
| date string | string | ISO date for the entries of one day. |
| cursor string | string | Next page cursor from the previous call. |
{
"entries": [
{
"entry_id": 77120,
"ticket_id": 48190,
"resource": "Sam Okafor",
"date": "2026-11-05",
"hours": 1.5,
"summary": "Remapped the shared drive"
},
{
"entry_id": 77096,
"ticket_id": 48190,
"resource": "Sam Okafor",
"date": "2026-11-04",
"hours": 0.5,
"summary": "First check"
}
],
"total_hours": 2,
"next_cursor": null
} Adds the entry under your own resource and returns it. Time is billable money, so it asks for your OK. Autotask can refuse time on a Complete ticket when its Service Desk setting prohibits it, and the error says so. By default you confirm each call; you can switch that off for this tool.
MCP callautotask_write → log_time_entry
REST endpointPOST https://cotlet.dev/api/v1/autotask/tickets/{ticket_id}/time-entries
| Name | Type | Description |
|---|---|---|
| ticket_id integer required | integer | Ticket ID from search_tickets. |
| hours number required | number | Hours worked, for example 0.5. |
| summary string required | string | What was done. |
| date string | string | ISO date. Defaults to today. |
{
"ticket_id": 1,
"hours": 1,
"summary": "summary"
} {
"entry_id": 77131,
"ticket_id": 48190,
"resource": "Sam Okafor",
"date": "2026-11-06",
"hours": 0.5,
"summary": "Checked the shared drive mapping"
} Look up the company and contact IDs before you create or filter tickets.
Returns the company ID, name, phone and whether it is active. Use the ID in search_tickets, search_contacts and create_ticket.
MCP callautotask_read → search_companies
REST endpointGET https://cotlet.dev/api/v1/autotask/companies/search
| Name | Type | Description |
|---|---|---|
| query string required | string | Part of the company name. |
| cursor string | string | Next page cursor from the previous call. |
{
"query": "query"
} {
"companies": [
{
"company_id": 1182,
"name": "Acme Dental",
"phone": "+1 555 0142",
"active": true
}
],
"next_cursor": null
} Returns the contact ID, name, email and phone. Use the contact ID in create_ticket.
MCP callautotask_read → search_contacts
REST endpointGET https://cotlet.dev/api/v1/autotask/companies/{company_id}/contacts/search
| Name | Type | Description |
|---|---|---|
| company_id integer required | integer | Company ID from search_companies. |
| query string | string | Part of the name or email. |
| cursor string | string | Next page cursor from the previous call. |
{
"company_id": 1
} {
"contacts": [
{
"contact_id": 5531,
"name": "Lena Ortiz",
"email": "lena@example.com",
"phone": "+1 555 0143"
}
],
"next_cursor": null
} Your logged-in Autotask profile, encrypted with AES-256-GCM, in Finland. Not the password.
The 11 Autotask tools. Never the cookie or your login.
What your security level sees: tickets, notes, time, companies.
Contracts, billing, resources, security levels and deleting.
You sign in again in your own browser, with your MFA. We never type it.
Disable for agents, reset the browser, or end the session in Autotask.
Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results).
You sign in with your own Autotask login, so the agent sees and changes only what that login can. A technician level stays a technician level. Tickets and companies you cannot open do not show up in a result.
Autotask notes set to All Autotask Users show in the outsourced copy of the ticket (Autotask developer help, 6 Nov 2026). Notes are the writes most likely to reach a customer, so they wait for your OK.
When an Autotask screen moves or a field is renamed, the fix happens on our side and your prompts keep working. status.cotlet.dev watches the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Create a ticket | Edit it in Autotask; its rules and notifications may already have run |
| Update status, priority, queue or assignee | Set the old value again in Autotask |
| Add a note | No automatic undo; a note for All Autotask Users shows in the outsourced copy |
| Log a time entry | Edit or delete it in Autotask while it is not posted and the timesheet is unsubmitted |
All 4 write tools ask first: create_ticket, update_ticket, add_ticket_note, log_time_entry. Reads reach nobody and run at once. Switch the wait off per tool for a scheduled run.
A new assignee or status can fire Autotask rules and notifications, so check your workflow rules before you switch the wait off.
{
"name": "add_ticket_note",
"arguments": {
"ticket_id": 48213,
"title": "Triage",
"body": "Looks like a driver issue after the update. Moving to Service Desk, priority High."
}
} curl -X POST https://cotlet.dev/api/v1/autotask/tickets/48213/note \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Triage","body":"Looks like a driver issue after the update. Moving to Service Desk, priority High."}' {
"note_id": 90431,
"ticket_id": 48213,
"title": "Triage",
"publish": "Internal",
"created": "2026-11-06"
} Scripts and cron jobs reach the same tools over REST at /api/v1/autotask, with the same key and price. A write over REST waits for your OK too and answers 202 until you approve it. A failed call costs nothing. The tools table lists the REST path of each tool.
About $70 a monthfor one service coordinator at a small MSP, 12,100 credits. Your Autotask plan is billed by Kaseya as before.
| Job | Calls | Credits |
|---|---|---|
| Triage new tickets, daily | 22 × 22 | 4,840 |
| Chase tickets with no recent note, daily | 13 × 22 | 2,860 |
| Log time from a daily summary | 8 × 22 | 1,760 |
| Tickets from email requests | 3 × 30 | 900 |
| Open tickets per company, weekly | 6 × 4 | 240 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 12,100 |
The month is our example: about 10 new tickets a day, 22 working days. Public ticket volumes come from vendor blogs, 800 a month for 5 technicians at Rev.io, so the numbers are our assumption. Dollars at the $29 pack rate. Kaseya publishes no Autotask PSA list price. Its one printed figure is $129 per user per month for the Kaseya 365 Ops bundle with Autotask Ultimate (reported by assigner.ai, 6 Nov 2026).
| 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 |
|---|---|---|
| kaseya/mcp-servers | Kaseya's official early-access servers for Autotask, Datto RMM and IT Glue, with skills. 16 stars, last commit 4 Nov 2026. | Alpha. Claude Desktop and Claude Code only, runs on an API user and integration code. |
| WYRE-AI/autotask-mcp | Apache-2.0, TypeScript. 101 tools for companies, contacts, tickets, projects, time entries and notes, per its README. 62 stars, last commit 29 Oct 2026. | You host it and give it an API user and integration code. |
| tegwin/AutotaskMCP | GPL-3.0, Python MCP server. 10 stars, last commit 17 Sep 2026. | You host it, with API credentials. |
| tphakala/autotask-mcp | Apache-2.0, Go implementation. 5 stars, last commit 8 Sep 2026. | You host it, with API credentials. |
| Zapier | Official Autotask app and a hosted MCP page: create tickets, ticket notes and time entries, find companies and contacts. | Needs a Zapier account and an Autotask API connection. |
The official and community servers are good if you are happy to create an API user and run or install one. Cotlet is for the coordinator or technician who wants the same jobs inside ChatGPT or Claude, under their own login, with no API user, no integration code and no server.
Take Group sp. z o.o. runs Cotlet. It is a software company registered in Poland, EU (VAT PL6342984273), working since 2019, founded by Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Write to contact@cotlet.dev with questions about the Autotask tools.
Sign up at cotlet.dev, log in to Autotask 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 Autotask account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in Autotask: triage new unassigned tickets; chase tickets with no recent update; log time from a daily summary. You ask in plain words, and anything that reaches other people waits for your OK first.
Yes, in alpha (checked 6 Nov 2026). Kaseya publishes it in github.com/kaseya/mcp-servers for Claude Desktop and Claude Code. It uses an API user and an integration code. Kaseya calls it early access until OAuth 2.1 support arrives, planned for FY27.
Create a free account at https://cotlet.dev, open Autotask under Integrations in the console and log in to Autotask in its Cloud Browser. The trial starts with your first app, no card asked.
No. Cotlet works in your own Autotask login, so no API-only user and no integration code are needed. Your security level still decides what your agent can see and change.
Yes. Cotlet is hosted, so the chat apps reach it by the shared address. Nothing runs on your computer.
Yes. Call Cotlet's REST API from a script or an HTTP step in n8n or Make with your Cotlet key. The same tools, inputs and price as MCP.
No. Cotlet is independent and not affiliated with Autotask, Datto or Kaseya.
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