> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dualentry.com/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP Server: Tools, Permissions, and Troubleshooting

> Reference for the DualEntry MCP server: the full catalog of 15 tools, the role permissions each tool checks, and fixes for common connection errors.

DualEntry provides a [Model Context Protocol](https://modelcontextprotocol.io/) (MCP) server: a standardized interface that lets any compatible AI assistant or agent access your accounting data securely. This page covers what's available once you're connected. If you haven't connected a client yet, start with [Connect MCP Clients](./mcp-quickstart), or with [the Claude connector directory](./connect-claude-from-the-connector-directory) if you are on Claude.

| Property       | Value                                    |
| -------------- | ---------------------------------------- |
| Server URL     | `https://api.dualentry.com/mcp/`         |
| Transport      | Streamable HTTP                          |
| Authentication | OAuth 2.1 (browser sign-in, no API keys) |

***

## Authentication

You don't need an API key. You sign in with the same DualEntry credentials you use for the dashboard.

* On first connection, your MCP client opens a browser for sign-in.
* Sessions refresh automatically.
* Your permissions match your DualEntry role. If you cannot see something in the dashboard, you cannot see it through MCP either.

***

## Available tools

The server exposes 15 tools. They respect your organization's permissions and company-level access restrictions, so a tool returns only what your role can already see in the dashboard.

### Finding records

| Tool                   | Description                                                                                                                                                                                                         |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `search_records`       | Search accounting records with filters (type, vendor or customer name, date range, amount range). Paginates with `offset` and `limit`, and returns `total_available` and `returned_count` so you can page reliably. |
| `get_record_detail`    | Full detail for a record by its `transaction_id`.                                                                                                                                                                   |
| `get_record_by_number` | Look up a record by number, for example `JE-123`, `BI-456`, or `IN-789`.                                                                                                                                            |
| `get_record_history`   | The audit trail for a record.                                                                                                                                                                                       |
| `get_related_records`  | Records related to a given record, such as payments against an invoice.                                                                                                                                             |

`search_records` returns a `transaction_id` on every result, and that is the identifier the detail, history, and related-records tools expect.

### Entities and companies

| Tool              | Description                                                                                                                                                                                          |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `search_entities` | Search vendors, customers, accounts, companies, items, classifications, terms, and ownership records by name. Returns ID, name, and type-specific fields such as account number, currency, or email. |
| `list_companies`  | List the companies in the organization you can access.                                                                                                                                               |
| `save_entity`     | Create an entity.                                                                                                                                                                                    |

### Writing records

| Tool          | Description                  |
| ------------- | ---------------------------- |
| `save_record` | Create an accounting record. |

### Revenue recognition

| Tool                        | Description                                                                                   |
| --------------------------- | --------------------------------------------------------------------------------------------- |
| `get_contract_detail`       | Full detail for a revenue recognition contract, including its schedule and related invoices.  |
| `preview_contract_schedule` | Compute the recognition schedule a contract payload would produce, without creating anything. |
| `create_contract`           | Create a revenue recognition contract.                                                        |

Preview before you create. `preview_contract_schedule` takes the same payload as `create_contract`, so you can confirm the schedule matches what you intend before committing a contract that drives recognition for its whole term.

### Fixed assets

| Tool                           | Description                                                                                       |
| ------------------------------ | ------------------------------------------------------------------------------------------------- |
| `preview_fixed_asset_schedule` | Compute the depreciation schedule a fixed asset payload would produce, without creating anything. |
| `create_fixed_asset`           | Create a fixed asset.                                                                             |

The same preview-then-create pattern applies, which matters more here than elsewhere because a depreciation schedule is tedious to correct once entries have posted against it.

### Bank matching

| Tool                          | Description                                          |
| ----------------------------- | ---------------------------------------------------- |
| `list_bank_match_suggestions` | Retrieve suggested matches for bank statement lines. |

## Example conversations

Once connected, you can ask your AI assistant questions like:

* *"Show me all invoices from last month over \$5,000"*
* *"Look up journal entry JE-412 and show me its line items"*
* *"What payments are linked to invoice IN-1089?"*
* *"Search for vendors matching 'Acme'"*
* *"Create a bill for vendor Acme Corp, \$500 for office supplies"*

***

## Permissions

Your DualEntry role governs MCP access. Every tool checks permission before it runs. The check is per record type or per entity type rather than per tool, so the same tool can succeed for one record type and fail for another.

| Permission required                                                                                                        | Tools it gates                                                                                                                                                                               |
| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **View** on the record type                                                                                                | `search_records`, `get_record_detail`, `get_record_by_number`, `get_record_history`, `get_related_records`. `search_records` filters to the types you can view rather than failing outright. |
| **Create** on the record type                                                                                              | `save_record`                                                                                                                                                                                |
| **View** on the entity type: Vendors, Customers, Chart of Accounts, Companies, Items, Classifications, Terms, or Ownership | `search_entities`, for the matching `entity_type`                                                                                                                                            |
| **Create** on the entity type                                                                                              | `save_entity`, for the matching `entity_type`                                                                                                                                                |
| **Companies** view                                                                                                         | `list_companies`                                                                                                                                                                             |
| **Bank Match** view                                                                                                        | `list_bank_match_suggestions`                                                                                                                                                                |
| **Revenue Recognition** view                                                                                               | `get_contract_detail`, `preview_contract_schedule`                                                                                                                                           |
| **Revenue Recognition** create                                                                                             | `create_contract`                                                                                                                                                                            |
| **Fixed Assets** view                                                                                                      | `preview_fixed_asset_schedule`                                                                                                                                                               |
| **Fixed Assets** create                                                                                                    | `create_fixed_asset`                                                                                                                                                                         |

If you lack a required permission, the tool returns a message beginning `Missing permission:` and names the permission it wanted. A create tool that fails this check writes nothing.

Permissions are not the only gate. Revenue recognition and some record types also require the corresponding subscription to be enabled for your organization, which returns a subscription error rather than a permission one.

***

## Troubleshooting

### General

| Issue                              | Solution                                                                                                                |
| ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| `Missing permission:` from a tool  | Your DualEntry role does not include the permission named in the message. Ask your administrator to update your access. |
| Stale data after permission change | Sign out and back in to apply changes immediately.                                                                      |

### Cursor

| Issue                               | Solution                                                                                                                                          |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| "Add to Cursor" button does nothing | Confirm Cursor is installed and up to date, then add the server manually using the [Cursor (manual)](./mcp-quickstart#connect-other-clients) tab. |
| Server shows as disconnected        | Open **Cursor Settings > MCP** and toggle the server off and on to retrigger the browser sign-in.                                                 |

### Claude

| Issue                                                              | Solution                                                                                                                                                                                                                                                                    |
| ------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| DualEntry is missing from the connector directory                  | On Team and Enterprise plans an Owner must add it under **Organization settings > Connectors** first. See [Claude Connector Directory: Connect DualEntry](./connect-claude-from-the-connector-directory#get-the-connector-approved-on-a-team-or-enterprise-plan).           |
| Connector not available at all                                     | Connectors require a Claude Pro, Max, Team, or Enterprise plan. Free plans cannot add them from the directory or as custom connectors.                                                                                                                                      |
| Added for the organization but Claude has no access                | Organization-level approval does not authenticate anyone. Each member connects and signs in individually from **Customize > Connectors**.                                                                                                                                   |
| Connected during a sandbox evaluation, but no access after go-live | Some go-lives provision a new DualEntry organization rather than promoting the sandbox in place, and that new organization needs its own connection. See [Troubleshooting](./connect-claude-from-the-connector-directory#troubleshooting) in the connector directory guide. |

### Custom MCP clients

These issues apply when connecting via third-party clients that use OAuth 2.1 to authenticate with the MCP server.

| Issue                          | Solution                                                                                                                                    |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
| Sign-in window does not appear | Your client must support OAuth 2.1-based MCP servers. Update to the latest version and verify OAuth support in your client's documentation. |
| Connection timeout             | Verify the MCP URL (`https://api.dualentry.com/mcp/`) is correct and that you can reach `api.dualentry.com` from your network.              |

***

## Related

* [Connect MCP Clients](./mcp-quickstart): connect a client and confirm it works.
* [Claude Connector Directory: Connect DualEntry](./connect-claude-from-the-connector-directory): the directory path for Claude, including Owner approval on Team and Enterprise plans.
* [How to Post a Period-End Accrual from Claude](./post-a-period-end-accrual-from-claude): a worked example that prepares an accrual in Claude and posts it with `save_record`.
* [DualEntry Public API](../../../developers/guides/index): the REST API behind the same accounting data.
