Skip to main content
Glama
JM-Addington

Autotask Search

by JM-Addington

Autotask Search MCP Server

A Model Context Protocol (MCP) server that exposes Autotask search functionality to LLMs like Claude.

Overview

This MCP server provides LLMs with the ability to search and retrieve Autotask tickets, companies, and contacts using advanced semantic search, keyword matching, and AI-powered reranking. It integrates seamlessly with Claude Desktop, Cursor, and other MCP-compatible clients.

Related MCP server: LangSearch MCP Server

Features

  • Advanced Ticket Search: Multi-method search combining BM25, semantic vectors, and fuzzy matching

  • AI Reranking: Results are reranked using cross-encoder models for optimal relevance

  • Related Tickets: Find semantically similar tickets using vector similarity and AI re-ranking

  • Detailed Ticket Info: Retrieve complete ticket details including all notes

  • Bulk Operations: Fetch notes for multiple tickets efficiently

  • Company Search: Search and browse Autotask companies/accounts with flexible matching

  • Contact Search: Search contacts with optional company filtering

  • LLM-Optimized: Results formatted for easy LLM comprehension

  • Robust Error Handling: Clear error messages with unique grep codes for debugging

  • Easy Setup: Shell wrapper handles venv creation and dependencies

Prerequisites

  • Python 3.10 or higher

  • Running Autotask Django API server (default: http://localhost:8000)

  • Valid API key for the Autotask API

Installation

1. Clone or Navigate to Directory

cd /path/to/autotask-data-warehouse/mcp-autotask-search

2. Create Environment File

cp .env.example .env
# Edit .env and add your API key

3. Test the Server

The run.sh script will automatically create a venv and install dependencies:

./run.sh

Configuration

Claude Desktop

Add to your Claude Desktop config file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "autotask-search": {
      "command": "/absolute/path/to/autotask-data-warehouse/mcp-autotask-search/run.sh",
      "env": {
        "AUTOTASK_API_KEY": "your-api-key-here",
        "AUTOTASK_API_BASE_URL": "http://localhost:8000"
      }
    }
  }
}

Important: Use the absolute path to run.sh, not a relative path.

Cursor IDE

Add to your Cursor settings (.cursor/mcp.json in your project or global settings):

{
  "mcpServers": {
    "autotask-search": {
      "command": "/absolute/path/to/autotask-data-warehouse/mcp-autotask-search/run.sh",
      "env": {
        "AUTOTASK_API_KEY": "your-api-key-here",
        "AUTOTASK_API_BASE_URL": "http://localhost:8000"
      }
    }
  }
}

