New Feature

Talk to QuickBooks
with your AI assistant

Syntra ODBC includes a built-in MCP server that lets Claude, Cursor, Windsurf, and any MCP-compatible tool directly query and manage your QuickBooks data through natural language.

Claude + QuickBooks via MCP
You:  Adjust CUSTOM ITEM 3 to 500 pcs as of today

Claude: Let me check the current quantity first.

→ query (SELECT quantity_on_hand FROM item_inventories WHERE ...)

Current quantity_on_hand for CUSTOM ITEM 3: 615 pcs
Adjustment needed: -115 pcs

I'll post one inventory adjustment with the line item in a single call:

→ insert_record(table="inventory_adjustments", data={
    "account_ref_list_id": "...",
    "txn_date": "2026-04-07",
    "memo": "Adjust CUSTOM ITEM 3 to 500 pcs",
    "_lines": [{
      "item_ref_list_id": "80000042-...",
      "quantity_difference": -115
    }]
  })

✓ Inventory adjustment posted (TxnID: FE89-1775585430)
✓ Verified: CUSTOM ITEM 3 now shows 500 pcs on hand

Two ways to connect

Choose the mode that fits your workflow. Both use the same engine. Cache, live reads, and query routing all work automatically.

stdio mode

Zero config

AI tools spawn syntra-odbc.exe --mcp-stdio as a subprocess. No server needed, instant connection.

Best for

Claude Code, Cursor, Windsurf, VS Code extensions

SSE / HTTP mode

Network accessible

When the GUI is running, an MCP endpoint serves on port 5434 (configurable). Toggle on/off from the Settings tab.

Best for

Web-based tools, remote connections, multi-user setups

24 AI tools exposed

Every tool your AI needs to discover, query, report on, and write to QuickBooks data.

Discovery

list_tables

Discover all 120+ QuickBooks entity tables, including line tables and singletons

describe_table

Get column definitions, types, writability, and required-for-insert flags for any table

accounting_guide

Built-in QuickBooks knowledge base. 19 topics including sales, ar, ap, inventory, payroll, financial_statements, reconciliation, multi_currency, and report_parity

Querying

query

Run any SQL query: SELECT, JOIN, aggregate, filter, group, window functions

Built-in reports

customer_balance

Open balances by customer, optionally filtered to one customer name

net_sales_by_period

Net sales matching QuickBooks "Sales by Customer Summary": invoices + sales receipts + statement charges - credit memos. Requires start_date and end_date; grouped monthly, quarterly, or yearly

profit_and_loss

Income and expense report grouped by account, with home-currency totals. Accepts start_date and end_date

balance_sheet

Assets, liabilities, and equity grouped by account type. Accepts an optional as_of_date (uses current balances)

trial_balance

Account-level debits and credits for verification and tie-out. Accepts an optional as_of_date

ar_aging_report

AR aging from invoices and statement charges, bucketed Current / 1-30 / 31-60 / 61-90 / 90+

ap_aging_report

AP aging from open bills, bucketed Current / 1-30 / 31-60 / 61-90 / 90+

Writing

insert_record

Create new records. Supports nested _lines arrays for invoices, bills, inventory adjustments, journal entries, and every other line-bearing transaction in one call. Accepts a single object or an array of parents

update_record

Modify existing records by SQL WHERE clause, with automatic edit-sequence handling

delete_record

Delete records by ID (ListID or TxnID)

void_transaction

Void invoices, checks, bill payments, sales receipts, and credit memos

preview_journal_entry

Validate accounts and preview debit/credit entries before creating, ensuring debits equal credits

Status

cache_status

Check per-entity sync freshness and last sync timestamps

connection_status

View QB connection state, company file, edition, and QBXML version

Memory

get_customer_context

Load aliases, profile, and recent decisions for one customer in a single call. Use at the start of AR workflows

get_vendor_context

Load aliases, profile, and recent decisions for one vendor in a single call. Use at the start of AP workflows (bill booking, statement reconciliation)

learn_customer_line_alias

Remember that a specific customer PO line text maps to an internal item. Idempotent upsert

learn_vendor_line_alias

Remember that a specific vendor invoice line text maps to an internal inventory item. Normalization (lowercase + whitespace) happens server-side

recall_facts

Search scoped key-value facts using SQL LIKE patterns. Call at the start of unfamiliar workflows to see what is already known

record_fact

Persist a scoped key-value fact across sessions (naming conventions, per-vendor defaults, data quality observations, etc.). Upsert on (scope, key)

MCP Resources

Table catalog

qb://schema/tables

Per-table schema

qb://schema/{table}

Cache health

qb://status/cache

Connection info

qb://status/connection

Accounting overview

qb://accounting/overview

Accounting topic list

qb://accounting/topics

Accounting query patterns

qb://accounting/query-patterns

Per-topic guide

qb://accounting/topic/{topic}

What you can do

Just tell your AI what you need. It handles the SQL, the schema lookups, and the writes.

Accounting

"We paid $500 for office supplies with the company credit card. Book it"

Claude looks up your chart of accounts, proposes the journal entry (debit Office Supplies, credit Credit Card), shows you the debit/credit table via preview_journal_entry, then creates the parent + both lines in a single insert_record call.

