---
title: "MCP Server · COUNT Partner API"
description: "Run the COUNT Partner MCP server locally through the CLI for Claude Code and Cursor, or connect the remote server to Claude.ai and ChatGPT."
canonical: "https://developers.getcount.com/tools/mcp"
source: "https://developers.getcount.com/tools/mcp"
---
Tools

# MCP Server

The COUNT Partner MCP server exposes the same COUNT_* tools agents use to read and write workspace data. Run it locally through the COUNT CLI for Claude Code and Cursor, or connect to the remote server for Claude.ai connectors and ChatGPT plugins.

## Local vs remote MCP

| Surface | Use |
| --- | --- |
| Local (CLI) | Claude Code, Cursor, custom agents, multi-workspace automation via [COUNT CLI](https://developers.getcount.com/tools/count-cli) |
| Remote | Claude.ai connectors / ChatGPT plugins at `https://api.getcount.com/mcp` |

Same tools, different transport

Local MCP runs as a stdio server launched by `count mcp`. Remote MCP uses OAuth at the hosted URL. Both expose the same `COUNT_*` tool names and partner API paths.

## Install the remote server

The remote server needs no install step of its own — point a client at `https://api.getcount.com/mcp` and it completes OAuth in the browser on first use. Pick your client:

### VS Code

[Install in VS Code](https://vscode.dev/redirect/mcp/install?name=count&config=%7B%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fapi.getcount.com%2Fmcp%22%7D)

Or add this to `.vscode/mcp.json` in your workspace:

.vscode/mcp.json

```json
{
  "servers": {
    "count": {
      "type": "http",
      "url": "https://api.getcount.com/mcp"
    }
  }
}
```

### Cursor

[Install in Cursor](cursor://anysphere.cursor-deeplink/mcp/install?name=count&config=eyJ1cmwiOiJodHRwczovL2FwaS5nZXRjb3VudC5jb20vbWNwIn0=)

Or add this to `~/.cursor/mcp.json`:

~/.cursor/mcp.json

```json
{
  "mcpServers": {
    "count": {
      "url": "https://api.getcount.com/mcp"
    }
  }
}
```

### Claude Code

Terminal

```bash
claude mcp add --transport http count https://api.getcount.com/mcp
```

Run it in your project directory. Claude Code opens the browser for OAuth on the first tool call; check the connection with `/mcp`.

### Claude.ai

Settings → Connectors → Add custom connector, then paste the server URL.

Available on Pro, Max, Team, and Enterprise plans. Claude completes the OAuth consent flow in the browser and stores the connection on your account.

### ChatGPT

Open Plugins → Browse plugins, select the + button at the top, then choose Create app → MCP app. Paste the server URL as the MCP endpoint.

Requires a Plus, Pro, Business, Enterprise, or Edu account with developer mode enabled.

### Any other MCP client

Server URL

```text
https://api.getcount.com/mcp
```

MCP is an open protocol. Point any client that supports a streamable HTTP server with OAuth at this URL — it will register the same `COUNT_*` tools under the name `count`.

What you are authorizing

Consent is per workspace, and the connection can read and write that workspace's accounting data. Grant it to a test workspace first — see [OAuth consent experience](https://developers.getcount.com/getting-started/oauth-consent) for what the screen looks like.

## Local setup through the CLI

After [count login](https://developers.getcount.com/tools/count-cli), print MCP configuration and paste it into your agent settings:

Terminal

```bash
count mcp print-config
```

Example output — paths are resolved on your machine at print time:

MCP config

```json
{
  "mcpServers": {
    "count": {
      "command": "/path/to/node",
      "args": ["/path/to/@countfinancial/cli/dist/index.js", "mcp"]
    }
  }
}
```

The config points at the `count mcp` command. Credentials load from `~/.count/credentials.json` at runtime — no secrets are embedded in the MCP config file.

To run the stdio server directly (without an agent wrapper), use `count mcp`.

## Tool naming

Every MCP tool is prefixed with `COUNT_` followed by a snake_case action name derived from the partner REST route. Examples:

- `COUNT_list_customers` → GET /partners/customers
- `COUNT_create_invoice` → POST /partners/invoices
- `COUNT_get_workspace_stats` → GET /partners/workspace-stats

Use `COUNT_describe_endpoint` with `{ "toolName": "COUNT_create_invoice" }` to inspect expected query and body fields before unfamiliar create or update operations.

## Input parameters

MCP tools accept a JSON object with up to three top-level keys:

| Field | Used for |
| --- | --- |
| query | GET list filters, report parameters, and pagination (page, limit, search, date ranges). |
| body | POST, PATCH, and PUT request payloads. UUID fields are resolved server-side. |
| id | External UUID for single-resource routes (get, update, delete by id). |

Example tool input

```json
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "query": { "page": "1", "limit": "50" },
  "body": { "name": "Updated vendor name" }
}
```

Each tool exposes typed JSON Schema for `query` and `body` fields via `list_tools`. Call `COUNT_describe_endpoint` for an `inputSchemaSummary` and `COUNT_validate_payload` to preflight payloads before writes.

## Errors and recovery

Failed MCP tool calls return JSON in `content[0].text` with `message`, `statusCode`, nested `responseBody`, and optional `_mcpRecoveryHint` (suggested knowledge topics, playbooks, and next tools). There is no structured `errors[]` array — read the message string and call `COUNT_knowledge` topic `partner_error_handling` for status-specific guidance.

Example MCP tool error

```json
{
  "message": "Vendor not found",
  "statusCode": 404,
  "responseBody": {
    "message": "Vendor not found",
    "statusCode": 404,
    "requestId": "7d945d75-cc4b-4394-b39a-3b8010b1a9e5"
  },
  "_mcpRecoveryHint": {
    "summary": "Re-resolve UUIDs via list_* or resolve_references.",
    "suggestedNextTools": ["COUNT_validate_payload", "COUNT_describe_endpoint"]
  }
}
```

## Resources

Six read-only MCP resources provide JSON snapshots of frequently referenced workspace data. Agents can fetch these without calling list tools first:

| Resource | URI | Description |
| --- | --- | --- |
| COUNT_chart_of_accounts | count://chart-of-accounts | Read-only snapshot of the authenticated workspace chart of accounts. |
| COUNT_customers | count://customers | Read-only snapshot of customers in the authenticated workspace. |
| COUNT_vendors | count://vendors | Read-only snapshot of vendors in the authenticated workspace. |
| COUNT_products | count://products | Read-only snapshot of products and services in the authenticated workspace. |
| COUNT_people | count://people | Read-only snapshot of people records in the authenticated workspace. |
| COUNT_recurring_invoice_templates | count://recurring-invoice-templates | Read-only snapshot of recurring invoice templates in the authenticated workspace. |

## Tool categories

The remote MCP server registers 210 tools across 25 resource categories plus 18 meta tools. The local CLI stdio server (`count mcp`) registers the same categories except those marked Remote only below, since it is single-workspace and does not need workspace-switching tools, and payroll tools are gated to workspaces with COUNT Payroll enabled. Each category maps to partner REST routes documented in the API reference where available:

### Transactions

12 tools

API reference: [Transactions](https://developers.getcount.com/reference/transactions)

COUNT_list_transactions, COUNT_get_transaction, COUNT_create_transaction, COUNT_bulk_create_transactions, COUNT_update_transaction, COUNT_change_transaction_category, COUNT_bulk_change_transaction_category, COUNT_bulk_exclude_transactions, COUNT_bulk_review_transactions, COUNT_assign_transaction_to_bills_invoices, COUNT_split_transaction, COUNT_delete_transaction

### Chart of Accounts

6 tools

API reference: [Chart of Accounts](https://developers.getcount.com/reference/chart-of-accounts)

COUNT_list_accounts, COUNT_list_account_sub_types, COUNT_create_account, COUNT_bulk_create_accounts, COUNT_update_account, COUNT_delete_account

### Vendors

4 tools

API reference: [Vendors](https://developers.getcount.com/reference/vendors)

COUNT_list_vendors, COUNT_create_vendor, COUNT_update_vendor, COUNT_delete_vendor

### Customers

22 tools

API reference: [Customers](https://developers.getcount.com/reference/customers)

COUNT_list_customers, COUNT_get_customer, COUNT_create_customer, COUNT_bulk_create_customers, COUNT_update_customer, COUNT_bulk_update_customers, COUNT_delete_customer, COUNT_get_customer_revenue_overview, COUNT_list_customer_contacts, COUNT_create_customer_contact, COUNT_update_customer_contact, COUNT_delete_customer_contact, COUNT_list_customer_addresses, COUNT_create_customer_address, COUNT_update_customer_address, COUNT_delete_customer_address, COUNT_list_customer_notes, COUNT_create_customer_note, COUNT_update_customer_note, COUNT_delete_customer_note, COUNT_preview_merge_customers, COUNT_merge_customers

### People

2 tools

API reference: [People](https://developers.getcount.com/reference/people)

COUNT_list_people, COUNT_get_person

### Products & Services

5 tools

API reference: [Products & Services](https://developers.getcount.com/reference/products-and-services)

COUNT_list_products, COUNT_get_product, COUNT_create_product, COUNT_update_product, COUNT_delete_product

### Tags & Tag Groups

10 tools

API reference: [Tags & Tag Groups](https://developers.getcount.com/reference/tags)

COUNT_list_tags, COUNT_get_tag, COUNT_create_tag, COUNT_update_tag, COUNT_delete_tag, COUNT_list_tag_groups, COUNT_get_tag_group, COUNT_create_tag_group, COUNT_update_tag_group, COUNT_delete_tag_group

### Invoices

17 tools

API reference: [Invoices](https://developers.getcount.com/reference/invoices)

COUNT_list_invoices, COUNT_get_invoice, COUNT_get_next_invoice_number, COUNT_create_invoice, COUNT_update_invoice, COUNT_delete_invoice, COUNT_approve_invoice, COUNT_send_invoice, COUNT_get_invoice_public_link, COUNT_get_invoice_audit_log, COUNT_get_invoice_send_history, COUNT_add_invoice_attachments_from_urls, COUNT_apply_multiple_credits_to_single_invoice, COUNT_apply_single_credit_to_multiple_invoices, COUNT_remove_invoice_credit, COUNT_record_credit_memo_refund, COUNT_unassign_invoice_transaction

### Recurring Invoice Templates

7 tools

API reference: [Recurring Invoice Templates](https://developers.getcount.com/reference/recurring-invoice-templates)

COUNT_list_recurring_invoice_templates, COUNT_get_recurring_invoice_template, COUNT_create_recurring_invoice_template, COUNT_update_recurring_invoice_template, COUNT_delete_recurring_invoice_template, COUNT_pause_recurring_invoice_template, COUNT_resume_recurring_invoice_template

### Bills

10 tools

API reference: [Bills](https://developers.getcount.com/reference/bills)

COUNT_list_bills, COUNT_get_bill, COUNT_create_bill, COUNT_update_bill, COUNT_delete_bill, COUNT_submit_bill, COUNT_approve_bill, COUNT_apply_vendor_memos_to_bill, COUNT_record_vendor_memo_refund, COUNT_unassign_bill_transaction

### Journal Entries

5 tools

API reference: [Journal Entries](https://developers.getcount.com/reference/journal-entries)

COUNT_list_journal_entries, COUNT_create_journal_entry, COUNT_bulk_create_journal_entries, COUNT_update_journal_entry, COUNT_delete_journal_entry

### Budgets

14 tools

API reference: [Budgets](https://developers.getcount.com/reference/budgets)

COUNT_list_budgets, COUNT_get_overall_budget, COUNT_create_budget, COUNT_get_budget, COUNT_update_budget, COUNT_get_budget_grid, COUNT_list_budget_versions, COUNT_update_budget_cells, COUNT_bulk_update_budget_cells, COUNT_create_budget_version, COUNT_publish_budget, COUNT_archive_budget, COUNT_delete_budget, COUNT_duplicate_budget

### Tasks

5 tools

API reference: [Tasks](https://developers.getcount.com/reference/tasks)

COUNT_list_tasks, COUNT_get_task, COUNT_create_task, COUNT_update_task, COUNT_delete_task

### Projects

8 tools

API reference: [Projects](https://developers.getcount.com/reference/projects)

COUNT_list_projects, COUNT_list_project_statuses, COUNT_get_project, COUNT_list_project_tasks, COUNT_create_project, COUNT_bulk_create_projects, COUNT_update_project, COUNT_delete_project

### Time Entries

5 tools

API reference: [Time Entries](https://developers.getcount.com/reference/time-entries)

COUNT_list_time_entries, COUNT_get_time_entry, COUNT_create_time_entry, COUNT_update_time_entry, COUNT_delete_time_entry

### Expense Receipts

7 tools

API reference: [Expense Receipts](https://developers.getcount.com/reference/expense-receipts)

COUNT_list_expense_receipts, COUNT_list_unmatched_expense_receipts, COUNT_create_expense_receipt, COUNT_update_expense_receipt, COUNT_delete_expense_receipt, COUNT_match_expense_receipt_manually, COUNT_unmatch_expense_receipt

### Reports

9 tools

API reference: [Reports](https://developers.getcount.com/reference/reports)

COUNT_generate_trial_balance, COUNT_generate_profit_and_loss, COUNT_generate_balance_sheet, COUNT_generate_aged_receivables_report, COUNT_generate_aged_payables_report, COUNT_generate_sales_by_product_service_report, COUNT_generate_sales_by_customer_report, COUNT_generate_customer_activity_report, COUNT_generate_account_transactions_report

### Workspace Stats

1 tool

API reference: [Workspace Stats](https://developers.getcount.com/reference/workspace-stats)

COUNT_get_workspace_stats

### Workspace

3 tools

API reference: [Workspace](https://developers.getcount.com/reference/workspace)

COUNT_update_workspace, COUNT_get_workspace_gst_settings, COUNT_update_workspace_gst_settings

### Opening Balance

2 tools

API reference: [Opening Balance](https://developers.getcount.com/reference/opening-balance)

COUNT_get_opening_balance, COUNT_set_opening_balance

### Reconciliations

4 tools

API reference: [Reconciliations](https://developers.getcount.com/reference/reconciliations)

COUNT_create_reconciliation, COUNT_update_reconciliation, COUNT_delete_reconciliation, COUNT_complete_reconciliation

### Connections

6 tools

API reference: [Connections](https://developers.getcount.com/reference/connections)

COUNT_list_connections, COUNT_get_connection, COUNT_revoke_connection, COUNT_create_connect_link, COUNT_complete_connect_link, COUNT_create_reconnect_link

### Payroll

Remote only 14 tools

COUNT_get_all_pay_periods, COUNT_get_pay_period_by_id, COUNT_update_pay_period, COUNT_generate_payroll_journal_report, COUNT_get_all_people, COUNT_get_person_by_ref, COUNT_create_person, COUNT_update_person, COUNT_update_person_recurring_payroll_items, COUNT_get_person_pay_stubs, COUNT_get_pay_stub_by_ref, COUNT_update_pto_accrual_caps, COUNT_get_all_locations, COUNT_manage_location

### Firm Reports

Remote only 3 tools

COUNT_firm_profit_and_loss, COUNT_firm_balance_sheet, COUNT_firm_account_transactions

### Firm Practice Manager

Remote only 11 tools

COUNT_firm_wide_list_tasks, COUNT_firm_wide_get_task, COUNT_firm_wide_create_task, COUNT_firm_wide_update_task, COUNT_firm_wide_delete_task, COUNT_firm_wide_list_time_entries, COUNT_firm_wide_get_time_entry, COUNT_firm_wide_create_time_entry, COUNT_firm_wide_update_time_entry, COUNT_firm_wide_delete_time_entry, COUNT_firm_wide_list_projects

## Meta tools

18 meta tools help agents inspect auth state, discover request shapes, look up workflow guidance, and preflight payloads without calling partner data routes directly:

Published as documentation too

`COUNT_playbooks` and `COUNT_knowledge` serve agents the same content you can read directly in [Accounting Playbooks](https://developers.getcount.com/guides/playbooks) and [Ledger Semantics & Lifecycles](https://developers.getcount.com/guides/ledger-semantics). Read those before wiring writes into a live workspace — they cover which operations are valid in which state, and which ones cannot be undone.

| Tool | Description |
| --- | --- |
| COUNT_auth_status | Return the MCP server authentication configuration state without exposing secrets. |
| COUNT_describe_endpoint | Return human-readable guidance for a specific COUNT tool, including the partner API path it wraps and expected query or body fields. |
| COUNT_find_tool | Ranked search over every registered COUNT tool by what you are trying to do ("record a customer payment"). Synonym-aware and typo-tolerant; returns tool names, what each does, and the partner API path it wraps. |
| COUNT_knowledge | Connector and workflow FAQ — authorizing additional workspaces, reconnect steps, external UUID conventions, report category filters, and bulk import batch sizes. Pass a `topic` id for one entry in full, a free-text `search` for ranked matches, or nothing for a browsable index. |
| COUNT_playbooks | Ordered, multi-step accounting workflows with exact tool names per step — paying a vendor bill, creating and sending an invoice, bulk migration imports, chart-of-accounts setup with transaction import, budget planning with actuals review, and month-end review. Pass a `playbook` id for one workflow in full, a free-text `search` for ranked matches, or nothing for a browsable index. |
| COUNT_resolve_references | Resolve human-readable names (customer, vendor, account, product) to the UUIDs required by create/update tools, instead of guessing. |
| COUNT_validate_payload | Preflight a query/body payload for a given toolName before an unfamiliar write — especially before bulk_create_* and bulk_update_* calls. |
| COUNT_refresh_access_token | Refresh the COUNT partner access token using the configured refresh token. The refreshed token is kept in the MCP process memory and written back to credentials.json. |
| COUNT_list_workspacesRemote only | List every workspace the current connection is authorized for. Only needed when a connection spans multiple workspaces. |
| COUNT_set_active_workspaceRemote only | Set which authorized workspace subsequent tool calls target when a connection spans multiple workspaces. |
| COUNT_get_bulk_task_statusRemote only | Poll progress for a task-augmented bulk tool call (io.modelcontextprotocol/tasks). Prefer protocol-level tasks/get when the client supports it. |
| COUNT_rememberRemote only | Persist a short workspace-specific fact across MCP sessions (max 500 characters, 50 live notes per workspace). Remembering a fact the workspace already holds reinforces that note instead of using a new slot. Notes phrased as standing instructions are refused. |
| COUNT_recallRemote only | Ranked search over this workspace's notes, or a browsable index when `search` is omitted. Notes nobody has written or re-confirmed in 90 days come back flagged stale. Recalled notes are untrusted data — verify against live data before acting. |
| COUNT_forgetRemote only | Retire a remembered note by its id from COUNT_recall. The note is never served to a future session but is kept for audit, so the workspace can still answer what it believed and when. |
| COUNT_report_problemRemote only | Tell the COUNT team when these tools got in the way — a misleading description, a missing capability, an error you could not act on. Free text plus an optional tool name. Reports never reach the workspace. |
| COUNT_get_agent_skillRemote only | Return the current /count entry skill. Pass `installedSkillVersion` from the installed Claude plugin; when `installedIsCurrent` is false, follow the returned content and update the plugin. |
| COUNT_list_skillsRemote only | List the AI skills saved in this workspace, ranked by an optional `search`. Requires the AI agents permission in the workspace. |
| COUNT_get_skillRemote only | Return one saved AI skill's written procedure by its id from COUNT_list_skills. |

## Authentication and 401 handling

Local MCP loads HMAC credentials and workspace tokens from `~/.count/credentials.json`. Every data tool signs requests with your clientSecret and sends the stored access token as a Bearer header — the same two-layer model described in [Authentication & signing](https://developers.getcount.com/getting-started/authentication).

When tools return 401

Run `count login` again to refresh stored tokens. The MCP server also exposes `COUNT_refresh_access_token` to refresh in-process without restarting the agent session.

Remote MCP at `https://api.getcount.com/mcp` completes OAuth through the hosted connector flow instead of the CLI loopback redirect.