Environment Variables

  • AUTOTASK_API_KEY (required): Your API key for authentication

  • AUTOTASK_API_BASE_URL (optional): Base URL for the API (default: http://localhost:8000)

Available Tools

1. search_tickets

Search Autotask tickets using advanced semantic and keyword search.

Parameters:

  • query (string, required): Search query (supports partial names, keywords, typos)

  • limit (integer, optional): Maximum results to return (default: 10, max: 100)

Example Usage:

Search for tickets about "password reset issues"
Search for "outlook email problems for ABC Company"
Search for "slow computer" with limit 5

Search Capabilities:

  • Works with imperfect queries (typos, partial company names)

  • Semantic understanding (finds relevant tickets even without exact keyword matches)

  • Combines multiple search methods for comprehensive results

  • Returns results ranked by relevance

2. get_ticket_details

Get complete details for a specific ticket including all notes.

Parameters:

  • task_id (integer, required): The numeric task ID from search results

Example Usage:

Get full details for ticket 12345
Show me all notes for task_id 67890

Returns:

  • Complete ticket information

  • All human-created notes with timestamps

  • Status and priority information

3. get_related_tickets

Find tickets semantically related to a given ticket using vector similarity and AI re-ranking.

Parameters:

  • task_id (integer, required): The numeric task ID to find related tickets for

  • page (integer, optional): Page number (default: 1). Note: Currently only page 1 is supported.

  • per_page (integer, optional): Results per page (default: 10, max: 30)

Example Usage:

Find tickets related to task 12345
Show me similar tickets to ticket 67890
Get 20 related tickets for task_id 54321 with per_page=20

How It Works:

  • Uses vector embeddings to find semantically similar tickets

  • Re-ranks results with AI model for optimal relevance

  • Returns tickets with similar issues, topics, or root causes

Returns:

  • List of related tickets with task numbers and titles

  • Relevance scores for each related ticket

  • Results ranked by relevance

4. get_tickets_notes

Get notes for multiple tickets in bulk. More efficient than calling get_ticket_details multiple times when you only need notes.

Parameters:

  • task_ids (list of integers, optional): List of task IDs. Example: [12345, 67890]

  • task_numbers (list of strings, optional): List of ticket numbers. Example: ["T20240101.0001", "T20240102.0005"]

Notes:

  • At least one parameter must be provided

  • Maximum of 50 tickets per request

  • Only returns human-created notes (system notes excluded)

  • Results grouped by ticket and sorted chronologically

Example Usage:

Get notes for tickets 12345 and 67890
Show me notes for tickets T20240101.0001 and T20240102.0005
Get all notes for task_ids [100, 101, 102]

Returns:

  • All notes for each ticket

  • Note timestamps and titles

  • Notes grouped by ticket

5. search_companies

Search for companies (accounts) in Autotask.

Parameters:

  • query (string, optional): Search query for company names (returns all if not provided)

  • page (integer, optional): Page number (default: 1)

  • per_page (integer, optional): Results per page (default: 25, max: 100)

  • active_only (boolean, optional): Filter for active companies only (default: true)

  • match_type (string, optional): Search match type (default: "fuzzy")

    • "fuzzy": Handles typos and partial matches (recommended)

    • "exact": Exact match only

    • "wildcard": SQL wildcard matching (% and _)

Example Usage:

Search for companies named "Acme Corp"
Find all active companies with "tech" in the name
Get company details for "ABC Company" with exact matching

Use Cases:

  • Look up company/account IDs for filtering ticket searches

  • Find companies by partial name

  • Browse the customer base

  • Verify company names and active status

Returns:

  • List of companies with account IDs, names, and active status

  • Pagination information

  • Filter metadata

6. search_contacts

Search for contacts (account contacts) in Autotask.

Parameters:

  • query (string, optional): Search query for contact names (returns all if not provided)

  • page (integer, optional): Page number (default: 1)

  • per_page (integer, optional): Results per page (default: 25, max: 100)

  • active_only (boolean, optional): Filter for active contacts only (default: true)

  • match_type (string, optional): Search match type (default: "fuzzy")

    • "fuzzy": Handles typos and partial matches (recommended)

    • "exact": Exact match only

    • "wildcard": SQL wildcard matching (% and _)

  • company_id (integer, optional): Filter by company/account ID (from search_companies)

Example Usage:

Search for contacts named "John Smith"
Find all contacts for company ID 12345
Look up support contacts with "engineer" in their name

Use Cases:

  • Look up contact IDs for filtering ticket searches

  • Find contacts associated with a specific company

  • Browse contacts by name

  • Verify contact information and active status

Returns:

  • List of contacts with contact IDs, names, company info, and active status

  • Pagination information

  • Filter metadata

Usage Examples

In Claude Desktop/Cursor

Once configured, you can ask Claude:

"Search for tickets about email configuration issues"

"Find tickets related to password resets at ABC Company"

"Show me recent tickets about network problems"

"Get the full details for ticket 12345"

"Find tickets similar to ticket 12345"

"Show me related tickets for task 67890"

"Get all notes for tickets 12345, 67890, and 11111"

"Show me notes for tickets T20240101.0001 and T20240102.0005"

"Search for companies named Acme Corp"

"Find all companies with 'tech' in the name"

"Search for contacts named John Smith"

"Show me all contacts for company ID 12345"

"Find active contacts at ABC Company"

Claude will use the MCP tools to search the Autotask database and return formatted results.

Testing

1. Test with MCP Inspector

Install the MCP Inspector:

npm install -g @modelcontextprotocol/inspector

Run the inspector:

cd mcp-autotask-search
npx @modelcontextprotocol/inspector ./run.sh

This opens a web UI where you can test the tools interactively.

2. Verify Django Server is Running

Before testing, ensure your Autotask Django server is running:

cd /path/to/autotask-data-warehouse
python manage.py runserver

3. Test Direct API Access

Verify the API is accessible:

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "http://localhost:8000/api/search/double-reranked/?q=test&limit=5"

Troubleshooting

"API key not found" Error

Symptom: Server fails to start with error code [MCPS-NOKEY]

Solution:

  • Ensure AUTOTASK_API_KEY is set in your Claude Desktop/Cursor config

  • Check that the environment variable is being passed correctly

  • Verify the API key is valid

"Could not connect to Autotask API" Error

Symptom: Error code [MCPS-CONN]

Solution:

  • Check that the Django server is running: python manage.py runserver

  • Verify AUTOTASK_API_BASE_URL is correct (default: http://localhost:8000)

  • Test API directly with curl

"Authentication failed" Error

Symptom: Error code [MCPS-AUTH]

Solution:

  • Verify API key is valid and not expired

  • Check API key has proper permissions in Django admin

  • Ensure key is correctly formatted in config

"API endpoint not found" Error

Symptom: Error code [MCPS-404]

Solution:

  • Verify Django server is running and accessible

  • Check that search endpoints are properly configured

  • Ensure you're using the correct base URL

Search Returns No Results

Possible Causes:

  • No tickets match the query

  • Database is empty or not indexed

  • Search index needs rebuilding

Solution:

cd /path/to/autotask-data-warehouse
python manage.py index_tickets

Development

Project Structure

mcp-autotask-search/
├── src/
│   └── autotask_search_mcp/
│       ├── __init__.py
│       └── server.py          # Main MCP server implementation
├── run.sh                     # Shell wrapper (creates venv, runs server)
├── pyproject.toml             # Python project config
├── README.md                  # This file
└── .env.example               # Example environment file

Running in Development Mode

cd mcp-autotask-search
./run.sh

Viewing Logs

All errors include unique grep codes (prefix: MCPS-) for easy log searching:

# Search logs for specific errors
grep "MCPS-CONN" logs.txt
grep "MCPS-AUTH" logs.txt

Common Grep Codes:

  • MCPS-INIT - Server initialization

  • MCPS-START - Server starting

  • MCPS-SEARCH - Search request

  • MCPS-DETAIL - Detail request

  • MCPS-RELATED - Related tickets request

  • MCPS-NOTES-REQ - Bulk notes request

  • MCPS-NOTES-POST - Bulk notes POST request

  • MCPS-NOTES-OK - Bulk notes success

  • MCPS-NOTES-NOPARAM - No parameters provided

  • MCPS-NOTES-EMPTY - Empty parameters

  • MCPS-NOTES-LIMIT - Too many tickets requested

  • MCPS-NOTES-AUTH - Authentication failed

  • MCPS-NOTES-BADREQ - Bad request

  • MCPS-NOTES-404 - Endpoint not found

  • MCPS-NOTES-SVR - Server error

  • MCPS-NOTES-CONN - Connection error

  • MCPS-NOTES-TIMEOUT - Request timeout

  • MCPS-NOTES-ERR - Unexpected error

  • MCPS-NOKEY - API key missing

  • MCPS-AUTH - Authentication failed

  • MCPS-CONN - Connection error

  • MCPS-404 - Endpoint not found

  • MCPS-NOTFOUND - Ticket not found

  • MCPS-SVR - Server error

  • MCPS-TIMEOUT - Request timeout

  • MCPS-REQ - Making API request

  • MCPS-OK - Request successful

  • MCPS-NORES - No results found

  • MCPS-ERR - Unexpected error

Technical Details

Search Method

The server uses the /api/search/double-reranked/ endpoint which combines:

  1. BM25 - Full-text search on titles, descriptions, and notes

  2. Vector Search - Semantic search using embeddings

  3. Fuzzy Matching - Handles typos and misspellings

  4. AI Reranking - Cross-encoder model reranks for optimal relevance

Response Format

Results are formatted for LLM readability:

Task #T20240216.0023 (ID: 12345) - Relevance: 0.95
Title: Password reset issue
Description: User cannot reset password...
Created: 2024-02-16 14:30
---

Authentication

The server uses Bearer token authentication:

Authorization: Bearer <your-api-key>

License

This is a POC/internal tool. See parent project for license information.

Support

For issues or questions:

  1. Check the Troubleshooting section above

  2. Review logs for grep codes

  3. Verify Django server is running and accessible

  4. Test API directly with curl

Version

Current version: 0.1.0 (POC)

Available Tools

11 tools
get_queuesA

Get ticket queues (categories) from Autotask.

Queues are used to categorize and route tickets in Autotask. Each ticket is assigned to exactly one queue. This tool retrieves the list of available queues for reference when filtering or categorizing tickets.

Note: "Queues" in the Autotask UI are called "TicketCategories" in the API. Both terms refer to the same entity.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_inactiveNoInclude inactive queues in the results (default: false). By default, only active queues are returned.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must convey safety. It uses 'Get' and 'retrieves', indicating a read-only operation. It adds context about the role of queues and the API naming. However, it does not explicitly state that no side effects occur or discuss any dependencies like authentication, but these are implied by the nature of the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded, with each sentence contributing: definition, purpose, and terminology note. No redundant filler. It is slightly verbose but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one optional parameter and an output schema exists. The description sufficiently explains what is returned (list of queues) and the terminology. It could mention that inactive queues are excluded by default, but that is covered by the schema parameter description. Overall, adequate for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter include_inactive is fully described in the schema with default and behavior. The description's discussion of queue semantics provides background but doesn't add new parameter-specific meaning. Since schema coverage is 100%, a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get ticket queues (categories) from Autotask.' It further clarifies the purpose by explaining that queues are used to categorize and route tickets and that the tool retrieves them 'for reference when filtering or categorizing tickets.' This clearly distinguishes it from sibling tools like get_tickets_by_queue, which retrieves tickets assigned to a queue.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states that the tool retrieves queues 'for reference when filtering or categorizing tickets,' implying its use case. It also clarifies the API terminology difference (TicketCategories vs Queues), which helps avoid confusion. However, it does not explicitly exclude alternatives like get_tickets_by_queue for when tickets themselves are needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ticket_detailsA

Get complete details for a specific ticket including all notes.

Use this tool when you need full information about a specific ticket, including the complete description and all human-created notes. This provides more context than search results alone.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesThe numeric task ID (from search results)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the scope of data returned ('complete details', 'all human-created notes') and positions it as providing more context than search results. However, with no annotations provided, the description carries the full burden for behavioral transparency; it does not explicitly state read-only nature, permissions, or any side effects, which would be expected for a get operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, with the purpose stated in the first sentence. There is some redundancy between 'complete details' and 'full information' and the repetition of 'including all notes', but overall it is well-structured and free of unnecessary fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one required parameter) and the presence of an output schema, the description covers the essential use case and contrasts with search results. It could be more complete by explicitly noting that the tool is read-only or mentioning potential limitations such as ticket not found, but for a simple get operation it is largely adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100% for the single parameter task_id, with a clear description ('The numeric task ID (from search results)'). The tool description does not add additional parameter-level meaning beyond what the schema already provides, so per the rubric the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb and resource: 'Get complete details for a specific ticket including all notes.' It distinguishes from siblings like search_tickets (which returns search results) and get_tickets_notes (which likely returns only notes) by emphasizing both complete details and all human-created notes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use the tool: 'Use this tool when you need full information about a specific ticket.' It also compares to search results ('This provides more context than search results alone'), but it does not explicitly name alternative sibling tools or state when not to use it, leaving a slight gap in exclusionary guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tickets_by_queueA

Get all tickets in a specific queue with optional filtering.

This tool retrieves tickets from a specific queue (TicketCategory in Autotask). By default, only open/active tickets are returned (status != Complete). Use include_completed=True to include completed tickets.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default: 1)
queueYesQueue name (string) or queue ID (integer). Use get_queues() to list available queues.
statusNoFilter by status name (e.g., "New", "In Progress") or status ID (optional)
companyNoFilter by company name or ID (optional)
contactNoFilter by contact name or ID (optional)
per_pageNoResults per page, max 1000 (default: 100)
assigned_toNoFilter by assigned technician name or ID (optional)
created_afterNoOnly tickets created on/after this date (YYYY-MM-DD format)
created_beforeNoOnly tickets created on/before this date (YYYY-MM-DD format)
completed_afterNoOnly tickets completed on/after this date
completed_beforeNoOnly tickets completed on/before this date
include_completedNoInclude completed tickets (default: False, only open tickets)
last_activity_afterNoOnly tickets with last activity on/after this date
last_activity_beforeNoOnly tickets with last activity on/before this date

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses a key behavioral default (only open/active tickets unless include_completed=True) which adds value. However, it does not mention pagination defaults, per_page limits, ordering, or interactions between date filters and completed status, leaving several behavioral aspects undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences front-load the core purpose, clarify the domain concept, and state the default behavior. There is no redundant information, and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich input schema and output schema, the description provides sufficient context for tool selection and basic invocation (queue concept and default status filter). It lacks some higher-level guidance like pagination interactions and comparison with search_tickets, but the overall information is adequate for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of parameters with clear descriptions, so baseline is 3. The description adds minimal semantic context by clarifying that queue maps to TicketCategory and highlighting include_completed, but these are also inferable from the schema. No additional parameter meaning is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'Get all tickets in a specific queue' with a specific verb and resource, and notes it retrieves from TicketCategory in Autotask. This distinguishes it from sibling tools like search_tickets or get_ticket_details by focusing on queue-based retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this tool to retrieve tickets from a specific queue, with optional filtering, and explains the default behavior of excluding completed tickets. It doesn't explicitly mention alternatives or when-not-to-use, but the purpose is sufficiently constrained to guide selection among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tickets_companyA

