---
title: "Smokeball MCP server for AI agents - actionlake"
description: "Give Claude 195 Smokeball actions through one MCP server: matter files, matter folders. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/smokeball
updated: 2026-10-23
---

Connectors · Accounting & finance

# Smokeball MCP server for AI agents.

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

[Connect Smokeball 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: "smokeball.tasks.list",
  intent: "check which Smokeball account is connected"
}
# Get tasks · read · 1 upstream call
```

- 195 actions in one signed file
- 91 read look, never change
- 76 write create and update
- 28 wait for a yes destructive, confirmed first

Set up

## Connect Smokeball 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 Smokeball.
   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` OAuth client id of your Smokeball app (Developer Console > App Details)
   - `client_secret` OAuth client secret of the same Smokeball app (Developer Console > App Details)
   - `api_key` Smokeball-issued API key, sent as the x-api-key header on every request
   - `api_host` Where your Smokeball lives: your api host
   ```
   account { op: "connections.requirements", service: "smokeball" }
   # 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: "smokeball.tasks.list" }
   # get tasks · read · 1 upstream call
   check { action: "smokeball.tasks.create", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

Smokeball 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` `api_key`

**Setup fields**

`api_host`

**Limits we pace to**

5 calls a second, per connection

**API covered**

Smokeball API (1.0; OpenAPI 3.0)`api.smokeball.com`

**Built from**

Smokeball's documentation, read 23 October 2026[docs.smokeball.com](https://docs.smokeball.com/openapi.json) [docs.smokeball.com](https://docs.smokeball.com/llms.txt)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

91 of 91 reads, for up to 5 minutes; a write clears what it affects

**Shared entities**

6, so ask can line Smokeball up with your other systems

**Data**

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

Capabilities

## What an AI agent can do in Smokeball.

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

- **91** read look, never change
- **76** write create and update
- **28** destructive wait for a confirmation

1. ### Matter files
   13
   7 read · 5 write · 1 destructive
   Get files on a matter · Get a file · Delete a file · Upload/update version or metadata of a file
2. ### Matter folders
   8
   4 read · 3 write · 1 destructive
   Create a folder · Update a folder · Delete a folder · Get folder history on a matter
3. ### Bank accounts
   7
   4 read · 3 write · 0 destructive
   Get bank accounts · Get a bank account · Create a requisition · Get bank account matter balances
4. ### Contacts
   6
   3 read · 2 write · 1 destructive
   Get contacts · Create a contact · Get a contact · Update a contact
5. ### Invitations
   6
   2 read · 3 write · 1 destructive
   Invite a person to join the firm · Search invitations · Accept an invitation · Get an invitation
6. ### Matter expenses
   6
   2 read · 3 write · 1 destructive
   Get expenses · Create an expense · Get an expense · Update an expense
7. ### Matter fees
   6
   2 read · 3 write · 1 destructive
   Get fees · Create a fee · Update a fee · Get a fee
8. ### Matters
   6
   2 read · 3 write · 1 destructive
   Get matters · Create a matter · Get a matter · Update a matter

**43 more areas · 137 actions**

- Plugins **6**
- Webhooks **6**
- Activity codes **5**
- Contact relations **5**
- Events **5**
- Groups **5**
- Matter layouts **5**
- Matter memos **5**
- Matter role relationships **5**
- Matter roles **5**
- Staff **5**
- Task subtasks **5**
- Tasks **5**
- Event reminders **4**
- Firm users **4**
- Plugin subscriptions **4**
- Task documents **4**
- Users **4**
- Bank account transactions **3**
- Contact tags **3**
- Firm **3**
- Matter archive **3**
- Matter billing configuration **3**
- Matter invoices **3**
- Matter layout contacts **3**
- Matter tags **3**
- Policies **3**
- Layouts **2**
- Matter items **2**
- Matter portal tasks **2**
- Matter types **2**
- Notifications **2**
- Referral types **2**
- Stage sets **2**
- Files **1**
- Matter integrated search mapping **1**
- Matter portal messages **1**
- Matter stage mappings **1**
- Matter stages **1**
- Matter type categories **1**
- Stage set stages **1**
- User registrations **1**
- Webhook event types **1**

Top actions

