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.
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.
"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.
"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.
"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.
"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.
"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.
"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.
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.
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.
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"]
}
}
} 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
Let AI handle your QuickBooks workflows
Download Syntra ODBC and connect your AI assistant in 30 seconds.
Download Free Trial