Get all tickets assigned to one or more companies.

This tool retrieves tickets that are formally assigned to the specified companies in the Autotask system. Use this after finding companies with search_companies.

Results are returned in reverse chronological order (newest first) without any search ranking or filtering applied.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default: 1)
per_pageNoResults per page, max 1000 (default: 100)
company_idsYesList of company/account IDs (max 50)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It discloses that results are sorted newest-first and that no search ranking/filtering is applied, which adds behavioral context beyond the schema. It doesn't mention permission requirements or side effects, but the read-only nature is implied and the disclosed traits are useful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short paragraphs, front-loaded with the primary action. Each sentence adds value: purpose, usage context, and result behavior. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is sufficient for a simple list tool: it explains what it does, when to use it, and result ordering. An output schema exists for return structure. It doesn't cover edge cases or error handling, but those are not critical here. Slightly more detail about pagination behavior could make it a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for all three parameters, so the baseline is 3. The description adds no parameter-specific details beyond the schema; it only refers to 'companies' generically, which aligns with company_ids but doesn't enhance semantic understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-object phrase 'Get all tickets assigned to one or more companies' and clarifies it retrieves formally assigned tickets in Autotask. It distinguishes from siblings by noting it's the follow-up to search_companies and that no search ranking/filtering is applied.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit usage context: 'Use this after finding companies with search_companies.' This clearly indicates when to use the tool, but it doesn't explicitly name alternative tools or state when not to use it. The context is clear, yet exclusions are absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tickets_contactA

