QBOMCP-TS is a production-ready TypeScript reimplementation of the QuickBooks Online MCP Server, featuring enhanced architecture, dual transport support (STDIO & SSE), comprehensive error handling, and enterprise-grade features like caching, retry logic, and rate limiting.
No installation required! Use directly with npx:
# Run with environment variables
QBO_CLIENT_ID="your_id" QBO_CLIENT_SECRET="your_secret" \
QBO_COMPANY_ID="your_company" QBO_REFRESH_TOKEN="your_token" \
npx qbo-mcp-ts
# Or use a .env file
npx qbo-mcp-ts --env-file /path/to/.env
# Start SSE server for web applications
npx qbo-mcp-ts --transport sse --port 3000- Zero Installation: Run directly without installing dependencies
- Always Latest: Automatically uses the latest published version
- No Global Pollution: Doesn't clutter your global npm packages
- Quick Testing: Perfect for trying out the server before committing
- CI/CD Friendly: Ideal for automated workflows and GitHub Actions
- Full TypeScript with strict type safety and comprehensive type definitions
- Modular architecture with clean separation of concerns
- Dual transport support: STDIO for local development, SSE for production
- Service-oriented design with dedicated services for caching, queuing, and API operations
- Intelligent caching with LRU eviction and persistent storage
- Queue management for API rate limiting and concurrent request handling
- Exponential backoff retry logic for transient failures
- Connection pooling and token refresh management
- Comprehensive error handling with specific error types and recovery strategies
- Natural language date parsing for all date inputs
- Comprehensive logging with request tracing and performance metrics
- Health check endpoints for monitoring
- Detailed API documentation with TypeScript types
- Jest test framework with unit and integration tests
- ESLint and Prettier for code quality
- SSE transport for web-based deployments
- CORS configuration for cross-origin requests
- Rate limiting to prevent abuse
- Graceful shutdown handling
- Docker support (coming soon)
- Kubernetes ready with health checks
- Node.js 18+ (for native fetch support)
- QuickBooks Online account (or sandbox account)
- Intuit Developer account
- OAuth2 credentials from Intuit
No installation needed! The package is available on npm:
# Create a .env file with your credentials
cat > .env << EOF
QBO_CLIENT_ID=your_client_id
QBO_CLIENT_SECRET=your_client_secret
QBO_COMPANY_ID=your_company_id
QBO_REFRESH_TOKEN=your_refresh_token
EOF
# Run the server
npx qbo-mcp-ts --env-file .env# Install globally
npm install -g qbo-mcp-ts
# Run from anywhere
qbo-mcp-ts --env-file /path/to/.envgit clone https://github.com/vespo92/QBO-MCP-TS.git
cd QBOMCP-TS
npm install
npm run buildAdd to your Claude Desktop config:
{
"mcpServers": {
"quickbooks": {
"command": "npx",
"args": ["qbo-mcp-ts"],
"env": {
"QBO_CLIENT_ID": "your_client_id",
"QBO_CLIENT_SECRET": "your_client_secret",
"QBO_COMPANY_ID": "your_company_id",
"QBO_REFRESH_TOKEN": "your_refresh_token"
}
}
}
}{
"mcpServers": {
"quickbooks": {
"command": "qbo-mcp-ts",
"args": [],
"env": {
"QBO_CLIENT_ID": "your_client_id",
"QBO_CLIENT_SECRET": "your_client_secret",
"QBO_COMPANY_ID": "your_company_id",
"QBO_REFRESH_TOKEN": "your_refresh_token"
}
}
}
}# Using npx
npx qbo-mcp-ts
# With environment file
npx qbo-mcp-ts --env-file .env
# With debug logging
npx qbo-mcp-ts --debug# Start SSE server on default port 3000
npx qbo-mcp-ts --transport sse
# Custom port
npx qbo-mcp-ts --transport sse --port 8080
# With environment file
npx qbo-mcp-ts --transport sse --env-file .env --port 3000SSE Endpoints:
- SSE Stream:
http://localhost:3000/sse - Health Check:
http://localhost:3000/health - Server Info:
http://localhost:3000/info - Available Tools:
http://localhost:3000/tools
npx qbo-mcp-ts [options]
Options:
--transport <type> Transport type: 'stdio' (default) or 'sse'
--port <number> Port for SSE server (default: 3000)
--env-file <path> Path to .env file with credentials
--debug Enable debug logging
--help Show help information
--version Show version numberget_invoices- Query invoices with natural language filterscreate_invoice- Create new invoicessend_invoice- Email invoices to customersget_invoice_aging- Generate AR aging reports
create_expense- Record business expensesget_expenses- Query expense transactions
profit_and_loss- Generate P&L statementsbalance_sheet- Generate balance sheetscash_flow- Cash flow analysis
get_customers- List and search customerscreate_customer- Add new customerscustomer_balance- Check customer balances
help- Get help on using the serverget_api_status- Check API connection and limits
// Get unpaid invoices from last month
{
"tool": "get_invoices",
"arguments": {
"status": "unpaid",
"dateFrom": "last month" // Understands "last month", "30 days ago", "Q1 2024", etc.
}
}
// Create and send invoice
{
"tool": "create_invoice",
"arguments": {
"customerName": "ABC Company",
"items": [
{
"description": "Consulting Services",
"amount": 5000
}
],
"dueDate": "30 days", // Understands "30 days", "net 30", "end of month"
"emailToCustomer": true
}
}QBOMCP-TS/
βββ src/
β βββ api/ # QuickBooks API client with retry logic
β βββ services/ # Business logic services
β β βββ cache.ts # LRU cache with persistence
β β βββ queue.ts # Rate limiting and queue management
β β βββ invoice.ts # Invoice operations
β βββ transports/ # MCP transport implementations
β β βββ stdio.ts # STDIO for local development
β β βββ sse.ts # SSE for production
β βββ utils/ # Utility functions
β β βββ config.ts # Configuration management
β β βββ logger.ts # Winston logger
β β βββ date-parser.ts # Natural language dates
β βββ types/ # TypeScript type definitions
β βββ server.ts # Main MCP server
β βββ index.ts # Entry point
βββ tests/ # Jest test suites
βββ logs/ # Application logs
βββ cache/ # Persistent cache storage
βββ dist/ # Compiled JavaScript
- OAuth2 token management with automatic refresh
- Input validation using Zod schemas
- Rate limiting to prevent API abuse
- CORS configuration for secure cross-origin requests
- Environment-based configuration (no hardcoded secrets)
- Comprehensive error handling without exposing sensitive data
- Intelligent caching reduces API calls by up to 80%
- Request queuing prevents rate limit errors
- Connection pooling for efficient resource usage
- Lazy loading of services and resources
- Optimized date parsing with memoization
- Batch operations support (coming soon)
# Run all tests
npm test
# Run with coverage
npm run test:coverage
# Watch mode for development
npm run test:watch# Start in development mode with hot reload
npm run dev
# Build the project
npm run build
# Run tests
npm run test
npm run test:watch # Watch mode
npm run test:coverage # With coverage
# Code Quality
npm run typecheck # Check TypeScript types
npm run lint # Run ESLint
npm run lint:fix # Auto-fix ESLint issues
npm run lint:strict # Fail on warnings
npm run format # Format with Prettier
npm run format:check # Check formatting
# Combined checks
npm run check:all # Run all checks (type, lint, format)
npm run fix:all # Fix all auto-fixable issuesThis project uses a comprehensive ESLint setup optimized for TypeScript MCP servers:
- TypeScript-aware rules for type safety and best practices
- Import ordering and organization rules
- Promise handling validation
- Security scanning for common vulnerabilities
- Node.js specific rules and optimizations
- Prettier integration for consistent formatting
- Warns on
anytypes to encourage type safety - Enforces proper async/await patterns
- Validates error handling practices
- Checks for security issues (eval, non-literal fs operations)
- Maintains import organization and naming conventions
- Enforces code complexity limits (configurable warnings)
When the project is added to a Git repository, pre-commit hooks will automatically:
- Run ESLint on staged TypeScript files
- Format code with Prettier
- Prevent commits with linting errors
To set up hooks after initializing Git:
npx husky init- Use functional programming patterns where appropriate
- Prefer
constoverlet, never usevar - Use template literals for string concatenation
- Implement proper error types and handling
- Add JSDoc comments for public APIs
- Keep functions focused and under 150 lines
- Maximum file length of 500 lines (warning)
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY dist ./dist
EXPOSE 3000
CMD ["node", "dist/index.js", "--transport", "sse"]Full TypeScript definitions are available in src/types/index.ts. The server
provides comprehensive type safety for all operations.
Contributions are welcome! Please see the original CONTRIBUTING.md for guidelines.
MIT License - See LICENSE file for details.
| Feature | QBOMCP (Python) | QBOMCP-TS (TypeScript) |
|---|---|---|
| Language | Python 3.8+ | TypeScript 5.3+ |
| Transport | STDIO only | STDIO + SSE |
| Type Safety | Runtime checks | Compile-time + Runtime |
| Caching | None | LRU with persistence |
| Retry Logic | Basic | Exponential backoff |
| Rate Limiting | None | Queue-based management |
| Logging | Basic | Structured with levels |
| Error Handling | Basic | Comprehensive with types |
| Testing | None | Jest with coverage |
| Production Ready | Development | Production-grade |
| Performance | Good | Optimized with caching |
| Monitoring | None | Health checks + Metrics |
- βοΈ Get QuickBooks OAuth2 credentials from Intuit Developer
- βοΈ Create a
.envfile with your credentials - βοΈ Run
npx qbo-mcp-ts --env-file .envto test - βοΈ Add to Claude Desktop config (see above)
- βοΈ Start using natural language to manage invoices!
- Core invoice management
- Dual transport support
- Caching and queue management
- Comprehensive error handling
- npm package with npx support
- Complete expense tracking
- Full financial reports
- Customer management
- Batch operations
- WebSocket transport
- Docker deployment
- Kubernetes manifests
- OAuth2 flow UI
- Multi-company support
- Webhook support
- Quick Test: Run
npx qbo-mcp-ts --helpto verify installation - Natural Language Dates: Use phrases like "last month", "Q1 2024", "year to date"
- Caching: Results are cached for 5 minutes by default (configurable)
- Rate Limits: The server automatically manages QuickBooks API rate limits
- Debug Mode: Use
npx qbo-mcp-ts --debugfor verbose logging - Health Monitoring: Check
/healthendpoint for server status (SSE mode)
- Authentication Errors: Ensure your refresh token is valid and not expired
- Rate Limiting: The server handles this automatically, but you can adjust
API_RATE_LIMIT_PER_MINUTE - Cache Issues: Clear cache directory if experiencing stale data
- Connection Issues: Check network and QuickBooks API status
# Enable debug logging with npx
npx qbo-mcp-ts --debug
# Or with environment variable
LOG_LEVEL=debug npx qbo-mcp-ts
# Debug SSE mode
npx qbo-mcp-ts --transport sse --debug --port 3000For issues specific to QBOMCP-TS, please open an issue in this repository. For QuickBooks API issues, refer to Intuit Developer Support.
Built with β€οΈ by the VCPU Infrastructure Team