HaloPSA MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@HaloPSA MCP Servershow me the 10 most recent open tickets"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
HaloPSA MCP Server
An MCP (Model Context Protocol) server that provides access to HaloPSA's reporting and REST APIs, allowing AI assistants to query and analyze HaloPSA data intelligently.
Features
🔐 Secure OAuth2 authentication with HaloPSA API
📊 Execute SQL queries against HaloPSA database
🔍 Intelligent schema search and query suggestions
📋 Complete database schema with 800+ tables
🤖 AI-friendly query building assistance
🌐 Full API exploration with swagger schema access
📖 Browse and search API endpoints with pagination
🔧 Direct API calls to any HaloPSA endpoint
Installation
NPM
Install the package from npm:
npm install -g @adamhancock/halopsa-mcpDocker
Pull and run the Docker image:
docker run -e HALOPSA_URL=https://your-instance.halopsa.com \
-e HALOPSA_CLIENT_ID=your-client-id \
-e HALOPSA_CLIENT_SECRET=your-client-secret \
-e HALOPSA_TENANT=your-tenant \
ghcr.io/adamhancock/halopsa-mcp:latestUsage with Claude Desktop
Using NPM Package
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"halopsa": {
"command": "npx",
"args": ["@adamhancock/halopsa-mcp"],
"env": {
"HALOPSA_URL": "https://your-instance.halopsa.com",
"HALOPSA_CLIENT_ID": "your-client-id",
"HALOPSA_CLIENT_SECRET": "your-client-secret",
"HALOPSA_TENANT": "your-tenant"
}
}
}
}Using Docker
Add to your Claude Desktop configuration:
{
"mcpServers": {
"halopsa": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e", "HALOPSA_URL=https://your-instance.halopsa.com",
"-e", "HALOPSA_CLIENT_ID=your-client-id",
"-e", "HALOPSA_CLIENT_SECRET=your-client-secret",
"-e", "HALOPSA_TENANT=your-tenant",
"ghcr.io/adamhancock/halopsa-mcp:latest"
]
}
}
}Available Tools
Database Query Tools
halopsa_list_tables
List all available tables in the HaloPSA database:
{
filter: "fault" // Optional: filter tables by name
}halopsa_list_columns
List columns for a specific table:
{
tableName: "FAULTS", // Required: table name
columnFilter: "email" // Optional: filter columns by name
}halopsa_query
Execute SQL queries against the HaloPSA database:
{
sql: "SELECT * FROM FAULTS WHERE Status = 1 LIMIT 10"
}halopsa_table_info
Get detailed information about a specific table including all columns, data types, and relationships:
{
tableName: "FAULTS"
}halopsa_build_query
Build SQL queries programmatically with a helper:
{
tableName: "FAULTS",
columns: ["Faultid", "username", "Symptom"], // Optional: defaults to all columns
conditions: { "Status": 1 }, // Optional: WHERE conditions
orderBy: "datereported DESC", // Optional: ORDER BY clause
limit: 10 // Optional: LIMIT clause
}API Exploration Tools
halopsa_list_api_endpoints
List all API endpoints with basic information. Supports pagination:
{
category: "Tickets", // Optional: filter by category
limit: 100, // Optional: max results (default: 100)
skip: 0 // Optional: skip for pagination
}halopsa_get_api_endpoint_details
Get complete details for specific API endpoints including parameters and schemas:
{
pathPattern: "ticket", // Required: pattern to match endpoints
summaryOnly: false, // Optional: return only basic info
includeSchemas: true, // Optional: include request/response schemas
maxEndpoints: 10, // Optional: max endpoints to return
includeExamples: false // Optional: include examples
}halopsa_search_api_endpoints
Search for API endpoints by keywords. Supports pagination:
{
query: "create ticket", // Required: search query
limit: 50, // Optional: max results (default: 50)
skip: 0 // Optional: skip for pagination
}halopsa_get_api_schemas
Get API schemas/models from the swagger definition. Supports pagination:
{
schemaPattern: "Ticket", // Optional: filter schemas by name
limit: 50, // Optional: max schemas to return
skip: 0, // Optional: skip for pagination
listNames: false // Optional: include all matching schema names
}halopsa_api_call
Make authenticated API calls to any HaloPSA endpoint:
{
path: "/api/Ticket", // Required: API endpoint path
method: "GET", // Optional: HTTP method (default: GET)
body: {}, // Optional: request body for POST/PUT/PATCH
queryParams: {} // Optional: URL query parameters
}Common Queries
Open Tickets
SELECT Faultid, username, Symptom, Status, datereported
FROM FAULTS
WHERE Status IN (1, 2, 3)
ORDER BY datereported DESCUser List
SELECT uusername, uemail, usite, uextn
FROM USERS
WHERE uinactive = 0Request Types
SELECT RTid as RequestTypeId, rtdesc as RequestTypeName
FROM REQUESTTYPE
WHERE RTVisible = 1Development
Run in Development Mode
pnpm run devTest Connection
node dist/index.jsSchema Information
The MCP includes a complete HaloPSA database schema with:
818 tables
Key tables include:
FAULTS (622 columns) - Tickets/Requests
USERS (213 columns) - User information
SITE (115 columns) - Client/Site data
ACTIONS (196 columns) - Ticket actions
REQUESTTYPE (332 columns) - Ticket types
Security Notes
Never commit
.envfilesStore credentials securely
Use read-only API credentials when possible
Rotate API keys regularly
License
ISC
Available Tools
10 toolshalopsa_api_callA
Make authenticated API calls to any HaloPSA endpoint. Use this after finding the right endpoint with schema tools.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | API endpoint path (e.g., "/api/Ticket", "/api/Actions") | |
| method | No | HTTP method to use | GET |
| body | No | Request body data for POST/PUT/PATCH requests | |
| queryParams | No | URL query parameters as key-value pairs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses authentication ('authenticated API calls') and hints at behavioral context by referencing schema tools for endpoint discovery. However, it lacks details on rate limits, error handling, response formats, or specific authentication methods, which are important for a general-purpose API call tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and concise, consisting of two sentences that efficiently convey the tool's purpose and usage guidelines without any wasted words. Every sentence adds value, making it easy for an agent to understand the tool's role quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (general API calls with 4 parameters) and lack of annotations and output schema, the description is somewhat complete but has gaps. It covers purpose and usage well but omits details on authentication specifics, response handling, and error scenarios, which are crucial for effective tool invocation in this context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters (path, method, body, queryParams). The description adds no additional parameter semantics beyond what the schema provides, such as examples of common endpoints or guidance on when to use body vs. queryParams. This meets the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Make authenticated API calls to any HaloPSA endpoint.' It specifies the verb ('Make authenticated API calls') and resource ('any HaloPSA endpoint'), and distinguishes it from siblings by mentioning 'after finding the right endpoint with schema tools,' which references tools like halopsa_get_api_endpoint_details or halopsa_search_api_endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use this after finding the right endpoint with schema tools.' This indicates when to use this tool (for making API calls) versus alternatives (schema tools for endpoint discovery), and it names sibling tools implicitly, offering clear context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halopsa_build_queryB
Build a basic SQL query for HaloPSA with a helper that ensures proper syntax. Useful for constructing simple SELECT queries with WHERE conditions, ORDER BY, and LIMIT clauses without writing raw SQL.
| Name | Required | Description | Default |
|---|---|---|---|
| tableName | Yes | Table to query from (e.g., FAULTS, USERS, SITE) | |
| columns | No | Columns to select (optional, defaults to all). Example: ["Faultid", "Symptom", "Status"] | |
| conditions | No | WHERE conditions as key-value pairs. Example: {"Status": 1, "Priority": 3} | |
| orderBy | No | Column to order results by. Example: "datereported DESC" | |
| limit | No | Maximum number of rows to return. Example: 10 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the tool 'ensures proper syntax' and is for 'constructing' queries, implying it's a read-only helper without execution. However, it lacks details on behavioral traits such as error handling, output format (e.g., returns a query string), or any limitations (e.g., complexity constraints).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured in two sentences. The first sentence states the core purpose, and the second adds context on utility and scope. Every sentence earns its place without redundancy, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, no output schema, no annotations), the description is adequate but incomplete. It covers the basic purpose and usage but lacks details on behavioral aspects and output (e.g., what the built query looks like). Without annotations or output schema, more context on results would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 5 parameters. The description adds minimal value beyond the schema, mentioning 'SELECT queries with WHERE conditions, ORDER BY, and LIMIT clauses,' which aligns with parameters like 'conditions,' 'orderBy,' and 'limit.' This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Build a basic SQL query for HaloPSA with a helper that ensures proper syntax.' It specifies the action (build SQL query) and resource (HaloPSA), and distinguishes it from raw SQL writing. However, it doesn't explicitly differentiate from sibling tools like 'halopsa_query' which might execute queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides implied usage guidance: 'Useful for constructing simple SELECT queries with WHERE conditions, ORDER BY, and LIMIT clauses.' This suggests when to use it (for simple queries) but doesn't explicitly state when not to use it or mention alternatives among sibling tools like 'halopsa_query' for execution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halopsa_get_api_endpoint_detailsA
Get complete details for specific API endpoints including parameters, request/response schemas, and examples. Use after finding endpoints with halopsa_list_api_endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
| pathPattern | Yes | Path pattern to match endpoints (e.g., "ticket", "action", "client", "agent") | |
| summaryOnly | No | Return only basic endpoint information (path, methods, summary) without detailed schemas - ideal for quick API exploration | |
| includeSchemas | No | Include detailed request/response schemas (default: true, set to false to significantly reduce response size) | |
| maxEndpoints | No | Maximum number of endpoints to return (default: 10, max: 50) - helps manage response size | |
| includeExamples | No | Include request/response examples (default: false to keep responses smaller) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly describes the tool's function and workflow context, but lacks information about potential side effects, authentication requirements, rate limits, or error handling. The description doesn't contradict any annotations (none exist), but doesn't provide comprehensive behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise with just two sentences. The first sentence clearly states the purpose and scope, while the second provides crucial usage guidance. Every word earns its place with no redundancy or unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, no output schema, no annotations), the description provides adequate but not complete context. It explains the tool's purpose and usage timing well, but lacks information about response format, error conditions, or performance characteristics that would be helpful for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already fully documents all 5 parameters. The description doesn't add any parameter-specific information beyond what's in the schema descriptions. This meets the baseline expectation when schema coverage is complete, but doesn't provide additional semantic context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get complete details') and resource ('specific API endpoints'), with explicit mention of what details are included (parameters, schemas, examples). It distinguishes from the sibling tool 'halopsa_list_api_endpoints' by specifying this is for detailed information after using that tool for discovery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 this tool ('Use after finding endpoints with halopsa_list_api_endpoints'), creating a clear workflow dependency. It also implies when not to use it (e.g., for initial endpoint discovery rather than detailed examination), though it doesn't name all alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halopsa_get_api_schemasB
Get API schemas/models from the swagger definition. Shows the structure of request/response objects used by the API endpoints. Supports pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| schemaPattern | No | Optional pattern to filter schemas by name (e.g., "Ticket", "Action", "Client") | |
| limit | No | Maximum number of schemas to return (default: 50) | |
| skip | No | Number of matching schemas to skip for pagination (default: 0) | |
| listNames | No | Include list of all matching schema names (default: false, auto-included if ≤20 matches) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses pagination behavior and that it 'Shows the structure,' implying a read-only operation, but lacks details on permissions, rate limits, error handling, or response format. It adds some context but leaves significant behavioral traits unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by supporting details. It uses three concise sentences with zero waste, though it could be slightly more structured by explicitly separating purpose from features.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters with full schema coverage but no annotations or output schema, the description is adequate for a read operation but incomplete. It covers purpose and pagination but lacks details on authentication, errors, or return values, leaving gaps for an AI agent to invoke it correctly in complex scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 4 parameters. The description adds no parameter-specific semantics beyond what's in the schema (e.g., no extra examples or constraints), resulting in a baseline score of 3 as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('API schemas/models from the swagger definition') with specific scope ('structure of request/response objects used by the API endpoints'). It distinguishes from siblings like halopsa_list_api_endpoints by focusing on schema structure rather than endpoint listing, though not explicitly contrasting them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for understanding API object structures, but provides no explicit guidance on when to use this tool versus alternatives like halopsa_get_api_endpoint_details or halopsa_search_api_endpoints. The mention of pagination support hints at context for large datasets, but lacks clear when/when-not directives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halopsa_list_api_endpointsA
List all API endpoints with their paths, methods, and summaries. Use this first to discover available endpoints, then use halopsa_get_api_endpoint_details for full details. Supports pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Optional category filter (e.g., "Tickets", "Actions", "Clients", "Sites") | |
| limit | No | Maximum number of endpoints to return (default: 100) | |
| skip | No | Number of endpoints to skip for pagination (default: 0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it's a discovery tool for listing endpoints, supports pagination (implying it can handle large result sets), and is non-destructive (implied by 'list'). However, it doesn't specify rate limits, authentication needs, or error handling, which are minor gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by usage guidance and a key behavioral trait (pagination) in subsequent sentences. Every sentence adds value without redundancy, making it efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (listing endpoints with filtering and pagination), no annotations, and no output schema, the description is mostly complete. It covers purpose, usage, and pagination, but lacks details on output format (e.g., structure of returned data) and error cases, which would be helpful for an agent to interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, providing clear details for all three parameters (category, limit, skip). The description adds no additional parameter semantics beyond what the schema already covers, such as examples or usage nuances. According to the rules, with high schema coverage (>80%), the baseline is 3 even with no param info in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('List all API endpoints') and resources involved ('paths, methods, and summaries'), distinguishing it from siblings like halopsa_get_api_endpoint_details (which provides full details) and halopsa_search_api_endpoints (which presumably searches rather than lists all). The verb 'list' is precise and the scope 'all' is explicitly defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 this tool ('Use this first to discover available endpoints') and when to use an alternative ('then use halopsa_get_api_endpoint_details for full details'). It also mentions pagination support, which helps in understanding its context for handling large datasets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halopsa_list_columnsA
List columns for a specific table in the HaloPSA database using information_schema.columns. Returns detailed column information including data types, max length, and nullable status.
| Name | Required | Description | Default |
|---|---|---|---|
| tableName | Yes | Table name to get columns for. Example: FAULTS, USERS, SITE | |
| columnFilter | No | Optional filter to search for specific column names. Example: "id", "name", "date" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the return format ('detailed column information including data types, max length, and nullable status'), which is helpful behavioral context. However, it doesn't mention potential limitations like rate limits, authentication needs, or error conditions, leaving gaps for a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that efficiently conveys purpose, method, and return details without waste. It's appropriately sized and front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, read-only operation), no annotations, and no output schema, the description is reasonably complete. It covers purpose, method, and return format, but could improve by addressing authentication or error handling. The lack of output schema is partially compensated by describing return content.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description doesn't add any parameter-specific semantics beyond what's in the schema (e.g., it doesn't clarify tableName format beyond examples or columnFilter matching behavior). Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('List columns') and resource ('for a specific table in the HaloPSA database'), and distinguishes from siblings like halopsa_list_tables (which lists tables) and halopsa_table_info (which may provide different table metadata). The mention of 'using information_schema.columns' adds technical specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when needing column details for a table, but doesn't explicitly state when to use this tool versus alternatives like halopsa_get_api_schemas or halopsa_query. It mentions the source (information_schema.columns) which provides some context, but lacks explicit guidance on exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halopsa_list_tablesA
List all available tables in the HaloPSA database by querying sys.tables. Returns a complete list of all tables that can be queried. Use this to discover what data is available before writing queries.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Optional filter to search for specific tables. Example: "fault", "user", "ticket" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions that it 'Returns a complete list of all tables that can be queried,' which adds some behavioral context about the output. However, it lacks details on permissions, rate limits, or error handling, leaving gaps for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by usage guidance. Both sentences earn their place by providing essential information without redundancy, making it appropriately sized and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 optional parameter, no output schema, no annotations), the description is mostly complete. It covers purpose, usage, and output intent, but could improve by mentioning any limitations or dependencies, though it's adequate for this context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the optional 'filter' parameter with an example. The description does not add any parameter-specific information beyond what's in the schema, such as how the filter is applied or its impact on results, resulting in a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('all available tables in the HaloPSA database'), specifying it queries sys.tables. It distinguishes from siblings like halopsa_list_columns (which lists columns) and halopsa_table_info (which provides table details), making the purpose specific and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool: 'Use this to discover what data is available before writing queries.' This provides clear context for usage, distinguishing it from querying tools like halopsa_query or halopsa_build_query, and implies it's a preliminary step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halopsa_queryA
Execute a SQL query against HaloPSA reporting API. Use this to retrieve data from any HaloPSA table including tickets (FAULTS), users (USERS), sites (SITE), actions (ACTIONS), request types (REQUESTTYPE), and more. Returns the full report response with data rows, column metadata, and available filters.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | SQL query to execute against HaloPSA database. Supports standard SQL syntax including SELECT, JOIN, WHERE, ORDER BY, GROUP BY, etc. Example: SELECT * FROM FAULTS WHERE Status = 1 | |
| loadReportOnly | No | Whether to load report data only (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the tool's behavior by specifying it returns 'full report response with data rows, column metadata, and available filters', which is valuable. However, it lacks details on permissions, rate limits, error handling, or data modification risks (though 'retrieve' implies read-only).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in two sentences: the first states the purpose and scope with examples, the second details the return format. Every sentence adds value without redundancy, making it front-loaded and appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (executing arbitrary SQL queries) and lack of annotations and output schema, the description is reasonably complete. It covers purpose, usage context, and return structure. However, it could benefit from more behavioral details like safety warnings or limitations, slightly reducing completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters. The description does not add any parameter-specific information beyond what the schema provides (e.g., no extra syntax details or usage examples for parameters). Baseline 3 is appropriate when schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Execute a SQL query') and target resource ('against HaloPSA reporting API'), with explicit examples of retrievable tables (tickets, users, sites, etc.). It distinguishes from siblings by focusing on direct SQL execution rather than query building or API endpoint management.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('to retrieve data from any HaloPSA table'), but does not explicitly state when not to use it or name specific alternatives among the sibling tools. The implied usage is strong but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halopsa_search_api_endpointsA
Search for API endpoints by keywords. Returns matching endpoints with basic info. Use halopsa_get_api_endpoint_details for full details of specific endpoints. Supports pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query to find endpoints (searches in paths, summaries, descriptions, and tags) | |
| limit | No | Maximum number of results to return (default: 50) | |
| skip | No | Number of results to skip for pagination (default: 0) |
TDQS
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 useful context beyond basic functionality: it mentions that results include 'basic info' (not full details), supports pagination, and implies a search scope (keywords). However, it lacks details on permissions, rate limits, error handling, or the exact structure of 'basic info', which are gaps for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by key behavioral details (returns basic info, alternative tool, pagination support) in subsequent sentences. Each sentence adds value without redundancy, making it efficient and well-structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (search with pagination), no annotations, and no output schema, the description is reasonably complete. It covers purpose, usage guidelines, and key behaviors (pagination, basic info vs. full details). However, it lacks details on output format or error cases, which could be improved for full completeness in the absence of structured output data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents all parameters (query, limit, skip). The description adds minimal value beyond the schema: it implies the 'query' parameter searches across multiple fields (paths, summaries, etc.), but this is not explicitly stated. With high schema coverage, the baseline is 3, and the description does not significantly enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Search for API endpoints by keywords') and resource ('API endpoints'), distinguishing it from siblings like 'halopsa_list_api_endpoints' (which likely lists all without search) and 'halopsa_get_api_endpoint_details' (which provides full details for specific endpoints). The verb 'search' is precise and differentiates the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage guidance by stating 'Use halopsa_get_api_endpoint_details for full details of specific endpoints', which clearly indicates when to use this tool (for searching) versus an alternative (for getting full details). This direct comparison to a sibling tool enhances decision-making for the AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halopsa_table_infoA
Get detailed information about a specific HaloPSA table including all columns, data types, nullable fields, and relationship suggestions. Use this to understand table structure before writing queries.
| Name | Required | Description | Default |
|---|---|---|---|
| tableName | Yes | Name of the table to inspect. Example: FAULTS, USERS, SITE, ACTIONS, REQUESTTYPE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the tool's function well but lacks details on potential limitations like rate limits, authentication requirements, error handling, or whether it's read-only (implied by 'Get' but not explicit). It adds value by specifying the type of metadata returned, but more behavioral context would be helpful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in two sentences: the first states the purpose and details, and the second provides usage guidance. Every sentence adds value without redundancy, making it front-loaded and appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (single parameter, no output schema, no annotations), the description is mostly complete. It covers the purpose, usage context, and metadata details, but lacks information on output format or behavioral traits like error cases. With no output schema, some guidance on return values would enhance completeness, but it's adequate for a schema inspection tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the single parameter 'tableName' well-documented in the schema. The description doesn't add any additional meaning beyond what the schema provides, such as examples or constraints not in the schema. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get detailed information') and resource ('about a specific HaloPSA table'), with explicit details about what information is retrieved ('all columns, data types, nullable fields, and relationship suggestions'). It distinguishes from siblings like halopsa_list_tables (which lists tables) and halopsa_list_columns (which lists columns without detailed metadata).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('to understand table structure before writing queries'), which implicitly suggests it's for schema exploration rather than data retrieval. However, it doesn't explicitly state when not to use it or name specific alternatives among the siblings, such as halopsa_get_api_schemas or halopsa_list_columns for different needs.
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. Dates show when Glama detected each change.
10 tool updates
v1.0.0- First observed
halopsa_api_call - First observed
halopsa_build_query - First observed
halopsa_get_api_endpoint_details - First observed
halopsa_get_api_schemas - First observed
halopsa_list_api_endpoints - First observed
halopsa_list_columns - First observed
halopsa_list_tables - First observed
halopsa_query - First observed
halopsa_search_api_endpoints - First observed
halopsa_table_info
TDQS
The tools have some overlap that could cause confusion, particularly between halopsa_list_tables/halopsa_list_columns/halopsa_table_info for database exploration and halopsa_list_api_endpoints/halopsa_search_api_endpoints/halopsa_get_api_endpoint_details for API discovery. However, the descriptions help clarify their specific purposes, preventing complete ambiguity.
All tools follow a consistent halopsa_verb_noun naming pattern with clear, descriptive names. The structure is uniform throughout the set, making it easy to predict tool purposes and maintain readability.
With 10 tools, the count is well-scoped for a server focused on database and API interaction for HaloPSA. Each tool serves a distinct role in the workflow, from discovery to execution, without feeling excessive or insufficient.
The toolset covers essential workflows for database querying and API interaction, including discovery, schema inspection, and execution. Minor gaps exist, such as no direct tools for data modification (e.g., insert/update) or advanced API operations beyond calls, but agents can work around these using the provided tools.
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- mcpOAuthcom.vibgrate
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
Connect any AI assistant to Syncro: manage tickets, invoices, customers, assets, and more.
- mcpOAuthnet.hepcloud
Manage HepCloud (Turkish cloud) servers and managed PostgreSQL from your AI assistant. OAuth 2.1.
Connects AI assistants to CloudQuell multi-cloud and AI cost, savings, anomaly, and budget data.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Switchboard666/halopsa-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server