Get all tickets assigned to one or more contacts.

This tool retrieves tickets that are formally assigned to the specified contacts in the Autotask system. Use this after finding contacts with search_contacts.

Results are returned in reverse chronological order (newest first) without any search ranking or filtering applied.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default: 1)
per_pageNoResults per page, max 1000 (default: 100)
contact_idsYesList of contact IDs (max 50)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It adds valuable context: results are in reverse chronological order, have no search ranking or filtering, and are formally assigned. It does not cover permissions, errors, or pagination details, but the provided traits are useful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences long and front-loads the core purpose. There is minor redundancy between the first and second sentences ('Get' and 'retrieves tickets') but overall it is tight and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with an output schema, the description adequately covers purpose, usage context, and return ordering. It lacks explicit mention of pagination behavior, but the schema documents page and per_page parameters, so the gap is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of parameters with descriptions, so the baseline is 3. The description reinforces that multiple contact IDs can be used but does not add substantial meaning beyond the schema, such as formatting or constraints for page/per_page.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('tickets assigned to one or more contacts'), clearly indicating the tool's scope. This distinguishes it from sibling tools like get_tickets_company and get_tickets_by_queue, which target different filters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states 'Use this after finding contacts with search_contacts', giving clear contextual guidance on when to invoke the tool. It does not mention exclusions or directly compare to alternatives, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tickets_detailsA

