# Autotask (oci · ghcr.io/wyre-technology/autotask-mcp:v2.32.10)

MCP server for Kaseya Autotask PSA — companies, tickets, projects, time entries, and more.

- Trust score: 40/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-22

## Components

- oci · `ghcr.io/wyre-technology/autotask-mcp:v2.32.10`: 40/100 (this document), [markdown](https://verifymcp.io/servers/wyre-technology-autotask-mcp/ghcr-io-wyre-technology-autotask-mcp-v2-32-10.md), [page](https://verifymcp.io/servers/wyre-technology-autotask-mcp/ghcr-io-wyre-technology-autotask-mcp-v2-32-10)

## Channel facts

- Registry: `oci`
- Package: `ghcr.io/wyre-technology/autotask-mcp:v2.32.10`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-22.

- **Supply Chain Security**: 0/100
  - Malware scan not yet available for this package.
  - Known CVEs could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.
  - Install-script risk not yet assessed.
  - Dependency health could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (Apache-2.0).
  - Actively maintained (last published 1 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 83/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 13091 tokens (~120/item across 109 items; 101 tools + 8 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 97/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 91% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).
  - Supports UI / widget rendering.

**Unverified: 2 categories.** Categories scored 0 because we could not verify them: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add wyre-technology-autotask-mcp -- docker run --rm -i ghcr.io/wyre-technology/autotask-mcp:v2.32.10
```

### Codex

```bash
codex mcp add wyre-technology-autotask-mcp -- docker run --rm -i ghcr.io/wyre-technology/autotask-mcp:v2.32.10
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "wyre-technology-autotask-mcp": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "--rm",
        "-i",
        "ghcr.io/wyre-technology/autotask-mcp:v2.32.10"
      ],
      "enabled": true
    }
  }
}
```

### Hermes

```yaml
mcp_servers:
  wyre-technology-autotask-mcp:
    command: "docker"
    args: ["run", "--rm", "-i", "ghcr.io/wyre-technology/autotask-mcp:v2.32.10"]
