TimeChimp MCP Server
Um servidor para interagir com a API v2 do TimeChimp para gerenciar controle de horas e projetos.
Documentação
TimeChimp MCP Server
Um servidor abrangente do Model Context Protocol (MCP) para interagir com a API v2 do TimeChimp. Este servidor fornece ferramentas para recuperar e gerenciar todos os principais recursos do TimeChimp, incluindo projetos, usuários, lançamentos de horas, contatos, clientes, tarefas, faturas, despesas, quilometragem e tags.
Recursos
- Projetos: Operações CRUD completas (Criar, Ler, Atualizar, Excluir) com gerenciamento abrangente de projetos, incluindo faturamento, orçamento, atribuições de tarefas/usuários e insights
- Usuários: Operações CRUD completas (Criar, Ler, Atualizar, Excluir) com gerenciamento de usuários, incluindo funções, contratos, tags e informações de funcionários
- Lançamentos de Horas: Buscar lançamentos de horas com intervalos de datas, filtros por usuário/projeto e ordenação
- Contatos: Operações CRUD completas (Criar, Ler, Atualizar, Excluir) para gerenciamento de contatos
- Clientes: Operações CRUD completas (Criar, Ler, Atualizar, Excluir) para gerenciamento de clientes
- Tarefas: Obter informações de tarefas com filtro por projeto e ordenação
- Faturas: Recuperar faturas com filtro por cliente e data
- Despesas: Operações CRUD completas (Criar, Ler, Atualizar, Excluir) para gerenciamento de despesas com acompanhamento de status
- Quilometragem: Operações CRUD completas (Criar, Ler, Atualizar, Excluir) para gerenciamento de quilometragem com acompanhamento de status e atribuição de veículos
- Veículos de Quilometragem: Recuperar informações de veículos de quilometragem para atribuição de veículos
- Tags: Obter informações de tags para organização e categorização
- Construído como um único arquivo JavaScript para facilitar a implantação
- Usa a API v2 do TimeChimp com autenticação adequada e convenções OData
- Tratamento abrangente de erros e validação
- Suporte para $expand, $count e todos os parâmetros de consulta OData
Pré-requisitos
- Node.js 18.0.0 ou superior
- Uma conta TimeChimp com acesso à API
- Chave de API do TimeChimp
Instalação
- Clone ou baixe este repositório:
git clone <repository-url>
cd TimeJS
- Instale as dependências:
npm install
- Torne o servidor executável:
chmod +x timechimp-mcp-server.js
Configuração
Configuração da Chave de API
Você precisa definir sua chave de API do TimeChimp como uma variável de ambiente:
export TIMECHIMP_API_KEY="your-api-key-here"
Ou crie um arquivo .env:
TIMECHIMP_API_KEY=your-api-key-here
Obtendo Sua Chave de API do TimeChimp
- Faça login na sua conta TimeChimp
- Vá para as configurações do seu perfil
- Navegue até a seção de API
- Gere ou copie sua chave de API
Integração com Claude Desktop
Para usar este servidor MCP do TimeChimp com o Claude Desktop, você precisa adicioná-lo à configuração do Claude Desktop.
Passo 1: Clone o Repositório
git clone https://github.com/Sungdaddy/TimeyChimpey.git
cd TimeyChimpey
npm install
Passo 2: Configure Sua Chave de API
Crie um arquivo .env no diretório do projeto:
echo "TIMECHIMP_API_KEY=your-actual-api-key-here" > .env
Passo 3: Configure o Claude Desktop
Adicione a seguinte configuração às configurações do Claude Desktop. A localização do arquivo de configuração depende do seu sistema operacional:
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: Substitua /path/to/your/TimeyChimpey pelo caminho real onde você clonou o repositório e substitua your-actual-api-key-here pela sua chave de API real do TimeChimp.
Passo 4: Reinicie o Claude Desktop
Após adicionar a configuração, reinicie o Claude Desktop completamente para que as alterações tenham efeito.
Passo 5: Verifique a Integração
Após o Claude Desktop reiniciar, você deve conseguir usar comandos relacionados ao TimeChimp. Tente pedir ao Claude para:
- "Obter todos os meus projetos do TimeChimp"
- "Mostrar lançamentos de horas recentes"
- "Listar todos os clientes"
- "Criar um novo lançamento de despesa"
Exemplo de Configuração
Aqui está um exemplo completo de arquivo de configuração:
{
"mcpServers": {
"timechimp": {
"command": "node",
"args": ["timechimp-mcp-server.js"],
"cwd": "/Users/yourname/TimeyChimpey",
"env": {
"TIMECHIMP_API_KEY": "your-actual-api-key-here"
}
}
}
}
Solução de Problemas da Integração com Claude Desktop
-
Servidor não conectando: Certifique-se de que o caminho em
cwdestá correto e aponta para o diretório que contémtimechimp-mcp-server.js -
Erros de chave de API: Verifique se sua chave de API está correta e possui as permissões adequadas no TimeChimp
-
Node.js não encontrado: Certifique-se de que o Node.js está instalado e acessível pela linha de comando
-
Erros de permissão: Certifique-se de que o Claude Desktop tem permissão para executar o Node.js e acessar o diretório do projeto
-
Configuração não carregando: Verifique novamente a sintaxe JSON no seu arquivo de configuração - deve ser JSON válido
Ferramentas Disponíveis no Claude Desktop
Uma vez configurado, você terá acesso a todas as 46 ferramentas do TimeChimp através do Claude Desktop:
- Projetos: Criar, ler, atualizar, excluir projetos com insights
- Usuários: Gerenciar usuários com contratos e funções
- Lançamentos de Horas: Rastrear e gerenciar lançamentos de horas
- Contatos: Gerenciamento completo de contatos
- Clientes: Gerenciamento completo do ciclo de vida do cliente
- Despesas: Rastreamento de despesas com fluxos de aprovação
- Quilometragem: Rastreamento de quilometragem com gerenciamento de veículos
- E muito mais...
Você pode pedir ao Claude para realizar qualquer operação do TimeChimp naturalmente, como "Criar um novo projeto para o cliente ABC" ou "Mostrar todas as despesas pendentes que precisam de aprovação."
Uso
Executando o Servidor
# Start the server
npm start
# Or run directly
node timechimp-mcp-server.js
# For development with debugging
npm run dev
Ferramentas Disponíveis
Projetos
1. get_projects
Recuperar projetos do TimeChimp.
Parâmetros:
top(número, opcional): Número máximo de projetos a retornar (1-10000, padrão: 100)skip(número, opcional): Número de projetos a pular para paginação (padrão: 0)count(booleano, opcional): Se deve incluir a contagem total de resultados (padrão: true)expand(string, opcional): Lista separada por vírgulas de propriedades para expandir (ex.: "customer,tasks")active_only(booleano, opcional): Retornar apenas projetos ativos (padrão: false)filter(string, opcional): Expressão de filtro ODataorderby(string, opcional): Expressão de ordenação OData
Exemplo:
{
"name": "get_projects",
"arguments": {
"top": 50,
"active_only": true,
"expand": "customer,tasks",
"orderby": "name desc"
}
}
2. get_project_by_id
Obter um projeto específico por ID.
Parâmetros:
id(número, obrigatório): ID do projetoexpand(string, opcional): Lista separada por vírgulas de propriedades para expandir
Exemplo:
{
"name": "get_project_by_id",
"arguments": {
"id": 123,
"expand": "customer,tasks"
}
}
3. create_project
Criar um novo projeto.
Parâmetros:
name(string, obrigatório): O nome do projetoactive(booleano, opcional): Se o projeto pode ser usado (padrão: true)code(string, opcional): O código do projetonotes(string, opcional): A descrição do projetocolor(string, opcional): A cor do projetostartDate(string, opcional): A data de início do projeto (formato AAAA-MM-DD)endDate(string, opcional): A data de término do projeto (formato AAAA-MM-DD)invoicing(objeto, opcional): As configurações de faturamento do projetomethod(string, opcional): O método de faturamento do projeto usado- Valores permitidos:
NoInvoicing,TaskHourlyRate,UserHourlyRate,ProjectHourlyRate,CustomerHourlyRate,ProjectRate,TaskRate
- Valores permitidos:
hourlyRate(número, opcional): A taxa horária do projeto (usada apenas quando o método de faturamento = ProjectHourlyRate)fixedRate(número, opcional): A taxa/preço fixo do projeto (usado apenas quando o método de faturamento = ProjectRate)reference(string, opcional): A referência de faturamento do projetodate(string, opcional): A data de faturamento do projeto (formato AAAA-MM-DD, usado apenas quando o método de faturamento = ProjectRate)
budget(objeto, opcional): As configurações de orçamento do projetomethod(string, opcional): O método de orçamento do projeto usado- Valores permitidos:
NoBudget,TotalHours,TaskHours,UserHours,TotalRate,TaskRate,TotalCost
- Valores permitidos:
hours(número, opcional): O orçamento horário do projeto (usado apenas quando o método de orçamento = TotalHours)rate(número, opcional): A taxa de orçamento do projeto (usada apenas quando o método de orçamento = TotalRate ou TotalCost)notificationPercentage(número, opcional): O limite percentual do orçamento no qual uma notificação é enviada
customer(objeto, opcional): Cliente a ser vinculado ao projetoid(número, obrigatório): Identificador único do cliente
mainProject(objeto, opcional): Projeto principal a ser vinculado ao projeto (se for um subprojeto)id(número, obrigatório): Identificador único do projeto
subprojects(array, opcional): Lista de subprojetos a serem vinculados ao projeto (se for um projeto principal)managers(array, opcional): Lista de gerentes a serem vinculados ao projetotags(array, opcional): Lista de tags a serem vinculadas ao projetoprojectTasks(array, obrigatório): Lista de tarefas do projeto a serem vinculadas ao projeto (se nenhuma tarefa for especificada, as tarefas comuns ativas serão pré-preenchidas)projectUsers(array, obrigatório): Lista de usuários do projeto a serem vinculados ao projeto (se nenhum usuário for especificado, os usuários ativos serão pré-preenchidos)
Exemplo:
{
"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
Atualizar um projeto existente.
Parâmetros:
id(número, obrigatório): ID do projetoname(string, obrigatório): O nome do projetoactive(booleano, opcional): Se o projeto pode ser usadocode(string, opcional): O código do projetonotes(string, opcional): A descrição do projetocolor(string, opcional): A cor do projetostartDate(string, opcional): A data de início do projeto (formato AAAA-MM-DD)endDate(string, opcional): A data de término do projeto (formato AAAA-MM-DD)invoicing(objeto, obrigatório): As configurações de faturamento do projetomethod(string, opcional): O método de faturamento do projeto usado- Valores permitidos:
NoInvoicing,TaskHourlyRate,UserHourlyRate,ProjectHourlyRate,CustomerHourlyRate,ProjectRate,TaskRate,Subscription
- Valores permitidos:
hourlyRate(número, opcional): A taxa horária do projeto (usada apenas quando o método de faturamento = ProjectHourlyRate)fixedRate(número, opcional): A taxa/preço fixo do projeto (usado apenas quando o método de faturamento = ProjectRate)reference(string, opcional): A referência de faturamento do projetodate(string, opcional): A data de faturamento do projeto (formato AAAA-MM-DD, usado apenas quando o método de faturamento = ProjectRate)
budget(objeto, obrigatório): As configurações de orçamento do projetomethod(string, opcional): O método de orçamento do projeto usado- Valores permitidos:
NoBudget,TotalHours,TaskHours,UserHours,TotalRate,TaskRate,Invoiced,TotalCost
- Valores permitidos:
hours(número, opcional): O orçamento horário do projeto (usado apenas quando o método de orçamento = TotalHours)rate(número, opcional): A taxa de orçamento do projeto (usada apenas quando o método de orçamento = TotalRate ou TotalCost)notificationPercentage(número, opcional): O limite percentual do orçamento no qual uma notificação é enviada
customer(objeto, opcional): Cliente a ser vinculado ao projetoid(número, obrigatório): Identificador único do cliente
mainProject(objeto, opcional): Projeto principal a ser vinculado ao projeto (se for um subprojeto)id(número, obrigatório): Identificador único do projeto
subprojects(array, opcional): Lista de subprojetos a serem vinculados ao projeto (se for um projeto principal)managers(array, opcional): Lista de gerentes a serem vinculados ao projetotags(array, opcional): Lista de tags a serem vinculadas ao projetoprojectTasks(array, obrigatório): Lista de tarefas do projeto a serem vinculadas ao projetoprojectUsers(array, obrigatório): Lista de usuários do projeto a serem vinculados ao projeto
Exemplo:
{
"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
Excluir um projeto.
Parâmetros:
id(número, obrigatório): ID do projeto
Exemplo:
{
"name": "delete_project",
"arguments": {
"id": 123
}
}
6. get_project_insights
Obter insights do projeto, incluindo horas, orçamento, custos e dados de receita.
Parâmetros:
id(número, obrigatório): ID do projeto
Exemplo:
{
"name": "get_project_insights",
"arguments": {
"id": 123
}
}
Usuários
7. get_users
Recuperar usuários do TimeChimp.
Parâmetros:
top(número, opcional): Número máximo de usuários a retornar (1-10000, padrão: 100)skip(número, opcional): Número de usuários a pular para paginação (padrão: 0)count(booleano, opcional): Se deve incluir a contagem total de resultados (padrão: true)expand(string, opcional): Lista de propriedades separadas por vírgula para expandiractive_only(booleano, opcional): Retornar apenas usuários ativos (padrão: false)filter(string, opcional): Expressão de filtro ODataorderby(string, opcional): Expressão de ordenação OData
Exemplo:
{
"name": "get_users",
"arguments": {
"top": 100,
"filter": "firstName eq 'John' and active eq true",
"orderby": "lastName asc"
}
}
8. get_user_by_id
Obter um usuário específico pelo ID.
Parâmetros:
id(número, obrigatório): ID do usuárioexpand(string, opcional): Lista de propriedades separadas por vírgula para expandir
9. create_user
Criar um novo usuário (nota: adicionar usuários pode resultar em fatura adicional e custo extra).
Parâmetros:
userName(string, obrigatório): O endereço de e-mail do usuáriodisplayName(string, obrigatório): O nome do usuáriolanguage(string, opcional): O idioma do usuário (padrão: en)- Valores permitidos:
en,nl,de,pl,fr,es
- Valores permitidos:
role(objeto, opcional): Função a ser atribuída ao usuário (padrão: User)id(número, obrigatório): Identificador único para a função
sendInvitation(booleano, opcional): Se um convite deve ser enviado ao usuário (padrão: false)contracts(array, opcional): Lista de contratos de usuário a serem vinculadosstartDate(string, opcional): A data de início do contrato (formato AAAA-MM-DD, padrão: UTC hoje)endDate(string, opcional): A data de término do contrato (formato AAAA-MM-DD)weekHours(número, opcional): As horas semanais do contratohourlyRate(número, opcional): A taxa horária de vendas do contratocostHourlyRate(número, opcional): A taxa horária de compra do contratocontractNumber(string, opcional): O número do contratocontractType(objeto, obrigatório): Tipo de contrato a ser vinculado ao contratoid(número, obrigatório): Identificador único para o tipo de contrato
Exemplo:
{
"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
Atualizar um usuário existente.
Parâmetros:
id(número, obrigatório): ID do usuáriodisplayName(string, obrigatório): O nome do usuáriolanguage(string, opcional): O idioma do usuário (padrão: en)- Valores permitidos:
en,nl,de,pl,fr,es
- Valores permitidos:
employeeNumber(string, opcional): O número de funcionário do usuáriobadgeNumber(string, opcional): O número de crachá do usuáriocitizenServiceNumber(string, opcional): O número de serviço do cidadão do usuáriorole(objeto, opcional): Função a ser atribuída ao usuário (padrão: User)id(número, obrigatório): Identificador único para a função
tags(array, opcional): Lista de tags a serem vinculadas ao usuáriocontracts(array, opcional): Lista de contratos de usuário a serem vinculadosid(número, opcional): Identificador único para o contrato do usuário (pode ser nulo se um novo contrato de usuário precisar ser adicionado)startDate(string, opcional): A data de início do contrato (formato AAAA-MM-DD, padrão: UTC hoje)endDate(string, opcional): A data de término do contrato (formato AAAA-MM-DD)weekHours(número, opcional): As horas semanais do contratohourlyRate(número, opcional): A taxa horária de vendas do contratocostHourlyRate(número, opcional): A taxa horária de compra/custo do contratocontractNumber(string, opcional): O número do contratocontractType(objeto, obrigatório): Tipo de contrato a ser vinculado ao contratoid(número, obrigatório): Identificador único para o tipo de contrato
Exemplo:
{
"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}
}
]
}
}
Registros de Tempo
11. get_time_entries
Recuperar registros de tempo do TimeChimp.
Parâmetros:
top(número, opcional): Número máximo de registros de tempo a retornar (1-10000, padrão: 100)skip(número, opcional): Número de registros de tempo a pular para paginação (padrão: 0)count(booleano, opcional): Se deve incluir a contagem total de resultados (padrão: true)expand(string, opcional): Lista de propriedades separadas por vírgula para expandir (ex.: "user,project,task")user_id(string, opcional): Filtrar por ID de usuário específicoproject_id(string, opcional): Filtrar por ID de projeto específicofrom_date(string, opcional): Data de início para filtragem (formato AAAA-MM-DD)to_date(string, opcional): Data de término para filtragem (formato AAAA-MM-DD)filter(string, opcional): Expressão de filtro ODataorderby(string, opcional): Expressão de ordenação OData
Exemplo:
{
"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
Obter um registro de tempo específico pelo ID.
Parâmetros:
id(número, obrigatório): ID do registro de tempoexpand(string, opcional): Lista de propriedades separadas por vírgula para expandir
Contatos
13. get_contacts
Recuperar todos os contatos do TimeChimp.
Parâmetros:
top(número, opcional): Número máximo de contatos a retornar (1-10000, padrão: 100)skip(número, opcional): Número de contatos a pular para paginação (padrão: 0)count(booleano, opcional): Se deve incluir a contagem total de resultados (padrão: true)expand(string, opcional): Lista de propriedades separadas por vírgula para expandir (ex.: "customers")active_only(booleano, opcional): Retornar apenas contatos ativos (padrão: false)filter(string, opcional): Expressão de filtro ODataorderby(string, opcional): Expressão de ordenação OData
Exemplo:
{
"name": "get_contacts",
"arguments": {
"top": 50,
"expand": "customers",
"filter": "name eq 'John Doe'",
"orderby": "name asc"
}
}
14. get_contact_by_id
Obter um contato específico pelo ID.
Parâmetros:
id(número, obrigatório): ID do contatoexpand(string, opcional): Lista de propriedades separadas por vírgula para expandir
15. create_contact
Criar um novo contato.
Parâmetros:
name(string, obrigatório): O nome do contatojobTitle(string, opcional): O cargo do contatoemail(string, opcional): O endereço de e-mail do contatophone(string, opcional): O número de telefone do contatouseForInvoicing(booleano, opcional): Se as informações do contato serão usadas para faturamento (padrão: false)active(booleano, opcional): Se o contato pode ser usado (padrão: true)customers(array, opcional): Lista de IDs de clientes para vincular a este contato
Exemplo:
{
"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
Atualizar um contato existente.
Parâmetros:
id(número, obrigatório): ID do contatoname(string, obrigatório): O nome do contatojobTitle(string, opcional): O cargo do contatoemail(string, opcional): O endereço de e-mail do contatophone(string, opcional): O número de telefone do contatouseForInvoicing(booleano, opcional): Se as informações do contato serão usadas para faturamentoactive(booleano, opcional): Se o contato pode ser usadocustomers(array, opcional): Lista de IDs de clientes para vincular a este contato
17. delete_contact
Excluir um contato.
Parâmetros:
id(número, obrigatório): ID do contato
Exemplo:
{
"name": "delete_contact",
"arguments": {
"id": 123
}
}
Clientes
18. get_customers
Recuperar todos os clientes do TimeChimp.
Parâmetros:
top(número, opcional): Número máximo de clientes a retornar (1-10000, padrão: 100)skip(número, opcional): Número de clientes a pular para paginação (padrão: 0)count(booleano, opcional): Se deve incluir a contagem total de resultados (padrão: true)expand(string, opcional): Lista de propriedades separadas por vírgula para expandir (ex.: "contacts,projects")active_only(booleano, opcional): Retornar apenas clientes ativos (padrão: false)filter(string, opcional): Expressão de filtro ODataorderby(string, opcional): Expressão de ordenação OData
19. get_customer_by_id
Obter um cliente específico pelo ID.
Parâmetros:
id(número, obrigatório): ID do clienteexpand(string, opcional): Lista de propriedades separadas por vírgula para expandir
20. create_customer
Criar um novo cliente.
Parâmetros:
name(string, obrigatório): O nome do clienteactive(booleano, opcional): Se o cliente pode ser usado (padrão: true)relationId(string, opcional): O número do clienteaddress(objeto, opcional): As informações de endereço do clienteaddress(string, opcional): A linha de endereçopostalCode(string, opcional): O código postalcity(string, opcional): A cidadecountry(string, opcional): O país
phone(string, opcional): O número de telefone do clienteemail(string, opcional): O endereço de e-mail do clientewebsite(string, opcional): O URL do site do clientepaymentPeriod(número, opcional): O prazo de pagamento do cliente em diashourlyRate(número, opcional): O preço horário padrão do clientemileageRate(número, opcional): O preço padrão de quilometragem do cliente, por KMiban(string, opcional): O IBAN do clientebic(string, opcional): O BIC do clientevatNumber(string, opcional): O número de IVA do clientekvkNumber(string, opcional): O ID comercial do clienteinvoiceAddress(objeto, opcional): As informações de endereço de faturamento do cliente, substituindo as informações de endereço do clienteaddress(string, opcional): A linha de endereçopostalCode(string, opcional): O código postalcity(string, opcional): A cidadecountry(string, opcional): O país
notes(string, opcional): As notas do clienteprospect(booleano, opcional): O cliente é um prospectovatRate(objeto, opcional): Taxa de IVA a ser usada para este clienteid(número, obrigatório): Identificador único para a taxa de IVA
tags(array, opcional): Lista de IDs de tags para vincular a este clientecontacts(array, opcional): Lista de IDs de contatos para vincular a este cliente
Exemplo:
{
"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
Atualizar um cliente existente. Parâmetros:
id(number, obrigatório): ID do clientename(string, obrigatório): O nome do clienteactive(boolean, opcional): Se o cliente pode ser usadorelationId(string, opcional): O número do clienteaddress(object, opcional): As informações de endereço do clienteaddress(string, opcional): A linha de endereçopostalCode(string, opcional): O código postalcity(string, opcional): A cidadecountry(string, opcional): O país
phone(string, opcional): O número de telefone do clienteemail(string, opcional): O endereço de e-mail do clientewebsite(string, opcional): O URL do site do clientepaymentPeriod(number, opcional): O prazo de pagamento do cliente em diashourlyRate(number, opcional): O preço horário padrão do clientemileageRate(number, opcional): O preço padrão de quilometragem do cliente, por KMiban(string, opcional): O IBAN do clientebic(string, opcional): O BIC do clientevatNumber(string, opcional): O número de IVA do clientekvkNumber(string, opcional): O ID comercial do clienteinvoiceAddress(object, opcional): As informações de endereço de faturamento do cliente, se diferirem das informações de endereço do clienteaddress(string, opcional): A linha de endereçopostalCode(string, opcional): O código postalcity(string, opcional): A cidadecountry(string, opcional): O país
notes(string, opcional): As notas do clienteprospect(boolean, opcional): O cliente é um prospectvatRate(object, opcional): Taxa de IVA a ser vinculada ao clienteid(number, obrigatório): Identificador exclusivo para a taxa de IVA
tags(array, opcional): Lista de IDs de tags para vincular a este clientecontacts(array, opcional): Lista de IDs de contatos para vincular a este cliente
Exemplo:
{
"name": "update_customer",
"arguments": {
"id": 456,
"name": "Acme Corporation Ltd",
"email": "newcontact@acme.com",
"paymentPeriod": 45,
"hourlyRate": 175.00
}
}
22. delete_customer
Excluir um cliente.
Parâmetros:
id(number, obrigatório): ID do cliente
Exemplo:
{
"name": "delete_customer",
"arguments": {
"id": 456
}
}
Tarefas
23. get_tasks
Recuperar todas as tarefas do TimeChimp.
Parâmetros:
top(number, opcional): Número máximo de tarefas a retornar (1-10000, padrão: 100)skip(number, opcional): Número de tarefas a pular para paginação (padrão: 0)count(boolean, opcional): Se deve incluir a contagem total de resultados (padrão: true)expand(string, opcional): Lista separada por vírgulas de propriedades a expandir (ex.: "project")active_only(boolean, opcional): Retornar apenas tarefas ativas (padrão: false)project_id(string, opcional): Filtrar por ID de projeto específicofilter(string, opcional): Expressão de filtro ODataorderby(string, opcional): Expressão de ordenação OData
24. get_task_by_id
Obter uma tarefa específica pelo ID.
Parâmetros:
id(number, obrigatório): ID da tarefaexpand(string, opcional): Lista separada por vírgulas de propriedades a expandir
Faturas
25. get_invoices
Recuperar todas as faturas do TimeChimp.
Parâmetros:
top(number, opcional): Número máximo de faturas a retornar (1-10000, padrão: 100)skip(number, opcional): Número de faturas a pular para paginação (padrão: 0)count(boolean, opcional): Se deve incluir a contagem total de resultados (padrão: true)expand(string, opcional): Lista separada por vírgulas de propriedades a expandir (ex.: "customer,projects")customer_id(string, opcional): Filtrar por ID de cliente específicofrom_date(string, opcional): Data de início para filtragem (formato YYYY-MM-DD)to_date(string, opcional): Data de término para filtragem (formato YYYY-MM-DD)filter(string, opcional): Expressão de filtro ODataorderby(string, opcional): Expressão de ordenação OData
26. get_invoice_by_id
Obter uma fatura específica pelo ID.
Parâmetros:
id(number, obrigatório): ID da faturaexpand(string, opcional): Lista separada por vírgulas de propriedades a expandir
Despesas
27. get_expenses
Recuperar todas as despesas do TimeChimp.
Parâmetros:
top(number, opcional): Número máximo de despesas a retornar (1-10000, padrão: 100)skip(number, opcional): Número de despesas a pular para paginação (padrão: 0)count(boolean, opcional): Se deve incluir a contagem total de resultados (padrão: true)expand(string, opcional): Lista separada por vírgulas de propriedades a expandir (ex.: "user,project,customer")user_id(string, opcional): Filtrar por ID de usuário específicoproject_id(string, opcional): Filtrar por ID de projeto específicocustomer_id(string, opcional): Filtrar por ID de cliente específicofrom_date(string, opcional): Data de início para filtragem (formato YYYY-MM-DD)to_date(string, opcional): Data de término para filtragem (formato YYYY-MM-DD)filter(string, opcional): Expressão de filtro ODataorderby(string, opcional): Expressão de ordenação OData
28. get_expense_by_id
Obter uma despesa específica pelo ID.
Parâmetros:
id(number, obrigatório): ID da despesaexpand(string, opcional): Lista separada por vírgulas de propriedades a expandir
29. create_expense
Criar uma nova despesa.
Parâmetros:
date(string, opcional): A data da despesa (formato YYYY-MM-DD, padrão: hoje em UTC)notes(string, opcional): As notas da despesaquantity(number, opcional): A quantidade da despesa (padrão: 1)rate(number, obrigatório): A taxa/preço da despesabillable(boolean, opcional): Se a despesa pode ser faturada (padrão: true)customer(object, opcional): Cliente a ser vinculado à despesaid(number, obrigatório): Identificador exclusivo para o cliente
project(object, opcional): Projeto a ser vinculado à despesaid(number, obrigatório): Identificador exclusivo para o projeto
product(object, opcional): Produto a ser vinculado à despesaid(number, obrigatório): Identificador exclusivo para o produto
user(object, obrigatório): Usuário a ser vinculado à despesaid(number, obrigatório): Identificador exclusivo para o usuário
vatRate(object, opcional): Taxa de IVA a ser vinculada à despesa (padrão: maior porcentagem)id(number, obrigatório): Identificador exclusivo para a taxa de IVA
Exemplo:
{
"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
Atualizar uma despesa existente.
Parâmetros:
id(number, obrigatório): ID da despesadate(string, opcional): A data da despesa (formato YYYY-MM-DD)notes(string, opcional): As notas da despesaquantity(number, opcional): A quantidade da despesarate(number, obrigatório): A taxa/preço da despesabillable(boolean, opcional): Se a despesa pode ser faturadacustomer(object, opcional): Cliente a ser vinculado à despesaid(number, obrigatório): Identificador exclusivo para o cliente
project(object, opcional): Projeto a ser vinculado à despesaid(number, obrigatório): Identificador exclusivo para o projeto
product(object, opcional): Produto a ser vinculado à despesaid(number, obrigatório): Identificador exclusivo para o produto
user(object, obrigatório): Usuário a ser vinculado à despesaid(number, obrigatório): Identificador exclusivo para o usuário
vatRate(object, opcional): Taxa de IVA a ser vinculada à despesaid(number, obrigatório): Identificador exclusivo para a taxa de IVA
Exemplo:
{
"name": "update_expense",
"arguments": {
"id": 123,
"notes": "Updated: Business lunch with client and partner",
"rate": 85.00,
"user": {"id": 789}
}
}
31. delete_expense
Excluir uma despesa.
Parâmetros:
id(number, obrigatório): ID da despesa
Exemplo:
{
"name": "delete_expense",
"arguments": {
"id": 123
}
}
32. update_expense_status
Atualizar o status das despesas (status interno de aprovação/faturamento).
Parâmetros:
message(string, opcional): Mensagem de histórico de statusexpenses(array, obrigatório): Lista de despesas a serem atualizadas (máximo de 100 entradas)id(number, obrigatório): Identificador exclusivo para a despesa
status(string, obrigatório): O status interno de aprovação/faturamento- Valores permitidos:
Open,PendingApproval,Approved,Invoiced,WrittenOff,Rejected
- Valores permitidos:
Exemplo:
{
"name": "update_expense_status",
"arguments": {
"message": "Approved by manager",
"expenses": [{"id": 123}, {"id": 124}],
"status": "Approved"
}
}
33. update_expense_client_status
Atualizar o status do cliente das despesas (status externo de aprovação/faturamento).
Parâmetros:
clientStatus(string, obrigatório): O status externo de aprovação/faturamento (usado apenas quando o portal do cliente está habilitado)- Valores permitidos:
Open,PendingApproval,Approved,Invoiced,WrittenOff,Rejected
- Valores permitidos:
message(string, opcional): Mensagem de histórico de statusexpenses(array, obrigatório): Lista de despesas a serem atualizadas (máximo de 100 entradas)id(number, obrigatório): Identificador exclusivo para a despesa
Exemplo:
{
"name": "update_expense_client_status",
"arguments": {
"clientStatus": "Approved",
"message": "Client approved expenses",
"expenses": [{"id": 123}, {"id": 124}]
}
}
34. get_expense_status_history
Consultar registros de modificação do histórico de status de uma despesa.
Parâmetros:
id(number, obrigatório): ID da despesatop(number, opcional): Número máximo de registros de histórico de status a retornar (1-10000, padrão: 100)skip(number, opcional): Número de registros de histórico de status a pular para paginação (padrão: 0)count(boolean, opcional): Se deve incluir a contagem total de resultados (padrão: true)expand(string, opcional): Lista separada por vírgulas de propriedades a expandirfilter(string, opcional): Expressão de filtro ODataorderby(string, opcional): Expressão de ordenação OData (ex.: "modifiedOn desc")
Exemplo:
{
"name": "get_expense_status_history",
"arguments": {
"id": 123,
"orderby": "modifiedOn desc",
"top": 50
}
}
Quilometragem
35. get_mileage
Recuperar todas as entradas de quilometragem do TimeChimp.
Parâmetros:
top(number, opcional): Número máximo de entradas de quilometragem a retornar (1-10000, padrão: 100)skip(number, opcional): Número de entradas de quilometragem a pular para paginação (padrão: 0)count(boolean, opcional): Se deve incluir a contagem total de resultados (padrão: true)expand(string, opcional): Lista separada por vírgulas de propriedades a expandir (ex.: "user,project,customer")user_id(string, opcional): Filtrar por ID de usuário específicoproject_id(string, opcional): Filtrar por ID de projeto específicocustomer_id(string, opcional): Filtrar por ID de cliente específicofrom_date(string, opcional): Data de início para filtragem (formato YYYY-MM-DD)to_date(string, opcional): Data de término para filtragem (formato YYYY-MM-DD)filter(string, opcional): Expressão de filtro ODataorderby(string, opcional): Expressão de ordenação OData
36. get_mileage_by_id
Obter uma entrada de quilometragem específica pelo ID.
Parâmetros:
id(number, obrigatório): ID da entrada de quilometragemexpand(string, opcional): Lista separada por vírgulas de propriedades a expandir
37. create_mileage
Criar uma nova entrada de quilometragem. Parâmetros:
date(string, opcional): A data da quilometragem (formato YYYY-MM-DD, padrão: hoje em UTC)fromAddress(string, opcional): O endereço de origem da quilometragemtoAddress(string, opcional): O endereço de destino da quilometragemnotes(string, opcional): As observações da quilometragemdistance(number, obrigatório): A distância da quilometragem em KMbillable(boolean, opcional): Se a quilometragem pode ser faturada (padrão: true)type(string, obrigatório): O tipo de quilometragem- Valores permitidos:
Private,Business,HomeWork
- Valores permitidos:
customer(object, opcional): Cliente a ser vinculado à quilometragemid(number, obrigatório): Identificador único do cliente
project(object, opcional): Projeto a ser vinculado à quilometragemid(number, obrigatório): Identificador único do projeto
vehicle(object, opcional): Veículo a ser vinculado à quilometragemid(number, obrigatório): Identificador único do veículo de quilometragem
user(object, obrigatório): Usuário a ser vinculado à quilometragemid(number, obrigatório): Identificador único do usuário
Exemplo:
{
"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
Atualiza um registro de quilometragem existente.
Parâmetros:
id(number, obrigatório): ID do registro de quilometragemdate(string, opcional): A data da quilometragem (formato YYYY-MM-DD)fromAddress(string, opcional): O endereço de origem da quilometragemtoAddress(string, opcional): O endereço de destino da quilometragemnotes(string, opcional): As observações da quilometragemdistance(number, obrigatório): A distância da quilometragem em KMbillable(boolean, opcional): Se a quilometragem pode ser faturadatype(string, obrigatório): O tipo de quilometragem- Valores permitidos:
Private,Business,HomeWork
- Valores permitidos:
customer(object, opcional): Cliente a ser vinculado à quilometragemid(number, obrigatório): Identificador único do cliente
project(object, opcional): Projeto a ser vinculado à quilometragemid(number, obrigatório): Identificador único do projeto
vehicle(object, opcional): Veículo a ser vinculado à quilometragemid(number, obrigatório): Identificador único do veículo de quilometragem
user(object, obrigatório): Usuário a ser vinculado à quilometragemid(number, obrigatório): Identificador único do usuário
Exemplo:
{
"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
Exclui um registro de quilometragem.
Parâmetros:
id(number, obrigatório): ID do registro de quilometragem
Exemplo:
{
"name": "delete_mileage",
"arguments": {
"id": 123
}
}
40. update_mileage_status
Atualiza o status de registros de quilometragem (status interno de aprovação/faturamento).
Parâmetros:
message(string, opcional): Mensagem do histórico de statusmileages(array, obrigatório): Lista de registros de quilometragem a serem atualizados (máximo de 100 registros)id(number, obrigatório): Identificador único da quilometragem
status(string, obrigatório): O status interno de aprovação/faturamento- Valores permitidos:
Open,PendingApproval,Approved,Invoiced,WrittenOff,Rejected
- Valores permitidos:
Exemplo:
{
"name": "update_mileage_status",
"arguments": {
"message": "Approved by manager after review",
"mileages": [{"id": 123}, {"id": 124}],
"status": "Approved"
}
}
41. update_mileage_client_status
Atualiza o status do cliente de registros de quilometragem (status externo de aprovação/faturamento).
Parâmetros:
clientStatus(string, obrigatório): O status externo de aprovação/faturamento (usado apenas quando o portal do cliente está habilitado)- Valores permitidos:
Open,PendingApproval,Approved,Invoiced,WrittenOff,Rejected
- Valores permitidos:
message(string, opcional): Mensagem do histórico de statusmileages(array, obrigatório): Lista de registros de quilometragem a serem atualizados (máximo de 100 registros)id(number, obrigatório): Identificador único da quilometragem
Exemplo:
{
"name": "update_mileage_client_status",
"arguments": {
"clientStatus": "Approved",
"message": "Client approved mileage claims",
"mileages": [{"id": 123}, {"id": 124}]
}
}
42. get_mileage_status_history
Consulta registros de modificação do histórico de status de um registro de quilometragem.
Parâmetros:
id(number, obrigatório): ID do registro de quilometragemtop(number, opcional): Número máximo de registros de histórico de status a retornar (1-10000, padrão: 100)skip(number, opcional): Número de registros de histórico de status a pular para paginação (padrão: 0)count(boolean, opcional): Se deve incluir a contagem total de resultados (padrão: true)expand(string, opcional): Lista de propriedades separadas por vírgula para expandirfilter(string, opcional): Expressão de filtro ODataorderby(string, opcional): Expressão orderby OData (ex.: "modifiedOn desc")
Exemplo:
{
"name": "get_mileage_status_history",
"arguments": {
"id": 123,
"orderby": "modifiedOn desc",
"top": 50
}
}
43. get_mileage_vehicles
Recupera todos os veículos de quilometragem do TimeChimp.
Parâmetros:
top(number, opcional): Número máximo de veículos de quilometragem a retornar (1-10000, padrão: 100)skip(number, opcional): Número de veículos de quilometragem a pular para paginação (padrão: 0)count(boolean, opcional): Se deve incluir a contagem total de resultados (padrão: true)expand(string, opcional): Lista de propriedades separadas por vírgula para expandir (ex.: "users")active_only(boolean, opcional): Retornar apenas veículos de quilometragem ativos (padrão: false)filter(string, opcional): Expressão de filtro ODataorderby(string, opcional): Expressão orderby OData
Exemplo:
{
"name": "get_mileage_vehicles",
"arguments": {
"active_only": true,
"expand": "users",
"orderby": "brand asc"
}
}
44. get_mileage_vehicle_by_id
Obtém um veículo de quilometragem específico pelo ID.
Parâmetros:
id(number, obrigatório): ID do veículo de quilometragemexpand(string, opcional): Lista de propriedades separadas por vírgula para expandir
Exemplo:
{
"name": "get_mileage_vehicle_by_id",
"arguments": {
"id": 789,
"expand": "users"
}
}
Tags
45. get_tags
Recupera todas as tags do TimeChimp.
Parâmetros:
top(number, opcional): Número máximo de tags a retornar (1-10000, padrão: 100)skip(number, opcional): Número de tags a pular para paginação (padrão: 0)count(boolean, opcional): Se deve incluir a contagem total de resultados (padrão: true)expand(string, opcional): Lista de propriedades separadas por vírgula para expandiractive_only(boolean, opcional): Retornar apenas tags ativas (padrão: false)filter(string, opcional): Expressão de filtro ODataorderby(string, opcional): Expressão orderby OData
46. get_tag_by_id
Obtém uma tag específica pelo ID.
Parâmetros:
id(number, obrigatório): ID da tagexpand(string, opcional): Lista de propriedades separadas por vírgula para expandir
Recursos da API v2 do TimeChimp
Paginação
O servidor usa os parâmetros padrão de paginação do TimeChimp:
$top: Número máximo de registros a retornar (1-10000, padrão: 100)$skip: Número de registros a pular para paginação
Filtragem (OData)
O servidor suporta as convenções de filtragem OData do TimeChimp:
- Filtros básicos:
name eq 'Project Name' - Filtros booleanos:
active eq true - Filtros de data:
date eq 2023-12-31 - Filtros de data e hora:
start gt 2023-12-31T23:59:59Z - Filtros combinados:
active eq true and name eq 'Project Name' - Filtros de coleção:
projects/any(project:project/id eq 123)
Ordenação (OData)
O servidor suporta ordenação OData:
- Campo único:
name desc - Múltiplos campos:
name desc, createdAt asc - Propriedades aninhadas:
address/city asc
Expansão (OData)
O servidor suporta expansão de entidades relacionadas:
- Expansão única:
customer - Múltiplas expansões:
customer,projects,tasks - Expansões aninhadas:
customer/contacts
Contagem
O servidor suporta contagem de resultados totais:
$count=true: Incluir contagem total na resposta$count=false: Excluir contagem total (padrão por desempenho)
Endpoints da API
O servidor interage com os seguintes endpoints da API v2 do TimeChimp:
GET /projects- Recuperar projetosGET /projects/{id}- Obter projeto específico pelo IDPOST /projects- Criar novo projetoPUT /projects/{id}- Atualizar projeto existenteDELETE /projects/{id}- Excluir projetoGET /projects/{id}/insights- Obter insights do projetoGET /users- Recuperar usuáriosGET /users/{id}- Obter usuário específico pelo IDPOST /users- Criar novo usuárioPUT /users/{id}- Atualizar usuário existenteGET /times- Recuperar registros de tempoGET /times/{id}- Obter registro de tempo específico pelo IDGET /contacts- Recuperar contatosGET /contacts/{id}- Obter contato específico pelo IDPOST /contacts- Criar novo contatoPUT /contacts/{id}- Atualizar contato existenteDELETE /contacts/{id}- Excluir contatoGET /customers- Recuperar clientesGET /customers/{id}- Obter cliente específico pelo IDPOST /customers- Criar novo clientePUT /customers/{id}- Atualizar cliente existenteDELETE /customers/{id}- Excluir clienteGET /tasks- Recuperar tarefasGET /tasks/{id}- Obter tarefa específica pelo IDGET /invoices- Recuperar faturasGET /invoices/{id}- Obter fatura específica pelo IDGET /expenses- Recuperar despesasGET /expenses/{id}- Obter despesa específica pelo IDPOST /expenses- Criar nova despesaPUT /expenses/{id}- Atualizar despesa existenteDELETE /expenses/{id}- Excluir despesaPUT /expenses/status- Atualizar status da despesa (interno)PUT /expenses/clientStatus- Atualizar status do cliente da despesa (externo)GET /expenses/{id}/statusHistory- Obter histórico de status da despesaGET /mileage- Recuperar registros de quilometragemGET /mileage/{id}- Obter registro de quilometragem específico pelo IDPOST /mileage- Criar novo registro de quilometragemPUT /mileage/{id}- Atualizar registro de quilometragem existenteDELETE /mileage/{id}- Excluir registro de quilometragemPUT /mileage/status- Atualizar status da quilometragem (interno)PUT /mileage/clientStatus- Atualizar status do cliente da quilometragem (externo)GET /mileage/{id}/statusHistory- Obter histórico de status da quilometragemGET /mileageVehicles- Recuperar veículos de quilometragemGET /mileageVehicles/{id}- Obter veículo de quilometragem específico pelo IDGET /tags- Recuperar tagsGET /tags/{id}- Obter tag específica pelo ID
Todas as solicitações são autenticadas usando o cabeçalho api-key e suportam parâmetros de consulta OData.
Exemplos Avançados
Filtragem Complexa
{
"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
}
}
Exemplo de Paginação
{
"name": "get_projects",
"arguments": {
"top": 25,
"skip": 50,
"count": true,
"orderby": "name asc"
}
}
Criando e Gerenciando Contatos
// 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"
}
}
Criando e Gerenciando 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"
}
}
Criando e Gerenciando Despesas
// 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"
}
}
Criando e Gerenciando Projetos
// 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"
}
}
Criando e Gerenciando Usuários
// 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
}
}
Criando e Gerenciando Quilometragem
// 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"
}
}
Tratamento de Erros
O servidor inclui tratamento abrangente de erros:
- Erros de autenticação: Quando a chave de API está ausente ou é inválida
- Erros de API: Quando a API do TimeChimp retorna respostas de erro (incluindo limite de taxa 429)
- Erros de rede: Quando as solicitações falham devido a problemas de conectividade
- Erros de validação: Quando parâmetros inválidos são fornecidos
- Erros OData: Quando expressões de filtro ou orderby inválidas são usadas
As respostas de erro incluem mensagens de erro detalhadas para auxiliar na depuração.
Desenvolvimento
Estrutura do Projeto
TimeJS/
├── timechimp-mcp-server.js # Main server file
├── package.json # Node.js dependencies and scripts
└── README.md # This file
Adicionando Novas Ferramentas
Para adicionar novas ferramentas:
- Adicione a definição da ferramenta ao handler
ListToolsRequestSchema - Adicione um caso para a ferramenta no handler
CallToolRequestSchema - Implemente o método da ferramenta na classe
TimechimpMCPServer - Use os métodos genéricos
handleGetRequestouhandleGetByIdRequestpara consistência
Testes
Você pode testar o servidor usando qualquer cliente MCP ou executando-o diretamente e enviando mensagens JSON-RPC via stdin.
Solução de Problemas
Problemas Comuns
-
"TIMECHIMP_API_KEY environment variable is required"
- Certifique-se de que você definiu a variável de ambiente
TIMECHIMP_API_KEY - Verifique se a chave de API está correta e possui as permissões adequadas
- Certifique-se de que você definiu a variável de ambiente
-
"TimeChimp API error: 401 Unauthorized"
- Verifique se sua chave de API é válida e não expirou
- Certifique-se de que sua conta TimeChimp tenha o acesso à API habilitado
-
"TimeChimp API error: 404 Not Found"
- O endpoint da API pode não existir ou a URL pode estar incorreta
- Verifique se você está usando a URL base correta da API v2 do TimeChimp
-
"TimeChimp API error: 429 Too Many Requests"
- Você excedeu o limite de requisições (100 requisições por minuto por empresa)
- Aguarde a redefinição do limite ou implemente a limitação de requisições
-
Erros de filtro OData
- Verifique se a sintaxe do filtro segue as convenções do OData
- Verifique se os nomes dos campos estão corretos e devidamente escapados
- Use aspas simples para valores de string:
name eq 'Project Name'
-
Erros de conexão de rede
- Verifique sua conexão com a internet
- Verifique se há restrições de firewall
Modo de Depuração
Execute o servidor em modo de depuração para obter logs mais detalhados:
npm run dev
Contribuindo
- Faça um fork do repositório
- Crie um branch de funcionalidade
- Faça suas alterações
- Teste minuciosamente
- Envie um pull request
Licença
Este projeto está licenciado sob a Licença MIT - consulte o arquivo LICENSE para obter detalhes.
Suporte
Para problemas relacionados a:
- Este servidor MCP: Abra uma issue neste repositório
- TimeChimp API: Entre em contato com o suporte da TimeChimp em ict@timechimp.com
- Protocolo MCP: Consulte a documentação do Model Context Protocol
Changelog
v0.7.0
- Adicionadas operações CRUD completas para quilometragem (Criar, Ler, Atualizar, Excluir)
- Adicionado gerenciamento de status de quilometragem com atualizações de status internas e externas
- Adicionada funcionalidade de rastreamento de histórico de status de quilometragem
- Adicionado gerenciamento de veículos de quilometragem (operações de leitura)
- Melhorado o gerenciamento de quilometragem com vinculação abrangente a clientes, projetos, veículos e usuários
- Adicionadas capacidades de atualização em massa de status para quilometragem (até 100 entradas de uma vez)
- Atualizada a contagem de ferramentas para 46 ferramentas no total
- Adicionados exemplos de CRUD de quilometragem à documentação
v0.6.0
- Adicionadas operações CRUD completas para usuários (Criar, Ler, Atualizar, Excluir)
- Adicionado gerenciamento de contratos de usuário e atribuição de funções
- Atualizada a contagem de ferramentas para 38 ferramentas no total
- Adicionados exemplos de CRUD de usuários à documentação
v0.5.0
- Adicionadas operações CRUD completas para projetos (Criar, Ler, Atualizar, Excluir)
- Adicionada funcionalidade de insights de projetos
- Atualizada a contagem de ferramentas para 36 ferramentas no total
- Adicionados exemplos de CRUD de projetos à documentação
v0.4.0
- Adicionadas operações CRUD completas para despesas (Criar, Ler, Atualizar, Excluir)
- Adicionado gerenciamento de status de despesas com atualizações de status internas e externas
- Adicionada funcionalidade de rastreamento de histórico de status de despesas
- Melhorado o gerenciamento de despesas com vinculação abrangente a clientes, projetos, produtos, usuários e taxas de IVA
- Adicionadas capacidades de atualização em massa de status (até 100 despesas de uma vez)
- Atualizada a contagem de ferramentas para 32 ferramentas no total
- Adicionados exemplos de CRUD de despesas à documentação
v0.3.0
- Adicionadas operações CRUD completas para clientes (Criar, Ler, Atualizar, Excluir)
- Adicionado gerenciamento abrangente de clientes com endereço, condições de pagamento, taxas e relacionamentos
- Melhoradas as ferramentas de clientes com suporte a taxas de IVA, tags e vinculação de contatos
- Atualizada a contagem de ferramentas para 26 ferramentas no total
- Adicionados exemplos de CRUD de clientes à documentação
v0.2.0
- Adicionado suporte abrangente para todos os principais endpoints da API v2 do TimeChimp
- Adicionadas operações CRUD completas para contatos (Criar, Ler, Atualizar, Excluir)
- Adicionado suporte para clientes, tarefas, faturas, despesas, quilometragem e tags
- Adicionados manipuladores de requisição genéricos para consistência e manutenibilidade
- Melhorado o suporte OData com $expand, $count e filtragem aprimorada
- Adicionadas ferramentas individuais de "get by ID" para todos os tipos de recursos
- Melhorado o tratamento de erros e validação
- Atualizado o cabeçalho de versão da API para 2.0
v0.1.0
- Lançamento inicial
- Suporte para as ferramentas GetProjects, Users e TimeEntries
- Integração com a API v2 do TimeChimp com suporte OData
- Tratamento de erros e validação abrangentes
- Ordenação padrão para projetos (mais recentes primeiro)