TimeChimp MCP Server
Un servidor para interactuar con la API v2 de TimeChimp para gestionar el seguimiento del tiempo y proyectos.
Documentación
Servidor MCP de TimeChimp
Un servidor integral del Protocolo de Contexto de Modelos (MCP) para interactuar con la API v2 de TimeChimp. Este servidor proporciona herramientas para recuperar y gestionar todos los recursos principales de TimeChimp, incluidos proyectos, usuarios, registros de tiempo, contactos, clientes, tareas, facturas, gastos, kilometraje y etiquetas.
Características
- Proyectos: Operaciones CRUD completas (Crear, Leer, Actualizar, Eliminar) con gestión integral de proyectos, incluida la facturación, presupuestos, asignaciones de tareas/usuarios y perspectivas
- Usuarios: Operaciones CRUD completas (Crear, Leer, Actualizar, Eliminar) con gestión de usuarios, incluidos roles, contratos, etiquetas e información de empleados
- Registros de tiempo: Obtener registros de tiempo con rangos de fechas, filtrado por usuario/proyecto y ordenación
- Contactos: Operaciones CRUD completas (Crear, Leer, Actualizar, Eliminar) para la gestión de contactos
- Clientes: Operaciones CRUD completas (Crear, Leer, Actualizar, Eliminar) para la gestión de clientes
- Tareas: Obtener información de tareas con filtrado por proyecto y ordenación
- Facturas: Recuperar facturas con filtrado por cliente y fecha
- Gastos: Operaciones CRUD completas (Crear, Leer, Actualizar, Eliminar) para la gestión de gastos con seguimiento de estado
- Kilometraje: Operaciones CRUD completas (Crear, Leer, Actualizar, Eliminar) para la gestión de kilometraje con seguimiento de estado y asignación de vehículos
- Vehículos de kilometraje: Recuperar información de vehículos de kilometraje para la asignación de vehículos
- Etiquetas: Obtener información de etiquetas para organización y categorización
- Construido como un único archivo JavaScript para facilitar su implementación
- Utiliza la API v2 de TimeChimp con autenticación adecuada y convenciones OData
- Manejo integral de errores y validación
- Soporte para $expand, $count y todos los parámetros de consulta OData
Requisitos previos
- Node.js 18.0.0 o superior
- Una cuenta de TimeChimp con acceso a la API
- Clave de API de TimeChimp
Instalación
- Clona o descarga este repositorio:
git clone <repository-url>
cd TimeJS
- Instala las dependencias:
npm install
- Haz que el servidor sea ejecutable:
chmod +x timechimp-mcp-server.js
Configuración
Configuración de la clave de API
Debes configurar tu clave de API de TimeChimp como una variable de entorno:
export TIMECHIMP_API_KEY="your-api-key-here"
O crea un archivo .env:
TIMECHIMP_API_KEY=your-api-key-here
Cómo obtener tu clave de API de TimeChimp
- Inicia sesión en tu cuenta de TimeChimp
- Ve a la configuración de tu perfil
- Navega a la sección de API
- Genera o copia tu clave de API
Integración con Claude Desktop
Para usar este servidor MCP de TimeChimp con Claude Desktop, debes agregarlo a la configuración de Claude Desktop.
Paso 1: Clonar el repositorio
git clone https://github.com/Sungdaddy/TimeyChimpey.git
cd TimeyChimpey
npm install
Paso 2: Configurar tu clave de API
Crea un archivo .env en el directorio del proyecto:
echo "TIMECHIMP_API_KEY=your-actual-api-key-here" > .env
Paso 3: Configurar Claude Desktop
Agrega la siguiente configuración a los ajustes de Claude Desktop. La ubicación del archivo de configuración depende de tu sistema operativo:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"timechimp": {
"command": "node",
"args": ["timechimp-mcp-server.js"],
"cwd": "/path/to/your/TimeyChimpey",
"env": {
"TIMECHIMP_API_KEY": "your-actual-api-key-here"
}
}
}
}
Importante: Reemplaza /path/to/your/TimeyChimpey con la ruta real donde clonaste el repositorio y reemplaza your-actual-api-key-here con tu clave de API real de TimeChimp.
Paso 4: Reiniciar Claude Desktop
Después de agregar la configuración, reinicia Claude Desktop por completo para que los cambios surtan efecto.
Paso 5: Verificar la integración
Una vez que Claude Desktop se reinicie, deberías poder usar comandos relacionados con TimeChimp. Intenta pedirle a Claude que:
- "Obtén todos mis proyectos de TimeChimp"
- "Muéstrame los registros de tiempo recientes"
- "Lista todos los clientes"
- "Crea un nuevo registro de gasto"
Ejemplo de configuración
Aquí tienes un ejemplo completo de archivo de configuración:
{
"mcpServers": {
"timechimp": {
"command": "node",
"args": ["timechimp-mcp-server.js"],
"cwd": "/Users/yourname/TimeyChimpey",
"env": {
"TIMECHIMP_API_KEY": "your-actual-api-key-here"
}
}
}
}
Solución de problemas de integración con Claude Desktop
-
El servidor no se conecta: Asegúrate de que la ruta en
cwdsea correcta y apunte al directorio que contienetimechimp-mcp-server.js -
Errores de clave de API: Verifica que tu clave de API sea correcta y tenga los permisos adecuados en TimeChimp
-
Node.js no encontrado: Asegúrate de que Node.js esté instalado y sea accesible desde la línea de comandos
-
Errores de permisos: Asegúrate de que Claude Desktop tenga permiso para ejecutar Node.js y acceder al directorio del proyecto
-
La configuración no se carga: Verifica dos veces la sintaxis JSON en tu archivo de configuración: debe ser JSON válido
Herramientas disponibles en Claude Desktop
Una vez configurado, tendrás acceso a las 46 herramientas de TimeChimp a través de Claude Desktop:
- Proyectos: Crear, leer, actualizar, eliminar proyectos con perspectivas
- Usuarios: Gestionar usuarios con contratos y roles
- Registros de tiempo: Rastrear y gestionar registros de tiempo
- Contactos: Gestión completa de contactos
- Clientes: Gestión completa del ciclo de vida del cliente
- Gastos: Seguimiento de gastos con flujos de aprobación
- Kilometraje: Seguimiento de kilometraje con gestión de vehículos
- Y mucho más...
Puedes pedirle a Claude que realice cualquier operación de TimeChimp de forma natural, como "Crea un nuevo proyecto para el cliente ABC" o "Muéstrame todos los gastos pendientes que necesitan aprobación".
Uso
Ejecutar el servidor
# Start the server
npm start
# Or run directly
node timechimp-mcp-server.js
# For development with debugging
npm run dev
Herramientas disponibles
Proyectos
1. get_projects
Recupera proyectos de TimeChimp.
Parámetros:
top(número, opcional): Número máximo de proyectos a devolver (1-10000, predeterminado: 100)skip(número, opcional): Número de proyectos a omitir para la paginación (predeterminado: 0)count(booleano, opcional): Si se debe incluir el recuento total de resultados (predeterminado: true)expand(cadena, opcional): Lista de propiedades separadas por comas para expandir (p. ej., "customer,tasks")active_only(booleano, opcional): Devolver solo proyectos activos (predeterminado: false)filter(cadena, opcional): Expresión de filtro ODataorderby(cadena, opcional): Expresión de ordenación OData
Ejemplo:
{
"name": "get_projects",
"arguments": {
"top": 50,
"active_only": true,
"expand": "customer,tasks",
"orderby": "name desc"
}
}
2. get_project_by_id
Obtiene un proyecto específico por ID.
Parámetros:
id(número, obligatorio): ID del proyectoexpand(cadena, opcional): Lista de propiedades separadas por comas para expandir
Ejemplo:
{
"name": "get_project_by_id",
"arguments": {
"id": 123,
"expand": "customer,tasks"
}
}
3. create_project
Crea un nuevo proyecto.
Parámetros:
name(cadena, obligatorio): El nombre del proyectoactive(booleano, opcional): Si el proyecto puede utilizarse (predeterminado: true)code(cadena, opcional): El código del proyectonotes(cadena, opcional): La descripción del proyectocolor(cadena, opcional): El color del proyectostartDate(cadena, opcional): La fecha de inicio del proyecto (formato AAAA-MM-DD)endDate(cadena, opcional): La fecha de fin del proyecto (formato AAAA-MM-DD)invoicing(objeto, opcional): La configuración de facturación del proyectomethod(cadena, opcional): El método de facturación del proyecto utilizado- Valores permitidos:
NoInvoicing,TaskHourlyRate,UserHourlyRate,ProjectHourlyRate,CustomerHourlyRate,ProjectRate,TaskRate
- Valores permitidos:
hourlyRate(número, opcional): La tarifa por hora del proyecto (solo se usa cuando el método de facturación = ProjectHourlyRate)fixedRate(número, opcional): La tarifa/precio fijo del proyecto (solo se usa cuando el método de facturación = ProjectRate)reference(cadena, opcional): La referencia de facturación del proyectodate(cadena, opcional): La fecha de facturación del proyecto (formato AAAA-MM-DD, solo se usa cuando el método de facturación = ProjectRate)
budget(objeto, opcional): La configuración de presupuesto del proyectomethod(cadena, opcional): El método de presupuesto del proyecto utilizado- Valores permitidos:
NoBudget,TotalHours,TaskHours,UserHours,TotalRate,TaskRate,TotalCost
- Valores permitidos:
hours(número, opcional): El presupuesto por horas del proyecto (solo se usa cuando el método de presupuesto = TotalHours)rate(número, opcional): La tarifa de presupuesto del proyecto (solo se usa cuando el método de presupuesto = TotalRate o TotalCost)notificationPercentage(número, opcional): El umbral de porcentaje de presupuesto en el que se envía una notificación
customer(objeto, opcional): Cliente a vincular con el proyectoid(número, obligatorio): Identificador único del cliente
mainProject(objeto, opcional): Proyecto principal a vincular con el proyecto (si es un subproyecto)id(número, obligatorio): Identificador único del proyecto
subprojects(matriz, opcional): Lista de subproyectos a vincular al proyecto (si es un proyecto principal)managers(matriz, opcional): Lista de gestores a vincular al proyectotags(matriz, opcional): Lista de etiquetas a vincular al proyectoprojectTasks(matriz, obligatorio): Lista de tareas de proyecto a vincular al proyecto (si no se especifican tareas, se completarán previamente las tareas comunes activas)projectUsers(matriz, obligatorio): Lista de usuarios de proyecto a vincular al proyecto (si no se especifican usuarios, se completarán previamente los usuarios activos)
Ejemplo:
{
"name": "create_project",
"arguments": {
"name": "Website Redesign",
"code": "WEB-2024",
"notes": "Complete redesign of company website",
"color": "#3498db",
"startDate": "2024-01-15",
"endDate": "2024-06-30",
"invoicing": {
"method": "ProjectHourlyRate",
"hourlyRate": 125.00,
"reference": "WEB-2024-INV"
},
"budget": {
"method": "TotalHours",
"hours": 400,
"notificationPercentage": 80
},
"customer": {"id": 123},
"managers": [{"id": 456}],
"tags": [{"id": 1}, {"id": 2}],
"projectTasks": [
{
"active": true,
"billable": true,
"hourlyRate": 125.00,
"task": {"id": 789}
}
],
"projectUsers": [
{
"active": true,
"hourlyRate": 125.00,
"budgetHours": 200,
"user": {"id": 101}
}
]
}
}
4. update_project
Actualiza un proyecto existente.
Parámetros:
id(número, obligatorio): ID del proyectoname(cadena, obligatorio): El nombre del proyectoactive(booleano, opcional): Si el proyecto puede utilizarsecode(cadena, opcional): El código del proyectonotes(cadena, opcional): La descripción del proyectocolor(cadena, opcional): El color del proyectostartDate(cadena, opcional): La fecha de inicio del proyecto (formato AAAA-MM-DD)endDate(cadena, opcional): La fecha de fin del proyecto (formato AAAA-MM-DD)invoicing(objeto, obligatorio): La configuración de facturación del proyectomethod(cadena, opcional): El método de facturación del proyecto utilizado- Valores permitidos:
NoInvoicing,TaskHourlyRate,UserHourlyRate,ProjectHourlyRate,CustomerHourlyRate,ProjectRate,TaskRate,Subscription
- Valores permitidos:
hourlyRate(número, opcional): La tarifa por hora del proyecto (solo se usa cuando el método de facturación = ProjectHourlyRate)fixedRate(número, opcional): La tarifa/precio fijo del proyecto (solo se usa cuando el método de facturación = ProjectRate)reference(cadena, opcional): La referencia de facturación del proyectodate(cadena, opcional): La fecha de facturación del proyecto (formato AAAA-MM-DD, solo se usa cuando el método de facturación = ProjectRate)
budget(objeto, obligatorio): La configuración de presupuesto del proyectomethod(cadena, opcional): El método de presupuesto del proyecto utilizado- Valores permitidos:
NoBudget,TotalHours,TaskHours,UserHours,TotalRate,TaskRate,Invoiced,TotalCost
- Valores permitidos:
hours(número, opcional): El presupuesto por horas del proyecto (solo se usa cuando el método de presupuesto = TotalHours)rate(número, opcional): La tarifa de presupuesto del proyecto (solo se usa cuando el método de presupuesto = TotalRate o TotalCost)notificationPercentage(número, opcional): El umbral de porcentaje de presupuesto en el que se envía una notificación
customer(objeto, opcional): Cliente a vincular con el proyectoid(número, obligatorio): Identificador único del cliente
mainProject(objeto, opcional): Proyecto principal a vincular con el proyecto (si es un subproyecto)id(número, obligatorio): Identificador único del proyecto
subprojects(matriz, opcional): Lista de subproyectos a vincular al proyecto (si es un proyecto principal)managers(matriz, opcional): Lista de gestores a vincular al proyectotags(matriz, opcional): Lista de etiquetas a vincular al proyectoprojectTasks(matriz, obligatorio): Lista de tareas de proyecto a vincular al proyectoprojectUsers(matriz, obligatorio): Lista de usuarios de proyecto a vincular al proyecto
Ejemplo:
{
"name": "update_project",
"arguments": {
"id": 123,
"name": "Website Redesign - Phase 2",
"endDate": "2024-08-31",
"invoicing": {
"method": "ProjectHourlyRate",
"hourlyRate": 150.00
},
"budget": {
"method": "TotalHours",
"hours": 600,
"notificationPercentage": 85
},
"projectTasks": [
{
"id": 456,
"active": true,
"billable": true,
"hourlyRate": 150.00,
"budgetHours": 120,
"task": {"id": 789}
}
],
"projectUsers": [
{
"id": 789,
"active": true,
"hourlyRate": 150.00,
"budgetHours": 300,
"costHourlyRate": 90.00,
"user": {"id": 101}
}
]
}
}
5. delete_project
Elimina un proyecto.
Parámetros:
id(número, obligatorio): ID del proyecto
Ejemplo:
{
"name": "delete_project",
"arguments": {
"id": 123
}
}
6. get_project_insights
Obtiene perspectivas del proyecto, incluidos horas, presupuesto, costos y datos de ingresos.
Parámetros:
id(número, obligatorio): ID del proyecto
Ejemplo:
{
"name": "get_project_insights",
"arguments": {
"id": 123
}
}
Usuarios
7. get_users
Recupera usuarios de TimeChimp.
Parámetros:
top(número, opcional): Número máximo de usuarios a devolver (1-10000, predeterminado: 100)skip(número, opcional): Número de usuarios a omitir para paginación (predeterminado: 0)count(booleano, opcional): Si se debe incluir el recuento total de resultados (predeterminado: true)expand(cadena, opcional): Lista de propiedades separadas por comas para expandiractive_only(booleano, opcional): Devolver solo usuarios activos (predeterminado: false)filter(cadena, opcional): Expresión de filtro ODataorderby(cadena, opcional): Expresión de ordenación OData
Ejemplo:
{
"name": "get_users",
"arguments": {
"top": 100,
"filter": "firstName eq 'John' and active eq true",
"orderby": "lastName asc"
}
}
8. get_user_by_id
Obtener un usuario específico por ID.
Parámetros:
id(número, obligatorio): ID del usuarioexpand(cadena, opcional): Lista de propiedades separadas por comas para expandir
9. create_user
Crear un nuevo usuario (nota: agregar usuarios puede resultar en facturación adicional y costo extra).
Parámetros:
userName(cadena, obligatorio): La dirección de correo electrónico del usuariodisplayName(cadena, obligatorio): El nombre del usuariolanguage(cadena, opcional): El idioma del usuario (predeterminado: en)- Valores permitidos:
en,nl,de,pl,fr,es
- Valores permitidos:
role(objeto, opcional): Rol a asignar al usuario (predeterminado: User)id(número, obligatorio): Identificador único del rol
sendInvitation(booleano, opcional): Si se debe enviar una invitación al usuario (predeterminado: false)contracts(matriz, opcional): Lista de contratos de usuario a vincularstartDate(cadena, opcional): Fecha de inicio del contrato (formato AAAA-MM-DD, predeterminado: hoy UTC)endDate(cadena, opcional): Fecha de fin del contrato (formato AAAA-MM-DD)weekHours(número, opcional): Horas por semana del contratohourlyRate(número, opcional): Tarifa horaria de venta del contratocostHourlyRate(número, opcional): Tarifa horaria de compra del contratocontractNumber(cadena, opcional): Número del contratocontractType(objeto, obligatorio): Tipo de contrato a vincular al contratoid(número, obligatorio): Identificador único del tipo de contrato
Ejemplo:
{
"name": "create_user",
"arguments": {
"userName": "john.doe@company.com",
"displayName": "John Doe",
"language": "en",
"role": {"id": 2},
"sendInvitation": true,
"contracts": [
{
"startDate": "2024-01-15",
"endDate": "2024-12-31",
"weekHours": 40,
"hourlyRate": 75.00,
"costHourlyRate": 50.00,
"contractNumber": "EMP-2024-001",
"contractType": {"id": 1}
}
]
}
}
10. update_user
Actualizar un usuario existente.
Parámetros:
id(número, obligatorio): ID del usuariodisplayName(cadena, obligatorio): El nombre del usuariolanguage(cadena, opcional): El idioma del usuario (predeterminado: en)- Valores permitidos:
en,nl,de,pl,fr,es
- Valores permitidos:
employeeNumber(cadena, opcional): El número de empleado del usuariobadgeNumber(cadena, opcional): El número de placa del usuariocitizenServiceNumber(cadena, opcional): El número de servicio ciudadano del usuariorole(objeto, opcional): Rol a asignar al usuario (predeterminado: User)id(número, obligatorio): Identificador único del rol
tags(matriz, opcional): Lista de etiquetas a vincular con el usuariocontracts(matriz, opcional): Lista de contratos de usuario a vincularid(número, opcional): Identificador único del contrato de usuario (puede ser null si se necesita agregar un nuevo contrato de usuario)startDate(cadena, opcional): Fecha de inicio del contrato (formato AAAA-MM-DD, predeterminado: hoy UTC)endDate(cadena, opcional): Fecha de fin del contrato (formato AAAA-MM-DD)weekHours(número, opcional): Horas por semana del contratohourlyRate(número, opcional): Tarifa horaria de venta del contratocostHourlyRate(número, opcional): Tarifa horaria de compra/costo del contratocontractNumber(cadena, opcional): Número del contratocontractType(objeto, obligatorio): Tipo de contrato a vincular con el contratoid(número, obligatorio): Identificador único del tipo de contrato
Ejemplo:
{
"name": "update_user",
"arguments": {
"id": 123,
"displayName": "John Doe - Senior Developer",
"language": "en",
"employeeNumber": "EMP-001",
"badgeNumber": "BADGE-001",
"role": {"id": 3},
"tags": [{"id": 1}, {"id": 2}],
"contracts": [
{
"id": 456,
"startDate": "2024-01-15",
"endDate": "2024-12-31",
"weekHours": 40,
"hourlyRate": 85.00,
"costHourlyRate": 55.00,
"contractNumber": "EMP-2024-001-UPD",
"contractType": {"id": 1}
}
]
}
}
Entradas de Tiempo
11. get_time_entries
Recupera entradas de tiempo de TimeChimp.
Parámetros:
top(número, opcional): Número máximo de entradas de tiempo a devolver (1-10000, predeterminado: 100)skip(número, opcional): Número de entradas de tiempo a omitir para paginación (predeterminado: 0)count(booleano, opcional): Si se debe incluir el recuento total de resultados (predeterminado: true)expand(cadena, opcional): Lista de propiedades separadas por comas para expandir (p. ej., "user,project,task")user_id(cadena, opcional): Filtrar por ID de usuario específicoproject_id(cadena, opcional): Filtrar por ID de proyecto específicofrom_date(cadena, opcional): Fecha de inicio para filtrar (formato AAAA-MM-DD)to_date(cadena, opcional): Fecha de fin para filtrar (formato AAAA-MM-DD)filter(cadena, opcional): Expresión de filtro ODataorderby(cadena, opcional): Expresión de ordenación OData
Ejemplo:
{
"name": "get_time_entries",
"arguments": {
"top": 100,
"from_date": "2024-01-01",
"to_date": "2024-01-31",
"user_id": "123",
"expand": "user,project,task",
"orderby": "date desc"
}
}
12. get_time_entry_by_id
Obtener una entrada de tiempo específica por ID.
Parámetros:
id(número, obligatorio): ID de la entrada de tiempoexpand(cadena, opcional): Lista de propiedades separadas por comas para expandir
Contactos
13. get_contacts
Recupera todos los contactos de TimeChimp.
Parámetros:
top(número, opcional): Número máximo de contactos a devolver (1-10000, predeterminado: 100)skip(número, opcional): Número de contactos a omitir para paginación (predeterminado: 0)count(booleano, opcional): Si se debe incluir el recuento total de resultados (predeterminado: true)expand(cadena, opcional): Lista de propiedades separadas por comas para expandir (p. ej., "customers")active_only(booleano, opcional): Devolver solo contactos activos (predeterminado: false)filter(cadena, opcional): Expresión de filtro ODataorderby(cadena, opcional): Expresión de ordenación OData
Ejemplo:
{
"name": "get_contacts",
"arguments": {
"top": 50,
"expand": "customers",
"filter": "name eq 'John Doe'",
"orderby": "name asc"
}
}
14. get_contact_by_id
Obtener un contacto específico por ID.
Parámetros:
id(número, obligatorio): ID del contactoexpand(cadena, opcional): Lista de propiedades separadas por comas para expandir
15. create_contact
Crear un nuevo contacto.
Parámetros:
name(cadena, obligatorio): El nombre del contactojobTitle(cadena, opcional): El cargo del contactoemail(cadena, opcional): La dirección de correo electrónico del contactophone(cadena, opcional): El número de teléfono del contactouseForInvoicing(booleano, opcional): Si la información del contacto se usará para facturación (predeterminado: false)active(booleano, opcional): Si el contacto puede ser utilizado (predeterminado: true)customers(matriz, opcional): Lista de IDs de clientes para vincular a este contacto
Ejemplo:
{
"name": "create_contact",
"arguments": {
"name": "John Doe",
"jobTitle": "Project Manager",
"email": "john.doe@example.com",
"phone": "+1234567890",
"useForInvoicing": true,
"customers": [{"id": 123}, {"id": 456}]
}
}
16. update_contact
Actualizar un contacto existente.
Parámetros:
id(número, obligatorio): ID del contactoname(cadena, obligatorio): El nombre del contactojobTitle(cadena, opcional): El cargo del contactoemail(cadena, opcional): La dirección de correo electrónico del contactophone(cadena, opcional): El número de teléfono del contactouseForInvoicing(booleano, opcional): Si la información del contacto se usará para facturaciónactive(booleano, opcional): Si el contacto puede ser utilizadocustomers(matriz, opcional): Lista de IDs de clientes para vincular a este contacto
17. delete_contact
Eliminar un contacto.
Parámetros:
id(número, obligatorio): ID del contacto
Ejemplo:
{
"name": "delete_contact",
"arguments": {
"id": 123
}
}
Clientes
18. get_customers
Recupera todos los clientes de TimeChimp.
Parámetros:
top(número, opcional): Número máximo de clientes a devolver (1-10000, predeterminado: 100)skip(número, opcional): Número de clientes a omitir para paginación (predeterminado: 0)count(booleano, opcional): Si se debe incluir el recuento total de resultados (predeterminado: true)expand(cadena, opcional): Lista de propiedades separadas por comas para expandir (p. ej., "contacts,projects")active_only(booleano, opcional): Devolver solo clientes activos (predeterminado: false)filter(cadena, opcional): Expresión de filtro ODataorderby(cadena, opcional): Expresión de ordenación OData
19. get_customer_by_id
Obtener un cliente específico por ID.
Parámetros:
id(número, obligatorio): ID del clienteexpand(cadena, opcional): Lista de propiedades separadas por comas para expandir
20. create_customer
Crear un nuevo cliente.
Parámetros:
name(cadena, obligatorio): El nombre del clienteactive(booleano, opcional): Si el cliente puede ser utilizado (predeterminado: true)relationId(cadena, opcional): El número del clienteaddress(objeto, opcional): La información de dirección del clienteaddress(cadena, opcional): La línea de direcciónpostalCode(cadena, opcional): El código postalcity(cadena, opcional): La ciudadcountry(cadena, opcional): El país
phone(cadena, opcional): El número de teléfono del clienteemail(cadena, opcional): La dirección de correo electrónico del clientewebsite(cadena, opcional): La URL del sitio web del clientepaymentPeriod(número, opcional): El plazo de pago del cliente en díashourlyRate(número, opcional): El precio horario predeterminado del clientemileageRate(número, opcional): El precio de kilometraje predeterminado del cliente, por KMiban(cadena, opcional): El IBAN del clientebic(cadena, opcional): El BIC del clientevatNumber(cadena, opcional): El número de IVA del clientekvkNumber(cadena, opcional): El ID comercial del clienteinvoiceAddress(objeto, opcional): La información de dirección de facturación del cliente, anulación de la información de dirección del clienteaddress(cadena, opcional): La línea de direcciónpostalCode(cadena, opcional): El código postalcity(cadena, opcional): La ciudadcountry(cadena, opcional): El país
notes(cadena, opcional): Las notas del clienteprospect(booleano, opcional): Si el cliente es un prospectovatRate(objeto, opcional): Tasa de IVA a utilizar para este clienteid(número, obligatorio): Identificador único de la tasa de IVA
tags(matriz, opcional): Lista de IDs de etiquetas para vincular a este clientecontacts(matriz, opcional): Lista de IDs de contactos para vincular a este cliente
Ejemplo:
{
"name": "create_customer",
"arguments": {
"name": "Acme Corporation",
"email": "contact@acme.com",
"phone": "+1234567890",
"website": "https://acme.com",
"address": {
"address": "123 Business St",
"postalCode": "12345",
"city": "Business City",
"country": "USA"
},
"paymentPeriod": 30,
"hourlyRate": 150.00,
"prospect": false,
"tags": [{"id": 1}, {"id": 2}],
"contacts": [{"id": 123}]
}
}
21. update_customer
Actualizar un cliente existente. Parámetros:
id(number, obligatorio): ID del clientename(string, obligatorio): El nombre del clienteactive(boolean, opcional): Si el cliente puede ser utilizadorelationId(string, opcional): El número de clienteaddress(object, opcional): La información de dirección del clienteaddress(string, opcional): La línea de direcciónpostalCode(string, opcional): El código postalcity(string, opcional): La ciudadcountry(string, opcional): El país
phone(string, opcional): El número de teléfono del clienteemail(string, opcional): La dirección de correo electrónico del clientewebsite(string, opcional): La URL del sitio web del clientepaymentPeriod(number, opcional): El plazo de pago del cliente en díashourlyRate(number, opcional): El precio por hora predeterminado del clientemileageRate(number, opcional): El precio por kilómetro predeterminado del clienteiban(string, opcional): El IBAN del clientebic(string, opcional): El BIC del clientevatNumber(string, opcional): El número de IVA del clientekvkNumber(string, opcional): El ID de negocio del clienteinvoiceAddress(object, opcional): La información de dirección de facturación del cliente, si difiere de la información de dirección del clienteaddress(string, opcional): La línea de direcciónpostalCode(string, opcional): El código postalcity(string, opcional): La ciudadcountry(string, opcional): El país
notes(string, opcional): Las notas del clienteprospect(boolean, opcional): El cliente es un prospectovatRate(object, opcional): Tipo de IVA a vincular con el clienteid(number, obligatorio): Identificador único para el tipo de IVA
tags(array, opcional): Lista de IDs de etiquetas para vincular a este clientecontacts(array, opcional): Lista de IDs de contactos para vincular a este cliente
Ejemplo:
{
"name": "update_customer",
"arguments": {
"id": 456,
"name": "Acme Corporation Ltd",
"email": "newcontact@acme.com",
"paymentPeriod": 45,
"hourlyRate": 175.00
}
}
22. delete_customer
Eliminar un cliente.
Parámetros:
id(number, obligatorio): ID del cliente
Ejemplo:
{
"name": "delete_customer",
"arguments": {
"id": 456
}
}
Tareas
23. get_tasks
Recuperar todas las tareas de TimeChimp.
Parámetros:
top(number, opcional): Número máximo de tareas a devolver (1-10000, predeterminado: 100)skip(number, opcional): Número de tareas a omitir para paginación (predeterminado: 0)count(boolean, opcional): Si incluir el recuento total de resultados (predeterminado: true)expand(string, opcional): Lista de propiedades separadas por comas para expandir (p. ej., "project")active_only(boolean, opcional): Devolver solo tareas activas (predeterminado: false)project_id(string, opcional): Filtrar por ID de proyecto específicofilter(string, opcional): Expresión de filtro ODataorderby(string, opcional): Expresión de ordenamiento OData
24. get_task_by_id
Obtener una tarea específica por ID.
Parámetros:
id(number, obligatorio): ID de la tareaexpand(string, opcional): Lista de propiedades separadas por comas para expandir
Facturas
25. get_invoices
Recuperar todas las facturas de TimeChimp.
Parámetros:
top(number, opcional): Número máximo de facturas a devolver (1-10000, predeterminado: 100)skip(number, opcional): Número de facturas a omitir para paginación (predeterminado: 0)count(boolean, opcional): Si incluir el recuento total de resultados (predeterminado: true)expand(string, opcional): Lista de propiedades separadas por comas para expandir (p. ej., "customer,projects")customer_id(string, opcional): Filtrar por ID de cliente específicofrom_date(string, opcional): Fecha de inicio para filtrar (formato YYYY-MM-DD)to_date(string, opcional): Fecha de fin para filtrar (formato YYYY-MM-DD)filter(string, opcional): Expresión de filtro ODataorderby(string, opcional): Expresión de ordenamiento OData
26. get_invoice_by_id
Obtener una factura específica por ID.
Parámetros:
id(number, obligatorio): ID de la facturaexpand(string, opcional): Lista de propiedades separadas por comas para expandir
Gastos
27. get_expenses
Recuperar todos los gastos de TimeChimp.
Parámetros:
top(number, opcional): Número máximo de gastos a devolver (1-10000, predeterminado: 100)skip(number, opcional): Número de gastos a omitir para paginación (predeterminado: 0)count(boolean, opcional): Si incluir el recuento total de resultados (predeterminado: true)expand(string, opcional): Lista de propiedades separadas por comas para expandir (p. ej., "user,project,customer")user_id(string, opcional): Filtrar por ID de usuario específicoproject_id(string, opcional): Filtrar por ID de proyecto específicocustomer_id(string, opcional): Filtrar por ID de cliente específicofrom_date(string, opcional): Fecha de inicio para filtrar (formato YYYY-MM-DD)to_date(string, opcional): Fecha de fin para filtrar (formato YYYY-MM-DD)filter(string, opcional): Expresión de filtro ODataorderby(string, opcional): Expresión de ordenamiento OData
28. get_expense_by_id
Obtener un gasto específico por ID.
Parámetros:
id(number, obligatorio): ID del gastoexpand(string, opcional): Lista de propiedades separadas por comas para expandir
29. create_expense
Crear un nuevo gasto.
Parámetros:
date(string, opcional): La fecha del gasto (formato YYYY-MM-DD, predeterminado: hoy en UTC)notes(string, opcional): Las notas del gastoquantity(number, opcional): La cantidad del gasto (predeterminado: 1)rate(number, obligatorio): La tarifa/precio del gastobillable(boolean, opcional): Si el gasto puede ser facturado (predeterminado: true)customer(object, opcional): Cliente a vincular con el gastoid(number, obligatorio): Identificador único para el cliente
project(object, opcional): Proyecto a vincular con el gastoid(number, obligatorio): Identificador único para el proyecto
product(object, opcional): Producto a vincular con el gastoid(number, obligatorio): Identificador único para el producto
user(object, obligatorio): Usuario a vincular con el gastoid(number, obligatorio): Identificador único para el usuario
vatRate(object, opcional): Tipo de IVA a vincular con el gasto (predeterminado: porcentaje más alto)id(number, obligatorio): Identificador único para el tipo de IVA
Ejemplo:
{
"name": "create_expense",
"arguments": {
"date": "2024-01-15",
"notes": "Business lunch with client",
"quantity": 1,
"rate": 75.50,
"billable": true,
"customer": {"id": 123},
"project": {"id": 456},
"user": {"id": 789}
}
}
30. update_expense
Actualizar un gasto existente.
Parámetros:
id(number, obligatorio): ID del gastodate(string, opcional): La fecha del gasto (formato YYYY-MM-DD)notes(string, opcional): Las notas del gastoquantity(number, opcional): La cantidad del gastorate(number, obligatorio): La tarifa/precio del gastobillable(boolean, opcional): Si el gasto puede ser facturadocustomer(object, opcional): Cliente a vincular con el gastoid(number, obligatorio): Identificador único para el cliente
project(object, opcional): Proyecto a vincular con el gastoid(number, obligatorio): Identificador único para el proyecto
product(object, opcional): Producto a vincular con el gastoid(number, obligatorio): Identificador único para el producto
user(object, obligatorio): Usuario a vincular con el gastoid(number, obligatorio): Identificador único para el usuario
vatRate(object, opcional): Tipo de IVA a vincular con el gastoid(number, obligatorio): Identificador único para el tipo de IVA
Ejemplo:
{
"name": "update_expense",
"arguments": {
"id": 123,
"notes": "Updated: Business lunch with client and partner",
"rate": 85.00,
"user": {"id": 789}
}
}
31. delete_expense
Eliminar un gasto.
Parámetros:
id(number, obligatorio): ID del gasto
Ejemplo:
{
"name": "delete_expense",
"arguments": {
"id": 123
}
}
32. update_expense_status
Actualizar el estado de los gastos (estado interno de aprobación/facturación).
Parámetros:
message(string, opcional): Mensaje del historial de estadoexpenses(array, obligatorio): Lista de gastos a actualizar (máximo de 100 entradas)id(number, obligatorio): Identificador único para el gasto
status(string, obligatorio): El estado interno de aprobación/facturación- Valores permitidos:
Open,PendingApproval,Approved,Invoiced,WrittenOff,Rejected
- Valores permitidos:
Ejemplo:
{
"name": "update_expense_status",
"arguments": {
"message": "Approved by manager",
"expenses": [{"id": 123}, {"id": 124}],
"status": "Approved"
}
}
33. update_expense_client_status
Actualizar el estado del cliente de los gastos (estado externo de aprobación/facturación).
Parámetros:
clientStatus(string, obligatorio): El estado externo de aprobación/facturación (usado solo cuando el portal del cliente está habilitado)- Valores permitidos:
Open,PendingApproval,Approved,Invoiced,WrittenOff,Rejected
- Valores permitidos:
message(string, opcional): Mensaje del historial de estadoexpenses(array, obligatorio): Lista de gastos a actualizar (máximo de 100 entradas)id(number, obligatorio): Identificador único para el gasto
Ejemplo:
{
"name": "update_expense_client_status",
"arguments": {
"clientStatus": "Approved",
"message": "Client approved expenses",
"expenses": [{"id": 123}, {"id": 124}]
}
}
34. get_expense_status_history
Consultar los registros de modificación del historial de estado de un gasto.
Parámetros:
id(number, obligatorio): ID del gastotop(number, opcional): Número máximo de registros del historial de estado a devolver (1-10000, predeterminado: 100)skip(number, opcional): Número de registros del historial de estado a omitir para paginación (predeterminado: 0)count(boolean, opcional): Si incluir el recuento total de resultados (predeterminado: true)expand(string, opcional): Lista de propiedades separadas por comas para expandirfilter(string, opcional): Expresión de filtro ODataorderby(string, opcional): Expresión de ordenamiento OData (p. ej., "modifiedOn desc")
Ejemplo:
{
"name": "get_expense_status_history",
"arguments": {
"id": 123,
"orderby": "modifiedOn desc",
"top": 50
}
}
Kilometraje
35. get_mileage
Recuperar todas las entradas de kilometraje de TimeChimp.
Parámetros:
top(number, opcional): Número máximo de entradas de kilometraje a devolver (1-10000, predeterminado: 100)skip(number, opcional): Número de entradas de kilometraje a omitir para paginación (predeterminado: 0)count(boolean, opcional): Si incluir el recuento total de resultados (predeterminado: true)expand(string, opcional): Lista de propiedades separadas por comas para expandir (p. ej., "user,project,customer")user_id(string, opcional): Filtrar por ID de usuario específicoproject_id(string, opcional): Filtrar por ID de proyecto específicocustomer_id(string, opcional): Filtrar por ID de cliente específicofrom_date(string, opcional): Fecha de inicio para filtrar (formato YYYY-MM-DD)to_date(string, opcional): Fecha de fin para filtrar (formato YYYY-MM-DD)filter(string, opcional): Expresión de filtro ODataorderby(string, opcional): Expresión de ordenamiento OData
36. get_mileage_by_id
Obtener una entrada de kilometraje específica por ID.
Parámetros:
id(number, obligatorio): ID de la entrada de kilometrajeexpand(string, opcional): Lista de propiedades separadas por comas para expandir
37. create_mileage
Crear una nueva entrada de kilometraje. Parámetros:
date(string, opcional): La fecha del kilometraje (formato AAAA-MM-DD, por defecto: hoy UTC)fromAddress(string, opcional): La dirección de origen del kilometrajetoAddress(string, opcional): La dirección de destino del kilometrajenotes(string, opcional): Las notas del kilometrajedistance(number, obligatorio): La distancia del kilometraje en kmbillable(boolean, opcional): Si el kilometraje puede facturarse (por defecto: true)type(string, obligatorio): El tipo de kilometraje- Valores permitidos:
Private,Business,HomeWork
- Valores permitidos:
customer(object, opcional): Cliente a vincular con el kilometrajeid(number, obligatorio): Identificador único del cliente
project(object, opcional): Proyecto a vincular con el kilometrajeid(number, obligatorio): Identificador único del proyecto
vehicle(object, opcional): Vehículo a vincular con el kilometrajeid(number, obligatorio): Identificador único del vehículo de kilometraje
user(object, obligatorio): Usuario a vincular con el kilometrajeid(number, obligatorio): Identificador único del usuario
Ejemplo:
{
"name": "create_mileage",
"arguments": {
"date": "2024-01-15",
"fromAddress": "Office - 123 Business St, Business City",
"toAddress": "Client Site - 456 Client Ave, Client City",
"notes": "Client meeting and project consultation",
"distance": 45.5,
"billable": true,
"type": "Business",
"customer": {"id": 123},
"project": {"id": 456},
"vehicle": {"id": 789},
"user": {"id": 101}
}
}
38. update_mileage
Actualizar una entrada de kilometraje existente.
Parámetros:
id(number, obligatorio): ID de la entrada de kilometrajedate(string, opcional): La fecha del kilometraje (formato AAAA-MM-DD)fromAddress(string, opcional): La dirección de origen del kilometrajetoAddress(string, opcional): La dirección de destino del kilometrajenotes(string, opcional): Las notas del kilometrajedistance(number, obligatorio): La distancia del kilometraje en kmbillable(boolean, opcional): Si el kilometraje puede facturarsetype(string, obligatorio): El tipo de kilometraje- Valores permitidos:
Private,Business,HomeWork
- Valores permitidos:
customer(object, opcional): Cliente a vincular con el kilometrajeid(number, obligatorio): Identificador único del cliente
project(object, opcional): Proyecto a vincular con el kilometrajeid(number, obligatorio): Identificador único del proyecto
vehicle(object, opcional): Vehículo a vincular con el kilometrajeid(number, obligatorio): Identificador único del vehículo de kilometraje
user(object, obligatorio): Usuario a vincular con el kilometrajeid(number, obligatorio): Identificador único del usuario
Ejemplo:
{
"name": "update_mileage",
"arguments": {
"id": 123,
"notes": "Updated: Client meeting, project consultation, and site inspection",
"distance": 52.3,
"fromAddress": "Office - 123 Business St, Business City",
"toAddress": "Client Site - 456 Client Ave, Client City (with site inspection)",
"type": "Business",
"user": {"id": 101}
}
}
39. delete_mileage
Eliminar una entrada de kilometraje.
Parámetros:
id(number, obligatorio): ID de la entrada de kilometraje
Ejemplo:
{
"name": "delete_mileage",
"arguments": {
"id": 123
}
}
40. update_mileage_status
Actualizar el estado de las entradas de kilometraje (estado interno de aprobación/facturación).
Parámetros:
message(string, opcional): Mensaje del historial de estadomileages(array, obligatorio): Lista de entradas de kilometraje a actualizar (máximo de 100 entradas)id(number, obligatorio): Identificador único del kilometraje
status(string, obligatorio): El estado interno de aprobación/facturación- Valores permitidos:
Open,PendingApproval,Approved,Invoiced,WrittenOff,Rejected
- Valores permitidos:
Ejemplo:
{
"name": "update_mileage_status",
"arguments": {
"message": "Approved by manager after review",
"mileages": [{"id": 123}, {"id": 124}],
"status": "Approved"
}
}
41. update_mileage_client_status
Actualizar el estado del cliente de las entradas de kilometraje (estado externo de aprobación/facturación).
Parámetros:
clientStatus(string, obligatorio): El estado externo de aprobación/facturación (se usa solo cuando el portal del cliente está habilitado)- Valores permitidos:
Open,PendingApproval,Approved,Invoiced,WrittenOff,Rejected
- Valores permitidos:
message(string, opcional): Mensaje del historial de estadomileages(array, obligatorio): Lista de entradas de kilometraje a actualizar (máximo de 100 entradas)id(number, obligatorio): Identificador único del kilometraje
Ejemplo:
{
"name": "update_mileage_client_status",
"arguments": {
"clientStatus": "Approved",
"message": "Client approved mileage claims",
"mileages": [{"id": 123}, {"id": 124}]
}
}
42. get_mileage_status_history
Consultar los registros de modificación del historial de estado de una entrada de kilometraje.
Parámetros:
id(number, obligatorio): ID de la entrada de kilometrajetop(number, opcional): Número máximo de registros del historial de estado a devolver (1-10000, por defecto: 100)skip(number, opcional): Número de registros del historial de estado a omitir para la paginación (por defecto: 0)count(boolean, opcional): Si se debe incluir el recuento total de resultados (por defecto: true)expand(string, opcional): Lista de propiedades separadas por comas para expandirfilter(string, opcional): Expresión de filtro ODataorderby(string, opcional): Expresión de ordenación OData (p. ej., "modifiedOn desc")
Ejemplo:
{
"name": "get_mileage_status_history",
"arguments": {
"id": 123,
"orderby": "modifiedOn desc",
"top": 50
}
}
43. get_mileage_vehicles
Recuperar todos los vehículos de kilometraje de TimeChimp.
Parámetros:
top(number, opcional): Número máximo de vehículos de kilometraje a devolver (1-10000, por defecto: 100)skip(number, opcional): Número de vehículos de kilometraje a omitir para la paginación (por defecto: 0)count(boolean, opcional): Si se debe incluir el recuento total de resultados (por defecto: true)expand(string, opcional): Lista de propiedades separadas por comas para expandir (p. ej., "users")active_only(boolean, opcional): Devolver solo vehículos de kilometraje activos (por defecto: false)filter(string, opcional): Expresión de filtro ODataorderby(string, opcional): Expresión de ordenación OData
Ejemplo:
{
"name": "get_mileage_vehicles",
"arguments": {
"active_only": true,
"expand": "users",
"orderby": "brand asc"
}
}
44. get_mileage_vehicle_by_id
Obtener un vehículo de kilometraje específico por ID.
Parámetros:
id(number, obligatorio): ID del vehículo de kilometrajeexpand(string, opcional): Lista de propiedades separadas por comas para expandir
Ejemplo:
{
"name": "get_mileage_vehicle_by_id",
"arguments": {
"id": 789,
"expand": "users"
}
}
Etiquetas
45. get_tags
Recuperar todas las etiquetas de TimeChimp.
Parámetros:
top(number, opcional): Número máximo de etiquetas a devolver (1-10000, por defecto: 100)skip(number, opcional): Número de etiquetas a omitir para la paginación (por defecto: 0)count(boolean, opcional): Si se debe incluir el recuento total de resultados (por defecto: true)expand(string, opcional): Lista de propiedades separadas por comas para expandiractive_only(boolean, opcional): Devolver solo etiquetas activas (por defecto: false)filter(string, opcional): Expresión de filtro ODataorderby(string, opcional): Expresión de ordenación OData
46. get_tag_by_id
Obtener una etiqueta específica por ID.
Parámetros:
id(number, obligatorio): ID de la etiquetaexpand(string, opcional): Lista de propiedades separadas por comas para expandir
Características de la API v2 de TimeChimp
Paginación
El servidor utiliza los parámetros de paginación estándar de TimeChimp:
$top: Número máximo de registros a devolver (1-10000, por defecto: 100)$skip: Número de registros a omitir para la paginación
Filtrado (OData)
El servidor admite las convenciones de filtrado OData de TimeChimp:
- Filtros básicos:
name eq 'Project Name' - Filtros booleanos:
active eq true - Filtros de fecha:
date eq 2023-12-31 - Filtros de fecha y hora:
start gt 2023-12-31T23:59:59Z - Filtros combinados:
active eq true and name eq 'Project Name' - Filtros de colección:
projects/any(project:project/id eq 123)
Ordenación (OData)
El servidor admite la ordenación OData:
- Campo único:
name desc - Varios campos:
name desc, createdAt asc - Propiedades anidadas:
address/city asc
Expansión (OData)
El servidor admite la expansión de entidades relacionadas:
- Expansión única:
customer - Expansiones múltiples:
customer,projects,tasks - Expansiones anidadas:
customer/contacts
Recuento
El servidor admite el recuento de resultados totales:
$count=true: Incluir el recuento total en la respuesta$count=false: Excluir el recuento total (por defecto por rendimiento)
Puntos de conexión de la API
El servidor interactúa con los siguientes puntos de conexión de la API v2 de TimeChimp:
GET /projects- Recuperar proyectosGET /projects/{id}- Obtener un proyecto específico por IDPOST /projects- Crear un nuevo proyectoPUT /projects/{id}- Actualizar un proyecto existenteDELETE /projects/{id}- Eliminar proyectoGET /projects/{id}/insights- Obtener información del proyectoGET /users- Recuperar usuariosGET /users/{id}- Obtener un usuario específico por IDPOST /users- Crear un nuevo usuarioPUT /users/{id}- Actualizar un usuario existenteGET /times- Recuperar entradas de tiempoGET /times/{id}- Obtener una entrada de tiempo específica por IDGET /contacts- Recuperar contactosGET /contacts/{id}- Obtener un contacto específico por IDPOST /contacts- Crear un nuevo contactoPUT /contacts/{id}- Actualizar un contacto existenteDELETE /contacts/{id}- Eliminar contactoGET /customers- Recuperar clientesGET /customers/{id}- Obtener un cliente específico por IDPOST /customers- Crear un nuevo clientePUT /customers/{id}- Actualizar un cliente existenteDELETE /customers/{id}- Eliminar clienteGET /tasks- Recuperar tareasGET /tasks/{id}- Obtener una tarea específica por IDGET /invoices- Recuperar facturasGET /invoices/{id}- Obtener una factura específica por IDGET /expenses- Recuperar gastosGET /expenses/{id}- Obtener un gasto específico por IDPOST /expenses- Crear un nuevo gastoPUT /expenses/{id}- Actualizar un gasto existenteDELETE /expenses/{id}- Eliminar gastoPUT /expenses/status- Actualizar el estado del gasto (interno)PUT /expenses/clientStatus- Actualizar el estado del cliente del gasto (externo)GET /expenses/{id}/statusHistory- Obtener el historial de estado del gastoGET /mileage- Recuperar entradas de kilometrajeGET /mileage/{id}- Obtener una entrada de kilometraje específica por IDPOST /mileage- Crear una nueva entrada de kilometrajePUT /mileage/{id}- Actualizar una entrada de kilometraje existenteDELETE /mileage/{id}- Eliminar entrada de kilometrajePUT /mileage/status- Actualizar el estado del kilometraje (interno)PUT /mileage/clientStatus- Actualizar el estado del cliente del kilometraje (externo)GET /mileage/{id}/statusHistory- Obtener el historial de estado del kilometrajeGET /mileageVehicles- Recuperar vehículos de kilometrajeGET /mileageVehicles/{id}- Obtener un vehículo de kilometraje específico por IDGET /tags- Recuperar etiquetasGET /tags/{id}- Obtener una etiqueta específica por ID
Todas las solicitudes se autentican mediante el encabezado api-key y admiten parámetros de consulta OData.
Ejemplos avanzados
Filtrado complejo
{
"name": "get_time_entries",
"arguments": {
"filter": "date ge 2024-01-01 and date le 2024-01-31 and user/id eq 123 and project/active eq true",
"expand": "user,project,task",
"orderby": "date desc, start desc",
"top": 50
}
}
Ejemplo de paginación
{
"name": "get_projects",
"arguments": {
"top": 25,
"skip": 50,
"count": true,
"orderby": "name asc"
}
}
Creación y gestión de contactos
// Create a contact
{
"name": "create_contact",
"arguments": {
"name": "Jane Smith",
"jobTitle": "CEO",
"email": "jane@company.com",
"useForInvoicing": true,
"customers": [{"id": 123}]
}
}
// Update the contact
{
"name": "update_contact",
"arguments": {
"id": 456,
"name": "Jane Smith-Johnson",
"phone": "+1987654321"
}
}
// Get contact with expanded customers
{
"name": "get_contact_by_id",
"arguments": {
"id": 456,
"expand": "customers"
}
}
Creación y gestión de clientes
// Create a customer
{
"name": "create_customer",
"arguments": {
"name": "Acme Corporation",
"email": "contact@acme.com",
"phone": "+1234567890",
"website": "https://acme.com",
"address": {
"address": "123 Business St",
"postalCode": "12345",
"city": "Business City",
"country": "USA"
},
"paymentPeriod": 30,
"hourlyRate": 150.00,
"prospect": false,
"tags": [{"id": 1}, {"id": 2}],
"contacts": [{"id": 123}]
}
}
// Update the customer
{
"name": "update_customer",
"arguments": {
"id": 456,
"name": "Acme Corporation Ltd",
"email": "newcontact@acme.com",
"paymentPeriod": 45,
"hourlyRate": 175.00
}
}
// Get customer with expanded contacts and tags
{
"name": "get_customer_by_id",
"arguments": {
"id": 456,
"expand": "contacts,tags"
}
}
Creación y gestión de gastos
// Create an expense
{
"name": "create_expense",
"arguments": {
"date": "2024-01-15",
"notes": "Business lunch with client",
"quantity": 1,
"rate": 75.50,
"billable": true,
"customer": {"id": 123},
"project": {"id": 456},
"user": {"id": 789}
}
}
// Update the expense
{
"name": "update_expense",
"arguments": {
"id": 123,
"notes": "Updated: Business lunch with client and partner",
"rate": 85.00,
"user": {"id": 789}
}
}
// Update expense status (approve multiple expenses)
{
"name": "update_expense_status",
"arguments": {
"message": "Approved by manager",
"expenses": [{"id": 123}, {"id": 124}],
"status": "Approved"
}
}
// Get expense status history
{
"name": "get_expense_status_history",
"arguments": {
"id": 123,
"orderby": "modifiedOn desc"
}
}
Creación y gestión de proyectos
// Create a project with comprehensive settings
{
"name": "create_project",
"arguments": {
"name": "Website Redesign Project",
"code": "WEB-2024-001",
"notes": "Complete redesign of company website with modern UI/UX",
"color": "#3498db",
"startDate": "2024-01-15",
"endDate": "2024-06-30",
"invoicing": {
"method": "ProjectHourlyRate",
"hourlyRate": 125.00,
"reference": "WEB-2024-INV"
},
"budget": {
"method": "TotalHours",
"hours": 400,
"notificationPercentage": 80
},
"customer": {"id": 123},
"managers": [{"id": 456}],
"tags": [{"id": 1}, {"id": 2}],
"projectTasks": [
{
"active": true,
"billable": true,
"hourlyRate": 125.00,
"budgetHours": 100,
"task": {"id": 789}
},
{
"active": true,
"billable": true,
"hourlyRate": 150.00,
"budgetHours": 80,
"task": {"id": 790}
}
],
"projectUsers": [
{
"active": true,
"hourlyRate": 125.00,
"budgetHours": 200,
"costHourlyRate": 80.00,
"user": {"id": 101}
},
{
"active": true,
"hourlyRate": 150.00,
"budgetHours": 200,
"costHourlyRate": 100.00,
"user": {"id": 102}
}
]
}
}
// Update the project with new requirements
{
"name": "update_project",
"arguments": {
"id": 123,
"name": "Website Redesign Project - Phase 2",
"endDate": "2024-08-31",
"invoicing": {
"method": "ProjectHourlyRate",
"hourlyRate": 150.00
},
"budget": {
"method": "TotalHours",
"hours": 600,
"notificationPercentage": 85
},
"projectTasks": [
{
"id": 456,
"active": true,
"billable": true,
"hourlyRate": 150.00,
"budgetHours": 120,
"task": {"id": 789}
}
],
"projectUsers": [
{
"id": 789,
"active": true,
"hourlyRate": 150.00,
"budgetHours": 300,
"costHourlyRate": 90.00,
"user": {"id": 101}
}
]
}
}
// Get project insights for performance analysis
{
"name": "get_project_insights",
"arguments": {
"id": 123
}
}
// Get project with expanded relationships
{
"name": "get_project_by_id",
"arguments": {
"id": 123,
"expand": "customer,managers,tags,projectTasks,projectUsers"
}
}
Creación y gestión de usuarios
// Create a user with contract and role assignment
{
"name": "create_user",
"arguments": {
"userName": "john.doe@company.com",
"displayName": "John Doe",
"language": "en",
"role": {"id": 2},
"sendInvitation": true,
"contracts": [
{
"startDate": "2024-01-15",
"endDate": "2024-12-31",
"weekHours": 40,
"hourlyRate": 75.00,
"costHourlyRate": 50.00,
"contractNumber": "EMP-2024-001",
"contractType": {"id": 1}
}
]
}
}
// Update the user with new role and contract terms
{
"name": "update_user",
"arguments": {
"id": 123,
"displayName": "John Doe - Senior Developer",
"language": "en",
"employeeNumber": "EMP-001",
"badgeNumber": "BADGE-001",
"citizenServiceNumber": "123456789",
"role": {"id": 3},
"tags": [{"id": 1}, {"id": 2}],
"contracts": [
{
"id": 456,
"startDate": "2024-01-15",
"endDate": "2024-12-31",
"weekHours": 40,
"hourlyRate": 85.00,
"costHourlyRate": 55.00,
"contractNumber": "EMP-2024-001-UPD",
"contractType": {"id": 1}
}
]
}
}
// Get user with expanded relationships
{
"name": "get_user_by_id",
"arguments": {
"id": 123,
"expand": "role,team,tags,contracts,selfBilling,customSchedule"
}
}
// Get users with filtering and expansion
{
"name": "get_users",
"arguments": {
"filter": "active eq true and role/name eq 'Developer'",
"expand": "role,contracts",
"orderby": "displayName asc",
"top": 50
}
}
Creación y gestión de kilometraje
// Create a mileage entry
{
"name": "create_mileage",
"arguments": {
"date": "2024-01-15",
"fromAddress": "Office - 123 Business St, Business City",
"toAddress": "Client Site - 456 Client Ave, Client City",
"notes": "Client meeting and project consultation",
"distance": 45.5,
"billable": true,
"type": "Business",
"customer": {"id": 123},
"project": {"id": 456},
"vehicle": {"id": 789},
"user": {"id": 101}
}
}
// Update the mileage entry
{
"name": "update_mileage",
"arguments": {
"id": 123,
"notes": "Updated: Client meeting, project consultation, and site inspection",
"distance": 52.3,
"fromAddress": "Office - 123 Business St, Business City",
"toAddress": "Client Site - 456 Client Ave, Client City (with site inspection)",
"type": "Business",
"user": {"id": 101}
}
}
// Update mileage status (approve multiple mileage entries)
{
"name": "update_mileage_status",
"arguments": {
"message": "Approved by manager after review",
"mileages": [{"id": 123}, {"id": 124}],
"status": "Approved"
}
}
// Update mileage client status
{
"name": "update_mileage_client_status",
"arguments": {
"clientStatus": "Approved",
"message": "Client approved mileage claims",
"mileages": [{"id": 123}, {"id": 124}]
}
}
// Get mileage status history
{
"name": "get_mileage_status_history",
"arguments": {
"id": 123,
"orderby": "modifiedOn desc"
}
}
// Get mileage entries with filtering
{
"name": "get_mileage",
"arguments": {
"user_id": "101",
"from_date": "2024-01-01",
"to_date": "2024-01-31",
"filter": "type eq 'Business' and billable eq true",
"expand": "user,project,customer,vehicle",
"orderby": "date desc"
}
}
// Get mileage vehicles
{
"name": "get_mileage_vehicles",
"arguments": {
"active_only": true,
"expand": "users",
"orderby": "brand asc"
}
}
// Get specific mileage vehicle with users
{
"name": "get_mileage_vehicle_by_id",
"arguments": {
"id": 789,
"expand": "users"
}
}
Manejo de errores
El servidor incluye un manejo integral de errores:
- Errores de autenticación: Cuando falta la clave de API o no es válida
- Errores de API: Cuando la API de TimeChimp devuelve respuestas de error (incluida la limitación de velocidad 429)
- Errores de red: Cuando las solicitudes fallan debido a problemas de conectividad
- Errores de validación: Cuando se proporcionan parámetros no válidos
- Errores de OData: Cuando se utilizan expresiones de filtro u ordenación no válidas
Las respuestas de error incluyen mensajes de error detallados para ayudar con la depuración.
Desarrollo
Estructura del proyecto
TimeJS/
├── timechimp-mcp-server.js # Main server file
├── package.json # Node.js dependencies and scripts
└── README.md # This file
Agregar nuevas herramientas
Para agregar nuevas herramientas:
- Agregue la definición de la herramienta al controlador
ListToolsRequestSchema - Agregue un caso para la herramienta en el controlador
CallToolRequestSchema - Implemente el método de la herramienta en la clase
TimechimpMCPServer - Use los métodos genéricos
handleGetRequestohandleGetByIdRequestpara mantener la coherencia
Pruebas
Puede probar el servidor con cualquier cliente MCP o ejecutándolo directamente y enviando mensajes JSON-RPC a través de stdin.
Solución de problemas
Problemas comunes
-
"Se requiere la variable de entorno TIMECHIMP_API_KEY"
- Asegúrese de haber configurado la variable de entorno
TIMECHIMP_API_KEY - Verifique que la clave de API sea correcta y tenga los permisos adecuados
- Asegúrese de haber configurado la variable de entorno
-
"Error de la API de TimeChimp: 401 No autorizado"
- Compruebe que su clave de API sea válida y no haya caducado
- Asegúrese de que su cuenta de TimeChimp tenga habilitado el acceso a la API
-
"TimeChimp API error: 404 Not Found"
- El endpoint de la API podría no existir o la URL podría ser incorrecta
- Verifica que estás usando la URL base correcta de la API v2 de TimeChimp
-
"TimeChimp API error: 429 Too Many Requests"
- Has superado el límite de solicitudes (100 solicitudes por minuto por empresa)
- Espera a que se restablezca el límite de solicitudes o implementa una limitación de solicitudes
-
Errores de filtro OData
- Verifica que la sintaxis de tu filtro siga las convenciones de OData
- Comprueba que los nombres de los campos sean correctos y estén correctamente escapados
- Usa comillas simples para valores de cadena:
name eq 'Project Name'
-
Errores de conexión de red
- Verifica tu conexión a internet
- Comprueba si hay restricciones de firewall
Modo de depuración
Ejecuta el servidor en modo de depuración para obtener un registro más detallado:
npm run dev
Contribuciones
- Haz un fork del repositorio
- Crea una rama de características
- Realiza tus cambios
- Prueba exhaustivamente
- Envía una solicitud de extracción (pull request)
Licencia
Este proyecto está licenciado bajo la Licencia MIT: consulta el archivo LICENSE para obtener más detalles.
Soporte
Para problemas relacionados con:
- Este servidor MCP: Abre un issue en este repositorio
- API de TimeChimp: Contacta con el soporte de TimeChimp en ict@timechimp.com
- Protocolo MCP: Consulta la documentación del Model Context Protocol
Registro de cambios
v0.7.0
- Se añadieron operaciones CRUD completas para kilometraje (Crear, Leer, Actualizar, Eliminar)
- Se añadió la gestión de estados de kilometraje con actualizaciones de estado internas y externas
- Se añadió la funcionalidad de seguimiento del historial de estados de kilometraje
- Se añadió la gestión de vehículos de kilometraje (operaciones de lectura)
- Se mejoró la gestión de kilometraje con vinculación integral a clientes, proyectos, vehículos y usuarios
- Se añadieron capacidades de actualización masiva de estados para kilometraje (hasta 100 entradas a la vez)
- Se actualizó el número de herramientas a 46 herramientas en total
- Se añadieron ejemplos de CRUD de kilometraje a la documentación
v0.6.0
- Se añadieron operaciones CRUD completas para usuarios (Crear, Leer, Actualizar, Eliminar)
- Se añadió la gestión de contratos de usuario y la asignación de roles
- Se actualizó el número de herramientas a 38 herramientas en total
- Se añadieron ejemplos de CRUD de usuarios a la documentación
v0.5.0
- Se añadieron operaciones CRUD completas para proyectos (Crear, Leer, Actualizar, Eliminar)
- Se añadió la funcionalidad de información de proyectos
- Se actualizó el número de herramientas a 36 herramientas en total
- Se añadieron ejemplos de CRUD de proyectos a la documentación
v0.4.0
- Se añadieron operaciones CRUD completas para gastos (Crear, Leer, Actualizar, Eliminar)
- Se añadió la gestión de estados de gastos con actualizaciones de estado internas y externas
- Se añadió la funcionalidad de seguimiento del historial de estados de gastos
- Se mejoró la gestión de gastos con vinculación integral a clientes, proyectos, productos, usuarios y tipos de IVA
- Se añadieron capacidades de actualización masiva de estados para gastos (hasta 100 gastos a la vez)
- Se actualizó el número de herramientas a 32 herramientas en total
- Se añadieron ejemplos de CRUD de gastos a la documentación
v0.3.0
- Se añadieron operaciones CRUD completas para clientes (Crear, Leer, Actualizar, Eliminar)
- Se añadió una gestión integral de clientes con dirección, condiciones de pago, tarifas y relaciones
- Se mejoraron las herramientas de clientes con soporte para tipos de IVA, etiquetas y vinculación de contactos
- Se actualizó el número de herramientas a 26 herramientas en total
- Se añadieron ejemplos de CRUD de clientes a la documentación
v0.2.0
- Se añadió soporte integral para todos los endpoints principales de la API v2 de TimeChimp
- Se añadieron operaciones CRUD completas para contactos (Crear, Leer, Actualizar, Eliminar)
- Se añadió soporte para clientes, tareas, facturas, gastos, kilometraje y etiquetas
- Se añadieron manejadores de solicitudes genéricos para consistencia y mantenibilidad
- Se mejoró el soporte de OData con $expand, $count y un filtrado mejorado
- Se añadieron herramientas individuales de "obtener por ID" para todos los tipos de recursos
- Se mejoró el manejo de errores y la validación
- Se actualizó el encabezado de versión de la API a 2.0
v0.1.0
- Versión inicial
- Soporte para las herramientas GetProjects, Users y TimeEntries
- Integración con la API v2 de TimeChimp con soporte de OData
- Manejo integral de errores y validación
- Ordenación predeterminada para proyectos (más recientes primero)