@somosocta/tasker-mcp-server 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +74 -0
  2. package/dist/api-client.d.ts +41 -0
  3. package/dist/api-client.d.ts.map +1 -0
  4. package/dist/api-client.js +96 -0
  5. package/dist/api-client.js.map +1 -0
  6. package/dist/config.d.ts +10 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +24 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/index.d.ts +10 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +96 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/tools/analytics.d.ts +15 -0
  15. package/dist/tools/analytics.d.ts.map +1 -0
  16. package/dist/tools/analytics.js +262 -0
  17. package/dist/tools/analytics.js.map +1 -0
  18. package/dist/tools/backlog.d.ts +10 -0
  19. package/dist/tools/backlog.d.ts.map +1 -0
  20. package/dist/tools/backlog.js +165 -0
  21. package/dist/tools/backlog.js.map +1 -0
  22. package/dist/tools/clients.d.ts +9 -0
  23. package/dist/tools/clients.d.ts.map +1 -0
  24. package/dist/tools/clients.js +43 -0
  25. package/dist/tools/clients.js.map +1 -0
  26. package/dist/tools/epics.d.ts +10 -0
  27. package/dist/tools/epics.d.ts.map +1 -0
  28. package/dist/tools/epics.js +161 -0
  29. package/dist/tools/epics.js.map +1 -0
  30. package/dist/tools/planning.d.ts +11 -0
  31. package/dist/tools/planning.d.ts.map +1 -0
  32. package/dist/tools/planning.js +74 -0
  33. package/dist/tools/planning.js.map +1 -0
  34. package/dist/tools/projects.d.ts +10 -0
  35. package/dist/tools/projects.d.ts.map +1 -0
  36. package/dist/tools/projects.js +87 -0
  37. package/dist/tools/projects.js.map +1 -0
  38. package/dist/tools/sprints.d.ts +12 -0
  39. package/dist/tools/sprints.d.ts.map +1 -0
  40. package/dist/tools/sprints.js +196 -0
  41. package/dist/tools/sprints.js.map +1 -0
  42. package/dist/tools/stories.d.ts +10 -0
  43. package/dist/tools/stories.d.ts.map +1 -0
  44. package/dist/tools/stories.js +221 -0
  45. package/dist/tools/stories.js.map +1 -0
  46. package/dist/tools/tasks.d.ts +12 -0
  47. package/dist/tools/tasks.d.ts.map +1 -0
  48. package/dist/tools/tasks.js +341 -0
  49. package/dist/tools/tasks.js.map +1 -0
  50. package/dist/tools/timesheets.d.ts +10 -0
  51. package/dist/tools/timesheets.d.ts.map +1 -0
  52. package/dist/tools/timesheets.js +140 -0
  53. package/dist/tools/timesheets.js.map +1 -0
  54. package/dist/tools/users.d.ts +9 -0
  55. package/dist/tools/users.d.ts.map +1 -0
  56. package/dist/tools/users.js +45 -0
  57. package/dist/tools/users.js.map +1 -0
  58. package/dist/types.d.ts +130 -0
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +5 -0
  61. package/dist/types.js.map +1 -0
  62. package/package.json +50 -0