Get complete details for multiple tickets including all notes and time entries.

This tool fetches full ticket information for multiple tickets in a single request. More efficient than calling get_ticket_details multiple times when you need details for several tickets.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idsYesList of task IDs to retrieve (max 50)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It adds some useful context by noting the single-request nature and that it includes 'all notes and time entries.' However, it does not discuss limitations, error behavior, or whether the operation is read-only, which is a notable gap for a tool without annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately concise, front-loaded with the main purpose in the first sentence, and every sentence earns its place by adding batch context or usage guidance. No redundant or excessive wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's purpose, batch behavior, and content (notes/time entries) adequately for a simple read operation. Since an output schema exists and the parameter schema is complete, the description does not need to explain return values or parameter details. Minor gaps like lack of explicit read-only indication are offset by the clear 'Get' phrasing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (one parameter task_ids with a clear description including max 50). The description adds no additional detail about the parameter itself, only reiterating that it handles multiple tickets. Baseline 3 is appropriate since the schema already does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get complete details for multiple tickets including all notes and time entries.' It uses a specific verb ('Get') with a resource ('complete details for multiple tickets') and explicitly differentiates from the sibling tool get_ticket_details by emphasizing the batch capability and efficiency ('More efficient than calling get_ticket_details multiple times').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: 'when you need details for several tickets.' It also names the alternative approach (calling get_ticket_details multiple times) and implies this tool is more efficient, providing clear usage guidance versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tickets_notesA

