create_accountLABSCO SUMMARY
The agent never has to know a QuickBooks ID.
Name-to-ID resolution is the difference between a tool an assistant can use and one it fumbles: "invoice Acme Ltd" resolves without a search-then-call dance. The multi-tenant design is the other half — realm resolution and silent token refresh run as middleware, so once a user has authorised their company, every tool call carries the right context with zero extra parameters. What you are taking on is a Laravel app to host, which is the price of it being remote rather than local.
What it is
A Composer package for Laravel that exposes QuickBooks Online as an MCP server over HTTP. Because it is remote rather than local stdio, hosted AI clients can reach it, and one Laravel installation can serve several QBO companies.
What you get
- 50 tools across 11 QuickBooks entities: customers, vendors, invoices, bills, estimates, purchases, employees, items, accounts, journal entries and bill payments
- Each entity follows the same shape —
create_customer,get_customer,search_customers,update_customer,delete_customer, and the equivalents for bills, estimates and the rest create_bill_paymentpays one or more open bills;search_billsfilters by vendor, date range or unpaid status- Deletes match QuickBooks semantics:
delete_customerdeactivates (QBO's soft delete) whiledelete_billremoves permanently - Name-to-ID resolution means an agent passes human-readable names and the lookup happens for it
- A full OAuth 2.0 flow lets each of your SaaS users connect their own QBO company, with connections listed and revocable
Requirements
PHP 8.2 or higher and Laravel 11.x or higher, plus laravel/mcp ^1.0 and spinen/laravel-quickbooks-client ^4.0. composer require rajurayhan/laravel-quickbooks-mcp-server, publish the config, migrations and routes, and migrate — it creates one table. An Intuit app supplies QUICKBOOKS_CLIENT_ID, QUICKBOOKS_CLIENT_SECRET and QUICKBOOKS_REDIRECT_URI, with the callback registered at /quickbooks/callback. Your User model needs the HasQuickBooksToken trait, and an auth guard that resolves a Bearer token — Passport or Sanctum both work.
Setup effort
Follow the published steps — composer require rajurayhan/laravel-quickbooks-mcp-server
USE CASES
Raising an invoice from a conversation
Name the customer and the line items and let the lookup and the create happen for you.
Seeing what is still outstanding
Search bills by vendor, date range or unpaid status and read the totals back.
Paying open bills
Settle one or several in a single call rather than clicking through each.
Letting each customer connect their own books
Send them through the OAuth flow; the realm is resolved per request and tokens refresh silently.
50 tools
Listed in project docs. Your client may show a different list.
search_accountsupdate_accountcreate_billget_billsearch_billsupdate_billdelete_billcreate_bill_paymentget_bill_paymentsearch_bill_paymentsupdate_bill_paymentdelete_bill_paymentcreate_customerget_customersearch_customersupdate_customerdelete_customercreate_employeeget_employeesearch_employeesupdate_employeecreate_estimateget_estimatesearch_estimatesupdate_estimatedelete_estimatecreate_invoiceread_invoicesearch_invoicesupdate_invoicecreate_itemread_itemsearch_itemsupdate_itemcreate_journal_entryget_journal_entrysearch_journal_entriesupdate_journal_entrydelete_journal_entrycreate_purchaseget_purchasesearch_purchasesupdate_purchasedelete_purchasecreate_vendorget_vendorsearch_vendorsupdate_vendordelete_vendorBEFORE YOU INSTALL
What to know first
Tools you get
50 tools named in the project's documentation.
Requires
- QUICKBOOKS_CLIENT_ID in your environment
- QUICKBOOKS_CLIENT_SECRET in your environment
INSTALLATION
Connect your client
Server setup
composer require rajurayhan/laravel-quickbooks-mcp-serverPublish package assets: php artisan vendor:publish --tag=quickbooks-mcp-config, --tag=quickbooks-mcp-migrations, --tag=quickbooks-mcp-routes (or php artisan vendor:publish --provider="Raju\\QuickBooksMcp\\QuickBooksMcpServiceProvider")
Run migrations: php artisan migrate (creates the quickbooks_connections table)
Configure .env with the Intuit app credentials and MCP server settings
Register the published routes/quickbooks-mcp.php in AppServiceProvider::boot() or from routes/web.php / routes/api.php
Set the auth guard inside routes/quickbooks-mcp.php (auth:api → auth:sanctum if needed)
Register the OAuth callback URI <YOUR_SERVER_URL>/quickbooks/callback in the Intuit Developer app settings
Add the HasQuickBooksToken trait to your User model
Have each user connect their QuickBooks company: they open /quickbooks/connect on your app, approve access on Intuit's consent screen, and are sent back to /quickbooks/callback.
Configure the AI client with the MCP URL <YOUR_SERVER_URL>/mcp/quickbooks (the path is QBO_MCP_PATH) and the header Authorization: Bearer <YOUR_BEARER_TOKEN>, where the token is the Passport or Sanctum token your app issues to that user.