vespo92/QBO-MCP-TS
If you are the rightful owner of QBO-MCP-TS and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
QBOMCP-TS is a TypeScript-based server for QuickBooks Online, offering enhanced architecture and enterprise-grade features.
QBOMCP-TS: TypeScript QuickBooks Online MCP Server
๐ Overview
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.
โก Quick Start with npx
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
๐ Why Use npx?
- 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
โจ Key Improvements Over Original QBOMCP
Architecture Enhancements
- 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
Performance & Reliability
- 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
Developer Experience
- 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
Production Features
- 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
๐ Prerequisites
- Node.js 18+ (for native fetch support)
- QuickBooks Online account (or sandbox account)
- Intuit Developer account
- OAuth2 credentials from Intuit
๐ง Installation Options
Option 1: Use Directly with npx (Recommended)
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
Option 2: Global Installation
# Install globally
npm install -g qbo-mcp-ts
# Run from anywhere
qbo-mcp-ts --env-file /path/to/.env
Option 3: Clone Repository (For Development)
git clone https://github.com/vespo92/QBO-MCP-TS.git
cd QBOMCP-TS
npm install
npm run build
๐ Usage
Claude Desktop Configuration
Add to your Claude Desktop config:
Using npx (Simplest - No Installation Required)
{
"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"
}
}
}
}
Using Global Installation
{
"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"
}
}
}
}
Command Line Usage
STDIO Mode (Default - for Claude Desktop)
# Using npx
npx qbo-mcp-ts
# With environment file
npx qbo-mcp-ts --env-file .env
# With debug logging
npx qbo-mcp-ts --debug
SSE Mode (for Web Applications)
# 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 3000
SSE 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
Available Command Arguments
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 number
๐ ๏ธ Available Tools
Invoice Management
get_invoices
- Query invoices with natural language filterscreate_invoice
- Create new invoicessend_invoice
- Email invoices to customersget_invoice_aging
- Generate AR aging reports
Expense Tracking (Coming Soon)
create_expense
- Record business expensesget_expenses
- Query expense transactions
Financial Reports (Coming Soon)
profit_and_loss
- Generate P&L statementsbalance_sheet
- Generate balance sheetscash_flow
- Cash flow analysis
Customer Management (Coming Soon)
get_customers
- List and search customerscreate_customer
- Add new customerscustomer_balance
- Check customer balances
System Tools
help
- Get help on using the serverget_api_status
- Check API connection and limits
๐ก Example Usage
Quick Examples with Natural Language
// 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
}
}
๐๏ธ Architecture
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
๐ Security Features
- 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
๐ Performance Optimizations
- 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)
๐งช Testing
# Run all tests
npm test
# Run with coverage
npm run test:coverage
# Watch mode for development
npm run test:watch
๐ Development
Available Scripts
# 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 issues
Code Quality & Linting
This project uses a comprehensive ESLint setup optimized for TypeScript MCP servers:
ESLint Configuration
- 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
Key Linting Features
- Warns on
any
types 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)
Pre-commit Hooks
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
Code Style Guidelines
- Use functional programming patterns where appropriate
- Prefer
const
overlet
, 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)
๐ณ Docker Support (Coming Soon)
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"]
๐ API Documentation
Full TypeScript definitions are available in src/types/index.ts
. The server
provides comprehensive type safety for all operations.
๐ค Contributing
Contributions are welcome! Please see the original CONTRIBUTING.md for guidelines.
๐ License
MIT License - See LICENSE file for details.
๐ Comparison with Original QBOMCP
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 |
๐ฏ Getting Started Checklist
- โ๏ธ Get QuickBooks OAuth2 credentials from Intuit Developer
- โ๏ธ Create a
.env
file with your credentials - โ๏ธ Run
npx qbo-mcp-ts --env-file .env
to test - โ๏ธ Add to Claude Desktop config (see above)
- โ๏ธ Start using natural language to manage invoices!
๐ง Roadmap
- 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
๐ก Pro Tips
- Quick Test: Run
npx qbo-mcp-ts --help
to 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 --debug
for verbose logging - Health Monitoring: Check
/health
endpoint for server status (SSE mode)
๐ Troubleshooting
Common Issues
- 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
Debug Mode
# 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 3000
๐ Support
For 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