Skip to main content
Glama
vespo92

QBO-MCP-TS

by vespo92

QuickBooks Online MCP Server

A production-ready, modular Model Context Protocol (MCP) server for QuickBooks Online integration. Built with TypeScript, designed for accountants, with comprehensive automation features and real-time capabilities.

๐Ÿš€ Features

Core Capabilities

  • โœ… Modular Architecture - Extensible tool and service system

  • โœ… Full CRUD Operations - Invoices, expenses, customers, payments

  • โœ… Financial Reporting - P&L, Balance Sheet, Cash Flow, AR/AP Aging

  • โœ… Real-Time Updates - SSE transport and QuickBooks webhooks

  • โœ… Workflow Automation - Rule-based automation engine

  • โœ… Multi-Company Support - Manage multiple QBO companies

  • โœ… Production-Ready - Comprehensive error handling, caching, rate limiting

Automation Features

  • ๐Ÿ”„ Recurring Invoices - Automated invoice generation (daily โ†’ yearly)

  • ๐Ÿ“ง Payment Reminders - Smart follow-up sequences (4-tier system)

  • ๐Ÿค– Workflow Engine - Conditional rules and automated actions

  • ๐Ÿ“Š Scheduled Reports - Automated report generation and distribution

Developer Experience

  • ๐Ÿงช Testing Infrastructure - Jest with comprehensive test utilities

  • ๐Ÿ“ TypeScript Strict Mode - Complete type safety

  • ๐Ÿ” Extensive Logging - Structured logging with context

  • ๐Ÿ“š Comprehensive Documentation - Examples and guides

Related MCP server: QuickBooks Online MCP Server

๐Ÿ“ฆ Installation

# Clone the repository
git clone https://github.com/vespo92/QBO-MCP-TS.git
cd QBO-MCP-TS

# Install dependencies
npm install

# Set up environment variables
cp .env.example .env
# Edit .env with your QuickBooks credentials

# Build
npm run build

# Run
npm start

๐Ÿ”ง Configuration

Environment Variables

# QuickBooks OAuth
CLIENT_ID=your_client_id
CLIENT_SECRET=your_client_secret
COMPANY_ID=your_company_id
REFRESH_TOKEN=your_refresh_token

# Environment
QBO_ENVIRONMENT=sandbox  # or 'production'
NODE_ENV=development

# SSE Transport (optional)
SSE_PORT=3100
SSE_HOST=localhost

# Webhook Receiver (optional)
WEBHOOK_PORT=3200
WEBHOOK_VERIFIER_TOKEN=your_webhook_token

# Cache Settings
CACHE_TTL=300
CACHE_MAX_SIZE=100
ENABLE_CACHE=true

# API Settings
RETRY_ATTEMPTS=3
RETRY_DELAY=1000
TIMEOUT=30000
RATE_LIMIT=60

# Redis (optional)
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0

๐Ÿ› ๏ธ Available Tools

Invoice Management

  • get_invoices - Query invoices with filtering

  • create_invoice - Create invoices with line items

  • send_invoice - Email invoices to customers

Expense Management

  • get_expenses - Query expenses with filtering

  • create_expense - Create expenses with auto vendor/account lookup

Customer Management

  • get_customers - Query and search customers

  • get_customer_balance - Get balance details with overdue tracking

Financial Reporting

  • get_profit_loss - Profit & Loss statements

  • get_balance_sheet - Balance Sheet reports

  • get_cash_flow - Cash Flow statements

  • get_ar_aging - Accounts Receivable aging

  • get_ap_aging - Accounts Payable aging

Utilities

  • get_api_status - Server health and metrics

๐Ÿ“– Usage Examples

Create an Invoice

{
  "tool": "create_invoice",
  "params": {
    "customerName": "Acme Corp",
    "items": [
      {
        "description": "Web Design Services",
        "amount": 2500,
        "quantity": 1
      },
      {
        "description": "Hosting (1 year)",
        "amount": 600,
        "quantity": 1
      }
    ],
    "dueDate": "net 30",
    "emailToCustomer": true
  }
}

Query Overdue Invoices

{
  "tool": "get_invoices",
  "params": {
    "status": "overdue",
    "dateFrom": "this year",
    "dateTo": "today"
  }
}

Generate Profit & Loss Report

{
  "tool": "get_profit_loss",
  "params": {
    "startDate": "this quarter",
    "endDate": "today",
    "accountingMethod": "Accrual",
    "summarizeBy": "Month"
  }
}

๐Ÿ”„ Automation Setup

Recurring Invoices

import { automationService } from './services/automation.service';

const scheduleId = await automationService.createRecurringInvoice({
  customerId: '123',
  lineItems: [
    { description: 'Monthly Retainer', amount: 5000 }
  ],
  frequency: 'monthly',
  startDate: new Date('2025-01-01'),
  dueInDays: 30,
  autoSend: true
});

Workflow Rules

import { workflowService } from './services/workflow.service';

workflowService.addRule({
  id: 'auto-approve-small-expenses',
  name: 'Auto-approve small expenses',
  enabled: true,
  trigger: 'expense:submitted',
  conditions: [
    { field: 'TotalAmt', operator: 'lt', value: 100 },
    { field: 'category', operator: 'in', value: ['Office Supplies'] }
  ],
  actions: [
    { type: 'approve', notify: 'submitter' },
    { type: 'broadcast_event', eventType: 'expense:auto_approved' }
  ]
});

๐ŸŒ Real-Time Features

Server-Sent Events (SSE)

Start the SSE server for real-time client updates:

import { getSSETransport } from './transports/sse.transport';

const sse = getSSETransport();
await sse.start();

// Events automatically broadcast:
// - invoice:created, invoice:updated, invoice:paid
// - payment:received
// - expense:created
// - customer:created
// - report:ready
// - webhook:received

