Connect AccountsIQ to Claude: Manage AR/AP, Invoicing & Suppliers
Learn how to connect AccountsIQ to Claude using Truto's managed MCP server. Map JSON-RPC to SOAP, execute AR/AP workflows, and secure financial AI agents.
If you need to connect AccountsIQ to Claude to automate accounts payable, generate invoices, reconcile trial balances, or manage your supplier ledger, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between Claude's modern JSON-RPC tool calls and AccountsIQ's legacy SOAP API infrastructure. You can either build and maintain this SOAP-to-JSON integration layer yourself, or use a managed platform like Truto to dynamically generate a secure, authenticated MCP server URL in seconds.
If your team uses ChatGPT, check out our guide on /connect-accountsiq-to-chatgpt-automate-financials-gl-journals/ or explore our broader architectural overview on /connect-accountsiq-to-ai-agents-sync-stock-orders-operations/.
Giving a Large Language Model (LLM) read and write access to a core financial ERP like AccountsIQ is an engineering challenge. You have to map flat JSON tool calls into deeply nested SOAP 1.1 XML envelopes, handle multi-step ledger commit processes, and continuously manage integration credentials.
This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for AccountsIQ, connect it natively to Claude, and execute complex financial workflows using natural language.
The Engineering Reality of the AccountsIQ 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 a legacy financial system like AccountsIQ is painful. AccountsIQ is a highly robust ERP, but its API architecture requires strict adherence to enterprise design patterns.
If you decide to build a custom AccountsIQ MCP server, here are the specific integration challenges you will face:
The SOAP 1.1 XML Envelope Translation
AccountsIQ does not expose a modern, RESTful JSON API. Operations are exposed via SOAP 1.1 endpoints. Every request must be wrapped in a specific XML envelope with a strict namespace (http://www.visorsoftware.com/visor/accountsiq/dashboard/Integration/). LLMs are notoriously bad at generating perfectly formatted, nested XML envelopes with correct header injections. Your MCP server must act as a translation layer, taking flat JSON arguments from Claude and safely marshaling them into valid soap:Body payloads, while injecting the required AiqSoapHeader and SOAPAction automatically.
Multi-Step Ledger Commits (Save vs. Post)
In AccountsIQ, creating a financial record is rarely a single API call. If an LLM needs to create a supplier invoice, it cannot just call a "Create Invoice" endpoint. It must first call a "Save" operation (e.g., SaveInvoiceGetBackInvoiceID) to create a draft record in the system and return the internal integer ID. Then, it must call a "Post" operation (e.g., PostInvoice) passing that exact ID to commit the transaction to the ledger. If the LLM lacks the context of this two-step process, it will leave unposted drafts cluttering your ERP.
Session Token Injection
AccountsIQ requires authentication via a TokenGet SOAP operation, which returns a session token. This token must be explicitly passed as a <token> element within the body of almost every subsequent XML envelope. Managing this token lifecycle, handling expirations, and ensuring the LLM doesn't accidentally hallucinate an invalid token string requires a dedicated middleware layer. A managed MCP server abstracts this completely - it handles the session refresh and injects the token into the empty <token> node before the request hits the AccountsIQ API.
Creating the AccountsIQ MCP Server
Truto dynamically generates MCP tools based on the underlying API documentation and resources available for your connected AccountsIQ instance. You can provision an MCP server for AccountsIQ either through the Truto UI or programmatically via the API.
Method 1: Via the Truto UI
If you prefer a visual setup, you can generate your MCP server URL directly from the dashboard:
- Navigate to the Integrated Accounts page in your Truto dashboard.
- Select your connected AccountsIQ instance.
- Click on the MCP Servers tab.
- Click Create MCP Server.
- Select your desired configuration (e.g., filter by specific methods like
readorwrite, assign specific tool tags, or set an expiration date). - Click Generate and copy the provided MCP server URL (e.g.,
https://api.truto.one/mcp/a1b2c3d4e5f6...).
Method 2: Via the Truto API
For teams automating infrastructure, you can dynamically provision an MCP server by making a POST request to the Truto API. This returns a ready-to-use URL containing a cryptographically hashed token.
curl -X POST https://api.truto.one/integrated-account/{integrated_account_id}/mcp \
-H "Authorization: Bearer YOUR_TRUTO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "AccountsIQ Financial Agent MCP",
"config": {
"methods": ["read", "write", "custom"],
"require_api_token_auth": false
}
}'The API will return a JSON response containing the newly minted server URL:
{
"id": "mcp-789-xyz",
"name": "AccountsIQ Financial Agent MCP",
"config": {
"methods": ["read", "write", "custom"]
},
"expires_at": null,
"url": "https://api.truto.one/mcp/a1b2c3d4e5f6..."
}Connecting the MCP Server to Claude
Once you have your Truto MCP URL, connecting it to Claude is a straightforward process. Because Truto MCP servers are fully self-contained, the URL includes the necessary routing and authentication to access the specific AccountsIQ tenant.
Method 1: Via the Claude UI (Desktop or Web)
If you are using Claude's standard application interface, you can add the server in seconds:
- Open Claude and navigate to Settings.
- Select Integrations (or Connectors depending on your tier).
- Click Add MCP Server or Add custom connector.
- Paste the Truto MCP URL you generated earlier.
- Click Add.
Claude will immediately handshake with the server, request the tools/list, and populate its context window with the available AccountsIQ operations.
Method 2: Via Manual Configuration File (Claude Desktop)
If you are configuring Claude Desktop locally for development, you can add the Truto MCP server directly to your claude_desktop_config.json file. Truto provides an SSE (Server-Sent Events) transport wrapper that makes remote HTTP MCP servers compatible with Claude's local execution environment.
Edit your configuration file (typically located at ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"accountsiq_mcp": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sse",
"https://api.truto.one/mcp/a1b2c3d4e5f6..."
]
}
}
}Restart Claude Desktop. The application will initialize the connection, and the AccountsIQ tools (indicated by a hammer icon) will become available in your prompt interface.
AccountsIQ MCP Hero Tools
Truto auto-generates dozens of tools for AccountsIQ. Instead of dumping the entire inventory, here are six high-leverage "hero" tools that unlock the most powerful automated workflows for AR/AP and general ledger management.
1. accounts_iq_suppliers_get_active_list
This tool retrieves the complete list of active suppliers in the ERP. It is essential for AI agents processing accounts payable, as the agent must match incoming vendor invoices against valid supplier codes in AccountsIQ before drafting a transaction.
"Fetch the list of all active suppliers from AccountsIQ. I need to verify if 'Acme Office Supplies' has a valid supplier code before we process their latest PDF invoice."
2. accounts_iq_invoices_save_get_back_invoice_id
This operation creates a draft invoice in AccountsIQ and returns the generated internal integer ID. Because the LLM receives the invoiceID in the response payload, it can hold that state in context and pass it to subsequent posting or attachment operations.
"Create a new purchase invoice draft for supplier code 'ACME-001' with an invoice date of today. The net amount is 500 USD with a 10% tax rate. Return the generated invoice ID so we can post it to the ledger."
3. accounts_iq_invoices_post
Once a draft invoice is saved, it must be posted to impact the general ledger. This tool takes the invoiceID and executes the PostInvoice SOAP operation, finalizing the record.
"Post the invoice draft we just created (Invoice ID: 84729) to the general ledger to finalize the transaction."
4. accounts_iq_trial_balances_get_for_period
This tool fetches the trial balance for a specific financial period. It is invaluable for AI agents acting as financial controllers, allowing them to pull current balances, spot discrepancies, and prepare period-end reports without manual data exports.
"Get the trial balance for the period ending last month. Summarize the total debits and credits, and flag any accounts that appear to have abnormal balances."
5. accounts_iq_general_journals_create_general_journal
Agents can use this tool to post manual adjustments, accruals, or depreciation entries directly to the GL. The LLM handles mapping the debit and credit lines ensuring they balance before executing the tool.
"Create a new general journal entry to record monthly depreciation. Debit the Depreciation Expense account for 1,200 and credit Accumulated Depreciation for 1,200. Use today's date as the transaction date."
6. accounts_iq_orders_get_by_customer_code
This tool lists all sales orders associated with a specific customer account. AI agents can use this to answer status queries, calculate outstanding revenue, or verify order fulfillment details.
"Retrieve all recent orders for customer code 'TECH-552'. Summarize their total order volume over the last 90 days and list any orders that are still pending fulfillment."
To view the full list of available tools, including detailed JSON schema definitions for their arguments, visit the AccountsIQ integration page.
Workflows in Action
Individual tools are useful, but the real power of MCP emerges when Claude chains multiple tools together to execute complex, multi-step business processes autonomously.
Workflow 1: End-to-End Accounts Payable Processing
When a new vendor invoice arrives via email or a slack channel, the AI agent can autonomously log the liability in AccountsIQ.
"We just received an invoice from Global Tech Services for 2,500 USD. Check if they exist in AccountsIQ. If they do, create a new draft purchase invoice for them, and once created, post it to the ledger."
Execution Steps:
- Claude calls
accounts_iq_suppliers_get_active_listto fetch the supplier directory and searches the JSON response for "Global Tech Services" to find theirSupplierCode. - Claude calls
accounts_iq_invoices_save_get_back_invoice_id, passing theSupplierCode, amounts, and dates to create the draft invoice. It captures the returnedinvoiceID. - Claude calls
accounts_iq_invoices_postusing the capturedinvoiceIDto commit the invoice to the ledger.
sequenceDiagram
participant User as User
participant Claude as Claude Desktop
participant MCP as Truto MCP Server
participant AIQ as AccountsIQ API
User ->> Claude: "Process this Global Tech invoice..."
Claude ->> MCP: Call accounts_iq_suppliers_get_active_list
MCP ->> AIQ: POST SOAP Envelope (GetActiveSupplierList)
AIQ -->> MCP: Return WSResult (Supplier Data)
MCP -->> Claude: Return JSON-RPC Supplier List
Claude ->> MCP: Call accounts_iq_invoices_save_get_back_invoice_id
MCP ->> AIQ: POST SOAP Envelope (SaveInvoiceGetBackInvoiceID)
AIQ -->> MCP: Return Invoice ID
MCP -->> Claude: Return JSON-RPC Invoice ID
Claude ->> MCP: Call accounts_iq_invoices_post
MCP ->> AIQ: POST SOAP Envelope (PostInvoice)
AIQ -->> MCP: Return Status Success
MCP -->> Claude: Return JSON-RPC Success Status
Claude -->> User: "Invoice created and posted successfully."Workflow 2: Month-End Adjustment Automation
Financial controllers can use Claude to audit balances and immediately post required adjustments.
"Pull the trial balance for the current period. If the prepaid expenses account hasn't been amortized this month, draft and execute a general journal entry moving 500 from prepaid to the standard software expense account."
Execution Steps:
- Claude calls
accounts_iq_trial_balances_get_for_periodproviding the current date string. - Claude analyzes the returned trial balance data, specifically inspecting the balances of the prepaid expense and software expense GL accounts.
- Recognizing the missing amortization, Claude calls
accounts_iq_general_journals_create_general_journalwith a perfectly balanced debit/credit payload to record the expense.
Handling Rate Limits
When building automated AI workflows at scale, you will eventually hit API quotas. It is important to understand how rate limits are handled in this architecture.
Truto normalizes upstream rate limit information into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF spec. Truto does not retry, throttle, or apply backoff on rate limit errors. When the AccountsIQ API returns an HTTP 429 Too Many Requests error, Truto passes that error directly through the proxy to the caller. The MCP client or caller is solely responsible for catching these 429s, reading the normalized headers, and implementing appropriate retry and backoff logic to resume operations.
Security and Access Control
When exposing ERP data to an LLM, security and principle-of-least-privilege are paramount. Truto MCP servers provide several layers of access control out of the box:
- Cryptographic Token URLs: The server URL acts as a secure bearer token. Raw tokens are never stored; they are hashed before being written to the database and edge KV storage.
- Method Filtering: You can restrict a server to
readoperations only (blockingcreate,update,delete). This is ideal for analytics agents that should never alter financial data. - Tag Filtering: Restrict the exposed tools to a specific domain (e.g., only exposing tools tagged with
inventoryorsuppliers). - Time-to-Live (TTL): By setting the
expires_atfield during creation, the server will automatically self-destruct at a specific time. KV records are purged, and access is instantly revoked. - Dual Authentication: Enabling
require_api_token_authforces the MCP client to also pass a valid Truto API token in theAuthorizationheader, ensuring that possessing the URL alone is not enough to access the ERP.
Strategic Wrap-up
Connecting Claude to AccountsIQ transforms your LLM from a passive chat interface into an active financial controller. By leveraging Truto's managed MCP servers, you bypass the friction of SOAP-to-JSON mappings, XML envelope construction, and token lifecycle management. Your AI agents get immediate, structured access to the data and operations they need to execute complex AP, AR, and ledger workflows autonomously.
Stop writing custom XML parser code for legacy ERPs. Use documentation-driven tool generation to put your integration infrastructure on autopilot.
FAQ
- How do I create an AccountsIQ MCP server?
- You can create an AccountsIQ MCP server via the Truto dashboard under the MCP Servers tab, or programmatically via the Truto API by sending a POST request to `/integrated-account/{id}/mcp` with your desired access configuration.
- Does Truto handle the AccountsIQ SOAP XML requirements?
- Yes. Truto acts as a translation layer. It accepts flat JSON-RPC arguments from the Claude MCP client and automatically maps them into the required SOAP 1.1 XML envelopes, injecting the necessary AiqSoapHeader and session tokens.
- How does Truto handle AccountsIQ rate limits?
- Truto normalizes upstream rate limit data into standard IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset). Truto does not retry or absorb rate limits; HTTP 429 errors are passed directly to the caller, who must implement their own backoff logic.
- Can I limit the AI agent to read-only access in AccountsIQ?
- Yes. When generating the MCP server URL, you can configure method filters to only expose `read` operations, preventing the LLM from making any `create`, `update`, or `delete` calls against your ERP.