```

### Other

```json
{
  "mcpServers": {
    "wyre-technology-autotask-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/wyre-technology/autotask-mcp:v2.32.10"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-20 (score 40)

First indexed and scored.

## MCP tools (101)

### `autotask_test_connection` (~17 tokens)

Test Autotask API connection

### `autotask_search_companies` (~57 tokens)

Search companies by name or status. Max 200/page.

Input parameters:

- `isActive` (boolean)
- `page` (number)
- `pageSize` (number): Max 200
- `searchTerm` (string)

### `autotask_create_company` (~85 tokens)

Create new company record

Input parameters:

- `address1` (string)
- `city` (string)
- `companyName` (string, required)
- `companyType` (number, required)
- `isActive` (boolean)
- `ownerResourceID` (number)
- `phone` (string)
- `postalCode` (string)
- `state` (string)

### `autotask_update_company` (~547 tokens)

Update company record. invoiceTemplateID sets payment terms (103=Due on Receipt, 104=NET 30). Billing address fields separate from regular address.

Input parameters:

- `address1` (string): Regular address (distinct from billingAddress1)
- `address2` (string)
- `billToAddressToUse` (number): 1 = use bill-to fields explicitly
- `billToAttention` (string): Bill-to attention name
- `billToCity` (string): Bill-to city
- `billToCompanyLocationID` (number): Bill-to company location ID
- `billToCountryID` (number): Bill-to country ID
- `billToState` (string): Bill-to state/province
- `billToZipCode` (string): Bill-to ZIP/postal code
- `billingAddress1` (string): For invoices (separate from address1)
- `billingAddress2` (string): Billing address line 2
- `city` (string)
- `classification` (number): Company classification picklist ID
- `companyName` (string)
- `companyType` (number): Company type picklist ID (e.g. Customer, Prospect, Vendor)
- `countryID` (number): e.g. 237 for United States
- `id` (number, required)
- `invoiceEmailMessageID` (number): Default email-message template ID used when invoicing this company
- `invoiceMethod` (number): Invoice delivery method picklist ID (e.g. 2=Email)
- `invoiceTemplateID` (number): Invoice template ID applied to this company. Acts as the payment-terms selector (e.g. 103=Due on Receipt, 104=NET 30).
- `isActive` (boolean)
- `isTaxExempt` (boolean): Whether the company is tax-exempt. Note: Autotask field name is `isTaxExempt` — not `taxExempt`.
- `ownerResourceID` (number): Resource ID of the account owner
- `phone` (string)
- `postalCode` (string)
- `purchaseOrderTemplateID` (number): Default purchase-order template ID for this company
- `quoteEmailMessageID` (number): Default email-message template ID used when sending quotes
- `quoteTemplateID` (number): Default quote template ID for this company
- `state` (string)
- `taxID` (string): Tax registration / FEIN / VAT identifier string
- `taxRegionID` (number): Tax region ID (capital ID suffix per Autotask convention)
- `webAddress` (string): Website URL (field name is webAddress)

### `autotask_get_company_site_configuration` (~43 tokens)

Get company site configuration records. Call first to discover available fields.

Input parameters:

- `companyId` (number, required): The company ID whose site configuration records should be returned

### `autotask_update_company_site_configuration` (~72 tokens)

Update company site configuration. Fields are tenant-defined; call get first.

Input parameters:

- `id` (number, required): The company site configuration record ID to update (obtained from autotask_get_company_site_configuration).
- `updates` (object, required): Object containing the site configuration fields to update. Field names are tenant-specific.

### `autotask_search_contacts` (~91 tokens)

Search contacts by name, email, or company. Max 200/page.

Input parameters:

- `companyID` (number): Filter by company ID
- `isActive` (number): Filter by active status (1=active, 0=inactive)
- `page` (number)
- `pageSize` (number): Max 200
- `searchTerm` (string): Search term for contact name or email

### `autotask_create_contact` (~66 tokens)

Create new contact record

Input parameters:

- `companyID` (number, required): Company ID for the contact
- `emailAddress` (string)
- `firstName` (string, required)
- `lastName` (string, required)
- `phone` (string)
- `title` (string)

### `autotask_update_contact` (~242 tokens)

Update contact record. Only provided fields are changed.

Input parameters:

- `addressLine` (string): Address line (primary)
- `addressLine1` (string): Address line 1 (secondary)
- `city` (string): City
- `countryID` (number): Country ID (Autotask Countries entity)
- `emailAddress` (string): Primary email address
- `firstName` (string)
- `id` (number, required): Contact ID to update
- `isActive` (boolean): Whether the contact is active
- `lastName` (string)
- `mobilePhone` (string): Mobile phone number
- `phone` (string): Primary phone number
- `primaryContact` (boolean): Whether this contact is the primary contact for their company
- `state` (string): State/province
- `title` (string): Job title
- `userDefinedFields` (array): User-defined (custom) fields for the contact, as an array of { name, value } objects matching the Autotask REST API shape. Contacts support UDFs (hasUserDefinedFields: true).
- `zipCode` (string): Postal/ZIP code

### `autotask_search_tickets` (~266 tokens)

Search tickets by company, queue, status, priority. Use autotask_get_ticket_details for full data. Max 500/page.

Input parameters:

- `assignedResourceID` (number): Filter by assigned resource ID
- `companyID` (number): Filter by company ID
- `contactID` (number): Filter by primary contact ID — returns only tickets where contactID matches
- `createdAfter` (string): Filter tickets created on or after this date (ISO format, e.g. 2026-01-01)
- `createdBefore` (string): Filter tickets created on or before this date (ISO format)
- `lastActivityAfter` (string): Filter tickets with activity on or after this date (ISO format)
- `page` (number)
- `pageSize` (number): Max 500
- `priority` (number): Filter by ticket priority ID. Use autotask_list_ticket_priorities to discover valid IDs.
- `queueID` (number): Filter by queue ID. Use autotask_list_queues to discover valid IDs.
- `searchTerm` (string): Search by ticket number prefix
- `status` (number): Filter by ticket status ID (omit for all open tickets)
- `unassigned` (boolean): Set to true to find unassigned tickets

### `autotask_get_ticket_details` (~58 tokens)

Get full ticket details including notes, time entries, and custom fields.

Input parameters:

- `fullDetails` (boolean): Whether to return full ticket details (default: false for optimized data)
- `ticketID` (number, required): Ticket ID to retrieve

### `autotask_create_ticket` (~521 tokens)

Create new ticket record

Input parameters:

- `assignedResourceID` (number): Assigned resource ID. If set, assignedResourceRoleID is also required by Autotask.
- `assignedResourceRoleID` (number): Role ID for the assigned resource. Required by Autotask when assignedResourceID is set.
- `billingCodeID` (number): Work type / billing code ID used for billing this ticket.
- `companyID` (number, required): Company ID for the ticket
- `contactID` (number): Contact ID for the ticket
- `description` (string, required)
- `estimatedHours` (number): Estimated hours of work for the ticket.
- `issueType` (number): First-level issue type ID (picklist). Required context for subIssueType. Use autotask_get_field_info (entityType "Tickets", fieldName "issueType") to discover valid values.
- `priority` (number)
- `projectID` (number): Project ID to associate the ticket with. Links the ticket to an existing project.
- `queueID` (number): Queue ID to route the ticket to. Use autotask_list_queues to discover valid IDs.
- `resolution` (string): Ticket-level resolution text. This is the Resolution field on the ticket itself, NOT a ticket note.
- `serviceLevelAgreementID` (number): Service Level Agreement (SLA) ID to apply to the ticket.
- `source` (number): Ticket source ID (picklist, e.g. Phone, Email, Portal). Use autotask_get_field_info (entityType "Tickets", fieldName "source") to discover valid values.
- `status` (number)
- `subIssueType` (number): Sub issue type ID (picklist). Must be valid for the selected issueType. Use autotask_get_field_info (entityType "Tickets", fieldName "subIssueType") to discover valid values.
- `ticketAdditionalContacts` (array): Additional contact IDs to associate with the ticket (beyond the primary contactID).
- `ticketCategory` (number): Ticket category ID (picklist). Use autotask_get_field_info with entityType "Tickets" and fieldName "ticketCategory" to discover valid values.
- `ticketType` (number): Ticket type ID (picklist, e.g. Service Request, Incident, Problem, Change).
- `title` (string, required)
- `userDefinedFields` (array): User-defined (custom) fields for the ticket, as an array of { name, value } objects matching the Autotask REST API shape.

### `autotask_update_ticket` (~293 tokens)

Update ticket record. Only provided fields are changed.

Input parameters:

- `assignedResourceID` (number): Assigned resource ID. If set, assignedResourceRoleID is also required by Autotask.
- `assignedResourceRoleID` (number): Role ID for the assigned resource. Required by Autotask when assignedResourceID is set.
- `contactID` (number): Contact ID for the ticket
- `description` (string)
- `dueDateTime` (string): Due date and time in ISO 8601 format (e.g. 2026-03-15T17:00:00Z)
- `issueType` (number): First-level issue type ID (picklist). Required context for subIssueType. Use autotask_get_field_info (entityType "Tickets", fieldName "issueType") to discover valid values.
- `priority` (number): Ticket priority ID (use autotask_list_ticket_priorities to find valid IDs)
- `status` (number): Ticket status ID (use autotask_list_ticket_statuses to find valid IDs)
- `subIssueType` (number): Sub issue type ID (picklist). Must be valid for the selected issueType. Use autotask_get_field_info (entityType "Tickets", fieldName "subIssueType") to discover valid values.
- `ticketId` (number, required): The ID of the ticket to update
- `title` (string)

### `autotask_get_ticket_charge` (~33 tokens)

Get a specific ticket charge by ID

Input parameters:

- `chargeId` (number, required): The ticket charge ID to retrieve

### `autotask_search_ticket_charges` (~73 tokens)

Search ticket charges (materials, costs, expenses). Provide ticketId for best performance. Max 10 if unfiltered.

Input parameters:

- `pageSize` (number): Number of results to return (default: 25, max: 100)
- `ticketId` (number): Filter by ticket ID (recommended)

### `autotask_create_ticket_charge` (~202 tokens)

Create charge on ticket for materials, costs, or expenses.

Input parameters:

- `billableToAccount` (boolean): Whether this charge is billable to the client (default: true)
- `billingCodeID` (number): Billing code ID for categorization
- `chargeType` (number, required): Charge type picklist ID (use autotask_get_field_info with entityType "TicketCharges" to find valid values)
- `datePurchased` (string): Date the charge was incurred (YYYY-MM-DD format)
- `description` (string): Charge description
- `name` (string, required): Charge name/title
- `productID` (number): Associated product ID (optional)
- `status` (number): Charge status picklist ID
- `ticketID` (number, required): Ticket ID to add the charge to
- `unitCost` (number): Cost per unit
- `unitPrice` (number): Price per unit
- `unitQuantity` (number): Quantity of units

### `autotask_update_ticket_charge` (~111 tokens)

Update an existing ticket charge. Only fields provided will be changed.

Input parameters:

- `billableToAccount` (boolean): Updated billable status
- `chargeId` (number, required): The charge ID to update
- `description` (string): Updated description
- `name` (string): Updated charge name
- `status` (number): Updated status
- `unitCost` (number): Updated unit cost
- `unitPrice` (number): Updated unit price
- `unitQuantity` (number): Updated quantity

### `autotask_delete_ticket_charge` (~73 tokens)

⚠ DESTRUCTIVE — IRREVERSIBLE. Permanently deletes a ticket charge record and all associated billing data. This action cannot be undone. Confirm with the user before invoking.

Input parameters:

- `chargeId` (number, required): The charge ID to delete
- `ticketId` (number, required): The parent ticket ID

### `autotask_get_ticket_history` (~54 tokens)

Get a single ticket history entry by ID. Each entry records one audited change to a ticket field (who, when, before/after).

Input parameters:

- `historyId` (number, required): The ticket history entry ID to retrieve

### `autotask_search_ticket_history` (~127 tokens)

Get the audit trail of field changes for a ticket (status transitions, assignment changes, priority edits, etc.). Use this to answer questions like "when did this ticket move from In Progress to Waiting Customer" or "who changed the priority". Returns entries ordered by Autotask; sort/filter client-side if needed.

Input parameters:

- `pageSize` (number): Number of history entries to return (default: 50, max: 500)
- `ticketId` (number, required): The ticket ID to get history for (required — Autotask does not support unscoped history queries)

### `autotask_create_time_entry` (~343 tokens)

Create a time entry in Autotask. Can be tied to a ticket, task, or project, OR created as "Regular Time" (no parent) for meetings, admin work, etc. For Regular Time, specify a category like "Internal Meeting", "Office Management", "Training", etc.

Input parameters:

- `category` (string): Category name for Regular Time entries (e.g., "Internal Meeting", "Office Management", "Training", "Research", "HR/Recruiting", "Travel Time", "Holiday", "PTO"). Required for Regular Time entries (wh…
- `dateWorked` (string, required): Date worked (YYYY-MM-DD format)
- `endDateTime` (string): End date/time (ISO format)
- `hoursWorked` (number, required): Number of hours worked
- `internalNotes` (string): Internal notes for the time entry
- `projectID` (number): Project ID for the time entry (omit for Regular Time)
- `resourceID` (number): Resource ID (user) logging the time. Can be omitted if resourceName is provided.
- `resourceName` (string): Name of the resource/user (e.g., "Will Spence"). Will be resolved to a resourceID automatically. Use this instead of resourceID for convenience.
- `startDateTime` (string): Start date/time (ISO format)
- `summaryNotes` (string, required): Summary notes for the time entry
- `taskID` (number): Task ID for the time entry (for project work, omit for Regular Time)
- `ticketID` (number): Ticket ID for the time entry (omit for Regular Time)

### `autotask_search_projects` (~114 tokens)

Search for projects in Autotask. Returns 25 results per page by default. Use page parameter for more results.

Input parameters:

- `companyID` (number): Filter by company ID
- `page` (number)
- `pageSize` (number): Results per page (default: 25, max: 100)
- `projectLeadResourceID` (number): Filter by project lead resource ID
- `searchTerm` (string): Search term for project name
- `status` (number): Filter by project status

### `autotask_create_project` (~168 tokens)

Create a new project in Autotask

Input parameters:

- `companyID` (number, required): Company ID for the project
- `description` (string): Project description
- `endDate` (string): Project end date (YYYY-MM-DD)
- `estimatedHours` (number): Estimated hours for the project
- `projectLeadResourceID` (number): Project manager resource ID
- `projectName` (string, required): Project name
- `projectType` (number, required): Project type (2=Proposal, 3=Template, 4=Internal, 5=Client, 8=Baseline). Required.
- `startDate` (string): Project start date (YYYY-MM-DD)
- `status` (number, required): Project status (1=New, 2=In Progress, 5=Complete)

### `autotask_update_project` (~278 tokens)

Update an existing project in Autotask. Only the fields you provide will be updated. Common use case: set status=5 to mark a project Complete.

Input parameters:

- `assignedResourceID` (number): Primary assigned resource (project manager) ID. Note: Autotask may also require assignedResourceRoleID to be set alongside this field.
- `assignedResourceRoleID` (number): Role ID for the assigned resource. Required by Autotask when assignedResourceID is provided.
- `departmentID` (number): Department ID owning the project
- `description` (string): Project description
- `endDateTime` (string): Project end date/time (ISO 8601)
- `estimatedTime` (number): Estimated time for the project, in hours
- `projectId` (number, required): The ID of the project to update
- `projectLeadResourceID` (number): Project lead resource ID
- `projectName` (string): Project name
- `startDateTime` (string): Project start date/time (ISO 8601)
- `status` (number): Project status (1=New, 2=In Progress, 5=Complete). Set to 5 to mark the project complete.
- `userDefinedFields` (array): User-defined field values to set on the project (Autotask REST-native shape)

### `autotask_search_resources` (~105 tokens)

Search for resources (users) in Autotask. Returns 25 results per page by default. Use page parameter for more results.

Input parameters:

- `isActive` (boolean)
- `page` (number)
- `pageSize` (number): Max 500
- `resourceType` (number): Filter by resource type (1=Employee, 2=Contractor, 3=Temporary)
- `searchTerm` (string): Search term for resource name or email

### `autotask_get_ticket_note` (~47 tokens)

Get a specific ticket note by ticket ID and note ID

Input parameters:

- `noteId` (number, required): The note ID to retrieve
- `ticketId` (number, required): The ticket ID

### `autotask_search_ticket_notes` (~79 tokens)

Search for notes on a specific ticket. Iterating across many tickets trips Autotask's per-integration API threshold — scope the parent list first.

Input parameters:

- `pageSize` (number): Number of results to return (default: 25, max: 100)
- `ticketId` (number, required): The ticket ID to search notes for

### `autotask_create_ticket_note` (~188 tokens)

Create a new note for a ticket

Input parameters:

- `description` (string, required): Note content
- `noteType` (number, required): Note type picklist ID. Tenant-specific — call autotask_get_field_info with entityType "TicketNotes" and fieldName "noteType" to discover the exact label-to-ID mapping before calling this tool. Do not…
- `publish` (number, required): Publish/visibility picklist ID. Tenant-specific and security-sensitive (controls whether the note is visible to clients). Call autotask_get_field_info with entityType "TicketNotes" and fieldName "pub…
- `ticketId` (number, required): The ticket ID to add the note to
- `title` (string): Note title

### `autotask_search_ticket_checklist_items` (~61 tokens)

List all checklist items on a ticket, including their completion status. Checklist items are a sub-resource of a ticket and cannot be queried without a ticket ID.

Input parameters:

- `ticketId` (number, required): The ticket ID whose checklist items should be listed

### `autotask_create_ticket_checklist_item` (~84 tokens)

Add a new checklist item to a ticket.

Input parameters:

- `isCompleted` (boolean): Whether the item starts in the completed state (default: false)
- `itemName` (string, required): The checklist item text
- `position` (number): Optional ordering position for the item
- `ticketId` (number, required): The ticket ID to add the checklist item to

### `autotask_update_ticket_checklist_item` (~105 tokens)

Update a checklist item on a ticket — edit text, mark complete/incomplete, or change position.

Input parameters:

- `isCompleted` (boolean): Mark the item complete (true) or incomplete (false)
- `itemId` (number, required): The checklist item ID to update
- `itemName` (string): New text for the checklist item
- `position` (number): New ordering position for the item
- `ticketId` (number, required): The parent ticket ID

### `autotask_delete_ticket_checklist_item` (~73 tokens)

⚠ DESTRUCTIVE — IRREVERSIBLE. Permanently deletes a checklist item from a ticket. This action cannot be undone. Confirm with the user before invoking.

Input parameters:

- `itemId` (number, required): The checklist item ID to delete
- `ticketId` (number, required): The parent ticket ID

### `autotask_get_project_note` (~47 tokens)

Get a specific project note by project ID and note ID

Input parameters:

- `noteId` (number, required): The note ID to retrieve
- `projectId` (number, required): The project ID

### `autotask_search_project_notes` (~90 tokens)

Search for notes on a specific project. Fan-out across many projects trips Autotask's API threshold (see issue #69) — scope the parent list (status, company, date range) first.

Input parameters:

- `pageSize` (number): Number of results to return (default: 25, max: 100)
- `projectId` (number, required): The project ID to search notes for

### `autotask_create_project_note` (~145 tokens)

Create a new note for a project

Input parameters:

- `description` (string, required): Note content
- `isAnnouncement` (boolean): Whether this note is an announcement. Defaults to false.
- `noteType` (number): Note type (1=General, 2=Appointment, 3=Task, 4=Ticket, 5=Project, 6=Opportunity)
- `projectId` (number, required): The project ID to add the note to
- `publish` (number): Publish visibility (1=All Autotask Users, 2=Internal Project Team, 3=Project Team). Defaults to 1.
- `title` (string): Note title

### `autotask_get_company_note` (~47 tokens)

Get a specific company note by company ID and note ID

Input parameters:

- `companyId` (number, required): The company ID
- `noteId` (number, required): The note ID to retrieve

### `autotask_search_company_notes` (~76 tokens)

Search for notes on a specific company. Iterating across many companies trips Autotask's API threshold — scope the parent list first.

Input parameters:

- `companyId` (number, required): The company ID to search notes for
- `pageSize` (number): Number of results to return (default: 25, max: 100)

### `autotask_create_company_note` (~66 tokens)

Create a new note for a company

Input parameters:

- `actionType` (number): Action type for the note
- `companyId` (number, required): The company ID to add the note to
- `description` (string, required): Note content
- `title` (string): Note title

### `autotask_get_ticket_attachment` (~228 tokens)

Get a ticket attachment. With includeData=false (default) returns metadata only — fast, suitable for browsing. With includeData=true returns the base64 binary content via the top-level /TicketAttachments/{id} endpoint (the child endpoint never populates data). The attachment is verified to belong to the given ticketId. Oversized binaries are stripped from the response with a dataOmittedReason field — Autotask attachments can be up to 3 MB, which is ~4 MB as base64 and may exceed the MCP client tool-result limit (~1 MB).

Input parameters:

- `attachmentId` (number, required): The attachment ID to retrieve
- `includeData` (boolean): Set true to fetch the base64-encoded file bytes. Default false returns metadata only.
- `maxInlineBase64Bytes` (number): Cap on base64 string length before data is stripped (default 750_000, ~560 KB raw). Only relevant when includeData=true. Raise carefully — your MCP client may reject oversized tool results.
- `ticketId` (number, required): The ticket ID the attachment belongs to

### `autotask_search_ticket_attachments` (~74 tokens)

Search for attachments on a specific ticket. Each parent triggers a separate query — scope the parent ticket list before iterating.

Input parameters:

- `pageSize` (number): Number of results to return (default: 10, max: 50)
- `ticketId` (number, required): The ticket ID to search attachments for

### `autotask_create_ticket_attachment` (~283 tokens)

Upload a file attachment to an existing ticket. The file content must be passed as a base64-encoded string in the `data` field (MCP is JSON-RPC, so binary bytes must be base64-encoded). Autotask enforces a 3 MB hard limit on ticket attachments; this tool validates the decoded size before calling the API and returns a clear error if the limit is exceeded. Example: { ticketId: 12345, title: "screenshot.png", data: "iVBORw0KGgoAAAANSUhEUgAA..." }

Input parameters:

- `contentType` (string): MIME type of the file (e.g. "image/png", "application/pdf"). Optional.
- `data` (string, required): Base64-encoded file content. Maximum decoded size: 3 MB (Autotask ticket attachment limit). Example: read a file and pass its base64 representation here.
- `fullPath` (string): Original filename including any path. Defaults to `title` if not provided.
- `publish` (number): Visibility: 1 = All Autotask Users (default), 2 = Internal Users Only
- `ticketId` (number, required): The ticket ID to attach the file to
- `title` (string, required): Display title for the attachment (typically the filename, e.g. "screenshot.png")

### `autotask_get_expense_report` (~34 tokens)

Get a specific expense report by ID

Input parameters:

- `reportId` (number, required): The expense report ID to retrieve

### `autotask_search_expense_reports` (~98 tokens)

Search for expense reports with optional filters

Input parameters:

- `pageSize` (number): Number of results to return (default: 25, max: 100)
- `status` (number): Filter by status (1=New, 2=Submitted, 3=Approved, 4=Paid, 5=Rejected, 6=InReview)
- `submitterId` (number): Filter by submitter resource ID

### `autotask_create_expense_report` (~71 tokens)

Create a new expense report

Input parameters:

- `description` (string): Expense report description
- `name` (string, required): Expense report name
- `submitterId` (number, required): The resource ID of the submitter
- `weekEndingDate` (string, required): Week ending date (YYYY-MM-DD format)

### `autotask_create_expense_item` (~163 tokens)

Create an expense item on an existing expense report

Input parameters:

- `amount` (number, required): Expense amount
- `companyId` (number): Associated company ID (0 for internal)
- `description` (string, required): Line item description
- `expenseCategory` (number, required): Expense category picklist ID
- `expenseDate` (string, required): Date of expense (YYYY-MM-DD format)
- `expenseReportId` (number, required): The expense report ID to add the item to
- `haveReceipt` (boolean): Whether a receipt is attached
- `isBillableToCompany` (boolean): Whether billable to company
- `isReimbursable` (boolean): Whether this expense is reimbursable
- `paymentType` (number): Payment type picklist ID

### `autotask_get_quote` (~30 tokens)

Get a specific quote by ID

Input parameters:

- `quoteId` (number, required): The quote ID to retrieve

### `autotask_search_quotes` (~91 tokens)

Search for quotes with optional filters

Input parameters:

- `companyId` (number): Filter by company ID
- `contactId` (number): Filter by contact ID
- `opportunityId` (number): Filter by opportunity ID
- `pageSize` (number): Number of results to return (default: 25, max: 100)
- `searchTerm` (string): Search term for quote name or description

### `autotask_create_quote` (~101 tokens)

Create a new quote

Input parameters:

- `companyId` (number, required): Company ID for the quote
- `contactId` (number): Contact ID for the quote
- `description` (string): Quote description
- `effectiveDate` (string): Effective date (YYYY-MM-DD format)
- `expirationDate` (string): Expiration date (YYYY-MM-DD format)
- `name` (string): Quote name
- `opportunityId` (number): Associated opportunity ID

### `autotask_get_opportunity` (~31 tokens)

Get a specific opportunity by ID

Input parameters:

- `opportunityId` (number, required): The opportunity ID to retrieve

### `autotask_search_opportunities` (~76 tokens)

Search for opportunities with optional filters

Input parameters:

- `companyId` (number): Filter by company ID
- `pageSize` (number): Number of results to return (default: 25, max: 100)
- `searchTerm` (string): Search term for opportunity title
- `status` (number): Filter by status

### `autotask_create_opportunity` (~291 tokens)

Create a new sales opportunity in Autotask

Input parameters:

- `amount` (number): Revenue amount (default: 0, set useQuoteTotals=true to calculate from quotes)
- `companyId` (number, required): Company ID for the opportunity
- `contactId` (number): Contact ID for the opportunity
- `cost` (number): Cost amount (default: 0)
- `description` (string): Opportunity description
- `opportunityCategoryID` (number): Opportunity category picklist value ID
- `ownerResourceId` (number, required): Owner resource ID (the sales rep or account manager)
- `probability` (number): Win probability percentage (0-100, default: 50)
- `projectedCloseDate` (string, required): Projected close date (YYYY-MM-DD)
- `stage` (number, required): Stage picklist value ID (use autotask_get_field_info to find valid values)
- `startDate` (string, required): Start date (YYYY-MM-DD)
- `status` (number, required): Status: 0=Not Ready To Buy, 1=Active, 2=Lost, 3=Closed, 4=Implemented
- `title` (string, required): Opportunity name/title
- `totalAmountMonths` (number): Number of months to calculate totals for (e.g., 12 for annual)
- `useQuoteTotals` (boolean): Whether to calculate totals from linked quotes (default: true)

### `autotask_get_product` (~30 tokens)

Get a specific product by ID

Input parameters:

- `productId` (number, required): The product ID to retrieve

### `autotask_search_products` (~61 tokens)

Search for products with optional filters

Input parameters:

- `isActive` (boolean)
- `pageSize` (number): Number of results to return (default: 25, max: 100)
- `searchTerm` (string): Search term for product name

### `autotask_get_service` (~30 tokens)

Get a specific service by ID

Input parameters:

- `serviceId` (number, required): The service ID to retrieve

### `autotask_search_services` (~61 tokens)

Search for services with optional filters

Input parameters:

- `isActive` (boolean)
- `pageSize` (number): Number of results to return (default: 25, max: 100)
- `searchTerm` (string): Search term for service name

### `autotask_get_service_bundle` (~34 tokens)

Get a specific service bundle by ID

Input parameters:

- `serviceBundleId` (number, required): The service bundle ID to retrieve

### `autotask_search_service_bundles` (~66 tokens)

Search for service bundles with optional filters

Input parameters:

- `isActive` (boolean)
- `pageSize` (number): Number of results to return (default: 25, max: 100)
- `searchTerm` (string): Search term for service bundle name

### `autotask_get_quote_item` (~34 tokens)

Get a specific quote item by ID

Input parameters:

- `quoteItemId` (number, required): The quote item ID to retrieve

### `autotask_search_quote_items` (~73 tokens)

Search for quote items, typically filtered by quote ID

Input parameters:

- `pageSize` (number): Number of results to return (default: 50, max: 100)
- `quoteId` (number): Filter by quote ID (recommended)
- `searchTerm` (string): Search term for quote item name

### `autotask_create_quote_item` (~345 tokens)

Create a line item on a quote. Set exactly ONE item reference (serviceID, productID, or serviceBundleID). Required: quoteId, quantity. Defaults: unitDiscount=0, lineDiscount=0, percentageDiscount=0, isOptional=false.

Input parameters:

- `description` (string): Item description
- `isOptional` (boolean): Whether this is an optional line item (default: false)
- `lineDiscount` (number): Line-level discount amount (default: 0)
- `name` (string): Item name (auto-populated for service/product types)
- `percentageDiscount` (number): Percentage discount (default: 0)
- `productID` (number): Product ID to link (mutually exclusive with serviceID/serviceBundleID)
- `quantity` (number, required): Quantity of the item
- `quoteId` (number, required): The quote ID to add this item to
- `quoteItemType` (number): Quote item type (auto-determined if omitted): 1=Product, 2=Cost, 3=Labor, 4=Expense, 6=Shipping, 11=Service, 12=ServiceBundle
- `serviceBundleID` (number): Service Bundle ID to link (mutually exclusive with serviceID/productID)
- `serviceID` (number): Service ID to link (mutually exclusive with productID/serviceBundleID)
- `sortOrderID` (number): Sort order for display
- `unitCost` (number): Unit cost for the item
- `unitDiscount` (number): Per-unit discount amount (default: 0)
- `unitPrice` (number): Unit price for the item

### `autotask_update_quote_item` (~115 tokens)

Update an existing quote item (quantity, price, etc.)

Input parameters:

- `isOptional` (boolean): Updated optional status
- `lineDiscount` (number): Updated line discount
- `percentageDiscount` (number): Updated percentage discount
- `quantity` (number): Updated quantity
- `quoteItemId` (number, required): The quote item ID to update
- `sortOrderID` (number): Updated sort order
- `unitDiscount` (number): Updated per-unit discount
- `unitPrice` (number): Updated unit price

### `autotask_delete_quote_item` (~76 tokens)

⚠ DESTRUCTIVE — IRREVERSIBLE. Permanently deletes a quote item (line item) from a quote. This action cannot be undone. Confirm with the user before invoking.

Input parameters:

- `quoteId` (number, required): The parent quote ID
- `quoteItemId` (number, required): The quote item ID to delete

### `autotask_search_configuration_items` (~127 tokens)

Search for configuration items in Autotask with optional filters

Input parameters:

- `companyID` (number): Filter by company ID
- `configurationItemCategoryID` (number): Filter by configuration item category ID
- `configurationItemType` (number): Filter by configuration item type (numeric picklist value)
- `isActive` (boolean)
- `pageSize` (number): Number of results to return (default: 25, max: 500)
- `productID` (number): Filter by product ID
- `searchTerm` (string): Search term for configuration item name

### `autotask_search_contracts` (~151 tokens)

Search for contracts in Autotask with optional filters

Input parameters:

- `companyID` (number): Filter by company ID
- `contractType` (number): Filter by contract type picklist ID
- `endDateFrom` (string): Only contracts ending on or after this date (ISO YYYY-MM-DD)
- `endDateTo` (string): Only contracts ending on or before this date (ISO YYYY-MM-DD)
- `pageSize` (number): Number of results to return (default: 25, max: 500)
- `searchTerm` (string): Search term for contract name
- `status` (number): Filter by contract status (1=In Effect, 3=Terminated)

### `autotask_get_contract` (~34 tokens)

Get a single contract by ID (header fields only, no service lines)

Input parameters:

- `id` (number, required): Contract ID

### `autotask_list_expiring_contracts` (~156 tokens)

List contracts whose end date falls within the next N days (expiring-contracts report). Optionally include already-expired contracts, and scope to one company or the whole org.

Input parameters:

- `companyID` (number): Limit the report to one company (omit for the whole org)
- `daysAhead` (number): Look-ahead window in days (default: 60)
- `includeExpired` (boolean): Also include contracts whose end date is already in the past (default: false)
- `pageSize` (number): Number of results to return (default: 100, max: 500)
- `status` (number): Filter by contract status (1=In Effect, 3=Terminated)

### `autotask_search_invoices` (~83 tokens)

Search for invoices in Autotask with optional filters

Input parameters:

- `companyID` (number): Filter by company ID
- `invoiceNumber` (string): Filter by invoice number
- `isVoided` (boolean): Filter by voided status
- `pageSize` (number): Number of results to return (default: 25, max: 500)

### `autotask_get_invoice_details` (~58 tokens)

Get a single Autotask invoice with its nested line items (billing items posted to the invoice). Use for finance workflows that need to see exactly what an invoice contains.

Input parameters:

- `invoiceId` (number, required): The invoice ID to fetch

### `autotask_search_tasks` (~127 tokens)

Search for tasks in Autotask. Returns 25 results per page by default. Use page parameter for more results.

Input parameters:

- `assignedResourceID` (number): Filter by assigned resource ID
- `page` (number)
- `pageSize` (number): Results per page (default: 25, max: 100)
- `projectID` (number): Filter by project ID
- `searchTerm` (string): Search term for task title
- `status` (number): Filter by task status (1=New, 2=In Progress, 5=Complete)

### `autotask_create_task` (~157 tokens)

Create a new task in Autotask

Input parameters:

- `assignedResourceID` (number): Assigned resource ID
- `description` (string): Task description
- `endDateTime` (string): Task end date/time (ISO format)
- `estimatedHours` (number): Estimated hours for the task
- `projectID` (number, required): Project ID for the task
- `startDateTime` (string): Task start date/time (ISO format)
- `status` (number, required): Task status (1=New, 2=In Progress, 5=Complete)
- `taskType` (number): Task type (1=FixedWork, 2=FixedDuration). Defaults to 1.
- `title` (string, required): Task title

### `autotask_list_phases` (~56 tokens)

List phases for a project in Autotask

Input parameters:

- `pageSize` (number): Results per page (default: 25, max: 100)
- `projectID` (number, required): Project ID to list phases for

### `autotask_create_phase` (~93 tokens)

Create a new phase in an Autotask project

Input parameters:

- `description` (string): Phase description
- `dueDate` (string): Phase due date (ISO format)
- `estimatedHours` (number): Estimated hours for the phase
- `projectID` (number, required): Project ID for the phase
- `startDate` (string): Phase start date (ISO format)
- `title` (string, required): Phase title

### `autotask_list_queues` (~33 tokens)

List all available ticket queues in Autotask. Use this to find queue IDs for filtering tickets by queue.

### `autotask_list_ticket_statuses` (~34 tokens)

List all available ticket statuses in Autotask. Use this to find status values for filtering or creating tickets.

### `autotask_list_ticket_priorities` (~34 tokens)

List all available ticket priorities in Autotask. Use this to find priority values for filtering or creating tickets.

### `autotask_get_field_info` (~119 tokens)

Get field definitions for an Autotask entity type, including picklist values. Useful for discovering valid values for any picklist field.

Input parameters:

- `entityType` (string, required): The Autotask entity type (e.g., "Tickets", "Companies", "Contacts", "Projects", "ProjectTasks", "TicketNotes"). Note: project tasks use "ProjectTasks" (or "Tasks" which auto-maps). See Autotask REST…
- `fieldName` (string): Optional: filter to a specific field name

### `autotask_search_billing_items` (~284 tokens)

Search for billing items in Autotask. Billing items represent approved and posted billable items from the "Approve and Post" workflow. Returns 25 results per page by default.

Input parameters:

- `companyId` (number): Filter by company ID
- `contractId` (number): Filter by contract ID
- `dateFrom` (string): Filter billing items with itemDate on or after this date (ISO format, e.g. 2026-01-01)
- `dateTo` (string): Filter billing items with itemDate on or before this date (ISO format)
- `invoiceId` (number): Filter by invoice ID
- `isInvoiced` (boolean): If true, only return billing items that have been attached to an invoice (invoiceID is set). If false, only return items that have not yet been invoiced. Answers "what has and hasn't been invoiced ye…
- `page` (number)
- `pageSize` (number): Max 500
- `postedAfter` (string): Filter items posted on or after this date (ISO format, e.g. 2026-01-01)
- `postedBefore` (string): Filter items posted on or before this date (ISO format)
- `projectId` (number): Filter by project ID
- `ticketId` (number): Filter by ticket ID

### `autotask_get_billing_item` (~38 tokens)

Get detailed information for a specific billing item by ID

Input parameters:

- `billingItemId` (number, required): The billing item ID to retrieve

### `autotask_search_billing_item_approval_levels` (~148 tokens)

Search for billing item approval levels. These describe multi-level approval records for Autotask time entries, enabling visibility into tiered approval workflows.

Input parameters:

- `approvalLevel` (number): Filter by approval level (1, 2, 3, etc.)
- `approvalResourceId` (number): Filter by approver resource ID
- `approvedAfter` (string): Filter approvals on or after this date (ISO format)
- `approvedBefore` (string): Filter approvals on or before this date (ISO format)
- `page` (number)
- `pageSize` (number): Max 500
- `timeEntryId` (number): Filter by time entry ID

### `autotask_search_time_entries` (~274 tokens)

Search for time entries in Autotask. Returns 25 results per page by default. Time entries can be filtered by resource, ticket, project, task, date range, or approval status. Use approvalStatus="unapproved" to find entries not yet posted. Common fan-out target — scope by date range first to avoid Autotask's API threshold.

Input parameters:

- `approvalStatus` (string): Filter by approval status: "unapproved" = not yet posted (billingApprovalDateTime is null), "approved" = already posted, "all" = no filter (default)
- `billable` (boolean): Filter by billable status (true = billable only, false = non-billable only)
- `dateWorkedAfter` (string): Filter entries worked on or after this date (ISO format, e.g. 2026-01-01)
- `dateWorkedBefore` (string): Filter entries worked on or before this date (ISO format)
- `page` (number)
- `pageSize` (number): Max 500
- `projectId` (number): Filter by project ID
- `resourceId` (number): Filter by resource (user) ID
- `taskId` (number): Filter by task ID
- `ticketId` (number): Filter by ticket ID

### `autotask_list_categories` (~33 tokens)

List available tool categories. Use this to discover what types of Autotask operations are available before loading specific tools.

### `autotask_list_category_tools` (~61 tokens)

List tools in a specific category with full schemas. Use after autotask_list_categories to see available tools and their parameters.

Input parameters:

- `category` (string, required): Category name from autotask_list_categories (e.g., "tickets", "financial", "companies")

### `autotask_execute_tool` (~67 tokens)

Execute any Autotask tool by name. Use after discovering tools via autotask_list_category_tools.

Input parameters:

- `arguments` (object): Arguments to pass to the tool
- `toolName` (string, required): The tool name to execute (e.g., "autotask_search_tickets")

### `autotask_router` (~84 tokens)

Intelligent tool router - describe what you want to do and get the right tool suggestion with pre-filled parameters. Use this when unsure which tool to call.

Input parameters:

- `intent` (string, required): Natural language description of what you want to do (e.g., "find tickets for Acme Corp", "log 2 hours on ticket 12345", "create a quote for client")

### `autotask_get_service_call` (~34 tokens)

Get a specific service call by ID

Input parameters:

- `serviceCallId` (number, required): The service call ID to retrieve

### `autotask_search_service_calls` (~144 tokens)

Search for service calls in Autotask. Filter by company, status, or date range.

Input parameters:

- `companyId` (number): Filter by company ID
- `pageSize` (number): Number of results to return (default: 25, max: 100)
- `startAfter` (string): Filter service calls starting on or after this date/time (ISO 8601 format)
- `startBefore` (string): Filter service calls starting on or before this date/time (ISO 8601 format)
- `status` (number): Filter by status picklist ID (use autotask_get_field_info with entityType "ServiceCalls" to find valid values)

### `autotask_create_service_call` (~176 tokens)

Create a new service call in Autotask. Service calls are used to schedule and plan work on tickets.

Input parameters:

- `companyID` (number): Company ID this service call is for
- `companyLocationID` (number): Company location ID (optional)
- `complete` (boolean): Whether this service call is complete (default: false)
- `description` (string, required): Description of the service call
- `endDateTime` (string, required): Scheduled end date/time (ISO 8601 format)
- `startDateTime` (string, required): Scheduled start date/time (ISO 8601 format, e.g. 2026-03-22T09:00:00Z)
- `status` (number): Status picklist ID (use autotask_get_field_info with entityType "ServiceCalls" to find valid values)

### `autotask_update_service_call` (~138 tokens)

Update an existing service call. Use this to change status, times, or description. To complete/close a service call, set complete: true or update the status.

Input parameters:

- `complete` (boolean): Set to true to mark the service call as complete/closed
- `description` (string): Updated description
- `endDateTime` (string): Updated end date/time (ISO 8601 format)
- `serviceCallId` (number, required): The service call ID to update
- `startDateTime` (string): Updated start date/time (ISO 8601 format)
- `status` (number): Updated status picklist ID

### `autotask_delete_service_call` (~61 tokens)

⚠ DESTRUCTIVE — IRREVERSIBLE. Permanently deletes a service call and all associated data. This action cannot be undone. Confirm with the user before invoking.

Input parameters:

- `serviceCallId` (number, required): The service call ID to delete

### `autotask_search_service_call_tickets` (~87 tokens)

Search for ticket associations on service calls. Use this to find which tickets are linked to a service call, or which service calls contain a specific ticket.

Input parameters:

- `pageSize` (number): Number of results to return (default: 25)
- `serviceCallId` (number): Filter by service call ID
- `ticketId` (number): Filter by ticket ID

### `autotask_create_service_call_ticket` (~67 tokens)

Link a ticket to a service call. This associates the ticket with the service call for scheduling purposes.

Input parameters:

- `serviceCallID` (number, required): The service call ID to link the ticket to
- `ticketID` (number, required): The ticket ID to link to the service call

### `autotask_delete_service_call_ticket` (~65 tokens)

⚠ DESTRUCTIVE — IRREVERSIBLE. Permanently removes a ticket association from a service call. This action cannot be undone. Confirm with the user before invoking.

Input parameters:

- `serviceCallTicketId` (number, required): The service call ticket record ID to delete

### `autotask_search_service_call_ticket_resources` (~76 tokens)

Search for resource (technician) assignments on service call tickets.

Input parameters:

- `pageSize` (number): Number of results to return (default: 25)
- `resourceId` (number): Filter by resource (technician) ID
- `serviceCallTicketId` (number): Filter by service call ticket ID

### `autotask_create_service_call_ticket_resource` (~83 tokens)

Assign a resource (technician) to a service call ticket.

Input parameters:

- `resourceID` (number, required): The resource (technician) ID to assign
- `roleID` (number): The role ID for the resource on this service call (optional)
- `serviceCallTicketID` (number, required): The service call ticket ID to assign the resource to

### `autotask_delete_service_call_ticket_resource` (~69 tokens)

⚠ DESTRUCTIVE — IRREVERSIBLE. Permanently removes a resource assignment from a service call ticket. This action cannot be undone. Confirm with the user before invoking.

Input parameters:

- `serviceCallTicketResourceId` (number, required): The service call ticket resource record ID to delete

### `autotask_create_contract` (~486 tokens)

Create a new Contract in Autotask. Field names match the Autotask REST API exactly. status: 1=In Effect, 0=Inactive. Dates are ISO format (YYYY-MM-DD).

Input parameters:

- `billToCompanyContactID` (number): Bill-to contact ID
- `billToCompanyID` (number): Bill-to company ID
- `billingPreference` (number): Billing preference picklist ID
- `companyID` (number, required): Company ID the contract is associated with
- `contactID` (number): Primary contact ID for the contract
- `contractCategory` (number, required): Contract category picklist ID
- `contractExclusionSetID` (number): Contract exclusion set ID
- `contractName` (string, required): Contract name
- `contractNumber` (string): External-facing contract number
- `contractPeriodType` (number): Period type picklist ID
- `contractType` (number, required): Contract type picklist ID
- `description` (string): Contract description / notes
- `endDate` (string, required): Contract end date (ISO YYYY-MM-DD)
- `estimatedCost` (number): Estimated cost
- `estimatedHours` (number): Estimated hours
- `estimatedRevenue` (number): Estimated revenue
- `exclusionContractID` (number): Exclusion contract ID
- `internalCurrencyOverageBillingRate` (number): Overage rate in internal currency
- `internalCurrencySetupFee` (number): Setup fee in internal currency
- `isDefaultContract` (boolean): Whether this is the default contract for the company
- `opportunityID` (number): Originating opportunity ID
- `organizationalLevelAssociationID` (number): Org level association ID
- `overageBillingRate` (number): Overage billing rate
- `purchaseOrderNumber` (string): Customer purchase order number
- `renewedContractID` (number): ID of the contract this renewed
- `serviceLevelAgreementID` (number): SLA ID
- `setupFee` (number): Setup fee amount
- `setupFeeBillingCodeID` (number): Billing code ID for the setup fee
- `startDate` (string, required): Contract start date (ISO YYYY-MM-DD)
- `status` (number): Contract status (1=In Effect, 0=Inactive)
- `timeReportingRequiresStartAndStopTimes` (number): Whether time entries require start/stop times

### `autotask_create_contracts_bulk` (~92 tokens)

Create multiple contract shells (header records, no service lines) in one call — e.g. onboarding a customer with several location-based contracts. Shells are created one at a time; a failure on one shell does not stop the rest, and each item reports its own success or error.

Input parameters:

- `contracts` (array, required): Contract shells to create, in order. Same fields as autotask_create_contract.

### `autotask_update_contract` (~485 tokens)

Update an existing Contract in Autotask (PATCH). Pass only fields you want to change; everything except id is optional. status: 1=In Effect, 0=Inactive.

Input parameters:

- `billToCompanyContactID` (number): Bill-to contact ID
- `billToCompanyID` (number): Bill-to company ID
- `billingPreference` (number): Billing preference picklist ID
- `companyID` (number): Company ID
- `contactID` (number): Primary contact ID
- `contractCategory` (number): Contract category picklist ID
- `contractExclusionSetID` (number): Contract exclusion set ID
- `contractName` (string): Contract name
- `contractNumber` (string): External-facing contract number
- `contractPeriodType` (number): Period type picklist ID
- `contractType` (number): Contract type picklist ID
- `description` (string): Contract description / notes
- `endDate` (string): Contract end date (ISO YYYY-MM-DD)
- `estimatedCost` (number): Estimated cost
- `estimatedHours` (number): Estimated hours
- `estimatedRevenue` (number): Estimated revenue
- `exclusionContractID` (number): Exclusion contract ID
- `id` (number, required): Contract ID to update
- `internalCurrencyOverageBillingRate` (number): Overage rate in internal currency
- `internalCurrencySetupFee` (number): Setup fee in internal currency
- `isDefaultContract` (boolean): Whether this is the default contract for the company
- `opportunityID` (number): Originating opportunity ID
- `organizationalLevelAssociationID` (number): Org level association ID
- `overageBillingRate` (number): Overage billing rate
- `purchaseOrderNumber` (string): Customer purchase order number
- `renewedContractID` (number): ID of the contract this renewed
- `serviceLevelAgreementID` (number): SLA ID
- `setupFee` (number): Setup fee amount
- `setupFeeBillingCodeID` (number): Billing code ID for the setup fee
- `startDate` (string): Contract start date (ISO YYYY-MM-DD)
- `status` (number): Contract status (1=In Effect, 0=Inactive)
- `timeReportingRequiresStartAndStopTimes` (number): Whether time entries require start/stop times

### `autotask_create_contract_service` (~137 tokens)

Add a ContractService (service line item) to an existing Contract.

Input parameters:

- `adjustedPrice` (number): Adjusted price
- `contractID` (number, required): Parent Contract ID
- `internalCurrencyUnitPrice` (number): Unit price in internal currency
- `invoiceDescription` (string): Override invoice description for this line
- `quoteItemID` (number): Originating quote item ID, if any
- `serviceID` (number, required): Service catalog ID being attached to the contract
- `unitCost` (number): Unit cost for the service line
- `unitPrice` (number, required): Unit price for the service line

### `autotask_update_contract_service` (~146 tokens)

Update an existing ContractService line on a Contract. Pass only fields you want to change.

Input parameters:

- `adjustedPrice` (number): Adjusted price
- `contractID` (number, required): Parent Contract ID
- `id` (number, required): ContractService record ID to update
- `internalCurrencyUnitPrice` (number): Unit price in internal currency
- `invoiceDescription` (string): Override invoice description for this line
- `quoteItemID` (number): Originating quote item ID
- `serviceID` (number): Service catalog ID
- `unitCost` (number): Unit cost for the service line
- `unitPrice` (number): Unit price for the service line

### `autotask_raw_request` (~197 tokens)

Escape hatch for Autotask REST endpoints not yet wrapped by a typed tool. Use sparingly — typed tools are preferred for safety. The existing Content-Type, Accept, ApiIntegrationcode, UserName, Secret headers are added automatically. The path is resolved against the zone-resolved base URL (https://webservices<N>.autotask.net/ATServicesRest/v1.0). Pass queryParams as a flat object of string/number/boolean values; they will be URL-encoded and appended to the path.

Input parameters:

- `body` (object): Optional JSON body for POST/PATCH requests
- `method` (string, required): HTTP method
- `path` (string, required): Path under the Autotask REST v1.0 base (e.g. "/Companies/175" or "/Companies/query")
- `queryParams` (object): Optional flat key-value query parameters (e.g. { includeFields: "id,name" })

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/wyre-technology-autotask-mcp/ghcr-io-wyre-technology-autotask-mcp-v2-32-10#diagnostics

## Score history

- 2026-08-22: 40
- 2026-08-21: 40
- 2026-08-20: 40

## Links

- Repository: https://github.com/wyre-technology/autotask-mcp
- Changelog RSS feed: https://verifymcp.io/servers/wyre-technology-autotask-mcp/ghcr-io-wyre-technology-autotask-mcp-v2-32-10.xml
- Changelog JSON feed: https://verifymcp.io/servers/wyre-technology-autotask-mcp/ghcr-io-wyre-technology-autotask-mcp-v2-32-10.json
- HTML version of this page: https://verifymcp.io/servers/wyre-technology-autotask-mcp/ghcr-io-wyre-technology-autotask-mcp-v2-32-10
