这是一个结合了多个服务器功能的MCP服务器,通过单一接口提供了对所有QuickBooks Time API功能的访问。它整合了四个独立服务器的功能:
我很乐意帮助改进这个项目!很高兴终于能够回馈一些东西!
整个项目是使用人工智能(Anthropic, OpenAI, Llama/META)开发并发布的,因为我个人在没有辅助的情况下无法编写大量代码。尽管已经尽最大努力确保质量和功能,但仍可能存在不完善或需要改进的地方。我欢迎社区提供的任何反馈、更正或建议。
pip install -r requirements.txt
.env文件,并添加你的QuickBooks Time访问令牌:QB_TIME_ACCESS_TOKEN=your_access_token_here
NODE_ENV=development
要使用此服务器与Claude Desktop配合工作,你需要在Claude Desktop设置中进行配置。以下是一个示例配置:
{
"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: 获取具有高级过滤选项的工作代码
ids: (数字数组,可选) 逗号分隔的工作代码ID列表name: (字符串,可选) 按工作代码名称过滤,支持从字符串开始的通配符(*)匹配active: (字符串,可选) 按状态过滤:"yes", "no", "both" (默认:"yes")type: (字符串,可选) 按类型过滤:"regular", "pto", "paid_break", "unpaid_break", "all" (默认:"regular")parent_ids: (数字数组,可选) 按父工作代码ID过滤。特殊值:0 (仅顶级),-1 (所有级别)customfields: (布尔值,可选) 在响应中包含自定义字段modified_before: (字符串,可选) 按修改日期过滤 (ISO 8601 格式)modified_since: (字符串,可选) 按修改日期过滤 (ISO 8601 格式)page: (数字) 分页的页码limit: (数字) 每页结果数 (最大200)get_jobcode: 通过ID获取特定的工作代码
id: (数字) 要检索的工作代码IDget_jobcode_hierarchy: 获取完整的工时代码层次结构
parent_ids: (数字数组,可选) 按父ID过滤。值:0 (顶级),-1 (所有),或特定IDactive: (字符串,可选) 按状态过滤:"yes", "no", "both" (默认:"yes")type: (字符串,可选) 按类型过滤:"regular", "pto", "paid_break", "unpaid_break", "all" (默认:"regular")customfields: (布尔值,可选) 在响应中包含自定义字段get_timesheets: 获取具有过滤条件的时间表
ids: (数字数组) 逗号分隔的时间表ID列表start_date: (字符串) 返回在此日期或之后的时间表 (YYYY-MM-DD)modified_before: (字符串) 返回在此时间之前已修改的时间表 (ISO 8601)modified_since: (字符串) 返回在此时间之后已修改的时间表 (ISO 8601)end_date: (字符串) 返回在此日期或之前的时间表 (YYYY-MM-DD)user_ids: (数字数组) 按特定用户ID过滤group_ids: (数字数组) 按特定组ID过滤jobcode_ids: (数字数组) 按特定工作代码ID过滤(包括子级)payroll_ids: (数字数组) 按特定工资单ID过滤on_the_clock: (字符串) 按当前工作状态过滤:"yes", "no", "both" (默认:"no")jobcode_type: (字符串) 按类型过滤:"regular", "pto", "paid_break", "unpaid_break", "all" (默认:"all")page: (数字) 页码limit: (数字) 每页结果数get_timesheet: 通过ID获取特定的时间表
id: (数字) 要检索的时间表IDget_current_timesheets: 获取当前活跃的时间表
on_the_clock: (字符串) 必须设置为"yes"user_ids: (数字数组) 过滤特定用户的活跃时间表group_ids: (数字数组) 过滤特定组内用户的活跃时间表jobcode_ids: (数字数组) 过滤特定工作代码的活跃时间表supplemental_data: (字符串) 包含补充数据:"yes", "no" (默认:"yes")get_users: 获取具有过滤条件的所有用户
ids: (数字数组,可选) 按特定用户ID过滤not_ids: (数字数组,可选) 排除特定用户IDemployee_numbers: (数字数组,可选) 按员工编号过滤usernames: (字符串数组,可选) 按特定用户名过滤group_ids: (数字数组,可选) 按组成员身份过滤not_group_ids: (数字数组,可选) 排除特定组内的用户payroll_ids: (字符串数组,可选) 按工资单识别号码过滤active: (字符串,可选) 按状态过滤:"yes", "no", "both" (默认:"yes")first_name: (字符串,可选) 按名字过滤 (支持通配符*)last_name: (字符串,可选) 按姓氏过滤 (支持通配符*)modified_before: (字符串,可选) 按修改日期过滤 (ISO 8601)modified_since: (字符串,可选) 按修改日期过滤 (ISO 8601)page: (数字,可选) 页码 (默认:1)per_page: (数字,可选) 每页结果数 (默认:50,最大:50)get_user: 通过ID获取特定用户
id: (数字) 要检索的用户IDget_current_user: 获取当前认证用户
get_groups: 获取来自QuickBooks Time的所有组
ids: (数字数组) 按特定组ID过滤active: (字符串) 按状态过滤:"yes", "no", "both" (默认:"yes")manager_ids: (数字数组) 按经理用户ID过滤组supplemental_data: (字符串) 包含补充数据:"yes", "no" (默认:"yes")get_projects: 获取具有过滤条件的项目
ids: (数字数组) 按特定项目ID过滤active: (字符串) 按状态过滤:"yes", "no", "both" (默认:"yes")client_id: (数字) 按客户ID过滤jobcode_id: (数字) 按关联的工作代码ID过滤modified_before: (字符串) 按修改日期过滤 (ISO 8601)modified_since: (字符串) 按修改日期过滤 (ISO 8601)page: (数字) 页码 (默认:1)per_page: (数字) 每页结果数 (默认:50,最大:50)get_project_activities: 获取项目活动日志
project_ids: (数字数组) 将活动过滤到特定项目user_ids: (数字数组) 按特定用户过滤活动activity_types: (字符串数组) 按活动类型过滤:"status_change", "note_added", "budget_change", "date_change", "custom_field_change"modified_before: (字符串) 按修改日期过滤 (ISO 8601)modified_since: (字符串) 按修改日期过滤 (ISO 8601)page: (数字) 页码 (默认:1)per_page: (数字) 每页结果数 (默认:50,最大:50)get_current_totals: 获取当前总计快照,包括班次和日总计
user_ids: (数字数组) 将总计过滤到特定用户group_ids: (数字数组) 将总计过滤到特定组内的用户jobcode_ids: (数字数组) 将总计过滤到特定工作代码customfield_query: (字符串) 按自定义字段值过滤,格式:<customfield_id>|<op>|<value>get_payroll: 获取工资报告
start_date: (字符串) 支付周期的开始 (YYYY-MM-DD)end_date: (字符串) 支付周期的结束 (YYYY-MM-DD)user_ids: (数字数组) 过滤特定用户的工资group_ids: (数字数组) 过滤特定组内用户的工资include_zero_time: (布尔值) 包括无时间条目的用户 (默认:false)get_payroll_by_jobcode: 获取按工作代码分组的工资报告
start_date: (字符串) 支付周期的开始 (YYYY-MM-DD)end_date: (字符串) 支付周期的结束 (YYYY-MM-DD)user_ids: (数字数组) 过滤特定用户的工资group_ids: (数字数组) 过滤特定组内用户的工资jobcode_ids: (数字数组) 过滤特定工作代码的工资jobcode_type: (字符串) 按类型过滤:"regular", "pto", "paid_break", "unpaid_break"include_zero_time: (布尔值) 包括无时间条目的工作代码 (默认:false)get_project_report: 获取带有时间条目的详细项目报告
start_date: (字符串) 开始日期,格式为YYYY-MM-DDend_date: (字符串) 结束日期,格式为YYYY-MM-DDuser_ids: (数字数组) 按特定用户过滤时间条目group_ids: (数字数组) 按特定组过滤时间条目jobcode_ids: (数字数组) 按特定工作代码过滤时间条目jobcode_type: (字符串) 按类型过滤:"regular", "pto", "unpaid_break", "paid_break", "all" (默认:"all")customfielditems: (对象) 按自定义字段值过滤,格式:{"customfield_id": ["value1", "value2"]}get_custom_fields: 获取配置在时间卡上的自定义跟踪字段
ids: (数字数组) 按特定自定义字段ID过滤active: (字符串) 按状态过滤:"yes", "no", "both"applies_to: (字符串) 按应用类型过滤:"timesheet", "jobcode", "user"value_type: (字符串) 按值类型过滤:"managed-list", "free-form"page: (数字) 页码limit: (数字) 每页结果数get_last_modified: 获取对象的最后修改时间戳
types: (字符串数组) 要检查的对象类型 (例如,["timesheets", "jobcodes", "users"])get_notifications: 获取通知
page: (数字) 页码limit: (数字) 每页结果数get_managed_clients: 获取托管客户端
page: (数字) 页码limit: (数字) 每页结果数python main.py
服务器将启动并监听stdin/stdout上的JSON-RPC请求。
MIT许可证 - 详情见LICENSE文件
欢迎贡献!请随时提交Pull Request。鉴于该项目是在人工智能的帮助下开发的,社区的投入对于改进和维护代码库尤为重要。
对于问题和功能请求,请使用GitHub问题页面或直接联系我在github.com/aallsbury。 </中文翻译>