---
title: "HaloPSA MCP server for AI agents - actionlake"
description: "Give Claude 465 HaloPSA actions through one MCP server: CRM, lookups, config, billing. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/halopsa
updated: 2026-10-11
---

Connectors · MSP & PSA

# HaloPSA MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to HaloPSA and the rest of your systems. It gives your agent 465 HaloPSA actions (205 reads, 180 writes and 80 that wait for a confirmation) and holds the HaloPSA credential itself, so the agent never does. It paces HaloPSA's limits and records every call.

[Connect HaloPSA free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

`claude mcp add --transport http actionlake https://connect.actionlake.com/mcp`

the first call

```
do {
  action: "halopsa.tickets.list",
  intent: "check which HaloPSA account is connected"
}
# List HaloPSA tickets · read · 1 upstream call
```

- 465 actions in one signed file
- 205 read look, never change
- 180 write create and update
- 80 wait for a yes destructive, confirmed first

Set up

## Connect HaloPSA in three steps.

1. 01
   ### Add actionlake to Claude.
   Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.
   `https://connect.actionlake.com/mcp`
2. 02
   ### Connect HaloPSA.
   OAuth 2.0, client credentials. Paste the app's client id and secret; actionlake fetches and renews the token, and nobody has to sign in. actionlake stores what you paste write-only, sealed under your tenant's key.
   - `client_id` HaloPSA client id
   - `client_secret` HaloPSA client secret
   - `tenant_host` Where your HaloPSA lives: your tenant host
   ```
   account { op: "connections.requirements", service: "halopsa" }
   # free: exactly what to paste, and what is found for you
   ```
3. 03
   ### Make the first call. Check before a write.
   Ask in plain words; Claude picks the action. Before anything changes, `check` validates the call and prices it, for free.
   ```
   do    { action: "halopsa.tickets.list" }
   # list halopsa tickets · read · 1 upstream call
   check { action: "halopsa.tickets.create", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

HaloPSA at a glance

**Sign-in**

OAuth 2.0, client credentials. Paste the app's client id and secret; actionlake fetches and renews the token, and nobody has to sign in.

**You provide**

`client_id` `client_secret`

**Setup fields**

`tenant_host`

**Limits we pace to**

700 calls per 5 minutes, per connection

**API covered**

HaloPSA API 1, at your HaloPSA instance's API base URL, which you enter when connecting (path /api)

**Built from**

HaloPSA's documentation, read 8 September 2026[haloacademy.halopsa.com](https://haloacademy.halopsa.com/apidoc/)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

205 of 205 reads, for up to an hour; a write clears what it affects

**Ready-made plans**

11 in the store

**Shared entities**

22, so ask can line HaloPSA up with your other systems

**Data**

Processed and stored in Sydney, Australia. No US region yet

Capabilities

## What an AI agent can do in HaloPSA.

465 actions in 20 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

- **205** read look, never change
- **180** write create and update
- **80** destructive wait for a confirmation

1. ### CRM
   57
   26 read · 22 write · 9 destructive
   List HaloPSA agents · List HaloPSA end users · List HaloPSA clients · List HaloPSA sites
2. ### Lookups
   51
   20 read · 21 write · 10 destructive
   List HaloPSA SLAs · Create a HaloPSA SLA · Get one HaloPSA SLA · Update a HaloPSA SLA
3. ### Config
   41
   16 read · 16 write · 9 destructive
   List HaloPSA roles · Create a HaloPSA role · Get one HaloPSA role · Update a HaloPSA role
4. ### Billing
   40
   17 read · 16 write · 7 destructive
   List HaloPSA invoices · List HaloPSA invoice payments · Create a HaloPSA invoice · Create a HaloPSA invoice payment
5. ### Servicedesk
   35
   14 read · 16 write · 5 destructive
   List HaloPSA tickets · List HaloPSA ticket actions · Create a HaloPSA ticket · Create a HaloPSA ticket action
6. ### Automation
   27
   10 read · 11 write · 6 destructive
   List HaloPSA workflows · Create a HaloPSA workflow · Create a HaloPSA webhook · List HaloPSA webhooks
7. ### Contracts
   25
   12 read · 9 write · 4 destructive
   List HaloPSA client contracts · Create a HaloPSA client contract · Get one HaloPSA client contract · Update a HaloPSA client contract
8. ### Sales
   23
   12 read · 8 write · 3 destructive
   List HaloPSA quotations · List HaloPSA opportunities · Create a HaloPSA quotation · Get one HaloPSA quotation

**12 more areas · 166 actions**

- Catalogue **22**
- Documents **19**
- Procurement **19**
- Servicecatalogue **19**
- Assets **18**
- Knowledge **17**
- Scheduling **13**
- Time **12**
- Reporting **9**
- Projects **7**
- Email **6**
- Compliance **5**

Top actions

## The HaloPSA API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 398 of HaloPSA's 410 action names are shared with at least one other connector, so an agent learns them once.

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `halopsa.tickets.list` List HaloPSA tickets | List tickets from HaloPSA, filtered by advanced_search, agent_id, asset_id, client_id. | read | `service.ticket.list` 56 connectors |
| `halopsa.agents.list` List HaloPSA agents | List agents from HaloPSA, filtered by activeinactive, client_id, domain, includedisabled. | read | `identity.user.list` 474 connectors |
| `halopsa.invoices.list` List HaloPSA invoices | List invoices from HaloPSA, filtered by advanced_search, asset_id, client_id, contract_id. | read | `finance.invoice.list` 101 connectors |
| `halopsa.client_contracts.list` List HaloPSA client contracts | List client contracts from HaloPSA, filtered by client_id, count, includeinactive, order. | read | `service.contract.list` 23 connectors |
| `halopsa.actions.list` List HaloPSA ticket actions | List ticket actions from HaloPSA, filtered by agentonly, conversationonly, count, end_date. | read | `service.ticket_note.list` 20 connectors |
| `halopsa.invoice_payments.list` List HaloPSA invoice payments | List invoice payments from HaloPSA, filtered by client_id, count, invoice_id, order. | read | `finance.payment.list` 75 connectors |
| `halopsa.quotations.list` List HaloPSA quotations | List quotations from HaloPSA, filtered by client_id, count, order, orderdesc. | read | `finance.quote.list` 52 connectors |
| `halopsa.slas.list` List HaloPSA SLAs | List SLAs from HaloPSA, filtered by showall. | read | `service.sla.list` 12 connectors |
| `halopsa.tickets.create` Create a HaloPSA ticket | Create a new ticket in HaloPSA. | write | `service.ticket.create` 54 connectors |
| `halopsa.actions.create` Create a HaloPSA ticket action | Create a new ticket action in HaloPSA. | write | `service.ticket_note.create` 24 connectors |
| `halopsa.tickets.update` Update a HaloPSA ticket | Change fields on an existing ticket in HaloPSA. | write | `service.ticket.update` 50 connectors |
| `halopsa.tickets.delete` Delete a HaloPSA ticket | Permanently delete a ticket from HaloPSA. | destructive | `service.ticket.delete` 42 connectors |

Try it

## Prompts to paste into Claude.

Each one names the HaloPSA actions it will call, so you know what it reads and what it changes before you send it.

1. Read read
   Which HaloPSA invoices are more than 30 days overdue? Group them by customer with the total owed.
   calls `halopsa.invoices.list`
2. Plan write
   Check a client contract and open the renewal conversation in HaloPSA.
   calls `halopsa.client_contracts.get` `halopsa.clients.get` `halopsa.recurring_invoices.list` `halopsa.client_contracts.nextref` `halopsa.opportunities.create` +1 more
3. Plan destructive
   Onboard a user onto a site and open their setup ticket in HaloPSA. Ask me before anything is sent or changed.
   calls `halopsa.users.search` `halopsa.sites.get` `halopsa.users.update` `halopsa.user_roles.create` `halopsa.tickets.create` +1 more
4. Write write
   Create a HaloPSA ticket in HaloPSA. Show me exactly what you will send before you save it.
   calls `halopsa.tickets.create`
5. Across systems read
   For each customer, how many invoices are in HaloPSA and how many tickets in HubSpot CRM?
   calls `halopsa.invoices.list` `hubspot_crm.tickets.list`

Across your systems

## HaloPSA, joined to the rest of your business.

One `ask` fetches from HaloPSA and another system, joins the rows on the same customer on our side, and hands your agent the answer, not every row.

- For each customer, how many invoices are in HaloPSA and how many tickets in HubSpot CRM?
  `halopsa.invoices.list` + `hubspot_crm.tickets.list`, on `crm.company` · [HubSpot CRM](https://actionlake.com/connectors/hubspot-crm)
- For each customer, how many invoices are in HaloPSA and how many tickets in ServiceNow?
  `halopsa.invoices.list` + `servicenow_table.incidents.list`, on `crm.company` · [ServiceNow](https://actionlake.com/connectors/servicenow)

Also mapped by other connectors `identity.user` **517** `identity.group` **239** `crm.company` **227** `crm.contact` **192** `work.project` **116** `commerce.product` **109** `identity.role` **107** `finance.invoice` **91**

ask

```
ask {
  intent: "for each customer, how many invoices are in HaloPSA and how many tickets in HubSpot CRM",
  steps: [
    { action: "halopsa.invoices.list", as: "inv", input: {}, limit: 100, max_pages: 5 },
    { action: "hubspot_crm.tickets.list", as: "tix", input: {}, limit: 100, max_pages: 5 },
    { join: {
        left: "inv",
        right: "tix",
        on: "crm.company",
        group_by: "inv.company_name",
        select: ["inv.company_name", "count(inv.id) as invoices", "count(tix.id) as tickets"]
    } }
  ]
}
```

Example. Run it through check first: it validates the steps and prices them, and it is free.

The plan store

## Ready-made plans for HaloPSA.

11 plans in the store. Install one and your agent runs it by name; the reply says which connections are still missing. A schedule can run a plan on a timetable. There are no triggers or webhooks, by design.

1. ### Close a stale ticket view after a human signs off
   Use it when A stale-ticket view has built up and someone wants it cleared out with one sign-off rather than ticket by ticket.
   A person decides Close every ticket in view _view id_ and post the closing note on each.
   **Effect**
   write
   **Steps**
   3 · loops
   **Needs**
   note, status id and view id
   **Install**
   `halopsa-close-stale-tickets`
2. ### Triage open tickets and note the ones that need an agent
   Use it when An agent starts a shift and wants the client's open tickets read and annotated in one pass.
   **Effect**
   write
   **Steps**
   3 · loops
   **Needs**
   client id and note
   **Install**
   `halopsa-triage-open-tickets`
3. ### Audit a client's assets and raise a renewal ticket
   Use it when Someone wants a client's asset register checked over and a renewal ticket raised from it.
   **Effect**
   write
   **Steps**
   4 · loops
   **Needs**
   audit note, client id and warranty end
   **Install**
   `halopsa-asset-warranty-audit`
4. ### Approve a quote and turn it into a sales order
   Use it when A customer has accepted a quote and it needs approving and converting into a sales order.
   A person decides Approve quote _id_ for client _client id_ and convert it to sales order _sales order id_.
   **Effect**
   write
   **Steps**
   5
   **Needs**
   client id, sales order id and search
   **Install**
   `halopsa-quote-to-sales-order`
5. ### Review an agent's week and correct a mislogged entry
   Use it when An agent's week looks wrong and a single timesheet event needs correcting with the change recorded.
   **Effect**
   write
   **Steps**
   5
   **Needs**
   agent id, end date, hours, note, start date and timesheet event id
   **Install**
   `halopsa-timesheet-week-review`
6. ### Check a client contract and open the renewal conversation
   Use it when A client contract is approaching its end date and the renewal needs opening with the numbers to hand.
   **Effect**
   write
   **Steps**
   6
   **Needs**
   agent id, client contract id, client id and target date
   **Install**
   `halopsa-contract-renewal-check`
7. ### Turn a solved ticket into a knowledge base article
   Use it when A ticket has been solved in a way worth writing up for the knowledge base.
   A person decides Publish a customer-facing KB article titled '_title_' from ticket _ticket id_.
   **Effect**
   write
   **Steps**
   6
   **Needs**
   action id, body, ticket id and title
   **Install**
   `halopsa-publish-kb-from-ticket`
8. ### Raise a purchase order when stock runs low
   Use it when Stock for an item has run low and a purchase order needs raising with the supplier.
   A person decides Raise a purchase order with _name_ for item _item id_.
   **Effect**
   write
   **Steps**
   6
   **Needs**
   client id, item id, lines and supplier search
   **Install**
   `halopsa-purchase-order-from-stock`
9. ### Declare a service outage and tell the affected users
   Use it when A shared service has gone down and the outage needs declaring, broadcasting and tracked to recovery.
   **Effect**
   write
   **Steps**
   6
   **Needs**
   client id, service search, start date, status and user id
   **Install**
   `halopsa-service-outage-broadcast`
10. ### Void a duplicate invoice after sign-off
    Use it when A customer or the finance team has spotted a duplicate invoice that must be voided.
    A person decides Void invoice _id_ for client _client id_. Reason: _reason_.
    **Effect**
    destructive
    **Steps**
    5
    **Needs**
    client id, reason and search
    **Install**
    `halopsa-void-duplicate-invoice`
11. ### Onboard a user onto a site and open their setup ticket
    Use it when A new starter needs their Halo user record pointed at the right site and a setup ticket raised.
    A person decides Move _name_ to site _name_ and grant role _role id_.
    **Effect**
    destructive
    **Steps**
    7
    **Needs**
    client id, role id, search and site id
    **Install**
    `halopsa-onboard-new-user`

install a plan

```
account { op: "plans.install", slug: "halopsa-close-stale-tickets" }
# then ask for it by name; a schedule can run it on a timetable
```

Governance for HaloPSA

## Destructive actions wait for a yes.

80 HaloPSA actions are destructive. The first 10:

- Delete a HaloPSA ticket `halopsa.tickets.delete`
- Delete a HaloPSA agent `halopsa.agents.delete`
- Delete a HaloPSA invoice `halopsa.invoices.delete`
- Delete a HaloPSA client contract `halopsa.client_contracts.delete`
- Delete a HaloPSA ticket action `halopsa.actions.delete`
- Delete a HaloPSA invoice payment `halopsa.invoice_payments.delete`
- Delete a HaloPSA end user `halopsa.users.delete`
- Delete a HaloPSA quotation `halopsa.quotations.delete`
- Delete a HaloPSA client `halopsa.clients.delete`
- Delete a HaloPSA SLA `halopsa.slas.delete`

A destructive action runs only with `confirm: true`. Under the `human` policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

do halopsa.tickets.delete confirm_policy: **human**

Delete a HaloPSA ticket?

**intent:** the user asked me to delete a HaloPSA ticket

run suspended · waiting for a named person · key _halopsa-agent_ cannot confirm itself

In the console, or from an emailed signed link.

a key for this connector

```
account {
  op: "keys.create", name: "halopsa-agent",
  allowed_actions: ["halopsa.*"], cap_calls: 2000,
  confirm_policy: "human_for_writes",
  approval_rules: [
    { match: "halopsa.tickets.delete", approver: "lead@example.com" },
    { match: "halopsa.agents.delete", approver: "lead@example.com" },
    { match: "halopsa.invoices.delete", approver: "lead@example.com" }
  ]
}
```

Illustrative. Scoped to HaloPSA only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

## What HaloPSA costs on actionlake.

Every HaloPSA action is one upstream call, the only thing actionlake bills. Searching, `check`, `cost`, `account` and any call HaloPSA refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

- 1 upstream call per action all 465 HaloPSA actions
- 100 actions page each page of a long list is one call
- 205 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every HaloPSA action.

465 actions by area: the id your agent calls, what it does, and its effect.

**CRM 57**

- `halopsa.agents.list` List HaloPSA agents read
- `halopsa.clients.list` List HaloPSA clients read
- `halopsa.sites.list` List HaloPSA sites read
- `halopsa.users.list` List HaloPSA end users read
- `halopsa.addressbook.create` Create a HaloPSA address book entry write
- `halopsa.addressbook.delete` Delete a HaloPSA address book entry destructive
- and 51 more in this area

**Lookups 51**

- `halopsa.slas.create` Create a HaloPSA SLA write
- `halopsa.slas.get` Get one HaloPSA SLA read
- `halopsa.slas.list` List HaloPSA SLAs read
- `halopsa.slas.update` Update a HaloPSA SLA write
- `halopsa.categories.create` Create a HaloPSA category write
- `halopsa.categories.delete` Delete a HaloPSA category destructive
- and 45 more in this area

**Config 41**

- `halopsa.roles.create` Create a HaloPSA role write
- `halopsa.roles.get` Get one HaloPSA role read
- `halopsa.roles.list` List HaloPSA roles read
- `halopsa.roles.update` Update a HaloPSA role write
- `halopsa.custom_buttons.create` Create a HaloPSA custom button write
- `halopsa.custom_buttons.delete` Delete a HaloPSA custom button destructive
- and 35 more in this area

**Billing 40**

- `halopsa.invoice_payments.create` Create a HaloPSA invoice payment write
- `halopsa.invoice_payments.list` List HaloPSA invoice payments read
- `halopsa.invoices.create` Create a HaloPSA invoice write
- `halopsa.invoices.list` List HaloPSA invoices read
- `halopsa.currencies.create` Create a HaloPSA currency write
- `halopsa.currencies.delete` Delete a HaloPSA currency destructive
- and 34 more in this area

**Servicedesk 35**

- `halopsa.actions.create` Create a HaloPSA ticket action write
- `halopsa.actions.list` List HaloPSA ticket actions read
- `halopsa.tickets.create` Create a HaloPSA ticket write
- `halopsa.tickets.list` List HaloPSA tickets read
- `halopsa.actions.delete` Delete a HaloPSA ticket action destructive
- `halopsa.actions.get` Get one HaloPSA ticket action read
- and 29 more in this area

**Automation 27**

- `halopsa.webhooks.create` Create a HaloPSA webhook write
- `halopsa.webhooks.list` List HaloPSA webhooks read
- `halopsa.workflows.create` Create a HaloPSA workflow write
- `halopsa.workflows.list` List HaloPSA workflows read
- `halopsa.automations.create` Create a HaloPSA automation write
- `halopsa.automations.delete` Delete a HaloPSA automation destructive
- and 21 more in this area

**Contracts 25**

- `halopsa.client_contracts.create` Create a HaloPSA client contract write
- `halopsa.client_contracts.get` Get one HaloPSA client contract read
- `halopsa.client_contracts.list` List HaloPSA client contracts read
- `halopsa.client_contracts.update` Update a HaloPSA client contract write
- `halopsa.client_contracts.approval` HaloPSA: Approve a client contract write
- `halopsa.client_contracts.delete` Delete a HaloPSA client contract destructive
- and 19 more in this area

**Sales 23**

- `halopsa.opportunities.list` List HaloPSA opportunities read
- `halopsa.quotations.create` Create a HaloPSA quotation write
- `halopsa.quotations.get` Get one HaloPSA quotation read
- `halopsa.quotations.list` List HaloPSA quotations read
- `halopsa.opportunities.create` Create a HaloPSA opportunity write
- `halopsa.opportunities.delete` Delete a HaloPSA opportunity destructive
- and 17 more in this area

**Catalogue 22**

- `halopsa.items.create` Create a HaloPSA catalogue item write
- `halopsa.items.get` Get one HaloPSA catalogue item read
- `halopsa.items.list` List HaloPSA catalogue items read
- `halopsa.items.update` Update a HaloPSA catalogue item write
- `halopsa.item_groups.create` Create a HaloPSA item group write
- `halopsa.item_groups.delete` Delete a HaloPSA item group destructive
- and 16 more in this area

**Documents 19**

- `halopsa.attachments.delete` Delete a HaloPSA attachment destructive
- `halopsa.attachments.get` Get one HaloPSA attachment read
- `halopsa.attachments.list` List HaloPSA attachments read
- `halopsa.attachments.update` Update a HaloPSA attachment write
- `halopsa.attachments.create` Create a HaloPSA attachment write
- `halopsa.attachments.document_get` HaloPSA: Get an attachment document read
- and 13 more in this area

**Procurement 19**

- `halopsa.purchase_orders.create` Create a HaloPSA purchase order write
- `halopsa.purchase_orders.get` Get one HaloPSA purchase order read
- `halopsa.purchase_orders.list` List HaloPSA purchase orders read
- `halopsa.purchase_orders.update` Update a HaloPSA purchase order write
- `halopsa.consignments.create` Create a HaloPSA consignment write
- `halopsa.consignments.delete` Delete a HaloPSA consignment destructive
- and 13 more in this area

**Servicecatalogue 19**

- `halopsa.service_statuses.create` Create a HaloPSA service status write
- `halopsa.service_statuses.list` List HaloPSA service statuses read
- `halopsa.services.list` List HaloPSA services read
- `halopsa.services.search` Search HaloPSA services read
- `halopsa.service_categories.create` Create a HaloPSA service category write
- `halopsa.service_categories.delete` Delete a HaloPSA service category destructive
- and 13 more in this area

**Assets 18**

- `halopsa.assets.create` Create a HaloPSA asset write
- `halopsa.assets.get` Get one HaloPSA asset read
- `halopsa.assets.list` List HaloPSA assets read
- `halopsa.assets.update` Update a HaloPSA asset write
- `halopsa.asset_groups.create` Create a HaloPSA asset group write
- `halopsa.asset_groups.delete` Delete a HaloPSA asset group destructive
- and 12 more in this area

**Knowledge 17**

- `halopsa.kb_articles.create` Create a HaloPSA knowledge base article write
- `halopsa.kb_articles.get` Get one HaloPSA knowledge base article read
- `halopsa.kb_articles.list` List HaloPSA knowledge base articles read
- `halopsa.kb_articles.search` Search HaloPSA knowledge base articles read
- `halopsa.canned_text.create` Create a HaloPSA canned text snippet write
- `halopsa.canned_text.delete` Delete a HaloPSA canned text snippet destructive
- and 11 more in this area

**Scheduling 13**

- `halopsa.appointments.create` Create a HaloPSA appointment write
- `halopsa.appointments.get` Get one HaloPSA appointment read
- `halopsa.appointments.list` List HaloPSA appointments read
- `halopsa.appointments.update` Update a HaloPSA appointment write
- `halopsa.appointments.booking` HaloPSA: List bookable appointment slots read
- `halopsa.appointments.delete` Delete a HaloPSA appointment destructive
- and 7 more in this area

**Time 12**

- `halopsa.timesheet_events.create` Create a HaloPSA timesheet event write
- `halopsa.timesheet_events.list` List HaloPSA timesheet events read
- `halopsa.timesheet_events.mine` HaloPSA: List my timesheet events read
- `halopsa.timesheet_events.update` Update a HaloPSA timesheet event write
- `halopsa.timesheet_events.delete` Delete a HaloPSA timesheet event destructive
- `halopsa.timesheet_events.get` Get one HaloPSA timesheet event read
- and 6 more in this area

**Reporting 9**

- `halopsa.reports.create` Create a HaloPSA report write
- `halopsa.reports.get` Get one HaloPSA report read
- `halopsa.reports.list` List HaloPSA reports read
- `halopsa.reports.update` Update a HaloPSA report write
- `halopsa.reports.bookmark` HaloPSA: Bookmark a report write
- `halopsa.reports.createpdf` HaloPSA: Render a report as PDF read
- and 3 more in this area

**Projects 7**

- `halopsa.projects.create` Create a HaloPSA project write
- `halopsa.projects.get` Get one HaloPSA project read
- `halopsa.projects.list` List HaloPSA projects read
- `halopsa.projects.update` Update a HaloPSA project write
- `halopsa.projects.delete` Delete a HaloPSA project destructive
- `halopsa.projects.search` Search HaloPSA projects read
- and 1 more in this area

**Email 6**

- `halopsa.mailboxes.create` Create a HaloPSA mailbox write
- `halopsa.mailboxes.get` Get one HaloPSA mailbox read
- `halopsa.mailboxes.list` List HaloPSA mailboxes read
- `halopsa.mailboxes.outlook_contacts` HaloPSA: List a mailbox's Outlook contacts read
- `halopsa.mailboxes.delete` Delete a HaloPSA mailbox destructive
- `halopsa.mailboxes.update` Update a HaloPSA mailbox write

**Compliance 5**

- `halopsa.audit.create` Create a HaloPSA audit entry write
- `halopsa.audit.get` Get one HaloPSA audit entry read
- `halopsa.audit.list` List HaloPSA audit entries read
- `halopsa.audit.update` Update a HaloPSA audit entry write
- `halopsa.audit.delete` Delete a HaloPSA audit entry destructive

This index shows a sample of each area. All 465 actions, with their inputs and prices, are in the [catalogue](https://actionlake.com/console/catalogue), which a free sandbox key can search.

Questions

## The HaloPSA MCP server, answered.

**Is there a HaloPSA MCP server for Claude?**

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 465 HaloPSA actions across CRM, lookups, config and billing, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by HaloPSA.

**What do I need to connect HaloPSA?**

HaloPSA client id and HaloPSA client secret. Plus your tenant host. The free call account { op: "connections.requirements", service: "halopsa" } lists exactly what to paste.

**Can an AI agent delete or change things in HaloPSA?**

Only if its key allows it, and only with an explicit confirmation. 80 HaloPSA actions are destructive, including delete a HaloPSA ticket, delete a HaloPSA agent and delete a HaloPSA invoice. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

**Will an AI agent use up my HaloPSA API limit?**

actionlake paces every call to the limits in the HaloPSA service file: 700 calls per 5 minutes per connection. Repeated reads are answered from cache (205 HaloPSA actions can be), which never reaches HaloPSA.

**What does a HaloPSA action cost?**

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (100 HaloPSA actions page). Cache hits, searches, dry runs and calls HaloPSA refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

**Which HaloPSA API does it cover?**

The HaloPSA API 1 at your HaloPSA instance's API base URL, which you enter when connecting (path /api). It is built from HaloPSA's documentation as read on 8 September 2026. 465 actions in 20 areas, each one in the signed service file (version 1.0.0).

**Can I combine HaloPSA with my other systems?**

Yes. ask joins HaloPSA to HubSpot CRM or ServiceNow on the same customer and returns the answer rather than every row. HaloPSA maps crm.company, which 227 other connectors also map.

**Does actionlake keep my HaloPSA data, and where?**

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to an hour, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your HaloPSA credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

**Which AI clients can use it?**

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

## More connectors like HaloPSA

Shares the most action names with

- [ConnectWise PSA 211](https://actionlake.com/connectors/connectwise-psa)
- [RepairShopr 90](https://actionlake.com/connectors/repairshopr)
- [Syncro 90](https://actionlake.com/connectors/syncro)
- [Kaseya BMS 90](https://actionlake.com/connectors/kaseya-bms)
- [ScalePad 86](https://actionlake.com/connectors/scalepad)
- [SuperOps RMM+PSA 44](https://actionlake.com/connectors/superops-rmm-psa)

Joins with, on shared entities

- [ERPNext (Frappe) 15](https://actionlake.com/connectors/erpnext-frappe)
- [Microsoft Dynamics 365 14](https://actionlake.com/connectors/microsoft-dynamics-365)
- [Odoo 13](https://actionlake.com/connectors/odoo)
- [ServiceTitan 12](https://actionlake.com/connectors/servicetitan)
- [Zoho CRM 12](https://actionlake.com/connectors/zoho-crm)
- [Acumatica Cloud ERP 11](https://actionlake.com/connectors/acumatica-cloud-erp)

Browse

- [All MSP & PSA connectors](https://actionlake.com/connectors/category/msp-and-psa)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by HaloPSA; the name is the vendor's own. Counts are from the HaloPSA service file, version 1.0.0.

## Give your agent HaloPSA today.

[Connect HaloPSA free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.

---

Source: https://actionlake.com/connectors/halopsa
More: https://actionlake.com/llms.txt
