---
title: "Connect DualEntry to Claude: Automate Revenue Rec & Fixed Assets"
slug: connect-dualentry-to-claude-automate-revenue-rec-fixed-assets
date: 2026-09-13
author: Nidhi KN
categories: ["AI & Agents"]
excerpt: "Learn how to connect DualEntry to Claude using a managed MCP server. Automate revenue recognition, fixed assets, and intercompany journal entries with AI agents."
tldr: "Connect DualEntry to Claude via a managed MCP server to automate complex ERP workflows. This guide covers server generation, configuration, hero tools for revenue rec, and strict security controls."
canonical: https://truto.one/blog/connect-dualentry-to-claude-automate-revenue-rec-fixed-assets/
---

# Connect DualEntry to Claude: Automate Revenue Rec & Fixed Assets


If your team needs to connect DualEntry to Claude to automate revenue recognition schedules, execute intercompany journal entries, or manage multi-book fixed assets, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between Claude's tool calls and DualEntry's accounting APIs. You can either [build and maintain this infrastructure yourself](https://truto.one/how-to-build-mcp-servers-for-ai-agents-2026-hands-on-architecture-guide/), or use a [managed integration platform like Truto](https://truto.one/managed-mcp-for-claude-full-saas-api-access-without-security-headaches/) to dynamically generate a secure, authenticated MCP server URL.

If your team uses ChatGPT, check out our guide on [/connect-dualentry-to-chatgpt-manage-general-ledger-multi-entity/](https://truto.one/connect-dualentry-to-chatgpt-manage-general-ledger-multi-entity/) or explore our broader architectural overview on [/connect-dualentry-to-ai-agents-orchestrate-ap-ar-bank-matching/](https://truto.one/connect-dualentry-to-ai-agents-orchestrate-ap-ar-bank-matching/).

Giving a Large Language Model (LLM) read and write access to a general ledger and ERP system like DualEntry is a high-stakes engineering challenge. You must handle complex entity relationships, map deeply nested financial schemas to MCP tool definitions, and navigate strict accounting period constraints. Every time DualEntry introduces a new tax module or updates its revenue recognition logic, you have to update your server code, redeploy, and test the integration.

This guide breaks down exactly how to use Truto to generate a secure, [managed MCP server for DualEntry](https://truto.one/managed-mcp-for-claude-full-saas-api-access-without-security-headaches/), connect it natively to Claude Desktop, and execute complex financial workflows using natural language.

> Want to give your AI agents secure, authenticated access to DualEntry and 100+ other SaaS APIs? Let's talk about [managed MCP architecture](https://truto.one/managed-mcp-for-claude-full-saas-api-access-without-security-headaches/).
>
> [Talk to us](https://truto.one/book-a-demo/)

## The Engineering Reality of the DualEntry API

A custom MCP server is a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover tools, the reality of implementing it against specialized financial APIs is painful. DualEntry is built to manage complex, multi-entity accounting, ASC 606 revenue recognition, and granular fixed asset depreciation. Its API heavily reflects that strict financial compliance.

If you decide to build a custom DualEntry MCP server, here are the specific integration challenges you will face:

**The Revenue Recognition State Machine**
Unlike a standard CRM API where you can simply update a record, DualEntry enforces a strict state machine for revenue recognition contracts. You cannot simply `PATCH` a contract to change its value if usage data has already been applied or if it has active milestones. Instead, you must issue a `change_order`, calculate cumulative catch-ups, and transition the order from `draft` to `posted`. An LLM cannot natively guess this sequence. You need an MCP server that explicitly exposes state-aware endpoints and strictly defines the JSON schemas for obligation modifications and additions.

**Multi-Book Depreciation Schemas**
Creating a fixed asset in DualEntry is not just a matter of logging a purchase price. Enterprise accounting requires assets to be tracked across multiple depreciation books (e.g., BOOK for the general ledger, FEDERAL and STATE for tax reporting). When hitting the DualEntry API, you must submit a massive, nested payload containing `depreciation_schedules` for each book, complete with specific asset and accumulation account numbers. Mapping this deeply nested array into a flat JSON Schema that Claude can understand without hallucinating required properties requires extensive mapping logic.

**Strict Balancing and Period Locks**
When creating intercompany journal entries, the DualEntry API will immediately reject any payload where total debits do not equal total credits across all specified `company_id` values. Furthermore, any attempt to modify records in a closed financial period will result in an HTTP 422 error. Your integration layer must be prepared to catch these domain-specific errors and pass them back to the LLM in a readable format so the model can self-correct, rather than silently failing or crashing the MCP server.

## Generating the DualEntry MCP Server

To connect Claude to DualEntry, you need an MCP server that exposes DualEntry's API endpoints as JSON-RPC tools. Truto handles this dynamically by reading the connected DualEntry account's configuration and instantly generating an authenticated MCP server URL.

### Method 1: Via the Truto UI

For teams who prefer a visual interface, you can generate the server directly from the dashboard:

1. Log into your Truto account and navigate to your **Integrated Accounts**.
2. Select the connected DualEntry account you want to expose to Claude.
3. Click the **MCP Servers** tab in the top navigation.
4. Click **Create MCP Server**.
5. Select your desired configuration (e.g., restrict to `read` methods only, or filter by specific tags like `accounting`).
6. Copy the generated MCP server URL (it will look like `https://api.truto.one/mcp/abc123def456...`).

### Method 2: Via the Truto API

For platform engineering teams automating agent infrastructure, you can generate the MCP server programmatically. This is ideal when spinning up ephemeral agent sessions.

Make a `POST` request to `/integrated-account/:id/mcp` with your desired configuration:

```bash
curl -X POST https://api.truto.one/integrated-account/<dualentry_account_id>/mcp \
  -H "Authorization: Bearer <YOUR_TRUTO_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "DualEntry RevRec Agent Server",
    "config": {
      "methods": ["read", "write", "custom"],
      "tags": ["revenue_recognition", "fixed_assets", "journal_entries"]
    },
    "expires_at": "2026-12-31T23:59:59Z"
  }'
```

The API returns a secure token URL. Truto hashes the underlying token before storing it, ensuring that even if backend storage is compromised, your server URLs remain secure. 

## Connecting the MCP Server to Claude

Once you have your Truto MCP URL, connecting it to Claude takes less than a minute. You can do this visually through the UI or programmatically via configuration files.

### Method 1: Via the Claude UI

If you are using a modern enterprise version of Claude with UI connector support:

1. Open Claude and navigate to **Settings**.
2. Go to the **Integrations** or **Connectors** section.
3. Click **Add MCP Server** or **Add custom connector**.
4. Paste the Truto MCP URL you generated in the previous step.
5. Click **Add**. Claude will immediately perform a handshake with the Truto server, fetch the available tools, and make them available in your chat context.

### Method 2: Via Manual Configuration File

For developers running Claude Desktop locally, you can manually configure the server using the `claude_desktop_config.json` file. Truto's MCP server uses Server-Sent Events (SSE) over HTTP, so you will use the official `@modelcontextprotocol/server-sse` package to proxy the connection.

Open your configuration file (located at `~/Library/Application Support/Claude/claude_desktop_config.json` on macOS or `%APPDATA%\Claude\claude_desktop_config.json` on Windows) and add the following:

```json
{
  "mcpServers": {
    "dualentry_agent": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-sse",
        "https://api.truto.one/mcp/<YOUR_TRUTO_TOKEN>"
      ]
    }
  }
}
```

Save the file and restart Claude Desktop. The dualentry_agent will now appear as an available tool provider.

## DualEntry MCP Hero Tools

Truto automatically generates tools for every documented DualEntry endpoint, complete with rich descriptions and JSON Schema constraints. Here are six high-leverage hero tools your AI agents can use to automate accounting operations.

### create_a_dual_entry_public_contract

**Description:** Creates a new revenue recognition contract in DualEntry, including its performance obligations and recognition schedule.

**Usage Notes:** Revenue recognition is complex. A contract defaults to a specific status based on your payload. To skip strict validation initially, you must pass a draft status; otherwise, DualEntry requires all line items, customer IDs, and term IDs to be perfectly formatted. This tool is critical for onboarding new sales deals into your ASC 606 workflow.

> "Claude, create a new revenue recognition contract in DualEntry for customer ID 1099. The contract is for a 12-month software subscription starting today at $120,000 total. Save it in draft status so the revenue team can review the performance obligations before posting."

### update_a_dual_entry_contract_change_order_by_id

**Description:** Updates an existing change order on a DualEntry contract. Completing required fields transitions the change order from draft and applies the modifications.

**Usage Notes:** You cannot directly edit a posted contract that has milestones. You must use this tool to apply a change order. If a customer upgrades their tier mid-cycle, you will use this tool to modify the obligation arrays and set `apply_cumulative_catchup` to ensure the ledger balances correctly in the current period.

> "We just upsold the Acme Corp contract (CNTR-402). Update their draft change order (CO-881) to include the new 'Premium Support' obligation for $5,000. Apply cumulative catch-up for this month and mark the change order as complete."

### create_a_dual_entry_public_fixed_asset

**Description:** Creates a new fixed asset in DualEntry with multi-book depreciation schedules.

**Usage Notes:** You must supply the `depreciation_schedules` array covering at least the primary posting book. You need to provide the `asset_account_number`, `expense_account_number`, and `accumulation_account_number`. This tool turns a messy procurement spreadsheet into perfectly structured ERP assets.

> "Read this CSV of laptops we bought last week. For each one, create a fixed asset in DualEntry under company ID 2. Use our standard IT asset account 1500, expense account 6500, and accumulation account 1550. Set them up with a straight-line depreciation schedule over 36 months on the primary BOOK."

### list_all_dual_entry_schedules

**Description:** Lists chronological depreciation, disposal, and revaluation events for a specific fixed asset and depreciation book.

**Usage Notes:** Essential for financial forecasting. You must provide the `fixed_asset_number` and the `depreciation_book_id` (e.g., 'BOOK' or 'FEDERAL'). AI agents can use this tool to project future depreciation expenses across the entire fiscal year for budgeting purposes.

> "Pull the depreciation schedule for the new warehouse forklift (Asset FA-9011) for the FEDERAL tax book. Summarize the expected depreciation expense for Q3 and Q4 of this year."

### create_a_dual_entry_public_journal_entry

**Description:** Creates a manual journal entry in DualEntry.

**Usage Notes:** This tool requires careful balancing of debits and credits. You must provide the `currency_iso_4217_code`, `exchange_rate` (even if it is 1.0 for base currency), and the line items. Set `record_status` to `draft` if you want a human to review the entry before it posts to the ledger.

> "I need to record an accrual for our upcoming legal fees. Create a draft journal entry for $15,000 debiting Legal Expenses and crediting Accrued Liabilities. Use today's date and add a memo indicating it is for the pending trademark litigation."

### create_a_dual_entry_public_intercompany_journal_entry

**Description:** Creates an intercompany journal entry in DualEntry, requiring lines to span at least two distinct companies with balancing debits and credits.

**Usage Notes:** Standard journal entries cannot cross entity boundaries. This specific tool handles multi-entity accounting. If the US parent company pays a vendor on behalf of the UK subsidiary, this tool automatically handles the due-to/due-from clearing accounts. 

> "The US entity (Company ID 1) just paid a $40,000 AWS bill that actually belongs to the UK entity (Company ID 2). Create an intercompany journal entry to expense the $40,000 to the UK entity's cloud infrastructure account, and credit the US entity's cash account. Handle the intercompany clearing automatically."

To view the complete schema for these tools, rate limits, and the remaining DualEntry tool inventory, visit the [DualEntry integration page](https://truto.one/integrations/detail/dualentry).

## Workflows in Action

Exposing individual tools is helpful, but the real power of MCP is enabling Claude to [orchestrate complex, multi-step financial workflows automatically](https://truto.one/connect-dualentry-to-ai-agents-orchestrate-ap-ar-bank-matching/). Here is how Claude chains DualEntry tools together in the real world.

### Workflow 1: Multi-Entity Expense Reclassification

Finance teams waste hours moving expenses between subsidiaries. An AI agent can handle this instantly.

> "Claude, check the latest bills for our US entity. I think the recent $12,000 marketing agency bill was coded entirely to the US, but it should be split 50/50 with the Canadian entity. If you find it, reclassify it using an intercompany journal entry."

**Step-by-step execution:**
1. Claude calls `list_all_dual_entry_public_bills` with a filter for the US company ID and recent dates to find the $12,000 marketing bill.
2. Claude extracts the exact expense account and vendor details from the bill response.
3. Claude calls `create_a_dual_entry_public_intercompany_journal_entry`.
4. It constructs a complex payload: crediting the US marketing expense account for $6,000, debiting the Canadian marketing expense account for $6,000, and ensuring the `company_id` fields are distinct for both lines to trigger the automated intercompany clearing.

**Result:** The user gets a confirmation that the bill was identified and the corresponding intercompany entry (e.g., ICJE-409) has been successfully posted to balance the books.

### Workflow 2: Month-End Revenue Catch-Up

Managing subscription upgrades mid-month requires exact proration and revenue catch-up calculations.

> "Claude, our customer TechFlow just upgraded to the Enterprise tier mid-contract. Their contract ID is CNTR-118. Create a change order to add the new Enterprise license obligation, apply the cumulative catch-up to this month, and show me the updated revenue schedule."

**Step-by-step execution:**
1. Claude calls `get_single_dual_entry_public_contract_by_id` to inspect CNTR-118 and identify the active obligations.
2. Claude calls `create_a_dual_entry_contract_change_order` passing the `contract_id` and the new obligation details, setting `apply_cumulative_catchup` to `true`.
3. Claude receives the successfully created change order ID.
4. Claude calls `list_all_dual_entry_contract_usages` (or checks the change order summary) to pull the newly recalculated revenue recognition schedule.

```mermaid
sequenceDiagram
    participant Claude as Claude Desktop
    participant MCP as Truto MCP Server
    participant DualEntry as DualEntry API

    Claude->>MCP: Call get_single_dual_entry_public_contract_by_id
    MCP->>DualEntry: GET /v1/contracts/CNTR-118
    DualEntry-->>MCP: Return contract state & obligations
    MCP-->>Claude: JSON response
    Claude->>MCP: Call create_a_dual_entry_contract_change_order
    MCP->>DualEntry: POST /v1/contracts/CNTR-118/change-orders
    DualEntry-->>MCP: HTTP 201 (CO-992 Created)
    MCP-->>Claude: Return Change Order JSON
```

**Result:** Claude outputs a summary of the change order, confirms the catch-up amount that will hit the current period ledger, and presents a table of the revised future recognition dates.

## Security and Access Control

Giving AI models access to your general ledger requires strict boundaries. Truto provides enterprise-grade access controls for your MCP servers:

*   **Method Filtering:** You can restrict a server to read-only operations by passing `methods: ["read"]` during creation. This ensures Claude can only query budgets and read schedules, absolutely preventing the model from posting journal entries or creating bills.
*   **Tag Filtering:** Limit the server's scope to specific domains. By passing `tags: ["fixed_assets"]`, the MCP server will hide all revenue recognition, banking, and payable tools, restricting the agent to depreciation tasks only.
*   **API Token Authentication:** By default, possessing the Truto MCP URL grants access. By enabling `require_api_token_auth: true`, the MCP client must also pass a valid Truto API token in the `Authorization` header, adding a strict secondary identity check.
*   **Automatic Expiration:** You can set an `expires_at` timestamp when generating the server. Once the timestamp is reached, Truto automatically destroys the token and triggers a cleanup alarm, ensuring temporary auditing agents do not have perpetual ledger access.
*   **Factual Note on Rate Limits:** Truto does not retry, throttle, or apply backoff on rate limit errors. When the upstream DualEntry API returns an HTTP 429, Truto passes that error directly to the caller. Truto normalizes the upstream rate limit info into standardized headers (`ratelimit-limit`, `ratelimit-remaining`, `ratelimit-reset`) per the IETF spec. Your MCP client or agent orchestrator is entirely responsible for implementing retry and backoff logic.

## The Future of Agentic ERP Operations

The month-end close does not have to be a manual nightmare of spreadsheet reconciliations and data entry. By connecting Claude to DualEntry via a managed MCP server, you transform your ERP from a static database into an active participant in your finance operations. 

Instead of asking financial controllers to manually calculate cumulative revenue catch-ups or book complex multi-entity journal entries, AI agents can execute these domain-specific operations safely, deterministically, and with full audit trails. Stop maintaining brittle integration scripts and start giving your AI the tools it needs to automate the back office.
