Halo ITSM 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., "@Halo ITSM MCP Servershow me open high priority 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.
Halo ITSM MCP Server
A Model Context Protocol (MCP) server that provides AI assistants with access to the Halo ITSM/PSA/CRM REST API. This enables Large Language Models (LLMs) like Claude, GPT, and others to interact with your Halo instance through a standardized protocol.
Table of Contents
Related MCP server: MIST - Model Intelligence System for Tasks
Overview
The Model Context Protocol (MCP) is an open standard that allows AI applications to securely connect to external data sources and tools. This server implements MCP for Halo ITSM, enabling AI assistants to:
Query tickets, users, clients, and other entities from your Halo instance
Create and update tickets programmatically
Manage assets, projects, appointments, and more
Run reports and retrieve business intelligence data
What is Halo ITSM?
Halo ITSM (also known as HaloPSA and HaloCRM) is a comprehensive IT Service Management platform used by MSPs, IT departments, and service organizations. It provides ticketing, asset management, project management, invoicing, and CRM capabilities through a unified platform.
What is MCP?
The Model Context Protocol is an open protocol that standardizes how AI applications connect to external data sources and tools. It enables:
Tool calling: AI can invoke specific functions with parameters
Secure authentication: Credentials are managed by the MCP server, not exposed to the AI
Structured data exchange: Responses are formatted for optimal AI consumption
Features
18 Resource Groups with 60+ Tools
This MCP server provides comprehensive coverage of the Halo ITSM API:
Resource | Tools | Description |
Tickets | 4 | List, get, create, update tickets |
Actions | 4 | List, get, create, delete ticket actions/notes |
Users | 4 | List, get, find by email, get current user |
Clients | 4 | List, get, create, update clients |
Agents | 2 | List, get agents |
Teams | 2 | List, get teams |
Status | 2 | List, get ticket statuses |
Ticket Types | 2 | List, get ticket types |
Assets | 4 | List, get, create, delete assets |
Sites | 4 | List, get, create, update sites |
Projects | 4 | List, get, create, update projects |
Opportunities | 4 | List, get, create, update opportunities |
Appointments | 3 | List, get, create, delete appointments |
Attachments | 3 | List, get, delete attachments |
Items | 3 | List, get, create catalog items |
Invoices | 3 | List, get, void invoices |
Suppliers | 4 | List, get, create, update suppliers |
Reports | 3 | List, get, run reports |
Two Transport Modes
stdio Mode: For local usage via command line (npx, direct execution)
SSE Mode: HTTP server with Server-Sent Events for remote/web deployments
Authentication Support
Client Credentials Flow: Machine-to-machine authentication (recommended)
Password Grant Flow: Username/password authentication (fallback)
Automatic Token Management: Tokens are cached and refreshed automatically
Prerequisites
Node.js v18.0.0 or higher
Halo ITSM instance with API access enabled
API credentials (Client ID + Client Secret, or Username + Password)
Obtaining Halo API Credentials
Log into your Halo ITSM instance as an administrator
Navigate to Configuration → Integrations → Halo API
Create a new API application:
Choose Client Credentials for server-to-server integration
Note the Client ID and Client Secret
Configure appropriate API permissions for the application
Installation
From Source
# Clone the repository
git clone https://github.com/your-org/halo-mcp.git
cd halo-mcp
# Install dependencies
npm install
# Build the TypeScript code
npm run buildUsing npx (Coming Soon)
npx halo-mcpConfiguration
The server is configured via environment variables. Create a .env file or set them in your shell:
Required Variables
Variable | Description | Example |
| Your Halo instance URL |
|
| API Client ID |
|
Authentication Variables (choose one set)
Option A: Client Credentials (Recommended)
Variable | Description |
| API Client Secret |
Option B: Password Grant
Variable | Description |
| Halo username |
| Halo password |
Optional Variables
Variable | Description | Default |
| Tenant identifier (for hosted/multi-tenant) | (none) |
| OAuth scope |
|
| HTTP server port (SSE mode only) |
|
Example .env File
# Halo Instance
HALO_BASE_URL=https://yourcompany.halopsa.com
HALO_TENANT=yourcompany
# Client Credentials Auth (recommended)
HALO_CLIENT_ID=your-client-id
HALO_CLIENT_SECRET=your-client-secret
# OR Password Grant Auth
# HALO_CLIENT_ID=your-client-id
# HALO_USERNAME=your-username
# HALO_PASSWORD=your-password
# Optional
HALO_SCOPE=all
PORT=3000Usage
stdio Mode (Local)
The stdio mode is ideal for local development and direct integration with MCP clients like Claude Desktop.
Running Directly
# Development (with hot reload)
npm run dev
# Production
npm run build
npm startWith MCP Inspector
The MCP Inspector is useful for testing:
npx @modelcontextprotocol/inspector node dist/index.jsClaude Desktop Configuration
Add to your Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"halo-itsm": {
"command": "node",
"args": ["/path/to/halo-mcp/dist/index.js"],
"env": {
"HALO_BASE_URL": "https://yourcompany.halopsa.com",
"HALO_CLIENT_ID": "your-client-id",
"HALO_CLIENT_SECRET": "your-client-secret"
}
}
}
}SSE Mode (Remote/HTTP)
The SSE (Server-Sent Events) mode runs an HTTP server, enabling remote access and browser-based MCP clients.
Running the SSE Server
# Development
npm run dev:sse
# Production
npm run build
npm run start:sseThe server starts on http://localhost:3000 by default (configurable via PORT env var).
Endpoints
Endpoint | Method | Description |
| GET | SSE connection endpoint (establish session) |
| POST | JSON-RPC message endpoint |
Connecting with MCP Inspector (SSE)
npx @modelcontextprotocol/inspectorThen connect to: http://localhost:3000/sse
Architecture for SSE Mode
┌─────────────────┐ GET /sse ┌──────────────────┐
│ MCP Client │ ─────────────────→│ │
│ (Inspector, │ SSE Stream │ Halo MCP SSE │
│ Browser, etc) │ ←─────────────────│ Server │
│ │ │ (Express.js) │
│ │ POST /messages │ │
│ │ ─────────────────→│ │
└─────────────────┘ └────────┬─────────┘
│
│ HTTPS
▼
┌──────────────────┐
│ Halo ITSM API │
│ (Your Instance) │
└──────────────────┘Available Tools
Tickets
Tool | Description |
| List tickets with filters (search, client, status, agent, pagination) |
| Get a single ticket by ID with full details |
| Create a new ticket |
| Update an existing ticket |
Actions (Ticket Notes)
Tool | Description |
| List actions/notes on tickets |
| Get a single action by ID |
| Add a note/action to a ticket |
| Delete an action |
Users
Tool | Description |
| List users with filters |
| Get a user by ID |
| Find a user by email address |
| Get the current authenticated user |
Clients
Tool | Description |
| List clients/customers |
| Get a client by ID |
| Create a new client |
| Update an existing client |
Agents
Tool | Description |
| List all agents |
| Get an agent by ID |
Teams
Tool | Description |
| List all teams |
| Get a team by ID |
Status
Tool | Description |
| List all ticket statuses |
| Get a status by ID |
Ticket Types
Tool | Description |
| List all ticket types |
| Get a ticket type by ID |
Assets
Tool | Description |
| List assets with filters |
| Get an asset by ID |
| Create a new asset |
| Delete an asset |
Sites
Tool | Description |
| List sites |
| Get a site by ID |
| Create a new site |
| Update an existing site |
Projects
Tool | Description |
| List projects |
| Get a project by ID |
| Create a new project |
| Update an existing project |
Opportunities (Sales/CRM)
Tool | Description |
| List sales opportunities |
| Get an opportunity by ID |
| Create a new opportunity |
| Update an existing opportunity |
Appointments
Tool | Description |
| List appointments |
| Get an appointment by ID |
| Create a new appointment |
| Delete an appointment |
Attachments
Tool | Description |
| List attachments for a ticket |
| Get attachment metadata by ID |
| Delete an attachment |
Items (Catalog)
Tool | Description |
| List catalog items |
| Get an item by ID |
| Create a new catalog item |
Invoices
Tool | Description |
| List invoices |
| Get an invoice by ID |
| Void an invoice |
Suppliers
Tool | Description |
| List suppliers |
| Get a supplier by ID |
| Create a new supplier |
| Update an existing supplier |
Reports
Tool | Description |
| List available reports |
| Get report metadata by ID |
| Execute a report and get results |
Architecture
Project Structure
halo-mcp/
├── src/
│ ├── index.ts # stdio mode entry point
│ ├── httpServer.ts # SSE mode entry point
│ ├── config.ts # Configuration loader
│ ├── auth/
│ │ └── haloAuth.ts # OAuth authentication client
│ ├── api/
│ │ ├── httpClient.ts # HTTP client with auth injection
│ │ ├── tickets.ts # Tickets API wrapper
│ │ ├── users.ts # Users API wrapper
│ │ ├── teams.ts # Teams API wrapper
│ │ ├── agents.ts # Agents API wrapper
│ │ ├── status.ts # Status API wrapper
│ │ ├── actions.ts # Actions API wrapper
│ │ ├── appointments.ts # Appointments API wrapper
│ │ ├── assets.ts # Assets API wrapper
│ │ ├── attachments.ts # Attachments API wrapper
│ │ ├── clients.ts # Clients API wrapper
│ │ ├── invoices.ts # Invoices API wrapper
│ │ ├── items.ts # Items API wrapper
│ │ ├── opportunities.ts # Opportunities API wrapper
│ │ ├── projects.ts # Projects API wrapper
│ │ ├── reports.ts # Reports API wrapper
│ │ ├── sites.ts # Sites API wrapper
│ │ ├── suppliers.ts # Suppliers API wrapper
│ │ └── ticketTypes.ts # Ticket Types API wrapper
│ └── mcp/
│ ├── server.ts # MCP server setup
│ └── tools/
│ ├── ticketsTools.ts
│ ├── usersTools.ts
│ ├── teamsTools.ts
│ ├── agentsTools.ts
│ ├── statusTools.ts
│ ├── actionsTools.ts
│ ├── appointmentsTools.ts
│ ├── assetsTools.ts
│ ├── attachmentsTools.ts
│ ├── clientsTools.ts
│ ├── invoicesTools.ts
│ ├── itemsTools.ts
│ ├── opportunitiesTools.ts
│ ├── projectsTools.ts
│ ├── reportsTools.ts
│ ├── sitesTools.ts
│ ├── suppliersTools.ts
│ └── ticketTypesTools.ts
├── dist/ # Compiled JavaScript
├── Documentation/
│ └── HaloApiDocs/ # Halo API reference documentation
├── package.json
├── tsconfig.json
└── README.mdComponent Layers
┌─────────────────────────────────────────────────────────────────┐
│ MCP Transport Layer │
│ ┌─────────────────────┐ ┌──────────────────────────────┐ │
│ │ stdio Transport │ │ SSE Transport (HTTP) │ │
│ │ (index.ts) │ │ (httpServer.ts) │ │
│ └─────────────────────┘ └──────────────────────────────┘ │
└───────────────────────────────┬─────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ MCP Server Layer │
│ (mcp/server.ts) │
│ - Tool registration │
│ - Request routing │
│ - Response formatting │
└───────────────────────────────┬─────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Tools Layer │
│ (mcp/tools/*.ts) │
│ - Input validation │
│ - Parameter mapping │
│ - Response transformation │
└───────────────────────────────┬─────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ API Wrappers Layer │
│ (api/*.ts) │
│ - Resource-specific methods │
│ - Type definitions │
│ - Query building │
└───────────────────────────────┬─────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ HTTP Client Layer │
│ (api/httpClient.ts) │
│ - Request execution │
│ - Error handling │
│ - Query serialization │
└───────────────────────────────┬─────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Authentication Layer │
│ (auth/haloAuth.ts) │
│ - Token acquisition │
│ - Token caching │
│ - Automatic refresh │
└─────────────────────────────────────────────────────────────────┘Authentication Flow
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ MCP Tool │ │ Auth Client │ │ Halo API │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
│ 1. Request (needs auth) │ │
│─────────────────────────────────→│ │
│ │ │
│ │ 2. Check cached token │
│ │────────┐ │
│ │ │ │
│ │←───────┘ │
│ │ │
│ │ 3. Token expired? │
│ │ POST /auth/token │
│ │─────────────────────────────────→│
│ │ │
│ │ 4. New access_token │
│ │←─────────────────────────────────│
│ │ │
│ │ 5. Cache token │
│ │────────┐ │
│ │ │ │
│ │←───────┘ │
│ │ │
│ 6. Return access token │ │
│←─────────────────────────────────│ │
│ │ │
│ 7. API request with Bearer token │
│────────────────────────────────────────────────────────────────────→│
│ │ │
│ 8. API response │
│←────────────────────────────────────────────────────────────────────│Development
Scripts
Script | Description |
| Compile TypeScript to JavaScript |
| Run stdio server in development mode |
| Run SSE server in development mode |
| Run stdio server (production) |
| Run SSE server (production) |
| Run TypeScript type checking |
Adding a New Resource
Create API wrapper in
src/api/<resource>.ts:export class ResourceApi { constructor(private http: HaloHttpClient) {} async list(params?: ListParams): Promise<Resource[]> { return this.http.get<Resource[]>("/Resource", params); } async getById(id: number): Promise<Resource> { return this.http.get<Resource>(`/Resource/${id}`); } }Create tool definitions in
src/mcp/tools/<resource>Tools.ts:export const listResourceTool = { name: "halo_list_resources", description: "List resources with optional filters", inputSchema: { type: "object" as const, properties: { // Define input properties }, additionalProperties: false, }, handler: async (input, api) => { const results = await api.list(input); return { resources: results }; }, };Register in server (
src/mcp/server.ts):Import the API class and tools
Create API instance
Add tools to
allToolsarray
Testing with MCP Inspector
# stdio mode
npx @modelcontextprotocol/inspector node dist/index.js
# SSE mode
npm run dev:sse
# Then in another terminal:
npx @modelcontextprotocol/inspector
# Connect to http://localhost:3000/sseTroubleshooting
Authentication Errors
"Auth failed (401)"
Verify your
HALO_CLIENT_IDandHALO_CLIENT_SECRETare correctCheck that the API application has appropriate permissions in Halo
Ensure the API is enabled on your Halo instance
"Missing credentials"
Provide either
HALO_CLIENT_SECRETOR bothHALO_USERNAMEandHALO_PASSWORD
Connection Issues
"ECONNREFUSED"
Verify
HALO_BASE_URLis correct and accessibleCheck for firewall or network restrictions
Ensure the URL doesn't have a trailing slash
SSE connection closes immediately
Ensure
req.bodyis passed tohandlePostMessage()(fixed in latest version)Check browser console for CORS errors
Tool Errors
"Unknown tool: "
Verify the tool is registered in
src/mcp/server.tsRebuild with
npm run build
Empty results
Check that your API credentials have permission to access the resource
Verify filters are correct (e.g.,
statusIdvsstatus_id)
Debug Mode
Enable verbose logging by checking the server console output. Each SSE connection and message is logged.
Authors
Michel Braga Guimaraes - Lead Developer
Claude Code (Anthropic) - AI Pair Programmer
License
MIT License
Contributing
Contributions are welcome! Please:
Fork the repository
Create a feature branch
Make your changes
Submit a pull request
Resources
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- -license-quality-maintenanceModel Context Protocol server for interacting with the HaloPSA API, enabling AI assistants like Claude to manage tickets, users, and assets in HaloPSA through natural language.74
- Alicense-qualityCmaintenanceEmpowers AI assistants with real-world capabilities including note management, Gmail integration, Google Calendar and Tasks management, and Git repository operations through the Model Context Protocol.12MIT
- AlicenseAqualityAmaintenanceEnables AI-powered ticket analysis and comprehensive Zendesk API integration via the Model Context Protocol, supporting both API token (CLI) and OAuth 2.1 (web) authentication modes.551145MIT
- Flicense-qualityDmaintenanceEnables AI agents to perform CRM operations like creating contacts, managing deals, and updating leads through natural language using the Model Context Protocol.4
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol server for Wix AI tools
A Model Context Protocol (MCP) application for automated GitHub PR analysis and issue management.…
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/michelbragaguimaraes/HaloITSM_MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server