## The Smokeball API, shaped for agents.

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

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `smokeball.tasks.list` Get tasks | Get tasks. | read | `work.task.list` 122 connectors |
| `smokeball.matters.list` Get matters | Get matters. | read | `work.project.list` 109 connectors |
| `smokeball.staff.list` Search firm staff members | Search firm staff members. | read | `identity.user.list` 474 connectors |
| `smokeball.tasks.create` Create a task | Create a task. | write | `work.task.create` 127 connectors |
| `smokeball.matters.create` Create a matter | Create a matter. | write | `work.project.create` 102 connectors |
| `smokeball.contacts.list` Get contacts | Get contacts. | read | `crm.contact.list` 177 connectors |
| `smokeball.bank_accounts.list` Get bank accounts | Get bank accounts. | read | `finance.bank_account.list` 35 connectors |
| `smokeball.tasks.delete` Delete a task | Delete a task. | destructive | `work.task.delete` 107 connectors |
| `smokeball.events.list` Get events | Get events. | read | `comm.event.list` 61 connectors |
| `smokeball.staff.create` Create firm staff member | Create firm staff member. | write | `identity.user.create` 262 connectors |
| `smokeball.contacts.create` Create a contact | Create a contact. | write | `crm.contact.create` 161 connectors |
| `smokeball.matter_fees.create` Create a fee | Create a fee. | write | `work.time_entry.create` 56 connectors |

Try it

## Prompts to paste into Claude.

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

1. Read read
   Which Smokeball tasks are overdue, and who owns each one?
   calls `smokeball.tasks.list`
2. Write write
   Create a task in Smokeball. Show me exactly what you will send before you save it.
   calls `smokeball.tasks.create`
3. Across systems read
   Which contacts are in both Smokeball and HaloPSA, and how many are in only one of them?
   calls `smokeball.contacts.list` `halopsa.users.list`

Across your systems

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

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