Get notes for multiple tickets in bulk.

Retrieve all human-created notes for specified tickets. You can provide either task IDs, ticket numbers, or both. This is more efficient than calling get_ticket_details multiple times when you only need the notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idsNoOptional list of task IDs (integers). Example: [12345, 67890]
task_numbersNoOptional list of ticket numbers (strings). Example: ["T20240101.0001", "T20240102.0005"]

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It adds useful context (e.g., 'human-created notes,' bulk efficiency), but it does not disclose potential error handling, behavior when both parameters are provided (though it says 'or both'), permission requirements, or how invalid IDs are handled. The output schema covers return shape, so no credit needed there, but behavioral depth is limited.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, starts with the core purpose, and contains no redundant information. Every sentence earns its place: purpose, specifics, and efficiency comparison. Highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (two optional params, no annotations) and the presence of an output schema, the description covers the essential context: what it does, when to use it, and how to invoke it. It lacks edge-case details (e.g., empty parameter lists, mixed validity), but for a bulk retrieval tool this is acceptable. It is nearly complete, earning a 4.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides detailed descriptions and examples for task_ids and task_numbers, with 100% coverage. The description adds relational meaning by stating these are alternative or combinable inputs ('either... or both'), which is not explicitly in the schema. This goes beyond baseline, so a 4 is warranted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get notes for multiple tickets in bulk.' It specifies the resource (tickets' notes) and the verb (get), and distinguishes itself from siblings like get_ticket_details by focusing on notes-only and bulk retrieval. The mention of 'human-created notes' adds specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'This is more efficient than calling get_ticket_details multiple times when you only need the notes,' providing an alternative and a clear when-to-use condition. It also explains how to supply input: 'You can provide either task IDs, ticket numbers, or both,' offering practical guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_companiesA

Search for companies (accounts) in Autotask.

