This is a combined MCP server that provides access to all QuickBooks Time API functionality through a single interface. It combines the functionality of four separate servers:
I would LOVE help improving this project! Just glad to be able to give something back finally!
This entire project was developed and published using artificial intelligence (Anthropic, OpenAI, Llama/META), as I personally cannot write much code without assistance. While every effort has been made to ensure quality and functionality, there may be imperfections or areas for improvement. I welcome any feedback, corrections, or suggestions from the community.
pip install -r requirements.txt
.env
file with your QuickBooks Time access token:QB_TIME_ACCESS_TOKEN=your_access_token_here
NODE_ENV=development
To use this server with Claude Desktop, you'll need to configure it in your Claude Desktop settings. Here's an example configuration:
{
"globalShortcut": "Ctrl+Q",
"mcpServers": {
"qb-time-tools": {
"command": "python",
"args": [
"./qb-time-mcp-server/main.py"
],
"env": {
"QB_TIME_ACCESS_TOKEN": "your_quickbooks_time_access_token_here"
}
}
}
}
get_jobcodes
: Get jobcodes with advanced filtering options
ids
: (array of numbers) Filter by specific jobcode IDsparent_ids
: (array of numbers) Filter by parent jobcode IDsname
: (string) Filter by name (use * as wildcard)type
: (string) Filter by type: "regular", "pto", "paid_break", "unpaid_break", "all"active
: (string) Filter by status: "yes", "no", "both"customfields
: (boolean) Include custom field datamodified_before
: (string) Return items modified before this datemodified_since
: (string) Return items modified after this datesupplemental_data
: (string) Include supplemental data: "yes", "no"page
: (number) Page number for paginationlimit
: (number) Results per page (max 200)get_jobcode
: Get a specific jobcode by ID
id
: (number) The ID of the jobcode to retrieveget_jobcode_hierarchy
: Get complete jobcode hierarchy structure
name
: (string) Filter by name (use * as wildcard)type
: (string) Filter by type: "regular", "pto", "paid_break", "unpaid_break", "all"active
: (string) Filter by status: "yes", "no", "both"customfields
: (boolean) Include custom field datasupplemental_data
: (string) Include supplemental data: "yes", "no"get_timesheets
: Get timesheets with filtering
modified_before
: (string) Filter by modification datemodified_since
: (string) Filter by modification datepage
: (number) Page numberlimit
: (number) Results per pageget_timesheet
: Get a specific timesheet by ID
id
: (number) The ID of the timesheet to retrieveget_current_timesheets
: Get currently active timesheets
get_users
: Get all users with filtering
modified_before
: (string) Filter by modification datemodified_since
: (string) Filter by modification datepage
: (number) Page numberlimit
: (number) Results per pageget_user
: Get a specific user by ID
id
: (number) The ID of the user to retrieveget_current_user
: Get currently authenticated user
get_groups
: Get all groups from QuickBooks Time
page
: (number) Page numberlimit
: (number) Results per pageget_projects
: Get projects with filtering
modified_before
: (string) Filter by modification datemodified_since
: (string) Filter by modification datepage
: (number) Page numberlimit
: (number) Results per pageget_project_activities
: Get project activities
page
: (number) Page numberlimit
: (number) Results per pageget_current_totals
: Get current totals snapshot including shift and day totals
page
: (number) Page numberlimit
: (number) Results per pageget_payroll
: Get payroll report
start_date
: (string) Start date in YYYY-MM-DD formatend_date
: (string) End date in YYYY-MM-DD formatpage
: (number) Page numberlimit
: (number) Results per pageget_payroll_by_jobcode
: Get payroll report grouped by jobcode
start_date
: (string) Start date in YYYY-MM-DD formatend_date
: (string) End date in YYYY-MM-DD formatpage
: (number) Page numberlimit
: (number) Results per pageget_project_report
: Get detailed project report with time entries
start_date
: (string) Start date in YYYY-MM-DD formatend_date
: (string) End date in YYYY-MM-DD formatjobcode_ids
: (array of numbers) Filter by specific jobcode IDsuser_ids
: (array of numbers) Filter by specific user IDsgroup_ids
: (array of numbers) Filter by specific group IDsjobcode_type
: (string) Filter by type: "regular", "pto", "unpaid_break", "paid_break", "all"customfielditems
: (object) Filter by custom field itemsget_custom_fields
: Get custom tracking fields configured on timecards
page
: (number) Page numberlimit
: (number) Results per pageget_last_modified
: Get last modified timestamps for objects
types
: (array of strings) Types of objects to checkget_notifications
: Get notifications
page
: (number) Page numberlimit
: (number) Results per pageget_managed_clients
: Get managed clients
page
: (number) Page numberlimit
: (number) Results per pagepython main.py
The server will start and listen for JSON-RPC requests on stdin/stdout.
MIT License - See LICENSE file for details
Contributions are welcome! Please feel free to submit a Pull Request. Given that this project was developed with AI assistance, community input is especially valuable for improving and maintaining the codebase.
For issues and feature requests, please use the GitHub issues page or contact me directly at github.com/aallsbury.
Seamless access to top MCP servers powering the future of AI integration.