haloapi-mcp-tools
Version:
Model Context Protocol (MCP) server for interacting with the HaloPSA API
328 lines (222 loc) • 9.24 kB
Markdown
# HaloPSA MCP Tools
Model Context Protocol (MCP) server for interacting with the HaloPSA API.
## Overview
This package provides a Model Context Protocol server implementation that allows AI assistants (like Claude) to interact with the HaloPSA API. It can be used in various configurations:
- As a standalone server
- Integrated with Claude Desktop
- As a library in Node.js applications
- As a TypeScript MCP server with direct implementation
## Features
- MCP server with support for multiple transport types (stdio, http, tcp)
- Tools for interacting with tickets, users, assets, and more
- Integration with Claude Desktop
- Configurable logging and error handling
- Robust security checks
## Installation
### NPM Global Installation
```bash
npm install -g haloapi-mcp-tools
```
### Local Installation
```bash
npm install haloapi-mcp-tools
```
## Configuration
Create a `.env` file in your project root with the following environment variables:
```env
# Required HaloPSA API Configuration
HALO_API_URL=https://yourhalo.haloservicedesk.com/api
HALO_CLIENT_ID=your_client_id
HALO_CLIENT_SECRET=your_client_secret
# Optional Configuration
HALO_API_VERSION=v3
HALO_SCOPE=all
HALO_TENANT=your_tenant_id
TRANSPORT=stdio
PORT=3000
DEBUG=false
```
Alternatively, you can use Claude Desktop's configuration if the tool is running as a Claude Desktop integration.
## Usage
### Using as a Standalone Server
```bash
# Start the server using stdio transport (default)
haloapi-mcp-server
# Start with HTTP transport
TRANSPORT=http PORT=3000 haloapi-mcp-server
# Start with debug mode
DEBUG=true haloapi-mcp-server
```
### Using with Claude Desktop
To use with Claude Desktop:
1. Install the package globally:
```bash
npm install -g haloapi-mcp-tools
```
2. Configure Claude Desktop to use this MCP server in the Claude Desktop settings (Settings > Extensions > Add MCP Server):
- Name: HaloPSA
- Command: haloapi-desktop-mcp
- Environment Variables (optional):
- HALO_API_URL: Your HaloPSA API URL
- HALO_CLIENT_ID: Your client ID
- HALO_CLIENT_SECRET: Your client secret
3. Start using the HaloPSA tools in your Claude conversations!
Alternatively, if you've cloned this repository, you can run:
```bash
# Run the MCP server for Claude Desktop
npm run claude
# Run with debug logging
npm run claude:debug
```
The MCP server will automatically detect and use the configuration from your Claude Desktop settings.
### Using as a Library
```javascript
const { startServer } = require('haloapi-mcp-tools');
async function main() {
const server = await startServer({
transport: 'stdio', // or 'http', 'tcp'
port: 3000,
debug: true,
haloBaseUrl: 'https://yourhalo.haloservicedesk.com/api',
haloClientId: 'your_client_id',
haloClientSecret: 'your_client_secret'
});
// Server is now running
console.log('Server started successfully');
// To shut down the server
// await server.close();
}
main().catch(console.error);
```
## MCP Tools
This package provides several tools for interacting with HaloPSA and implements standard MCP protocol methods required by Claude Desktop:
### Ticket Tools
- `get-tickets`: Get a list of tickets with optional filtering
- `get-ticket`: Get detailed information about a specific ticket
- `create-ticket`: Create a new ticket
- `update-ticket`: Update an existing ticket
- `delete-ticket`: Delete a ticket
- `get-ticket-comments`: Get comments for a specific ticket
- `add-comment`: Add a comment to a ticket
### User Tools
- `get-users`: Get a list of users with optional filtering
- `get-user`: Get detailed information about a specific user
- `create-user`: Create a new user
- `update-user`: Update an existing user
- `delete-user`: Delete a user
- `get-agents`: Get a list of agents
### Asset Tools
- `get-assets`: Get a list of assets with optional filtering
- `get-asset`: Get detailed information about a specific asset
- `create-asset`: Create a new asset
- `update-asset`: Update an existing asset
- `delete-asset`: Delete an asset
- `get-asset-types`: Get a list of all asset types
### Standard MCP Methods
- `resources/list`: List all available resources in the MCP server
- `prompts/list`: List all available prompts for Claude Desktop integration
- `tools/list`: List all available tools in the MCP server
## Developer Notes
### Module System Compatibility
This package supports both CommonJS and ESM modules. The core implementation uses CommonJS, but it can work with ESM-based dependencies through careful handling of imports.
If you encounter issues with the module system, you can:
1. Use the `.cjs` extension for CommonJS files
2. Use dynamic imports for ESM dependencies
3. Update package.json with appropriate `type` and `exports` fields
### Minimal MCP Implementation
The package includes a minimal MCP server implementation that handles basic protocol features without requiring external dependencies. This makes it compatible with both CommonJS and ESM environments.
### Security Considerations
- All API credentials are validated before use
- HTTPS connections are enforced for API communication
- Environment variable checks ensure proper configuration
## Troubleshooting
### Common Issues
#### Module Imports
If you encounter errors related to imports or module systems:
```
SyntaxError: Cannot use import statement outside a module
```
Solution: Check that you're using the correct import syntax for your project configuration. This package primarily uses CommonJS, so use `require()` statements.
#### Authentication Errors
If you see errors related to HaloPSA authentication:
```
Error: Invalid client credentials
```
Solution: Verify your client ID and client secret in the environment variables or configuration.
#### Transport Issues
If the server fails to start with a specific transport type:
```
Error: Unsupported transport
```
Solution: Ensure you're using one of the supported transport types: 'stdio', 'http', or 'tcp'.
#### Claude Desktop Integration Issues
If Claude Desktop is unable to connect to your MCP server or shows errors about unsupported methods:
```
Error: Method not supported: tools/list
```
Solution: Make sure you're using version 1.1.0 or later of this package which includes the standard MCP methods required by Claude Desktop (`resources/list`, `prompts/list`, and `tools/list`).
#### JSON Parsing Errors
If you're seeing JSON parsing errors in the MCP server logs like:
```
Error parsing JSON message: Unexpected non-whitespace character after JSON at position X
```
Solution: Version 1.1.0 and later includes enhanced JSON handling that automatically fixes common issues with malformed messages. If you're still experiencing problems, enable debug mode to see more details:
```bash
DEBUG=true haloapi-mcp-server
```
#### Zod Validation Errors
If you see errors related to Zod validation in the logs:
```
ZodError: Invalid input
```
Solution: This is fixed in version 1.1.0 with improved response formatting. Update to the latest version or check that your response format matches the JSON-RPC 2.0 specification with the appropriate MCP protocol extensions.
### Debugging
To enable detailed debugging information, set the DEBUG environment variable:
```bash
DEBUG=true haloapi-mcp-server
```
You can also increase the log level for even more detailed information:
```bash
LOG_LEVEL=trace haloapi-mcp-server
```
For Claude Desktop integration, you can find logs in the following locations:
- macOS: `~/Library/Logs/Claude/mcp-server-halopsa.log`
- Windows: `%APPDATA%\Claude\Logs\mcp-server-halopsa.log`
- Linux: `~/.local/share/claude/logs/mcp-server-halopsa.log`
## TypeScript MCP Implementation
This package also includes a TypeScript implementation of the MCP server for those who prefer a more type-safe approach. The TypeScript implementation is located in the `src/haloapi` directory and can be built separately.
### Building and Testing the TypeScript Implementation
```bash
# Build the TypeScript implementation
npm run build:ts
# Build only the HaloAPI MCP server
npm run build:haloapi
# Test the TypeScript implementation
npm run test:ts
```
### Using the TypeScript MCP Server with Claude Desktop
To use the TypeScript implementation with Claude Desktop:
1. Build the TypeScript implementation
```bash
npm run build:haloapi
```
2. Use the integration script to configure Claude Desktop:
```bash
# Set your HaloPSA API credentials as environment variables
export HALO_API_URL=https://yourhalo.haloservicedesk.com/api
export HALO_API_KEY=your-api-key
# Run the integration script
npm run integrate
```
This will automatically configure Claude Desktop to use both the CommonJS and TypeScript implementations.
Alternatively, you can manually configure Claude Desktop (Settings > Extensions > Add MCP Server):
- Name: HaloAPI-TS
- Command: node
- Args: /path/to/haloapi-mcp-tools/src/haloapi/dist/index.js
- Environment Variables:
- HALO_API_URL: Your HaloPSA API URL
- HALO_API_KEY: Your API key
## License
MIT License Copyright (c) 2025 sulemanji.com MCP Team
## Contributors
- Suleman Manji ([@ssmanji89](https://github.com/ssmanji89))