This tool searches the Autotask companies/accounts database using various matching strategies. It's useful for finding company information, looking up account IDs for filtering other searches, or exploring the customer base.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default: 1, starts at 1)
queryNoSearch query (optional, returns all if not provided). Searches company names.
per_pageNoResults per page (default: 25, max: 100)
match_typeNoSearch match type (default: "fuzzy") - "fuzzy": Handles typos and partial matches (recommended) - "exact": Exact match only - "wildcard": SQL wildcard matching (% and _)fuzzy
active_onlyNoFilter for active companies only (default: true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden. The verb 'searches' and 'searches the database' clearly indicate a read-only operation. Mention of 'various matching strategies' discloses a behavioral trait. No contradictions or hidden side effects are implied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the action and resource. Every sentence adds value with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the full schema, an output schema, and simple read-only nature, the description provides enough context for an agent to select and invoke the tool correctly. It could be more explicit about competing siblings, but that is not necessary for basic usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% parameter description coverage, including defaults and allowed values for match_type. The description adds no significant parameter detail beyond the schema, but it does mention 'matching strategies' which aligns with match_type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Search for companies (accounts) in Autotask', which clearly specifies the resource and action. This differentiates it from sibling tools like search_tickets and search_contacts by limiting the scope to companies/accounts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states specific use cases: 'finding company information, looking up account IDs for filtering other searches, or exploring the customer base.' This gives clear context for when to use it, though it does not explicitly mention alternatives or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_contactsA

Search for contacts (account contacts) in Autotask.

This tool searches the Autotask contacts database. It's useful for finding contact information, looking up contact IDs for filtering ticket searches, or exploring contacts associated with a specific company.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default: 1, starts at 1)
queryNoSearch query (optional, returns all if not provided). Searches contact names.
per_pageNoResults per page (default: 25, max: 100)
company_idNoOptional filter by company/account ID (from search_companies)
match_typeNoSearch match type (default: "fuzzy") - "fuzzy": Handles typos and partial matches (recommended) - "exact": Exact match only - "wildcard": SQL wildcard matching (% and _)fuzzy
active_onlyNoFilter for active contacts only (default: true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It states this is a search operation, which implies read-only behavior, but it does not explicitly disclose side effects, pagination behavior, or default filters like active_only. The schema contains these details, but the description adds limited behavioral context beyond the obvious search semantics. This is adequate but not rich, scoring 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively short but contains redundancy: 'Search for contacts (account contacts) in Autotask.' is followed by 'This tool searches the Autotask contacts database,' which restates the same idea. The information is front-loaded, but every sentence does not earn its place due to this repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema and full parameter descriptions, the description adequately covers the tool's purpose and main use cases. It does not explain return values (not needed due to output schema) and does not mention pagination, but the schema covers that. It is complete enough for a search tool, with minor gaps around filtering defaults and relationship to siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds some contextual value by mentioning 'contact IDs for filtering ticket searches' and 'contacts associated with a specific company,' which map to query and company_id, but it does not add meaningful parameter-level semantics beyond what the schema already provides. The schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Search for contacts (account contacts) in Autotask,' which is a specific verb+resource pairing. It distinguishes from siblings by focusing on contacts and mentions concrete use cases like 'looking up contact IDs for filtering ticket searches' and 'exploring contacts associated with a specific company,' clearly differentiating it from search_tickets and search_companies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear contexts for when to use the tool: finding contact information, looking up contact IDs for ticket filtering, and exploring contacts by company. It does not explicitly exclude alternatives or name sibling tools, but the use cases imply when it is appropriate. This is clear context without explicit exclusions, matching a 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_ticketsA

Search Autotask tickets using advanced semantic and keyword search with sentiment filtering and pagination.

This tool uses a sophisticated multi-method search combining:

  • BM25 full-text search

  • Semantic vector search

  • Fuzzy matching for typos

  • AI-powered reranking for relevance

  • Sentiment analysis filtering

  • Redis caching for fast pagination

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to retrieve (default: 1, starts at 1)
queryYesSearch query (supports partial company names, keywords, descriptions). Works well with imperfect queries including typos and vague descriptions.
end_dateNoOptional end date filter in YYYY-MM-DD format (e.g., "2024-12-31"). Only tickets created on or before this date will be returned.
per_pageNoResults per page (default: 10, max: 100)
sentimentNoOptional sentiment filter. Valid values: "negative", "neutral", "positive". Only tickets with the specified sentiment will be returned.
start_dateNoOptional start date filter in YYYY-MM-DD format (e.g., "2024-01-01"). Only tickets created on or after this date will be returned.
priority_onlyNoIf True, only return tickets flagged as priority (high negative sentiment + high frustration).
min_frustrationNoOptional minimum frustration score filter (0.0 to 1.0). Only tickets with frustration scores >= this value will be returned.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the underlying search methods (BM25, semantic, fuzzy, reranking), sentiment analysis, and Redis caching behavior. This gives the agent insight into performance and functionality beyond what a simple 'search' would imply, though it omits details like rate limits or authentication.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with a clear one-sentence summary followed by a scannable bullet list of search features. It front-loads the core purpose and adds only relevant technical details, with no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of 8 parameters and no annotations or output schema, the description provides sufficient context about the tool's behavior, including pagination, caching, and the multi-method search approach. Since an output schema exists, no explanation of return values is needed. The description is complete for a read-only search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% parameter coverage with detailed descriptions for every field, including defaults, formats, and valid ranges. The tool description adds no additional parameter semantics beyond the schema, so the baseline score of 3 is appropriate. The description's mention of 'partial company names' is already covered in the query parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches Autotask tickets using advanced methods, distinguishing it from sibling tools like search_companies and search_contacts. The verb 'search' is explicit and the resource is specific, with additional scope (sentiment filtering, pagination) making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use this tool: for flexible searches with typos, vague descriptions, and partial names. It implies use over simpler search tools due to its advanced capabilities, but does not explicitly name alternatives or state exclusions. This is clear context without formal 'when-not' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv0.1.0
    • First observedget_queues
    • First observedget_related_tickets
    • First observedget_ticket_details
    • First observedget_tickets_by_queue
    • First observedget_tickets_company
    • First observedget_tickets_contact
    • First observedget_tickets_details
    • First observedget_tickets_notes
    • First observedsearch_companies
    • First observedsearch_contacts
    • First observedsearch_tickets

TDQS

A4/5.0

Scored across 11 tools

Disambiguation3/5

Some tools have overlapping purposes, particularly get_ticket_details, get_tickets_details, and get_tickets_notes, which all retrieve ticket information and notes. Names like 'get_tickets_details' and 'get_tickets_notes' could easily be confused, though descriptions help clarify the distinctions. The other retrieval tools (by company, contact, queue) are clearly distinct.

Naming Consistency4/5

Tool names follow a consistent verb_noun pattern with 'search' and 'get' prefixes. Minor inconsistencies exist: get_ticket_details is singular while get_tickets_details is plural, and 'get_tickets_by_queue' uses 'by' while 'get_tickets_company' and 'get_tickets_contact' do not. Overall, the pattern is predictable and readable.

Tool Count5/5

With 11 tools, the server is well-scoped for a search-oriented read-only API. Each tool serves a distinct retrieval purpose, and the count is within the ideal range of 3-15 tools.

Completeness4/5

The tool set provides a comprehensive read-only surface for ticket searching and retrieval, covering search by text, company, contact, queue, and related tickets, plus batch detail and notes retrieval. Minor gaps exist, such as no direct company/contact detail retrieval beyond search, but the core workflows are covered.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Provides access to LangSearch's Web Search and Semantic Rerank APIs for AI assistants. It enables web searching with advanced filtering and reranking of documents based on semantic relevance.
    -
  • A
    license
    C
    quality
    C
    maintenance
    Provides AI assistants with direct access to Autotask PSA for MSP operations. Enables natural language interaction for ticket management, time logging, company lookups, project tracking, and billing review through 39 comprehensive tools.
    100
    17
    Apache 2.0
  • A
    license
    B
    quality
    C
    maintenance
    Gives AI assistants direct access to Autotask PSA for searching tickets, creating time entries, managing companies, projects, and more via natural language.
    100
    Apache 2.0