{"_id":"@adamhancock/halopsa-mcp","_rev":"2-6a02fc4cfb8882c7deca78361806802f","name":"@adamhancock/halopsa-mcp","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@adamhancock/halopsa-mcp","version":"0.1.0","keywords":["mcp","halopsa","reporting"],"author":"","license":"ISC","_id":"@adamhancock/halopsa-mcp@0.1.0","maintainers":[{"name":"adam1571","email":"adammhancock@gmail.com"}],"bin":{"halopsa-mcp":"dist/index.js"},"dist":{"shasum":"25e3aa7833a25c318cea706da39f6224f89e1ad6","tarball":"https://registry.npmjs.org/@adamhancock/halopsa-mcp/-/halopsa-mcp-0.1.0.tgz","fileCount":10,"integrity":"sha512-uk3jFm3z73xnQ7xCgcg6D8Ir11VhT8GX+jbtRWr9A1KaP8RFl4b6W4Zb6XHXUJMsaUY/Fdm++EVkV6ab4gRoug==","signatures":[{"sig":"MEUCIFAy8GOQvGmet7TTQt+IvCF7kSmwpZu2tp06Nq9PglZ/AiEA8OPVpr7ZdAjPwnXZW8SJHLAr6A71nDvmx4lS9XLaxhc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10862625},"main":"dist/index.js","type":"module","_from":"file:adamhancock-halopsa-mcp-0.1.0.tgz","scripts":{"dev":"tsx watch --env-file=.env src/index.ts","build":"tsc","start":"node dist/index.js","inspect":"node --inspect dist/index.js","inspector":"npx mcp-inspector tsx --env-file=.env src/index.ts","prepublish":"pnpm run build"},"_npmUser":{"name":"adam1571","email":"adammhancock@gmail.com"},"_resolved":"/tmp/7f4d7fb6c230757497e82a2299d420ef/adamhancock-halopsa-mcp-0.1.0.tgz","_integrity":"sha512-uk3jFm3z73xnQ7xCgcg6D8Ir11VhT8GX+jbtRWr9A1KaP8RFl4b6W4Zb6XHXUJMsaUY/Fdm++EVkV6ab4gRoug==","_npmVersion":"10.9.3","description":"MCP server for HaloPSA API","directories":{},"_nodeVersion":"22.18.0","dependencies":{"@modelcontextprotocol/sdk":"^1.17.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.7.2","@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/halopsa-mcp_0.1.0_1756565291623_0.38878355522798347","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@adamhancock/halopsa-mcp","version":"0.1.1","description":"MCP server for HaloPSA API","main":"dist/index.js","type":"module","bin":{"halopsa-mcp":"dist/index.js"},"keywords":["mcp","halopsa","reporting"],"author":"","license":"ISC","dependencies":{"@modelcontextprotocol/sdk":"^1.17.4"},"devDependencies":{"@types/node":"^22.10.2","tsx":"^4.19.2","typescript":"^5.7.2"},"scripts":{"build":"tsc","prepublish":"pnpm run build","dev":"tsx watch --env-file=.env src/index.ts","start":"node dist/index.js","inspect":"node --inspect dist/index.js","inspector":"npx mcp-inspector tsx --env-file=.env src/index.ts"},"_id":"@adamhancock/halopsa-mcp@0.1.1","_integrity":"sha512-9GpUl0XB1i+uE8SI5Huhnn3lThQmwPAUWa1+wnxs8AzOlVXt1AykCfbpA6zC8IYvbvis2AgYl5uYFU0EK+zHOQ==","_resolved":"/tmp/9daa9f147f0825a542a0fc25328c66a4/adamhancock-halopsa-mcp-0.1.1.tgz","_from":"file:adamhancock-halopsa-mcp-0.1.1.tgz","_nodeVersion":"22.18.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-9GpUl0XB1i+uE8SI5Huhnn3lThQmwPAUWa1+wnxs8AzOlVXt1AykCfbpA6zC8IYvbvis2AgYl5uYFU0EK+zHOQ==","shasum":"394945bd9e8a9fa3a3aed25a6cea377065caa290","tarball":"https://registry.npmjs.org/@adamhancock/halopsa-mcp/-/halopsa-mcp-0.1.1.tgz","fileCount":10,"unpackedSize":10862565,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIF7ky+hOYB8pBCIbv2wc5FHbq3TPZ/Dfk8FizSGIPGgEAiBLehxvIamfQpzN7zc8gmtvQcajni7uLICNlz6mjwjAwQ=="}]},"_npmUser":{"name":"adam1571","email":"adammhancock@gmail.com"},"directories":{},"maintainers":[{"name":"adam1571","email":"adammhancock@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/halopsa-mcp_0.1.1_1756565508081_0.8374239574742028"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-30T14:48:11.572Z","modified":"2025-08-30T14:51:48.489Z","0.1.0":"2025-08-30T14:48:11.849Z","0.1.1":"2025-08-30T14:51:48.298Z"},"license":"ISC","keywords":["mcp","halopsa","reporting"],"description":"MCP server for HaloPSA API","maintainers":[{"name":"adam1571","email":"adammhancock@gmail.com"}],"readme":"# HaloPSA MCP Server\n\nAn 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.\n\n## Features\n\n- 🔐 Secure OAuth2 authentication with HaloPSA API\n- 📊 Execute SQL queries against HaloPSA database\n- 🔍 Intelligent schema search and query suggestions\n- 📋 Complete database schema with 800+ tables\n- 🤖 AI-friendly query building assistance\n- 🌐 Full API exploration with swagger schema access\n- 📖 Browse and search API endpoints with pagination\n- 🔧 Direct API calls to any HaloPSA endpoint\n\n## Installation\n\n### NPM\n\nInstall the package from npm:\n\n```bash\nnpm install -g @adamhancock/halopsa-mcp\n```\n\n### Docker\n\nPull and run the Docker image:\n\n```bash\ndocker run -e HALOPSA_URL=https://your-instance.halopsa.com \\\n  -e HALOPSA_CLIENT_ID=your-client-id \\\n  -e HALOPSA_CLIENT_SECRET=your-client-secret \\\n  -e HALOPSA_TENANT=your-tenant \\\n  ghcr.io/adamhancock/halopsa-mcp:latest\n```\n\n## Usage with Claude Desktop\n\n### Using NPM Package\n\nAdd to your Claude Desktop configuration (`~/Library/Application Support/Claude/claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"halopsa\": {\n      \"command\": \"npx\",\n      \"args\": [\"@adamhancock/halopsa-mcp\"],\n      \"env\": {\n        \"HALOPSA_URL\": \"https://your-instance.halopsa.com\",\n        \"HALOPSA_CLIENT_ID\": \"your-client-id\",\n        \"HALOPSA_CLIENT_SECRET\": \"your-client-secret\",\n        \"HALOPSA_TENANT\": \"your-tenant\"\n      }\n    }\n  }\n}\n```\n\n### Using Docker\n\nAdd to your Claude Desktop configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"halopsa\": {\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\",\n        \"--rm\",\n        \"-i\",\n        \"-e\", \"HALOPSA_URL=https://your-instance.halopsa.com\",\n        \"-e\", \"HALOPSA_CLIENT_ID=your-client-id\",\n        \"-e\", \"HALOPSA_CLIENT_SECRET=your-client-secret\",\n        \"-e\", \"HALOPSA_TENANT=your-tenant\",\n        \"ghcr.io/adamhancock/halopsa-mcp:latest\"\n      ]\n    }\n  }\n}\n```\n\n## Available Tools\n\n### Database Query Tools\n\n#### `halopsa_list_tables`\n\nList all available tables in the HaloPSA database:\n\n```typescript\n{\n  filter: \"fault\"  // Optional: filter tables by name\n}\n```\n\n#### `halopsa_list_columns`\n\nList columns for a specific table:\n\n```typescript\n{\n  tableName: \"FAULTS\",  // Required: table name\n  columnFilter: \"email\"  // Optional: filter columns by name\n}\n```\n\n#### `halopsa_query`\n\nExecute SQL queries against the HaloPSA database:\n\n```typescript\n{\n  sql: \"SELECT * FROM FAULTS WHERE Status = 1 LIMIT 10\"\n}\n```\n\n#### `halopsa_table_info`\n\nGet detailed information about a specific table including all columns, data types, and relationships:\n\n```typescript\n{\n  tableName: \"FAULTS\"\n}\n```\n\n#### `halopsa_build_query`\n\nBuild SQL queries programmatically with a helper:\n\n```typescript\n{\n  tableName: \"FAULTS\",\n  columns: [\"Faultid\", \"username\", \"Symptom\"],  // Optional: defaults to all columns\n  conditions: { \"Status\": 1 },  // Optional: WHERE conditions\n  orderBy: \"datereported DESC\",  // Optional: ORDER BY clause\n  limit: 10  // Optional: LIMIT clause\n}\n```\n\n### API Exploration Tools\n\n#### `halopsa_list_api_endpoints`\n\nList all API endpoints with basic information. Supports pagination:\n\n```typescript\n{\n  category: \"Tickets\",  // Optional: filter by category\n  limit: 100,          // Optional: max results (default: 100)\n  skip: 0              // Optional: skip for pagination\n}\n```\n\n#### `halopsa_get_api_endpoint_details`\n\nGet complete details for specific API endpoints including parameters and schemas:\n\n```typescript\n{\n  pathPattern: \"ticket\",      // Required: pattern to match endpoints\n  summaryOnly: false,        // Optional: return only basic info\n  includeSchemas: true,      // Optional: include request/response schemas\n  maxEndpoints: 10,          // Optional: max endpoints to return\n  includeExamples: false     // Optional: include examples\n}\n```\n\n#### `halopsa_search_api_endpoints`\n\nSearch for API endpoints by keywords. Supports pagination:\n\n```typescript\n{\n  query: \"create ticket\",    // Required: search query\n  limit: 50,                // Optional: max results (default: 50)\n  skip: 0                   // Optional: skip for pagination\n}\n```\n\n#### `halopsa_get_api_schemas`\n\nGet API schemas/models from the swagger definition. Supports pagination:\n\n```typescript\n{\n  schemaPattern: \"Ticket\",   // Optional: filter schemas by name\n  limit: 50,                // Optional: max schemas to return\n  skip: 0,                  // Optional: skip for pagination\n  listNames: false          // Optional: include all matching schema names\n}\n```\n\n#### `halopsa_api_call`\n\nMake authenticated API calls to any HaloPSA endpoint:\n\n```typescript\n{\n  path: \"/api/Ticket\",       // Required: API endpoint path\n  method: \"GET\",            // Optional: HTTP method (default: GET)\n  body: {},                 // Optional: request body for POST/PUT/PATCH\n  queryParams: {}           // Optional: URL query parameters\n}\n```\n\n## Common Queries\n\n### Open Tickets\n\n```sql\nSELECT Faultid, username, Symptom, Status, datereported \nFROM FAULTS \nWHERE Status IN (1, 2, 3)\nORDER BY datereported DESC\n```\n\n### User List\n\n```sql\nSELECT uusername, uemail, usite, uextn \nFROM USERS \nWHERE uinactive = 0\n```\n\n### Request Types\n\n```sql\nSELECT RTid as RequestTypeId, rtdesc as RequestTypeName \nFROM REQUESTTYPE \nWHERE RTVisible = 1\n```\n\n## Development\n\n### Run in Development Mode\n\n```bash\npnpm run dev\n```\n\n### Test Connection\n\n```bash\nnode dist/index.js\n```\n\n## Schema Information\n\nThe MCP includes a complete HaloPSA database schema with:\n- 818 tables\n- Key tables include:\n  - FAULTS (622 columns) - Tickets/Requests\n  - USERS (213 columns) - User information\n  - SITE (115 columns) - Client/Site data\n  - ACTIONS (196 columns) - Ticket actions\n  - REQUESTTYPE (332 columns) - Ticket types\n\n## Security Notes\n\n- Never commit `.env` files\n- Store credentials securely\n- Use read-only API credentials when possible\n- Rotate API keys regularly\n\n## License\n\nISC","readmeFilename":"README.md"}