Connect Kaseya BMS to Claude: Sync assets, projects, and finance
Learn how to connect Kaseya BMS to Claude using a managed MCP server. Automate IT service desk ticketing, asset lookups, and project tracking workflows.
If you need to connect Kaseya BMS to Claude to automate service desk ticketing, hardware asset tracking, or project finance audits, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between Claude's tool calls and Kaseya's REST APIs. You can either build and maintain this infrastructure yourself, or use a managed integration platform like Truto to dynamically generate a secure, authenticated MCP server URL.
If your team uses ChatGPT, check out our guide on connecting Kaseya BMS to ChatGPT or explore our broader architectural overview on connecting Kaseya BMS to AI Agents.
Giving a Large Language Model (LLM) read and write access to an IT business management system like Kaseya BMS is an engineering challenge. You have to handle complex relational data models, map massive JSON schemas to MCP tool definitions, and deal with strict ITIL - compliant object dependencies. Every time Kaseya updates an endpoint or changes a field requirement, you have to update your server code, redeploy, and test the integration.
This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for Kaseya BMS, connect it natively to Claude, and execute complex managed service provider (MSP) workflows using natural language.
The Engineering Reality of the Kaseya BMS API
A custom MCP server is a self-hosted integration layer that translates an LLM's tool calls into REST API requests. While the open MCP standard provides a predictable way for models to discover tools, the reality of implementing it against a PSA (Professional Services Automation) platform like Kaseya BMS is painful.
If you decide to build a custom Kaseya BMS Claude integration, you own the entire API lifecycle. Here are the specific challenges you will face:
Fragmented Lookup Architecture
Kaseya BMS heavily utilizes a lookup - based architecture. You cannot simply pass a string like "High" for priority or "In Progress" for status when creating a ticket. The API requires specific internal integer IDs for PriorityId, StatusId, QueueId, and IssueTypeId. A custom MCP server must either hardcode these maps (which break when a customer modifies their BMS configuration) or expose dozens of separate _lookups endpoints to the LLM, forcing the model to perform multiple sequential queries just to construct a valid POST payload.
Strict ITIL Dependency Chains
Kaseya BMS enforces strict relational integrity. You cannot log an expense or a time entry in a vacuum - it must be tied to a specific ticket_id, which in turn is often bound to a specific account_id or contract_id. Exposing raw BMS endpoints to Claude often results in hallucinated relationships where the LLM attempts to attach a hardware asset to an unrelated client portal ticket. You have to write explicit validation logic to ensure the LLM follows the correct dependency chain.
Handling Rate Limits in an AI Context
When an AI agent decides to run an audit across hundreds of invoices or tickets, it can quickly exhaust API quotas. Note on rate limits: Truto does not retry, throttle, or apply backoff on rate limit errors. When Kaseya BMS returns an HTTP 429, Truto passes that error directly to the caller. Truto normalizes the upstream rate limit information into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF specification. The caller (your agent framework or the Claude client) is responsible for implementing retry and backoff logic.
Instead of building this entire translation layer from scratch, you can use Truto. Truto normalizes authentication and pagination, automatically resolving complex schemas and exposing Kaseya's endpoints as ready-to-use MCP tools.
How to Generate a Kaseya BMS MCP Server with Truto
Truto dynamically generates MCP tools from an integration's underlying API resources. You can create an MCP server for Kaseya BMS using either the Truto user interface or programmatically via the REST API.
Method 1: Via the Truto UI
If you are setting up an internal automation for your own Kaseya BMS instance, the easiest path is the UI.
- Navigate to the Integrated Accounts page in your Truto dashboard.
- Click on your connected Kaseya BMS account.
- Click the MCP Servers tab.
- Click Create MCP Server.
- Select your desired configuration (e.g., restrict access to only
readoperations or apply specific tags). - Copy the generated MCP server URL (it will look like
https://api.truto.one/mcp/abc123def456...).
Method 2: Via the Truto API
If you are building an AI product and need to generate MCP servers dynamically for your end - users, you will use the API. Truto allows you to programmatically provision scoped, short - lived, or heavily filtered MCP servers.
Make a POST request to the /integrated-account/:id/mcp endpoint:
const response = await fetch('https://api.truto.one/integrated-account/kaseya-bms-account-id/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_TRUTO_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: "Claude IT Service Desk Server",
config: {
methods: ["read", "write"], // Restrict or allow specific operations
tags: ["tickets", "assets", "projects"] // Scope tools to specific business domains
}
})
});
const data = await response.json();
console.log(data.url); // Your secure MCP server URLConnecting the Kaseya BMS MCP Server to Claude
Once you have your MCP server URL, connecting it to Claude takes seconds. You do not need to deal with OAuth flows, refresh tokens, or API keys - the URL contains a cryptographic token that handles all authentication securely.
Method A: Via the Claude Desktop UI
For users running Claude Desktop, you can add the connector directly through the interface:
- Open Claude Desktop.
- Navigate to Settings -> Integrations.
- Click Add MCP Server or Add custom connector.
- Paste the Truto MCP URL.
- Click Add.
Claude will immediately initialize the connection, perform a handshake, and fetch the available Kaseya BMS tools.
(Note: If your team uses ChatGPT, the process is similar: Settings -> Apps -> Advanced settings -> Developer mode -> Add under Custom connectors).
Method B: Via Manual Config File
If you prefer to manage your environment declaratively or are running a headless agent, you can configure Claude via the claude_desktop_config.json file. Truto provides an SSE (Server-Sent Events) transport wrapper that makes remote HTTP servers compatible with standard MCP clients.
Edit your configuration file (typically located at ~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"kaseya_bms": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sse",
"https://api.truto.one/mcp/YOUR_SECURE_TOKEN_HERE"
]
}
}
}Restart Claude Desktop. The model will now have native access to your Kaseya BMS instance.
Hero Tools for Kaseya BMS
Truto automatically exposes dozens of Kaseya BMS endpoints as well - documented tools. Here are the most critical operations for automating IT service desk and PSA workflows.
List All Service Desk Tickets
Fetches a paged collection of service desk tickets. This tool handles Kaseya's complex filtering mechanics, allowing Claude to filter by account, status, priority, queue, and assignee.
"Find all open P1 (High Priority) service desk tickets assigned to the network engineering queue that were updated in the last 24 hours."
Create a Service Desk Ticket
Creates a new ticket in the Kaseya BMS system. The schema enforces required fields and handles the payload structure needed to map tickets to specific CRM accounts and IT queues.
"Create a new low-priority ticket for the client 'Acme Corp' regarding their requested VPN access change. Put it in the Helpdesk queue."
Create a Service Desk Ticket Note
Adds internal notes, public replies, or resolution summaries to an existing ticket. This is the primary mechanism AI agents use to log their automated triage findings or summarize external context.
"Add a private internal note to ticket #10455 stating that the automated diagnostic script found high memory utilization on the target server."
Get Single Hardware Asset by ID
Retrieves the full object model for a specific hardware asset, including its configuration details, warranty status, associated account, and custom field values.
"Pull the full hardware specifications and warranty expiration date for the asset with ID 88492."
List All Projects Summaries
Returns a high - level overview of professional services projects, including budget utilization, status, and timeline data.
"List all active onboarding projects for the client 'Global Tech' and show me their current status and start dates."
List All Invoices Summaries
Fetches financial billing data, allowing agents to answer billing inquiries or audit uncollected revenue.
"Get the invoice summaries for 'Acme Corp' from the last 30 days and tell me if any are marked as unpaid."
This is just a subset of the available operations. For the complete tool inventory, including full JSON schemas and descriptions for HR assignments, CRM opportunities, RMM integrations, and finance modules, view the Kaseya BMS integration page.
Workflows in Action
Here is how IT administrators and service desk managers use these tools in practice.
Scenario 1: Automated Ticket Triage and Enrichment
When a new alert arrives from an RMM tool, a support technician needs context before acting. They ask Claude to triage the situation.
"Look up the most recent ticket created for 'Acme Corp'. Find the hardware asset associated with that ticket, check its warranty status, and add an internal note to the ticket summarizing the hardware specs and whether it is under warranty."
Tool Sequence:
list_all_kaseya_bms_servicedesk_tickets(Filters by account name 'Acme Corp' and sorts by creation date descending to grab the latest ticket ID and its associatedhardware_asset_id).get_single_kaseya_bms_servicedesk_hardwareasset_by_id(Passes the extracted asset ID to pull the device specifications and warranty expiration).create_a_kaseya_bms_servicedesk_ticket_note(Constructs a payload withis_internal: trueand writes the summary back to the Kaseya ticket).
Result: The ticket is automatically enriched with infrastructure context, saving the human technician 10 minutes of manual dashboard navigation.
Scenario 2: Client Account Audit for Account Managers
Before a Quarterly Business Review (QBR), an account manager needs a holistic view of the client's current status across ticketing, projects, and billing.
"Run a complete audit on the client 'Global Tech'. Summarize any open critical support tickets, list their active implementation projects, and check if they have any unpaid invoices."
Tool Sequence:
list_all_kaseya_bms_servicedesk_tickets(Filters for the account and status 'Open', prioritizing high - severity items).list_all_kaseya_bms_projects_summaries(Retrieves active projects tied to the account ID).list_all_kaseya_bms_invoices_summaries(Pulls invoice history for the account, checking payment status flags).
Result: Claude aggregates disparate data from the service desk, PSA project management, and finance modules into a single, cohesive QBR briefing document.
Security and Access Control
Giving AI models access to PSA and finance data requires strict guardrails. Truto's MCP architecture enforces security at the infrastructure layer, ensuring your agents cannot perform unauthorized actions.
- Method Filtering: You can restrict a server to safe operations. Setting
methods: ["read"]ensures the server can only executegetandlisttools. The LLM physically cannot mutate Kaseya BMS data. - Tag Filtering: You can scope servers by business domain. Setting
tags: ["servicedesk"]exposes ticket and queue endpoints but completely hides finance, CRM, and HR tools from the model. - Require API Token Auth: By default, possessing the MCP URL grants access. For enterprise deployments, you can set
require_api_token_auth: true, forcing the client to also pass a valid Truto API token in theAuthorizationheader to execute a tool. - Time-to-Live (TTL): The
expires_atparameter allows you to generate ephemeral MCP servers. The server automatically self - destructs at the specified timestamp, ensuring temporary worker agents or external contractors do not retain perpetual access to your Kaseya BMS environment.
Moving Faster With AI Integrations
The bottleneck in AI agent development is no longer the reasoning capabilities of the LLM - it is the integration layer. Building a custom Kaseya BMS Claude integration requires maintaining massive OpenAPI specifications, normalizing cursor - based pagination, and writing backoff logic for rate limits.
By leveraging a dynamic, documentation - driven MCP server, you abstract away the API maintenance. Your engineering team can focus on agent behavior, prompt engineering, and workflow orchestration while Truto handles the underlying protocols. Generate your server, paste the URL, and let Claude get to work.
FAQ
- How does Truto handle Kaseya BMS rate limits?
- Truto passes rate limit errors directly to the caller. When Kaseya BMS returns an HTTP 429 error, Truto exposes standard IETF headers (`ratelimit-limit`, `ratelimit-remaining`, `ratelimit-reset`). The caller or agent framework is responsible for implementing retry and backoff logic.
- Can I prevent Claude from modifying Kaseya BMS data?
- Yes. When creating the MCP server via Truto, you can configure method filtering by setting `methods: ["read"]`. This restricts the tools available to the LLM to only `get` and `list` operations, ensuring it cannot create, update, or delete records.
- Do I need to authenticate with Kaseya BMS every time I connect Claude?
- No. Truto handles the OAuth and token lifecycle. The generated MCP server URL contains a secure cryptographic token that authenticates requests. Claude only needs the URL to discover and execute tools.