@@ -0,0 +1,341 @@
1
+ /**
2
+ * Tools MCP para Tarefas do Tasker.
3
+ * REQ-16.3: list_tasks — Lista tarefas com filtros
4
+ * REQ-16.4: get_task — Detalhe de uma tarefa com subtarefas, horas e comentários
5
+ * REQ-17.1: create_task — Cria uma nova tarefa
6
+ * REQ-17.2: update_task — Atualiza uma tarefa existente
7
+ */
8
+ export const tools = [
9
+ {
10
+ name: "list_tasks",
11
+ description: "Lista tarefas do Tasker com filtros opcionais. " +
12
+ "Use para buscar tarefas de um projeto, sprint, ou atribuídas a um usuário. " +
13
+ "Retorna: id, titulo, situacao, prioridade, atribuido_para, estimativa, data_fim, percentual_concluido. " +
14
+ "O ID da tarefa tem formato 'APELIDO-NNN' (ex: 'EN-042'). " +
15
+ "Situações: Backlog, Para Fazer, Executando, Bloqueada, Concluída, Em Homologação (UAT), " +
16
+ "Pronto p/ Deploy PROD, Em Validação (PROD), Entregue, Cancelada. " +
17
+ "Prioridades: 1-Urgência-Extrema, 2-Crítica, 3-Alta, 4-Normal, 9-Baixa.",
18
+ inputSchema: {
19
+ type: "object",
20
+ properties: {
21
+ project_id: {
22
+ type: "number",
23
+ description: "Filtrar por ID do projeto",
24
+ },
25
+ sprint_id: {
26
+ type: "number",
27
+ description: "Filtrar por ID da sprint",
28
+ },
29
+ status: {
30
+ type: "string",
31
+ description: "Filtrar por situação (ex: 'Executando', 'Concluída', 'Bloqueada')",
32
+ },
33
+ assignee_id: {
34
+ type: "number",
35
+ description: "Filtrar por ID do usuário atribuído",
36
+ },
37
+ priority: {
38
+ type: "string",
39
+ enum: [
40
+ "1-Urgência-Extrema",
41
+ "2-Crítica",
42
+ "3-Alta",
43
+ "4-Normal",
44
+ "9-Baixa",
45
+ ],
46
+ description: "Filtrar por prioridade",
47
+ },
48
+ tipo_tarefa: {
49
+ type: "string",
50
+ enum: ["Task", "Story", "Bug", "SubTask"],
51
+ description: "Filtrar por tipo de tarefa",
52
+ },
53
+ page: {
54
+ type: "number",
55
+ description: "Número da página (default: 1)",
56
+ },
57
+ limit: {
58
+ type: "number",
59
+ description: "Itens por página (default: 50, max: 200)",
60
+ },
61
+ },
62
+ },
63
+ },
64
+ {
65
+ name: "get_task",
66
+ description: "Retorna detalhes completos de uma tarefa específica, incluindo subtarefas, " +
67
+ "horas lançadas e comentários recentes. Use quando precisar de informações " +
68
+ "detalhadas sobre uma tarefa, como descrição completa, histórico de horas, " +
69
+ "dependências e progresso. O ID da tarefa tem formato 'APELIDO-NNN' (ex: 'EN-042').",
70
+ inputSchema: {
71
+ type: "object",
72
+ properties: {
73
+ task_id: {
74
+ type: "string",
75
+ description: "ID da tarefa no formato 'APELIDO-NNN' (ex: 'EN-042')",
76
+ },
77
+ },
78
+ required: ["task_id"],
79
+ },
80
+ },
81
+ {
82
+ name: "create_task",
83
+ description: "Cria uma nova tarefa no Tasker. Requer título, projeto e tipo de tarefa. " +
84
+ "Opcionalmente pode definir prioridade, estimativa, responsável, sprint e épico. " +
85
+ "O ID da tarefa é gerado automaticamente no formato 'APELIDO-NNN'. " +
86
+ "Tipos de tarefa: Task (tarefa comum), Story (história), Bug (defeito), SubTask (subtarefa). " +
87
+ "Prioridades: 1-Urgência-Extrema, 2-Crítica, 3-Alta, 4-Normal, 9-Baixa.",
88
+ inputSchema: {
89
+ type: "object",
90
+ properties: {
91
+ titulo: {
92
+ type: "string",
93
+ description: "Título da tarefa (obrigatório)",
94
+ },
95
+ projeto_id: {
96
+ type: "number",
97
+ description: "ID do projeto onde a tarefa será criada (obrigatório)",
98
+ },
99
+ tipo_tarefa: {
100
+ type: "string",
101
+ enum: ["Task", "Story", "Bug", "SubTask"],
102
+ description: "Tipo da tarefa (obrigatório)",
103
+ },
104
+ prioridade: {
105
+ type: "string",
106
+ enum: [
107
+ "1-Urgência-Extrema",
108
+ "2-Crítica",
109
+ "3-Alta",
110
+ "4-Normal",
111
+ "9-Baixa",
112
+ ],
113
+ description: "Prioridade da tarefa (default: 4-Normal)",
114
+ },
115
+ estimativa: {
116
+ type: "number",
117
+ description: "Estimativa de horas para conclusão",
118
+ },
119
+ atribuido_para: {
120
+ type: "number",
121
+ description: "ID do usuário responsável pela tarefa",
122
+ },
123
+ sprint_id: {
124
+ type: "number",
125
+ description: "ID da sprint onde a tarefa será incluída",
126
+ },
127
+ epico_id: {
128
+ type: "number",
129
+ description: "ID do épico ao qual a tarefa pertence",
130
+ },
131
+ historia_usuario_id: {
132
+ type: "number",
133
+ description: "ID da história de usuário (user story) à qual a tarefa pertence",
134
+ },
135
+ descricao: {
136
+ type: "string",
137
+ description: "Descrição detalhada da tarefa (suporta texto livre)",
138
+ },
139
+ data_prev_inicio: {
140
+ type: "string",
141
+ description: "Data prevista de início (formato YYYY-MM-DD)",
142
+ },
143
+ data_fim: {
144
+ type: "string",
145
+ description: "Data prevista de término (formato YYYY-MM-DD)",
146
+ },
147
+ },
148
+ required: ["titulo", "projeto_id", "tipo_tarefa"],
149
+ },
150
+ },
151
+ {
152
+ name: "update_task",
153
+ description: "Atualiza uma tarefa existente no Tasker. Informe o ID da tarefa e os campos a alterar. " +
154
+ "Respeita as regras de transição de status — nem todas as mudanças de status são permitidas. " +
155
+ "Transições válidas dependem do status atual e do fluxo UAT do projeto. " +
156
+ "Use get_task primeiro para verificar o status atual antes de alterar. " +
157
+ "O ID da tarefa tem formato 'APELIDO-NNN' (ex: 'EN-042').",
158
+ inputSchema: {
159
+ type: "object",
160
+ properties: {
161
+ task_id: {
162
+ type: "string",
163
+ description: "ID da tarefa a atualizar no formato 'APELIDO-NNN' (obrigatório)",
164
+ },
165
+ titulo: {
166
+ type: "string",
167
+ description: "Novo título da tarefa",
168
+ },
169
+ descricao: {
170
+ type: "string",
171
+ description: "Nova descrição da tarefa",
172
+ },
173
+ situacao: {
174
+ type: "string",
175
+ enum: [
176
+ "Backlog",
177
+ "Para Fazer",
178
+ "Executando",
179
+ "Bloqueada",
180
+ "Concluída",
181
+ "Em Homologação (UAT)",
182
+ "Pronto p/ Deploy PROD",
183
+ "Em Validação (PROD)",
184
+ "Entregue",
185
+ "Cancelada",
186
+ ],
187
+ description: "Novo status da tarefa (respeita regras de transição)",
188
+ },
189
+ prioridade: {
190
+ type: "string",
191
+ enum: [
192
+ "1-Urgência-Extrema",
193
+ "2-Crítica",
194
+ "3-Alta",
195
+ "4-Normal",
196
+ "9-Baixa",
197
+ ],
198
+ description: "Nova prioridade",
199
+ },
200
+ estimativa: {
201
+ type: "number",
202
+ description: "Nova estimativa de horas",
203
+ },
204
+ atribuido_para: {
205
+ type: "number",
206
+ description: "ID do novo responsável",
207
+ },
208
+ sprint_id: {
209
+ type: "number",
210
+ description: "ID da sprint (use null para remover da sprint)",
211
+ },
212
+ epico_id: {
213
+ type: "number",
214
+ description: "ID do épico",
215
+ },
216
+ historia_usuario_id: {
217
+ type: "number",
218
+ description: "ID da história de usuário (user story)",
219
+ },
220
+ percentual_concluido: {
221
+ type: "number",
222
+ description: "Percentual de conclusão (0-100)",
223
+ },
224
+ data_prev_inicio: {
225
+ type: "string",
226
+ description: "Data prevista de início (formato YYYY-MM-DD)",
227
+ },
228
+ data_fim: {
229
+ type: "string",
230
+ description: "Data prevista de término (formato YYYY-MM-DD)",
231
+ },
232
+ },
233
+ required: ["task_id"],
234
+ },
235
+ },
236
+ ];
237
+ export async function handleTool(name, args, client) {
238
+ switch (name) {
239
+ case "list_tasks": {
240
+ const params = {};
241
+ if (args.project_id)
242
+ params.projeto_id = String(args.project_id);
243
+ if (args.sprint_id)
244
+ params.sprint_id = String(args.sprint_id);
245
+ if (args.status)
246
+ params.situacao = String(args.status);
247
+ if (args.assignee_id)
248
+ params.atribuido_para = String(args.assignee_id);
249
+ if (args.priority)
250
+ params.prioridade = String(args.priority);
251
+ if (args.tipo_tarefa)
252
+ params.tipo_tarefa = String(args.tipo_tarefa);
253
+ if (args.page)
254
+ params.page = String(args.page);
255
+ if (args.limit)
256
+ params.limit = String(args.limit);
257
+ const data = await client.get("/tasks", params);
258
+ return JSON.stringify(data, null, 2);
259
+ }
260
+ case "get_task": {
261
+ const taskId = args.task_id;
262
+ if (!taskId) {
263
+ throw new Error("task_id é obrigatório");
264
+ }
265
+ const data = await client.get(`/tasks/${taskId}`);
266
+ return JSON.stringify(data, null, 2);
267
+ }
268
+ case "create_task": {
269
+ const titulo = args.titulo;
270
+ const projetoId = args.projeto_id;
271
+ const tipoTarefa = args.tipo_tarefa;
272
+ if (!titulo)
273
+ throw new Error("titulo é obrigatório");
274
+ if (!projetoId)
275
+ throw new Error("projeto_id é obrigatório");
276
+ if (!tipoTarefa)
277
+ throw new Error("tipo_tarefa é obrigatório");
278
+ const body = {
279
+ titulo,
280
+ projeto_id: projetoId,
281
+ tipo_tarefa: tipoTarefa,
282
+ };
283
+ if (args.prioridade)
284
+ body.prioridade = args.prioridade;
285
+ if (args.estimativa)
286
+ body.estimativa = args.estimativa;
287
+ if (args.atribuido_para)
288
+ body.atribuido_para = args.atribuido_para;
289
+ if (args.sprint_id)
290
+ body.sprint_id = args.sprint_id;
291
+ if (args.epico_id)
292
+ body.epico_id = args.epico_id;
293
+ if (args.historia_usuario_id)
294
+ body.historia_usuario_id = args.historia_usuario_id;
295
+ if (args.descricao)
296
+ body.descricao = args.descricao;
297
+ if (args.data_prev_inicio)
298
+ body.data_prev_inicio = args.data_prev_inicio;
299
+ if (args.data_fim)
300
+ body.data_fim = args.data_fim;
301
+ const data = await client.post("/tasks", body);
302
+ return JSON.stringify(data, null, 2);
303
+ }
304
+ case "update_task": {
305
+ const taskId = args.task_id;
306
+ if (!taskId) {
307
+ throw new Error("task_id é obrigatório");
308
+ }
309
+ const body = {};
310
+ if (args.titulo !== undefined)
311
+ body.titulo = args.titulo;
312
+ if (args.descricao !== undefined)
313
+ body.descricao = args.descricao;
314
+ if (args.situacao !== undefined)
315
+ body.situacao = args.situacao;
316
+ if (args.prioridade !== undefined)
317
+ body.prioridade = args.prioridade;
318
+ if (args.estimativa !== undefined)
319
+ body.estimativa = args.estimativa;
320
+ if (args.atribuido_para !== undefined)
321
+ body.atribuido_para = args.atribuido_para;
322
+ if (args.sprint_id !== undefined)
323
+ body.sprint_id = args.sprint_id;
324
+ if (args.epico_id !== undefined)
325
+ body.epico_id = args.epico_id;
326
+ if (args.historia_usuario_id !== undefined)
327
+ body.historia_usuario_id = args.historia_usuario_id;
328
+ if (args.percentual_concluido !== undefined)
329
+ body.percentual_concluido = args.percentual_concluido;
330
+ if (args.data_prev_inicio !== undefined)
331
+ body.data_prev_inicio = args.data_prev_inicio;
332
+ if (args.data_fim !== undefined)
333
+ body.data_fim = args.data_fim;
334
+ const data = await client.put(`/tasks/${taskId}`, body);
335
+ return JSON.stringify(data, null, 2);
336
+ }
337
+ default:
338
+ throw new Error(`Tool não encontrada: ${name}`);
339
+ }
340
+ }
341
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Tools MCP para Timesheets (Horas) do Tasker.
3
+ * REQ-16.9: list_timesheets — Lista lançamentos de horas com filtros
4
+ * REQ-17.3: create_timesheet — Cria um lançamento de horas
5
+ */
6
+ import type { Tool } from "@modelcontextprotocol/sdk/types.js";
7
+ import type { TaskerApiClient } from "../api-client.js";
8
+ export declare const tools: Tool[];
9
+ export declare function handleTool(name: string, args: Record<string, unknown>, client: TaskerApiClient): Promise<string>;
10
+ //# sourceMappingURL=timesheets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timesheets.d.ts","sourceRoot":"","sources":["../../src/tools/timesheets.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,eAAO,MAAM,KAAK,EAAE,IAAI,EA2FvB,CAAC;AAEF,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC,CA4CjB"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Tools MCP para Timesheets (Horas) do Tasker.
3
+ * REQ-16.9: list_timesheets — Lista lançamentos de horas com filtros
4
+ * REQ-17.3: create_timesheet — Cria um lançamento de horas
5
+ */
6
+ export const tools = [
7
+ {
8
+ name: "list_timesheets",
9
+ description: "Lista lançamentos de horas (timesheets) do Tasker com filtros opcionais. " +
10
+ "Use para consultar horas trabalhadas por usuário, tarefa ou projeto, " +
11
+ "ou para verificar aprovações de timesheet em um período. " +
12
+ "Retorna: id, data, usuario, tarefa, horas, aprovacao. " +
13
+ "Status de aprovação: Pendente, Aprovada, Reprovada. " +
14
+ "Datas no formato ISO 8601 (YYYY-MM-DD).",
15
+ inputSchema: {
16
+ type: "object",
17
+ properties: {
18
+ user_id: {
19
+ type: "number",
20
+ description: "Filtrar por ID do usuário que lançou as horas",
21
+ },
22
+ task_id: {
23
+ type: "string",
24
+ description: "Filtrar por ID da tarefa (formato 'APELIDO-NNN', ex: 'EN-042')",
25
+ },
26
+ project_id: {
27
+ type: "number",
28
+ description: "Filtrar por ID do projeto",
29
+ },
30
+ from: {
31
+ type: "string",
32
+ description: "Data inicial do período (formato YYYY-MM-DD). Ex: '2025-01-01'",
33
+ },
34
+ to: {
35
+ type: "string",
36
+ description: "Data final do período (formato YYYY-MM-DD). Ex: '2025-01-31'",
37
+ },
38
+ aprovacao: {
39
+ type: "string",
40
+ enum: ["Pendente", "Aprovada", "Reprovada"],
41
+ description: "Filtrar por status de aprovação",
42
+ },
43
+ page: {
44
+ type: "number",
45
+ description: "Número da página (default: 1)",
46
+ },
47
+ limit: {
48
+ type: "number",
49
+ description: "Itens por página (default: 50, max: 200)",
50
+ },
51
+ },
52
+ },
53
+ },
54
+ {
55
+ name: "create_timesheet",
56
+ description: "Cria um lançamento de horas (timesheet) no Tasker. " +
57
+ "Registra horas trabalhadas por um usuário em uma tarefa específica em uma data. " +
58
+ "O lançamento é criado com status de aprovação 'Pendente' por padrão. " +
59
+ "Use para registrar trabalho realizado em tarefas. " +
60
+ "A data deve estar no formato YYYY-MM-DD e a quantidade de horas é um número decimal (ex: 2.5 para 2h30).",
61
+ inputSchema: {
62
+ type: "object",
63
+ properties: {
64
+ tarefa_id: {
65
+ type: "string",
66
+ description: "ID da tarefa no formato 'APELIDO-NNN' (obrigatório, ex: 'EN-042')",
67
+ },
68
+ usuario_id: {
69
+ type: "number",
70
+ description: "ID do usuário que realizou o trabalho (obrigatório)",
71
+ },
72
+ data: {
73
+ type: "string",
74
+ description: "Data do lançamento no formato YYYY-MM-DD (obrigatório, ex: '2025-01-15')",
75
+ },
76
+ quantidade_horas: {
77
+ type: "number",
78
+ description: "Quantidade de horas trabalhadas (obrigatório, ex: 2.5 para 2h30min)",
79
+ },
80
+ tipo_de_atividade: {
81
+ type: "string",
82
+ description: "Tipo de atividade realizada (ex: 'Desenvolvimento', 'Code Review', 'Reunião')",
83
+ },
84
+ },
85
+ required: ["tarefa_id", "usuario_id", "data", "quantidade_horas"],
86
+ },
87
+ },
88
+ ];
89
+ export async function handleTool(name, args, client) {
90
+ switch (name) {
91
+ case "list_timesheets": {
92
+ const params = {};
93
+ if (args.user_id)
94
+ params.usuario_id = String(args.user_id);
95
+ if (args.task_id)
96
+ params.tarefa_id = String(args.task_id);
97
+ if (args.project_id)
98
+ params.projeto_id = String(args.project_id);
99
+ if (args.from)
100
+ params.data_inicio = String(args.from);
101
+ if (args.to)
102
+ params.data_fim = String(args.to);
103
+ if (args.aprovacao)
104
+ params.aprovacao = String(args.aprovacao);
105
+ if (args.page)
106
+ params.page = String(args.page);
107
+ if (args.limit)
108
+ params.limit = String(args.limit);
109
+ const data = await client.get("/timesheets", params);
110
+ return JSON.stringify(data, null, 2);
111
+ }
112
+ case "create_timesheet": {
113
+ const tarefaId = args.tarefa_id;
114
+ const usuarioId = args.usuario_id;
115
+ const data = args.data;
116
+ const quantidadeHoras = args.quantidade_horas;
117
+ if (!tarefaId)
118
+ throw new Error("tarefa_id é obrigatório");
119
+ if (!usuarioId)
120
+ throw new Error("usuario_id é obrigatório");
121
+ if (!data)
122
+ throw new Error("data é obrigatório");
123
+ if (quantidadeHoras === undefined || quantidadeHoras === null)
124
+ throw new Error("quantidade_horas é obrigatório");
125
+ const body = {
126
+ tarefa_id: tarefaId,
127
+ atribuido_para: usuarioId,
128
+ data,
129
+ quantidade_horas: quantidadeHoras,
130
+ };
131
+ if (args.tipo_de_atividade)
132
+ body.tipo_de_atividade = args.tipo_de_atividade;
133
+ const result = await client.post("/timesheets", body);
134
+ return JSON.stringify(result, null, 2);
135
+ }
136
+ default:
137
+ throw new Error(`Tool não encontrada: ${name}`);
138
+ }
139
+ }
140
+ //# sourceMappingURL=timesheets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timesheets.js","sourceRoot":"","sources":["../../src/tools/timesheets.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,CAAC,MAAM,KAAK,GAAW;IAC3B;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,2EAA2E;YAC3E,uEAAuE;YACvE,2DAA2D;YAC3D,wDAAwD;YACxD,sDAAsD;YACtD,yCAAyC;QAC3C,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+CAA+C;iBAC7D;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,gEAAgE;iBACnE;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2BAA2B;iBACzC;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,gEAAgE;iBACnE;gBACD,EAAE,EAAE;oBACF,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,8DAA8D;iBACjE;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC;oBAC3C,WAAW,EAAE,iCAAiC;iBAC/C;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+BAA+B;iBAC7C;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0CAA0C;iBACxD;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,qDAAqD;YACrD,kFAAkF;YAClF,uEAAuE;YACvE,oDAAoD;YACpD,0GAA0G;QAC5G,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,mEAAmE;iBACtE;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qDAAqD;iBACnE;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,0EAA0E;iBAC7E;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,qEAAqE;iBACxE;gBACD,iBAAiB,EAAE;oBACjB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,+EAA+E;iBAClF;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,kBAAkB,CAAC;SAClE;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAY,EACZ,IAA6B,EAC7B,MAAuB;IAEvB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,MAAM,GAA2B,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,OAAO;gBAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3D,IAAI,IAAI,CAAC,OAAO;gBAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1D,IAAI,IAAI,CAAC,UAAU;gBAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACjE,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,IAAI,CAAC,EAAE;gBAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,SAAS;gBAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9D,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;YAClC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAE9C,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC1D,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACjD,IAAI,eAAe,KAAK,SAAS,IAAI,eAAe,KAAK,IAAI;gBAC3D,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAEpD,MAAM,IAAI,GAA4B;gBACpC,SAAS,EAAE,QAAQ;gBACnB,cAAc,EAAE,SAAS;gBACzB,IAAI;gBACJ,gBAAgB,EAAE,eAAe;aAClC,CAAC;YACF,IAAI,IAAI,CAAC,iBAAiB;gBACxB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;YAElD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Tools MCP para leitura de Usuários do Tasker.
3
+ * REQ-16.11: list_users — Lista usuários (sem dados sensíveis)
4
+ */
5
+ import type { Tool } from "@modelcontextprotocol/sdk/types.js";
6
+ import type { TaskerApiClient } from "../api-client.js";
7
+ export declare const tools: Tool[];
8
+ export declare function handleTool(name: string, args: Record<string, unknown>, client: TaskerApiClient): Promise<string>;
9
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,eAAO,MAAM,KAAK,EAAE,IAAI,EAyBvB,CAAC;AAEF,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC,CAajB"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Tools MCP para leitura de Usuários do Tasker.
3
+ * REQ-16.11: list_users — Lista usuários (sem dados sensíveis)
4
+ */
5
+ export const tools = [
6
+ {
7
+ name: "list_users",
8
+ description: "Lista todos os usuários do Tasker. " +
9
+ "Use para encontrar IDs de usuários ao atribuir tarefas, filtrar timesheets, " +
10
+ "ou verificar membros da equipe. " +
11
+ "Retorna: id, nome, email, role, situacao. " +
12
+ "Roles: ADMINISTRATOR, WORKER, CLIENT. " +
13
+ "Situações: Ativo, Suspenso, Demitido. " +
14
+ "Nunca retorna dados sensíveis (senha, tokens).",
15
+ inputSchema: {
16
+ type: "object",
17
+ properties: {
18
+ page: {
19
+ type: "number",
20
+ description: "Número da página (default: 1)",
21
+ },
22
+ limit: {
23
+ type: "number",
24
+ description: "Itens por página (default: 50, max: 200)",
25
+ },
26
+ },
27
+ },
28
+ },
29
+ ];
30
+ export async function handleTool(name, args, client) {
31
+ switch (name) {
32
+ case "list_users": {
33
+ const params = {};
34
+ if (args.page)
35
+ params.page = String(args.page);
36
+ if (args.limit)
37
+ params.limit = String(args.limit);
38
+ const data = await client.get("/users", params);
39
+ return JSON.stringify(data, null, 2);
40
+ }
41
+ default:
42
+ throw new Error(`Tool não encontrada: ${name}`);
43
+ }
44
+ }
45
+ //# sourceMappingURL=users.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,CAAC,MAAM,KAAK,GAAW;IAC3B;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EACT,qCAAqC;YACrC,8EAA8E;YAC9E,kCAAkC;YAClC,4CAA4C;YAC5C,wCAAwC;YACxC,wCAAwC;YACxC,gDAAgD;QAClD,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+BAA+B;iBAC7C;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0CAA0C;iBACxD;aACF;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAY,EACZ,IAA6B,EAC7B,MAAuB;IAEvB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,MAAM,GAA2B,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;AACH,CAAC"}