Inventory

"Adjust CUSTOM ITEM 3 to 500 pcs as of today"

Claude reads the current quantity_on_hand, computes the difference, and posts an inventory adjustment with the correct line item in one insert_record call. No two-step parent-then-line dance.

Multi-line invoicing

"Bill Acme for 4 hours of consulting at $150 plus a $75 travel charge"

Claude builds an invoice payload with two _lines (Hours x 4 @ $150, Travel x 1 @ $75) and posts it in a single call. The header and lines are emitted in qbXML schema order automatically.

Reporting

"What were our net sales last quarter?"

Claude calls net_sales_by_period, which sums invoices + sales receipts + statement charges - credit memos to match QuickBooks "Sales by Customer Summary" exactly. Statement charges are easy to forget; the tool includes them automatically.

AR Analysis

"What's our accounts receivable aging?"

Claude calls ar_aging_report, which ages both invoices and statement charges (the kind people overlook), bucketed 0-30 / 31-60 / 61-90 / 90+ days, with home-currency totals.

Data lookup

"What's the email for customer Acme Corp?"

Claude queries the customers table with a name filter and returns the contact info instantly.

What's new

Two big additions to the MCP server: structured nested-line inserts and a built-in accounting knowledge layer.

New

Nested-line inserts

Create a parent transaction and all of its line items in a single insert_record call. Pass a _lines array alongside the header fields and the MCP server emits one qbXML *Add request with every line nested correctly.

Works for

Invoices, sales receipts, credit memos, bills, inventory adjustments, journal entries, estimates, sales orders, purchase orders, build assemblies

Bonus

Pass an array of parents to insert multiple transactions in one call. Each parent has its own _lines.

New

Built-in accounting knowledge

The server's instructions and the accounting_guide tool encode QuickBooks-specific rules that are not derivable from describe_table. Reports and writes use the same formulas QuickBooks does, not LLM guesses.

19 knowledge topics

ar, ap, chart_of_accounts, sales, sales_tax, pricing, multi_currency, inventory, job_costing, payroll, journal_entries, entity_relationships, gotchas, financial_statements, transaction_universe, amount_fields, report_parity, nested_inserts, reconciliation

Example

Net sales = invoices + sales_receipts + statement_charges (from charges) - credit_memos. The server pulls statement charges automatically, matching the QuickBooks "Sales by Customer Summary" report exactly.

Set up in 30 seconds

Add this to your AI tool's MCP config and you're done.

Option 1

stdio mode — Claude Code, Cursor, Windsurf

Your AI tool spawns syntra-odbc.exe as a subprocess. No server to start, no port to manage. Add this to your MCP settings file:

{
  "mcpServers": {
    "quickbooks": {
      "command": "syntra-odbc.exe",
      "args": ["--mcp-stdio"]
    }
  }
}
Option 2

HTTP / SSE mode — web tools, remote, multi-user

When the Syntra ODBC GUI is running, an HTTP MCP endpoint is exposed on port 5434. The endpoint speaks the MCP Streamable HTTP transport (SSE-compatible). Enable it once in config.toml (or via the GUI Settings tab):

[mcp]
enabled = true
host = "127.0.0.1"
port = 5434

Then point your AI tool's MCP config at the URL. The same JSON works for Claude Code, Cursor, Windsurf, Claude Desktop, and any client that supports the Streamable HTTP transport:

{
  "mcpServers": {
    "quickbooks": {
      "type": "http",
      "url": "http://127.0.0.1:5434/"
    }
  }
}

Tip: The HTTP endpoint binds to 127.0.0.1 by default. To allow connections from another machine on your LAN, set host = "0.0.0.0" in config.toml and replace 127.0.0.1 in the client URL with the host's IP. Use TLS or an SSH tunnel if you do this on an untrusted network.

GUI users: The Settings tab has an "MCP Server" section with an enable/disable toggle and port configuration. No file editing needed.

Under the hood

Built on the official MCP SDK from the Model Context Protocol maintainers

Two transports: stdio (subprocess mode) + Streamable HTTP/SSE (network mode)

Shared engine: Same SessionContext, cache, and QB COM session as the SQL server, with no resource duplication

All 120+ entities accessible, including transactions, master data, singletons, and line items

Full DML: INSERT, UPDATE, DELETE, VOID through the same battle-tested pipeline, with structured nested-line inserts for every line-bearing transaction type

Schema-order safety: Header and line fields are emitted in qbXML <xsd:sequence> order automatically. No more cryptic 0x80020009 parse errors from out-of-order elements.

Report parity: Built-in reports (sales, AR/AP aging, P&L, balance sheet, trial balance) match the formulas of the corresponding QuickBooks reports, including statement charges in sales and AR.

Preview before commit: preview_journal_entry validates accounts and checks debits = credits before any write

Works with any MCP-compatible tool

Claude Code Claude Desktop Cursor Windsurf VS Code JetBrains Gemini CLI

Let AI handle your QuickBooks workflows

Download Syntra ODBC and connect your AI assistant in 30 seconds.

Download Free Trial