QuickBooks Webhooks

Receive real-time notifications from QuickBooks:

import { getWebhookReceiver } from './webhooks/receiver';

const webhooks = getWebhookReceiver({
  port: 3200,
  verifierToken: process.env.WEBHOOK_VERIFIER_TOKEN
});

// Register handlers
webhooks.on('invoice:create', async (data) => {
  console.log('Invoice created:', data.id);
  // Cache invalidation, notifications, etc.
});

await webhooks.start();

๐Ÿข Multi-Company Support

Manage multiple QuickBooks companies:

import { multiCompanyService } from './services/multi-company.service';

// Add companies
await multiCompanyService.addCompany('company1', {
  name: 'Acme Corp',
  config: { /* QBO config */ }
});

await multiCompanyService.addCompany('company2', {
  name: 'XYZ Inc',
  config: { /* QBO config */ }
});

// Switch between companies
multiCompanyService.setActiveCompany('company1');
const invoices = await invoiceService.getInvoices();

multiCompanyService.setActiveCompany('company2');
const expenses = await expenseService.getExpenses();

๐Ÿ’พ Redis Cache (Optional)

Enable Redis for distributed caching:

import { createRedisCacheService } from './services/cache-redis.service';

const cache = await createRedisCacheService({
  host: 'localhost',
  port: 6379,
  keyPrefix: 'qbo:',
  enableFallback: true  // Falls back to in-memory if Redis unavailable
});

// Automatically used by all services

๐Ÿงช Testing

# Run all tests
npm test

# Run tests in watch mode
npm run test:watch

# Run tests with coverage
npm run test:coverage

Writing Tests

import { createMockInvoice, MockQBOApiClient } from './test-utils';

describe('InvoiceService', () => {
  it('should create invoice', async () => {
    const mockClient = new MockQBOApiClient();
    const service = new InvoiceService(mockClient);

    const invoice = await service.createInvoice({
      customerName: 'Test Customer',
      lineItems: [{ description: 'Test', amount: 100 }]
    });

    expect(invoice.Id).toBeDefined();
  });
});

๐Ÿ“Š Architecture

Service Layer

  • InvoiceService - Invoice operations and AR aging

  • ExpenseService - Expense management with vendor lookup

  • ReportService - 15+ financial reports with PDF export

  • CustomerService - Customer management and balance tracking

  • PaymentService - Payment recording and application

  • AutomationService - Recurring invoices and payment reminders

  • WorkflowService - Rule-based automation engine

Tool System

  • BaseTool - Abstract base with automatic validation

  • ToolRegistry - Auto-discovery and registration

  • Modular Structure - Each tool is self-contained

Transport Layer

  • SSE Transport - Real-time server-to-client streaming

  • Webhook Receiver - QuickBooks event notifications

  • STDIO Transport - Standard MCP communication

๐Ÿ”’ Security

  • โœ… OAuth 2.0 with automatic token refresh

  • โœ… HMAC-SHA256 webhook signature verification

  • โœ… Replay attack prevention

  • โœ… Input validation with Zod schemas

  • โœ… Sensitive data sanitization in logs

  • โœ… Rate limiting and request queuing

๐Ÿ“ˆ Performance

  • โœ… Multi-tier caching (in-memory + optional Redis)

  • โœ… Request queuing to prevent API throttling

  • โœ… Exponential backoff retry logic

  • โœ… Batch operations where possible

  • โœ… Lazy service initialization

๐Ÿ› Error Handling

50+ predefined errors with actionable suggestions:

{
  code: 'QBO_AUTH_001',
  message: 'Your QuickBooks session has expired',
  suggestion: 'Refreshing authentication automatically...',
  recoverable: true,
  severity: 'warning'
}

Automatic retry for recoverable errors:

  • Token refresh failures

  • Rate limit exceeded

  • Network timeouts

  • Transient errors

๐Ÿ“š Documentation

  • FEATURES.md - Comprehensive feature documentation

  • ACCOUNTANT_NEEDS_RESEARCH.md - Accountant requirements research

  • IMPLEMENTATION_PLAN.md - Technical roadmap

  • API Examples - See examples/ directory

๐Ÿค Contributing

Contributions are welcome! Please:

  1. Fork the repository

  2. Create a feature branch

  3. Add tests for new features

  4. Ensure all tests pass

  5. Submit a pull request

๐Ÿ“ License

MIT License - see LICENSE file for details

๐Ÿ™ Acknowledgments

๐Ÿ“ž Support

  • Issues: GitHub Issues

  • Documentation: See docs in repository

  • API Reference: See FEATURES.md


Made with โค๏ธ for accountants who want to automate their workflows

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

โ€“Maintainers
โ€“Response time
0dRelease cycle
2Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    Enables interaction with the QuickBooks Online Accounting API to manage customers, invoices, expenses, and payments through MCP-compatible clients. It supports comprehensive financial workflows and the generation of reports like Profit and Loss or Balance Sheets.
    Last updated
    100
    2
    Apache 2.0
  • A
    license
    -
    quality
    B
    maintenance
    Enables full CRUD operations on 29 QuickBooks Online entity types and 11 financial reports via natural language, allowing users to manage customers, invoices, payments, and more through MCP-compatible clients.
    Last updated
    Apache 2.0

View all related MCP servers

Related MCP Connectors

  • QuickBooks MCP Pack โ€” query customers, invoices, and accounts via QuickBooks Online API.

  • QuickBooks Online for Claude: reports, bookkeeping cleanup, and US & Canadian tax prep.

  • Financial & accounting management on Omie (Brazil's leading cloud ERP), payables/receivables, financ

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/vespo92/QBO-MCP-TS'

If you have feedback or need assistance with the MCP directory API, please join our Discord server