Provides access to QuickBooks Time API functionality through a single interface, including JobCode Tools, Reports & Core Tools, Timesheet Tools, and User Tools. Allows querying and managing various aspects of the QuickBooks Time service.
QuickBooks Time MCP Server (V2 Update)
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:
JobCode Tools
Reports & Core Tools
Timesheet Tools
User Tools
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.
Install dependencies:
Create a
.env
file with your QuickBooks Time access token:
Claude Desktop Configuration
To use this server with Claude Desktop, you'll need to configure it in your Claude Desktop settings. Here's an example configuration:
Available Tools
JobCode Tools
get_jobcodes
: Get jobcodes with advanced filtering optionsBasic Filters:
ids
: (array of numbers, optional) Comma separated list of jobcode IDsname
: (string, optional) Filter by jobcode name, supports wildcard (*) matching from string startactive
: (string, optional) Filter by status: "yes", "no", "both" (default: "yes")
Type and Hierarchy Filters:
type
: (string, optional) Filter by type: "regular", "pto", "paid_break", "unpaid_break", "all" (default: "regular")parent_ids
: (array of numbers, optional) Filter by parent jobcode IDs. Special values: 0 (top-level only), -1 (all levels)
Additional Filters:
customfields
: (boolean, optional) Include custom fields in responsemodified_before
: (string, optional) Filter by modification date (ISO 8601 format)modified_since
: (string, optional) Filter by modification date (ISO 8601 format)page
: (number) Page number for paginationlimit
: (number) Results per page (max 200)
get_jobcode
: Get a specific jobcode by IDRequired Parameters:
id
: (number) The ID of the jobcode to retrieve
get_jobcode_hierarchy
: Get complete jobcode hierarchy structureParameters:
parent_ids
: (array of numbers, optional) Filter by parent IDs. Values: 0 (top-level), -1 (all), or specific IDsactive
: (string, optional) Filter by status: "yes", "no", "both" (default: "yes")type
: (string, optional) Filter by type: "regular", "pto", "paid_break", "unpaid_break", "all" (default: "regular")customfields
: (boolean, optional) Include custom fields in response
Timesheet Tools
get_timesheets
: Get timesheets with filteringRequired Parameters (at least one):
ids
: (array of numbers) Comma separated list of timesheet IDsstart_date
: (string) Returns timesheets on or after this date (YYYY-MM-DD)modified_before
: (string) Returns timesheets modified before this time (ISO 8601)modified_since
: (string) Returns timesheets modified since this time (ISO 8601)
Optional Parameters:
end_date
: (string) Returns timesheets on or before this date (YYYY-MM-DD)user_ids
: (array of numbers) Filter by specific user IDsgroup_ids
: (array of numbers) Filter by specific group IDsjobcode_ids
: (array of numbers) Filter by specific jobcode IDs (includes children)payroll_ids
: (array of numbers) Filter by specific payroll IDson_the_clock
: (string) Filter by current working status: "yes", "no", "both" (default: "no")jobcode_type
: (string) Filter by type: "regular", "pto", "paid_break", "unpaid_break", "all" (default: "all")page
: (number) Page numberlimit
: (number) Results per page
get_timesheet
: Get a specific timesheet by IDRequired Parameters:
id
: (number) The ID of the timesheet to retrieve
get_current_timesheets
: Get currently active timesheetsRequired Parameters:
on_the_clock
: (string) Must be set to "yes"
Optional Parameters:
user_ids
: (array of numbers) Filter active timesheets for specific usersgroup_ids
: (array of numbers) Filter active timesheets for users in specific groupsjobcode_ids
: (array of numbers) Filter active timesheets for specific jobcodessupplemental_data
: (string) Include supplemental data: "yes", "no" (default: "yes")
User Tools
get_users
: Get all users with filteringUser Identification Filters:
ids
: (array of numbers, optional) Filter by specific user IDsnot_ids
: (array of numbers, optional) Exclude specific user IDsemployee_numbers
: (array of numbers, optional) Filter by employee numbersusernames
: (array of strings, optional) Filter by specific usernames
Group Filters:
group_ids
: (array of numbers, optional) Filter by group membershipnot_group_ids
: (array of numbers, optional) Exclude users from specific groups
Status and Identification Filters:
payroll_ids
: (array of strings, optional) Filter by payroll identification numbersactive
: (string, optional) Filter by status: "yes", "no", "both" (default: "yes")
Name Filters:
first_name
: (string, optional) Filter by first name (supports wildcards *)last_name
: (string, optional) Filter by last name (supports wildcards *)
Time-Based Filters:
modified_before
: (string, optional) Filter by modification date (ISO 8601)modified_since
: (string, optional) Filter by modification date (ISO 8601)
Pagination:
page
: (number, optional) Page number (default: 1)per_page
: (number, optional) Results per page (default: 50, max: 50)
get_user
: Get a specific user by IDRequired Parameters:
id
: (number) The ID of the user to retrieve
get_current_user
: Get currently authenticated userNo parameters required
Returns detailed user information including:
Basic profile information
Company details
PTO balances
Permissions
Custom fields
get_groups
: Get all groups from QuickBooks TimeOptional Parameters:
ids
: (array of numbers) Filter by specific group IDsactive
: (string) Filter by status: "yes", "no", "both" (default: "yes")manager_ids
: (array of numbers) Filter groups by manager user IDssupplemental_data
: (string) Include supplemental data: "yes", "no" (default: "yes")
Returns group information including:
Basic group details
Manager assignments
Timesheet settings
Time entry settings
Break settings
Project Management Tools
get_projects
: Get projects with filteringOptional Parameters:
ids
: (array of numbers) Filter by specific project IDsactive
: (string) Filter by status: "yes", "no", "both" (default: "yes")client_id
: (number) Filter by client IDjobcode_id
: (number) Filter by associated jobcode IDmodified_before
: (string) Filter by modification date (ISO 8601)modified_since
: (string) Filter by modification date (ISO 8601)page
: (number) Page number (default: 1)per_page
: (number) Results per page (default: 50, max: 50)
Returns project information including:
Basic project details
Client and jobcode associations
Budget information
Dates and status
Custom fields
get_project_activities
: Get project activity logsOptional Parameters:
project_ids
: (array of numbers) Filter activities to specific projectsuser_ids
: (array of numbers) Filter activities by specific usersactivity_types
: (array of strings) Filter by activity types: "status_change", "note_added", "budget_change", "date_change", "custom_field_change"modified_before
: (string) Filter by modification date (ISO 8601)modified_since
: (string) Filter by modification date (ISO 8601)page
: (number) Page number (default: 1)per_page
: (number) Results per page (default: 50, max: 50)
Returns activity information including:
Activity type and details
User who made the change
Old and new values
Timestamps
Reports Tools
get_current_totals
: Get current totals snapshot including shift and day totalsOptional Parameters:
user_ids
: (array of numbers) Filter totals to specific usersgroup_ids
: (array of numbers) Filter totals for users in specific groupsjobcode_ids
: (array of numbers) Filter totals for specific jobcodescustomfield_query
: (string) Filter by custom field values in format: <customfield_id>||
Returns:
Real-time totals for active time entries
Duration and start times
Associated jobcode and user information
Custom field values
get_payroll
: Get payroll reportRequired Parameters:
start_date
: (string) Start of pay period (YYYY-MM-DD)end_date
: (string) End of pay period (YYYY-MM-DD)
Optional Parameters:
user_ids
: (array of numbers) Filter payroll for specific usersgroup_ids
: (array of numbers) Filter payroll for users in specific groupsinclude_zero_time
: (boolean) Include users with no time entries (default: false)
Returns:
Total time by type (regular, overtime, double-time, PTO)
Daily breakdowns per user
Timesheet counts
get_payroll_by_jobcode
: Get payroll report grouped by jobcodeRequired Parameters:
start_date
: (string) Start of pay period (YYYY-MM-DD)end_date
: (string) End of pay period (YYYY-MM-DD)
Optional Parameters:
user_ids
: (array of numbers) Filter payroll for specific usersgroup_ids
: (array of numbers) Filter payroll for users in specific groupsjobcode_ids
: (array of numbers) Filter payroll for specific jobcodesjobcode_type
: (string) Filter by type: "regular", "pto", "paid_break", "unpaid_break"include_zero_time
: (boolean) Include jobcodes with no time entries (default: false)
Returns:
Time totals by jobcode
Breakdowns by user within each jobcode
Daily totals per jobcode
get_project_report
: Get detailed project report with time entriesRequired Parameters:
start_date
: (string) Start date in YYYY-MM-DD formatend_date
: (string) End date in YYYY-MM-DD format
Optional Parameters:
user_ids
: (array of numbers) Filter time entries by specific usersgroup_ids
: (array of numbers) Filter time entries by specific groupsjobcode_ids
: (array of numbers) Filter time entries by specific jobcodesjobcode_type
: (string) Filter by type: "regular", "pto", "unpaid_break", "paid_break", "all" (default: "all")customfielditems
: (object) Filter by custom field values in format: {"customfield_id": ["value1", "value2"]}
Returns:
Project time totals
Breakdowns by user and group
Filtered time entries based on criteria
Additional Tools
get_custom_fields
: Get custom tracking fields configured on timecardsParameters:
ids
: (array of numbers) Filter by specific custom field IDsactive
: (string) Filter by status: "yes", "no", "both"applies_to
: (string) Filter by application type: "timesheet", "jobcode", "user"value_type
: (string) Filter by value type: "managed-list", "free-form"page
: (number) Page numberlimit
: (number) Results per page
get_last_modified
: Get last modified timestamps for objectsParameters:
types
: (array of strings) Types of objects to check (e.g., ["timesheets", "jobcodes", "users"])
get_notifications
: Get notificationsParameters:
page
: (number) Page numberlimit
: (number) Results per page
get_managed_clients
: Get managed clientsParameters:
page
: (number) Page numberlimit
: (number) Results per page
Running the Server
The server will start and listen for JSON-RPC requests on stdin/stdout.
License
MIT License - See LICENSE file for details
Contributing
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.
Support
For issues and feature requests, please use the GitHub issues page or contact me directly at github.com/aallsbury.
This server cannot be installed
remote-capable server
The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.
Provides unified access to QuickBooks Time API functionality. This server consolidates multiple QuickBooks Time services into a single, efficient interface.
Related MCP Servers
- -securityFlicense-qualityAn MCP server providing timezone conversions and time-related operations via RESTful API endpoints, featuring comprehensive error handling and timezone database integration.Last updated -
- AsecurityAlicenseAqualityA lightweight mcp server that tells you exactly what time is it based on your IP.Last updated -18MIT License
- -securityAlicense-qualityA TypeScript server that provides time-related tools through the Model Context Protocol, allowing users to get current time in various timezones and convert times between different IANA timezones.Last updated -MIT License
- AsecurityAlicenseAqualityProvides comprehensive integration with the Clockify time tracking API, enabling automated time entry management, project organization, task tracking, and reporting through a standardized interface.Last updated -2902MIT License