HaloPSA MCP
MCP server for HaloPSA with decision tree architecture for managing tickets, clients, assets, agents, and invoices.
🔗 Companion Plugin
Pair this MCP server with the HaloPSA plugin for skills, commands, and API knowledge alongside direct API access.
Installation
Run the MCP server with npx:
npx @wyre-technology/halopsa-mcp Or install the package:
npm install @wyre-technology/halopsa-mcp MCPB Bundle (Claude Desktop)
Download the .mcpb bundle from
GitHub Releases
for a zero-config Claude Desktop install. No Node.js or terminal required — just open the
bundle in Claude Desktop via Settings → MCP Servers → Install from file.
Requires Claude Desktop 0.10+.
Claude Desktop Configuration
Add to your claude_desktop_config.json:
{
"mcpServers": {
"halopsa": {
"command": "npx",
"args": [
"@wyre-technology/halopsa-mcp"
],
"env": {
"HALOPSA_CLIENT_ID": "your-halopsa-client-id",
"HALOPSA_CLIENT_SECRET": "your-halopsa-client-secret",
"HALOPSA_TENANT": "your-halopsa-tenant"
}
}
}
} Authentication
| Variable | Required | Description |
|---|---|---|
HALOPSA_CLIENT_ID | Yes | OAuth 2.0 Client ID |
HALOPSA_CLIENT_SECRET | Yes | OAuth 2.0 Client Secret |
HALOPSA_TENANT | Yes | Tenant name (e.g., yourcompany) |
HALOPSA_BASE_URL | No | Explicit base URL (alternative to tenant) |
Getting Credentials
Vendor portal: https://halopsa.com/
Prerequisites
- HaloPSA tenant with Administrator role
- Knowledge of your tenant subdomain (e.g., yourcompany.halopsa.com)
Steps
- Sign in to your HaloPSA tenant as an Administrator.
- Navigate to Configuration → Integrations → Custom OAuth Apps.
- Click "Add" to create a new OAuth app.
- Fill in:
- Name: "WYRE Gateway"
- Authentication Method: Client ID and Secret (Services)
- Login Type: System (not Agent)
- Save the app. HaloPSA generates HALOPSA_CLIENT_ID and HALOPSA_CLIENT_SECRET.
- Save HALOPSA_CLIENT_SECRET before leaving — HaloPSA only shows it once.
- On the same OAuth app page, assign Permissions for the entities you need (Tickets, Clients, Assets, etc.). Least-privilege per your gateway scope.
- Set HALOPSA_TENANT to your subdomain (the prefix before .halopsa.com). If using a custom domain, set HALOPSA_BASE_URL to the full URL instead.
Required Scopes / Permissions
Tickets (read/write as needed)Clients (read/write as needed)Assets (read/write as needed)Adjust per the tools you intend to use
Credential Format
Client ID is a GUID. Client Secret is a long random string. Tenant is the subdomain prefix (e.g., "acme" for acme.halopsa.com).
Rotation
OAuth apps can be regenerated from the same Configuration page. Rotation does not require gateway downtime if you have a brief window of overlap.
Architecture
Decision tree with lazy-loaded domain handlers. Navigate to a domain first, then use domain-specific tools.
Available Tools (18)
Tools are organized into 5 domains:
Tickets
Manage support tickets, create new tickets, update status, add actions/notes.
| Tool | Description |
|---|---|
halopsa_tickets_list | List tickets with filters |
halopsa_tickets_get | Get ticket details |
halopsa_tickets_create | Create a new ticket |
halopsa_tickets_update | Update an existing ticket |
halopsa_tickets_add_action | Add a note/action to a ticket |
Clients
Manage companies/clients.
| Tool | Description |
|---|---|
halopsa_clients_list | List clients |
halopsa_clients_get | Get client details |
halopsa_clients_create | Create a new client |
halopsa_clients_search | Search clients by name |
Assets
Manage configuration items/assets.
| Tool | Description |
|---|---|
halopsa_assets_list | List assets with filters |
halopsa_assets_get | Get asset details |
halopsa_assets_search | Search assets |
halopsa_assets_list_types | List available asset types |
Agents
View technicians and teams.
| Tool | Description |
|---|---|
halopsa_agents_list | List agents/technicians |
halopsa_agents_get | Get agent details |
halopsa_teams_list | List teams |
Invoices
View billing and invoices.
| Tool | Description |
|---|---|
halopsa_invoices_list | List invoices with filters |
halopsa_invoices_get | Get invoice details |
Rate Limits
500 requests per 3 minutes. The underlying client library handles rate limiting automatically.