QuickBooks Time
Acceda a toda la funcionalidad de la API de QuickBooks Time a través de una única interfaz de servidor MCP.
Documentación
Servidor MCP de QuickBooks Time (Actualización V2)
Este es un servidor MCP combinado que proporciona acceso a toda la funcionalidad de la API de QuickBooks Time a través de una única interfaz. Combina la funcionalidad de cuatro servidores separados:
- Herramientas de JobCode
- Herramientas de Informes y Núcleo
- Herramientas de Hojas de Tiempo
- Herramientas de Usuario
¡Me ENCANTARÍA recibir ayuda para mejorar este proyecto! ¡Me alegra poder finalmente aportar algo!
Todo este proyecto fue desarrollado y publicado utilizando inteligencia artificial (Anthropic, OpenAI, Llama/META), ya que personalmente no puedo escribir mucho código sin asistencia. Aunque se ha hecho todo lo posible para garantizar la calidad y funcionalidad, puede haber imperfecciones o áreas de mejora. Agradezco cualquier comentario, corrección o sugerencia de la comunidad.
- Instalar dependencias:
pip install -r requirements.txt
- Crear un archivo
.envcon tu token de acceso de QuickBooks Time:
QB_TIME_ACCESS_TOKEN=your_access_token_here
NODE_ENV=development
Configuración de Claude Desktop
Para usar este servidor con Claude Desktop, deberás configurarlo en la configuración de Claude Desktop. Aquí tienes un ejemplo de configuración:
{
"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"
}
}
}
}
Herramientas Disponibles
Herramientas de JobCode
-
get_jobcodes: Obtener jobcodes con opciones de filtrado avanzadas- Filtros Básicos:
ids: (matriz de números, opcional) Lista separada por comas de IDs de jobcodename: (cadena, opcional) Filtrar por nombre de jobcode, admite coincidencia con comodín (*) desde el inicio de la cadenaactive: (cadena, opcional) Filtrar por estado: "yes", "no", "both" (predeterminado: "yes")
- Filtros de Tipo y Jerarquía:
type: (cadena, opcional) Filtrar por tipo: "regular", "pto", "paid_break", "unpaid_break", "all" (predeterminado: "regular")parent_ids: (matriz de números, opcional) Filtrar por IDs de jobcode padre. Valores especiales: 0 (solo nivel superior), -1 (todos los niveles)
- Filtros Adicionales:
customfields: (booleano, opcional) Incluir campos personalizados en la respuestamodified_before: (cadena, opcional) Filtrar por fecha de modificación (formato ISO 8601)modified_since: (cadena, opcional) Filtrar por fecha de modificación (formato ISO 8601)page: (número) Número de página para paginaciónlimit: (número) Resultados por página (máx. 200)
- Filtros Básicos:
-
get_jobcode: Obtener un jobcode específico por ID- Parámetros Requeridos:
id: (número) El ID del jobcode a recuperar
- Parámetros Requeridos:
-
get_jobcode_hierarchy: Obtener la estructura completa de jerarquía de jobcodes- Parámetros:
parent_ids: (matriz de números, opcional) Filtrar por IDs de padre. Valores: 0 (nivel superior), -1 (todos), o IDs específicosactive: (cadena, opcional) Filtrar por estado: "yes", "no", "both" (predeterminado: "yes")type: (cadena, opcional) Filtrar por tipo: "regular", "pto", "paid_break", "unpaid_break", "all" (predeterminado: "regular")customfields: (booleano, opcional) Incluir campos personalizados en la respuesta
- Parámetros:
Herramientas de Hojas de Tiempo
-
get_timesheets: Obtener hojas de tiempo con filtrado- Parámetros Requeridos (al menos uno):
ids: (matriz de números) Lista separada por comas de IDs de hojas de tiempostart_date: (cadena) Devuelve hojas de tiempo en o después de esta fecha (AAAA-MM-DD)modified_before: (cadena) Devuelve hojas de tiempo modificadas antes de esta hora (ISO 8601)modified_since: (cadena) Devuelve hojas de tiempo modificadas desde esta hora (ISO 8601)
- Parámetros Opcionales:
end_date: (cadena) Devuelve hojas de tiempo en o antes de esta fecha (AAAA-MM-DD)user_ids: (matriz de números) Filtrar por IDs de usuario específicosgroup_ids: (matriz de números) Filtrar por IDs de grupo específicosjobcode_ids: (matriz de números) Filtrar por IDs de jobcode específicos (incluye hijos)payroll_ids: (matriz de números) Filtrar por IDs de nómina específicoson_the_clock: (cadena) Filtrar por estado de trabajo actual: "yes", "no", "both" (predeterminado: "no")jobcode_type: (cadena) Filtrar por tipo: "regular", "pto", "paid_break", "unpaid_break", "all" (predeterminado: "all")page: (número) Número de páginalimit: (número) Resultados por página
- Parámetros Requeridos (al menos uno):
-
get_timesheet: Obtener una hoja de tiempo específica por ID- Parámetros Requeridos:
id: (número) El ID de la hoja de tiempo a recuperar
- Parámetros Requeridos:
-
get_current_timesheets: Obtener hojas de tiempo actualmente activas- Parámetros Requeridos:
on_the_clock: (cadena) Debe establecerse en "yes"
- Parámetros Opcionales:
user_ids: (matriz de números) Filtrar hojas de tiempo activas para usuarios específicosgroup_ids: (matriz de números) Filtrar hojas de tiempo activas para usuarios en grupos específicosjobcode_ids: (matriz de números) Filtrar hojas de tiempo activas para jobcodes específicossupplemental_data: (cadena) Incluir datos complementarios: "yes", "no" (predeterminado: "yes")
- Parámetros Requeridos:
Herramientas de Usuario
-
get_users: Obtener todos los usuarios con filtrado- Filtros de Identificación de Usuario:
ids: (matriz de números, opcional) Filtrar por IDs de usuario específicosnot_ids: (matriz de números, opcional) Excluir IDs de usuario específicosemployee_numbers: (matriz de números, opcional) Filtrar por números de empleadousernames: (matriz de cadenas, opcional) Filtrar por nombres de usuario específicos
- Filtros de Grupo:
group_ids: (matriz de números, opcional) Filtrar por membresía de gruponot_group_ids: (matriz de números, opcional) Excluir usuarios de grupos específicos
- Filtros de Estado e Identificación:
payroll_ids: (matriz de cadenas, opcional) Filtrar por números de identificación de nóminaactive: (cadena, opcional) Filtrar por estado: "yes", "no", "both" (predeterminado: "yes")
- Filtros de Nombre:
first_name: (cadena, opcional) Filtrar por nombre (admite comodines *)last_name: (cadena, opcional) Filtrar por apellido (admite comodines *)
- Filtros Basados en Tiempo:
modified_before: (cadena, opcional) Filtrar por fecha de modificación (ISO 8601)modified_since: (cadena, opcional) Filtrar por fecha de modificación (ISO 8601)
- Paginación:
page: (número, opcional) Número de página (predeterminado: 1)per_page: (número, opcional) Resultados por página (predeterminado: 50, máx.: 50)
- Filtros de Identificación de Usuario:
-
get_user: Obtener un usuario específico por ID- Parámetros Requeridos:
id: (número) El ID del usuario a recuperar
- Parámetros Requeridos:
-
get_current_user: Obtener el usuario actualmente autenticado- No se requieren parámetros
- Devuelve información detallada del usuario que incluye:
- Información básica del perfil
- Detalles de la empresa
- Saldos de PTO
- Permisos
- Campos personalizados
-
get_groups: Obtener todos los grupos de QuickBooks Time- Parámetros Opcionales:
ids: (matriz de números) Filtrar por IDs de grupo específicosactive: (cadena) Filtrar por estado: "yes", "no", "both" (predeterminado: "yes")manager_ids: (matriz de números) Filtrar grupos por IDs de usuario gerentesupplemental_data: (cadena) Incluir datos complementarios: "yes", "no" (predeterminado: "yes")
- Devuelve información del grupo que incluye:
- Detalles básicos del grupo
- Asignaciones de gerentes
- Configuración de hojas de tiempo
- Configuración de entrada de tiempo
- Configuración de descansos
- Parámetros Opcionales:
Herramientas de Gestión de Proyectos
-
get_projects: Obtener proyectos con filtrado- Parámetros Opcionales:
ids: (matriz de números) Filtrar por IDs de proyecto específicosactive: (cadena) Filtrar por estado: "yes", "no", "both" (predeterminado: "yes")client_id: (número) Filtrar por ID de clientejobcode_id: (número) Filtrar por ID de jobcode asociadomodified_before: (cadena) Filtrar por fecha de modificación (ISO 8601)modified_since: (cadena) Filtrar por fecha de modificación (ISO 8601)page: (número) Número de página (predeterminado: 1)per_page: (número) Resultados por página (predeterminado: 50, máx.: 50)
- Devuelve información del proyecto que incluye:
- Detalles básicos del proyecto
- Asociaciones de cliente y jobcode
- Información de presupuesto
- Fechas y estado
- Campos personalizados
- Parámetros Opcionales:
-
get_project_activities: Obtener registros de actividad del proyecto- Parámetros Opcionales:
project_ids: (matriz de números) Filtrar actividades a proyectos específicosuser_ids: (matriz de números) Filtrar actividades por usuarios específicosactivity_types: (matriz de cadenas) Filtrar por tipos de actividad: "status_change", "note_added", "budget_change", "date_change", "custom_field_change"modified_before: (cadena) Filtrar por fecha de modificación (ISO 8601)modified_since: (cadena) Filtrar por fecha de modificación (ISO 8601)page: (número) Número de página (predeterminado: 1)per_page: (número) Resultados por página (predeterminado: 50, máx.: 50)
- Devuelve información de actividad que incluye:
- Tipo de actividad y detalles
- Usuario que realizó el cambio
- Valores antiguos y nuevos
- Marcas de tiempo
- Parámetros Opcionales:
Herramientas de Informes
-
get_current_totals: Obtener instantánea de totales actuales, incluidos totales de turno y diarios- Parámetros Opcionales:
user_ids: (matriz de números) Filtrar totales a usuarios específicosgroup_ids: (matriz de números) Filtrar totales para usuarios en grupos específicosjobcode_ids: (matriz de números) Filtrar totales para jobcodes específicoscustomfield_query: (cadena) Filtrar por valores de campos personalizados en formato: <customfield_id>||
- Devuelve:
- Totales en tiempo real para entradas de tiempo activas
- Duración y horas de inicio
- Información de jobcode y usuario asociados
- Valores de campos personalizados
- Parámetros Opcionales:
-
get_payroll: Obtener informe de nómina- Parámetros Requeridos:
start_date: (cadena) Inicio del período de pago (AAAA-MM-DD)end_date: (cadena) Fin del período de pago (AAAA-MM-DD)
- Parámetros Opcionales:
user_ids: (matriz de números) Filtrar nómina para usuarios específicosgroup_ids: (matriz de números) Filtrar nómina para usuarios en grupos específicosinclude_zero_time: (booleano) Incluir usuarios sin entradas de tiempo (predeterminado: false)
- Devuelve:
- Tiempo total por tipo (regular, horas extra, doble tiempo, PTO)
- Desgloses diarios por usuario
- Conteos de hojas de tiempo
- Parámetros Requeridos:
-
get_payroll_by_jobcode: Obtener informe de nómina agrupado por jobcode- Parámetros Requeridos:
start_date: (cadena) Inicio del período de pago (AAAA-MM-DD)end_date: (cadena) Fin del período de pago (AAAA-MM-DD)
- Parámetros Opcionales:
user_ids: (matriz de números) Filtrar nómina para usuarios específicosgroup_ids: (matriz de números) Filtrar nómina para usuarios en grupos específicosjobcode_ids: (matriz de números) Filtrar nómina para jobcodes específicosjobcode_type: (cadena) Filtrar por tipo: "regular", "pto", "paid_break", "unpaid_break"include_zero_time: (booleano) Incluir jobcodes sin entradas de tiempo (predeterminado: false)
- Devuelve:
- Totales de tiempo por jobcode
- Desgloses por usuario dentro de cada jobcode
- Totales diarios por jobcode
- Parámetros Requeridos:
-
get_project_report: Obtener informe detallado de proyecto con entradas de tiempo- Parámetros Requeridos:
start_date: (cadena) Fecha de inicio en formato AAAA-MM-DDend_date: (cadena) Fecha de fin en formato AAAA-MM-DD
- Parámetros Opcionales:
user_ids: (matriz de números) Filtrar entradas de tiempo por usuarios específicosgroup_ids: (matriz de números) Filtrar entradas de tiempo por grupos específicosjobcode_ids: (matriz de números) Filtrar entradas de tiempo por jobcodes específicosjobcode_type: (cadena) Filtrar por tipo: "regular", "pto", "unpaid_break", "paid_break", "all" (predeterminado: "all")customfielditems: (objeto) Filtrar por valores de campos personalizados en formato: {"customfield_id": ["value1", "value2"]}
- Devuelve:
- Totales de tiempo del proyecto
- Desgloses por usuario y grupo
- Entradas de tiempo filtradas según criterios
- Parámetros Requeridos:
Herramientas Adicionales
-
get_custom_fields: Obtener campos de seguimiento personalizados configurados en las tarjetas de tiempo- Parámetros:
ids: (matriz de números) Filtrar por IDs de campos personalizados específicosactive: (cadena) Filtrar por estado: "yes", "no", "both"applies_to: (cadena) Filtrar por tipo de aplicación: "timesheet", "jobcode", "user"value_type: (cadena) Filtrar por tipo de valor: "managed-list", "free-form"page: (número) Número de páginalimit: (número) Resultados por página
- Parámetros:
-
get_last_modified: Obtener marcas de tiempo de última modificación para objetos- Parámetros:
types: (matriz de cadenas) Tipos de objetos a verificar (p. ej., ["timesheets", "jobcodes", "users"])
- Parámetros:
-
get_notifications: Obtener notificaciones- Parámetros:
page: (número) Número de páginalimit: (número) Resultados por página
- Parámetros:
-
get_managed_clients: Obtener clientes gestionados- Parámetros:
page: (número) Número de páginalimit: (número) Resultados por página
- Parámetros:
Ejecutar el Servidor
python main.py
El servidor se iniciará y escuchará solicitudes JSON-RPC en stdin/stdout.
Licencia
Licencia MIT - Consulte el archivo LICENSE para más detalles
Contribuciones
¡Las contribuciones son bienvenidas! No dudes en enviar una Solicitud de Extracción (Pull Request). Dado que este proyecto fue desarrollado con asistencia de IA, la aportación de la comunidad es especialmente valiosa para mejorar y mantener el código base.
Soporte
Para problemas y solicitudes de funciones, utilice la página de problemas de GitHub o contácteme directamente en github.com/aallsbury.