- Which contacts are in both Smokeball and HaloPSA, and how many are in only one of them?
  `smokeball.contacts.list` + `halopsa.users.list`, on `crm.contact` · [HaloPSA](https://actionlake.com/connectors/halopsa)
- Which contacts are in both Smokeball and HubSpot CRM, and how many are in only one of them?
  `smokeball.contacts.list` + `hubspot_crm.contacts.list`, on `crm.contact` · [HubSpot CRM](https://actionlake.com/connectors/hubspot-crm)

Also mapped by other connectors `identity.user` **517** `crm.contact` **192** `work.project` **116** `work.task` **105** `comm.event` **47** `finance.bank_account` **25**

ask

```
ask {
  intent: "which contacts are in both Smokeball and HaloPSA, and how many are in only one of them",
  steps: [
    { action: "smokeball.contacts.list", as: "people", input: {}, limit: 100, max_pages: 5 },
    { action: "halopsa.users.list", as: "people2", input: {}, limit: 100, max_pages: 5 },
    { join: {
        left: "people",
        right: "people2",
        on: "crm.contact",
        group_by: "people.email",
        select: ["people.email", "count(people2.id) as in_halopsa"]
    } }
  ]
}
```

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

Governance for Smokeball

## Destructive actions wait for a yes.

28 Smokeball actions are destructive. These are all of them:

- Delete a task `smokeball.tasks.delete`
- Delete a matter `smokeball.matters.delete`
- Deletes a firm staff member `smokeball.staff.delete`
- Delete a contact `smokeball.contacts.delete`
- Delete a fee `smokeball.matter_fees.delete`
- Delete event `smokeball.events.delete`
- Deletes an authorization group `smokeball.groups.delete`
- Delete an expense `smokeball.matter_expenses.delete`
- Delete a file `smokeball.matter_files.delete`
- Delete a folder `smokeball.matter_folders.delete`
- Remove a user `smokeball.users.delete`
- Delete existing plugin `smokeball.plugins.delete`
- Deletes a webhook subscription `smokeball.webhooks.delete`
- Delete firm user mapping `smokeball.firm_users.delete`
- Remove tags from a matter `smokeball.matter_tags.delete`
- Remove tags from a contact `smokeball.contact_tags.delete`
- Delete a memo `smokeball.matter_memos.delete`
- Remove role from a matter `smokeball.matter_roles.delete`
- Delete a subtask `smokeball.task_subtasks.delete`
- Delete an activity code `smokeball.activity_codes.delete`
- Remove a layout `smokeball.matter_layouts.delete`
- Delete a task document `smokeball.task_documents.delete`
- Delete reminder for an event `smokeball.event_reminders.delete`
- Delete a contact relation `smokeball.contact_relations.delete`
- Unsubscribes account from plugin `smokeball.plugin_subscriptions.delete`
- Remove a contact from a layout `smokeball.matter_layout_contacts.delete`
- Remove relationship from a role in a matter. `smokeball.matter_role_relationships.delete`
- Cancel an invitation `smokeball.invitations.cancel`

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 smokeball.tasks.delete confirm_policy: **human**

Delete a task?

**intent:** the user asked me to delete a task

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

In the console, or from an emailed signed link.

a key for this connector

```
account {
  op: "keys.create", name: "smokeball-agent",
  allowed_actions: ["smokeball.*"], cap_calls: 2000,
  confirm_policy: "human_for_writes",
  approval_rules: [
    { match: "smokeball.tasks.delete", approver: "lead@example.com" },
    { match: "smokeball.matters.delete", approver: "lead@example.com" },
    { match: "smokeball.staff.delete", approver: "lead@example.com" }
  ]
}
```

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

Cost

## What Smokeball costs on actionlake.

Every Smokeball action is one upstream call, the only thing actionlake bills. Searching, `check`, `cost`, `account` and any call Smokeball 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 195 Smokeball actions
- 195 actions page each page of a long list is one call
- 91 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 Smokeball action.

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

**Matter files 13**

- `smokeball.matter_files.bulk_create` Add files to a matter write
- `smokeball.matter_files.create` Add file to a matter write
- `smokeball.matter_files.create_preview` Get or create a preview write
- `smokeball.matter_files.delete` Delete a file destructive
- `smokeball.matter_files.get` Get a file read
- `smokeball.matter_files.get_download_url` Get download url for a file read
- `smokeball.matter_files.get_preview` Get preview info for a file read
- `smokeball.matter_files.get_preview_version` Get preview info for a file by document version read
- `smokeball.matter_files.get_upload_url` Get upload url for a file read
- `smokeball.matter_files.history` Get file history on a matter read
- `smokeball.matter_files.list` Get files on a matter read
- `smokeball.matter_files.patch` Patch a file write
- `smokeball.matter_files.update` Upload/update version or metadata of a file write

**Matter folders 8**

- `smokeball.matter_folders.create` Create a folder write
- `smokeball.matter_folders.delete` Delete a folder destructive
- `smokeball.matter_folders.history` Get folder history on a matter read
- `smokeball.matter_folders.list_contents` Get folders/files under a folder read
- `smokeball.matter_folders.list_root` Get folders/files under root folder read
- `smokeball.matter_folders.patch` Patch a folder write
- `smokeball.matter_folders.path` Get folder path hierarchy read
- `smokeball.matter_folders.update` Update a folder write

**Bank accounts 7**

- `smokeball.bank_accounts.create_requisition` Create a requisition write
- `smokeball.bank_accounts.get` Get a bank account read
- `smokeball.bank_accounts.get_protected_balance` Get a protected bank account balance read
- `smokeball.bank_accounts.list` Get bank accounts read
- `smokeball.bank_accounts.matter_balances` Get bank account matter balances read
- `smokeball.bank_accounts.protect_funds` Protect bank account funds write
- `smokeball.bank_accounts.unprotect_funds` Unprotect bank account funds write

**Contacts 6**

- `smokeball.contacts.batch_get` Get contacts by ids read
- `smokeball.contacts.create` Create a contact write
- `smokeball.contacts.delete` Delete a contact destructive
- `smokeball.contacts.get` Get a contact read
- `smokeball.contacts.list` Get contacts read
- `smokeball.contacts.update` Update a contact write

**Invitations 6**

- `smokeball.invitations.accept` Accept an invitation write
- `smokeball.invitations.cancel` Cancel an invitation destructive
- `smokeball.invitations.create` Invite a person to join the firm write
- `smokeball.invitations.get` Get an invitation read
- `smokeball.invitations.list` Search invitations read
- `smokeball.invitations.resend` Resend an invitation write

**Matter expenses 6**

- `smokeball.matter_expenses.create` Create an expense write
- `smokeball.matter_expenses.delete` Delete an expense destructive
- `smokeball.matter_expenses.get` Get an expense read
- `smokeball.matter_expenses.list` Get expenses read
- `smokeball.matter_expenses.patch` Patch an expense write
- `smokeball.matter_expenses.update` Update an expense write

**Matter fees 6**

- `smokeball.matter_fees.create` Create a fee write
- `smokeball.matter_fees.delete` Delete a fee destructive
- `smokeball.matter_fees.get` Get a fee read
- `smokeball.matter_fees.list` Get fees read
- `smokeball.matter_fees.patch` Patch a fee write
- `smokeball.matter_fees.update` Update a fee write

**Matters 6**

- `smokeball.matters.create` Create a matter write
- `smokeball.matters.delete` Delete a matter destructive
- `smokeball.matters.get` Get a matter read
- `smokeball.matters.list` Get matters read
- `smokeball.matters.patch` Patch a matter write
- `smokeball.matters.update` Update a matter write

**Plugins 6**

- `smokeball.plugins.create` Create a new plugin write
- `smokeball.plugins.delete` Delete existing plugin destructive
- `smokeball.plugins.get` Get a plugin read
- `smokeball.plugins.list` Get plugins read
- `smokeball.plugins.request_url` Request plugin URL write
- `smokeball.plugins.update` Update existing plugin write

**Webhooks 6**

- `smokeball.webhooks.create` Create new webhook subscription write
- `smokeball.webhooks.delete` Deletes a webhook subscription destructive
- `smokeball.webhooks.get` Get a webhook subscription read
- `smokeball.webhooks.list` Get webhook subscriptions read
- `smokeball.webhooks.notify` Notify a webhook subscription write
- `smokeball.webhooks.update` Update a webhook subscription write

**Activity codes 5**

- `smokeball.activity_codes.create` Create an activity code write
- `smokeball.activity_codes.delete` Delete an activity code destructive
- `smokeball.activity_codes.get` Get an activity code read
- `smokeball.activity_codes.list` Get activity codes read
- `smokeball.activity_codes.update` Update an activity code write

**Contact relations 5**

- `smokeball.contact_relations.create` Create a contact relation write
- `smokeball.contact_relations.delete` Delete a contact relation destructive
- `smokeball.contact_relations.get` Get a contact relation read
- `smokeball.contact_relations.list` Get contact relations read
- `smokeball.contact_relations.update` Update a contact relation write

**Events 5**

- `smokeball.events.create` Create event write
- `smokeball.events.delete` Delete event destructive
- `smokeball.events.get` Get an event read
- `smokeball.events.list` Get events read
- `smokeball.events.update` Update event write

**Groups 5**

- `smokeball.groups.create` Create an authorization group write
- `smokeball.groups.delete` Deletes an authorization group destructive
- `smokeball.groups.get` Get an authorization group read
- `smokeball.groups.list` Get authorization groups read
- `smokeball.groups.update` Update an authorization group write

**Matter layouts 5**

- `smokeball.matter_layouts.create` Add a new layout write
- `smokeball.matter_layouts.delete` Remove a layout destructive
- `smokeball.matter_layouts.get` Get a layout read
- `smokeball.matter_layouts.list` Get layouts read
- `smokeball.matter_layouts.merge` Merge a layout write

**Matter memos 5**

- `smokeball.matter_memos.create` Create a memo on a matter write
- `smokeball.matter_memos.delete` Delete a memo destructive
- `smokeball.matter_memos.get` Get a memo read
- `smokeball.matter_memos.list` Get memos on a matter read
- `smokeball.matter_memos.update` Update a memo write

**Matter role relationships 5**

- `smokeball.matter_role_relationships.create` Add relationship to a role write
- `smokeball.matter_role_relationships.delete` Remove relationship from a role in a matter. destructive
- `smokeball.matter_role_relationships.get` Get relationship on a role read
- `smokeball.matter_role_relationships.list` Get relationships on a matter read
- `smokeball.matter_role_relationships.update` Update a relationship write

**Matter roles 5**

- `smokeball.matter_roles.create` Add role to a matter write
- `smokeball.matter_roles.delete` Remove role from a matter destructive
- `smokeball.matter_roles.get` Get role on a matter read
- `smokeball.matter_roles.list` Get roles on a matter read
- `smokeball.matter_roles.update` Update role on a matter write

**Staff 5**

- `smokeball.staff.create` Create firm staff member write
- `smokeball.staff.delete` Deletes a firm staff member destructive
- `smokeball.staff.get` Get firm staff member read
- `smokeball.staff.list` Search firm staff members read
- `smokeball.staff.update` Update firm staff member write

**Task subtasks 5**

- `smokeball.task_subtasks.create` Create a subtask write
- `smokeball.task_subtasks.delete` Delete a subtask destructive
- `smokeball.task_subtasks.get` Get a subtask read
- `smokeball.task_subtasks.list` Get subtasks read
- `smokeball.task_subtasks.update` Update a subtask write

**Tasks 5**

- `smokeball.tasks.create` Create a task write
- `smokeball.tasks.delete` Delete a task destructive
- `smokeball.tasks.get` Get a task read
- `smokeball.tasks.list` Get tasks read
- `smokeball.tasks.update` Update a task write

**Event reminders 4**

- `smokeball.event_reminders.create` Create reminder for an event write
- `smokeball.event_reminders.delete` Delete reminder for an event destructive
- `smokeball.event_reminders.list` Gets reminders for an event read
- `smokeball.event_reminders.update` Update a reminder for an event write

**Firm users 4**

- `smokeball.firm_users.delete` Delete firm user mapping destructive
- `smokeball.firm_users.get` Get firm user mapping read
- `smokeball.firm_users.list` Get firm user mappings read
- `smokeball.firm_users.update` Update firm user mapping write

**Plugin subscriptions 4**

- `smokeball.plugin_subscriptions.create` Subscribe account to plugin write
- `smokeball.plugin_subscriptions.delete` Unsubscribes account from plugin destructive
- `smokeball.plugin_subscriptions.get` Get a plugin subscription read
- `smokeball.plugin_subscriptions.list` Get plugin subscriptions read

**Task documents 4**

- `smokeball.task_documents.create` Create a task document write
- `smokeball.task_documents.delete` Delete a task document destructive
- `smokeball.task_documents.get` Get a task document read
- `smokeball.task_documents.list` Get task documents read

**Users 4**

- `smokeball.users.create` Create a user write
- `smokeball.users.delete` Remove a user destructive
- `smokeball.users.get` Get a user read
- `smokeball.users.resend_invite` Resend sign-in credentials write

**Bank account transactions 3**

- `smokeball.bank_account_transactions.create` Create a transaction write
- `smokeball.bank_account_transactions.get` Get a transaction read
- `smokeball.bank_account_transactions.list` Get transactions read

**Contact tags 3**

- `smokeball.contact_tags.create` Add tags to a contact write
- `smokeball.contact_tags.delete` Remove tags from a contact destructive
- `smokeball.contact_tags.list` Get contact tags read

**Firm 3**

- `smokeball.firm.create` Create firm write
- `smokeball.firm.get` Get firm read
- `smokeball.firm.update` Update firm write

**Matter archive 3**

- `smokeball.matter_archive.get` Get the archive for a matter read
- `smokeball.matter_archive.patch` Patch an archive for a matter write
- `smokeball.matter_archive.update` Update an archive for a matter. write

**Matter billing configuration 3**

- `smokeball.matter_billing_configuration.get` Get matter billing configuration read
- `smokeball.matter_billing_configuration.patch` Patch matter billing configuration write
- `smokeball.matter_billing_configuration.update` Update matter billing configuration write

**Matter invoices 3**

- `smokeball.matter_invoices.get` Get an invoice read
- `smokeball.matter_invoices.get_download_url` Get download url for an invoice read
- `smokeball.matter_invoices.list` Get invoices read

**Matter layout contacts 3**

- `smokeball.matter_layout_contacts.create` Add a contact to a layout write
- `smokeball.matter_layout_contacts.delete` Remove a contact from a layout destructive
- `smokeball.matter_layout_contacts.list` Get layout contacts read

**Matter tags 3**

- `smokeball.matter_tags.create` Add tags to a matter write
- `smokeball.matter_tags.delete` Remove tags from a matter destructive
- `smokeball.matter_tags.list` Get matter tags read

**Policies 3**

- `smokeball.policies.create` Create an authorization policy write
- `smokeball.policies.get` Get an authorization policy read
- `smokeball.policies.update` Update an authorization policy write

**Layouts 2**

- `smokeball.layouts.get` Get a layout design read
- `smokeball.layouts.list` Get layout designs read

**Matter items 2**

- `smokeball.matter_items.get` Get an item on a matter read
- `smokeball.matter_items.list` Get items on a matter read

**Matter portal tasks 2**

- `smokeball.matter_portal_tasks.create` Creates a portal task write
- `smokeball.matter_portal_tasks.patch` Patch a portal task write

**Matter types 2**

- `smokeball.matter_types.get` Get a matter type read
- `smokeball.matter_types.list` Get matter types read

**Notifications 2**

- `smokeball.notifications.create` Create a notification write
- `smokeball.notifications.get` Get a notification read

**Referral types 2**

- `smokeball.referral_types.get` Get a referral type read
- `smokeball.referral_types.list` Get referral types read

**Stage sets 2**

- `smokeball.stage_sets.get` Get a stage set read
- `smokeball.stage_sets.list` Get stage sets for the firm read

**Files 1**

- `smokeball.files.search` Search files with advanced filters read

**Matter integrated search mapping 1**

- `smokeball.matter_integrated_search_mapping.get` Get mapping read

**Matter portal messages 1**

- `smokeball.matter_portal_messages.send` Sends a portal message write

**Matter stage mappings 1**

- `smokeball.matter_stage_mappings.list` Get stage to matter mappings in the firm read

**Matter stages 1**

- `smokeball.matter_stages.get` Get a matter stage information read

**Matter type categories 1**

- `smokeball.matter_type_categories.list` Get matter types categories read

**Stage set stages 1**

- `smokeball.stage_set_stages.get` Get a stage on a stage set read

**User registrations 1**

- `smokeball.user_registrations.list` Get user registrations read

**Webhook event types 1**

- `smokeball.webhook_event_types.list` Get event types read

Questions

## The Smokeball MCP server, answered.

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

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 195 Smokeball actions across matter files, matter folders, bank accounts and contacts, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Smokeball.

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

OAuth client id of your Smokeball app (Developer Console > App Details), OAuth client secret of the same Smokeball app (Developer Console > App Details) and Smokeball-issued API key, sent as the x-api-key header on every request. Plus your api host. The free call account { op: "connections.requirements", service: "smokeball" } lists exactly what to paste.

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

Only if its key allows it, and only with an explicit confirmation. 28 Smokeball actions are destructive, including delete a task, delete a matter and deletes a firm staff member. 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 Smokeball API limit?**

actionlake paces every call to the limits in the Smokeball service file: 5 calls a second per connection. Repeated reads are answered from cache (91 Smokeball actions can be), which never reaches Smokeball.

**What does a Smokeball action cost?**

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (195 Smokeball actions page). Cache hits, searches, dry runs and calls Smokeball 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 Smokeball API does it cover?**

The Smokeball API (1.0; OpenAPI 3.0) at api.smokeball.com by default, or the base URL set when you connect. It is built from Smokeball's documentation as read on 23 October 2026. 195 actions in 51 areas, each one in the signed service file (version 1.0.0).

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

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

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

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to 5 minutes, 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 Smokeball 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 Smokeball

Shares the most action names with

- [Clio Manage 42](https://actionlake.com/connectors/clio-manage)
- [FreeAgent 36](https://actionlake.com/connectors/freeagent)
- [Harvest 32](https://actionlake.com/connectors/harvest)
- [Actionstep 28](https://actionlake.com/connectors/actionstep)
- [DoorLoop 21](https://actionlake.com/connectors/doorloop)
- [Karbon 20](https://actionlake.com/connectors/karbon)

Joins with, on shared entities

- [ScalePad 5](https://actionlake.com/connectors/scalepad)
- [Fergus 5](https://actionlake.com/connectors/fergus)
- [HaloPSA 4](https://actionlake.com/connectors/halopsa)
- [Teamwork 4](https://actionlake.com/connectors/teamwork)
- [Microsoft Dynamics 365 4](https://actionlake.com/connectors/microsoft-dynamics-365)
- [Productive.io 4](https://actionlake.com/connectors/productive-io)

Browse

- [All Accounting & finance connectors](https://actionlake.com/connectors/category/accounting-and-finance)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

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

## Give your agent Smokeball today.

[Connect Smokeball 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/smokeball
More: https://actionlake.com/llms.txt
