teamflect-mcp-server 1.0.3

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 (47) hide show
  1. package/.env.example +9 -0
  2. package/README.md +177 -0
  3. package/dist/constants.d.ts +9 -0
  4. package/dist/constants.d.ts.map +1 -0
  5. package/dist/constants.js +9 -0
  6. package/dist/constants.js.map +1 -0
  7. package/dist/index.d.ts +9 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +85 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/services/apiClient.d.ts +29 -0
  12. package/dist/services/apiClient.d.ts.map +1 -0
  13. package/dist/services/apiClient.js +92 -0
  14. package/dist/services/apiClient.js.map +1 -0
  15. package/dist/services/errorHandler.d.ts +5 -0
  16. package/dist/services/errorHandler.d.ts.map +1 -0
  17. package/dist/services/errorHandler.js +93 -0
  18. package/dist/services/errorHandler.js.map +1 -0
  19. package/dist/tools/feedbacks.d.ts +7 -0
  20. package/dist/tools/feedbacks.d.ts.map +1 -0
  21. package/dist/tools/feedbacks.js +372 -0
  22. package/dist/tools/feedbacks.js.map +1 -0
  23. package/dist/tools/goals.d.ts +7 -0
  24. package/dist/tools/goals.d.ts.map +1 -0
  25. package/dist/tools/goals.js +466 -0
  26. package/dist/tools/goals.js.map +1 -0
  27. package/dist/tools/recognitions.d.ts +7 -0
  28. package/dist/tools/recognitions.d.ts.map +1 -0
  29. package/dist/tools/recognitions.js +314 -0
  30. package/dist/tools/recognitions.js.map +1 -0
  31. package/dist/tools/reviews.d.ts +7 -0
  32. package/dist/tools/reviews.d.ts.map +1 -0
  33. package/dist/tools/reviews.js +224 -0
  34. package/dist/tools/reviews.js.map +1 -0
  35. package/dist/tools/tasks.d.ts +7 -0
  36. package/dist/tools/tasks.d.ts.map +1 -0
  37. package/dist/tools/tasks.js +262 -0
  38. package/dist/tools/tasks.js.map +1 -0
  39. package/dist/tools/users.d.ts +7 -0
  40. package/dist/tools/users.d.ts.map +1 -0
  41. package/dist/tools/users.js +417 -0
  42. package/dist/tools/users.js.map +1 -0
  43. package/dist/types.d.ts +284 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +9 -0
  46. package/dist/types.js.map +1 -0
  47. package/package.json +63 -0
@@ -0,0 +1,262 @@
1
+ import { z } from "zod";
2
+ import { handleApiError } from "../services/errorHandler.js";
3
+ import { ResponseFormat } from "../types.js";
4
+ import { DEFAULT_PAGE_SIZE, MAX_PAGE_SIZE, CHARACTER_LIMIT } from "../constants.js";
5
+ /**
6
+ * Register task-related tools
7
+ */
8
+ export function registerTaskTools(server, apiClient) {
9
+ // Get Tasks Schema
10
+ const GetTasksInputSchema = z.object({
11
+ assignedToEmail: z.string().email().optional().describe("Filter by assigned user email address"),
12
+ status: z.string().optional().describe("Filter by task status"),
13
+ relatedGoal: z.string().optional().describe("Filter by related goal ID"),
14
+ startDate: z.string().optional().describe("Filter by creation start date (ISO format)"),
15
+ endDate: z.string().optional().describe("Filter by creation end date (ISO format)"),
16
+ limit: z.number().int().min(1).max(MAX_PAGE_SIZE).default(DEFAULT_PAGE_SIZE)
17
+ .describe("Maximum number of tasks to return"),
18
+ offset: z.number().int().min(0).default(0)
19
+ .describe("Number of tasks to skip for pagination"),
20
+ response_format: z.nativeEnum(ResponseFormat).default(ResponseFormat.MARKDOWN)
21
+ .describe("Output format: 'markdown' for human-readable or 'json' for machine-readable"),
22
+ }).strict();
23
+ server.registerTool("teamflect_get_tasks", {
24
+ title: "Get Tasks",
25
+ description: `Retrieve a list of tasks from Teamflect based on filters.
26
+
27
+ This tool searches for tasks matching the specified criteria. You can filter by assigned user, status, related goal, and date ranges. Results are paginated.
28
+
29
+ Args:
30
+ - assignedToEmail (string, optional): Filter by assigned user email address
31
+ - status (string, optional): Filter by task status
32
+ - relatedGoal (string, optional): Filter by related goal ID
33
+ - startDate (string, optional): Filter by creation start date in ISO format (YYYY-MM-DD)
34
+ - endDate (string, optional): Filter by creation end date in ISO format (YYYY-MM-DD)
35
+ - limit (number, optional): Maximum results to return, between 1-300 (default: 20)
36
+ - offset (number, optional): Number of results to skip for pagination (default: 0)
37
+ - response_format ('markdown' | 'json', optional): Output format (default: 'markdown')
38
+
39
+ Returns:
40
+ For JSON format: Structured data with schema:
41
+ {
42
+ "total": number,
43
+ "count": number,
44
+ "offset": number,
45
+ "tasks": [
46
+ {
47
+ "id": string,
48
+ "title": string,
49
+ "descriptionText": string,
50
+ "createdAt": string,
51
+ "dueDate": string,
52
+ "assignedBy": {"displayName": string, "department": string, "jobTitle": string},
53
+ "assignedTo": [{"displayName": string, "mail": string}],
54
+ "relatedGoal": string,
55
+ "labels": [{"title": string}],
56
+ "status": string
57
+ }
58
+ ],
59
+ "has_more": boolean,
60
+ "next_offset": number
61
+ }
62
+
63
+ Examples:
64
+ - Use when: "Get all tasks assigned to john@example.com" -> params with assignedToEmail="john@example.com"
65
+ - Use when: "List tasks for goal XYZ" -> params with relatedGoal="XYZ"
66
+
67
+ Error Handling:
68
+ - Returns "Error: Authentication failed" if API key is invalid
69
+ - Returns "Error: Rate limit exceeded" if too many requests`,
70
+ inputSchema: GetTasksInputSchema,
71
+ annotations: {
72
+ readOnlyHint: true,
73
+ destructiveHint: false,
74
+ idempotentHint: true,
75
+ openWorldHint: true,
76
+ },
77
+ }, async (params) => {
78
+ try {
79
+ const queryParams = {
80
+ limit: params.limit,
81
+ };
82
+ if (params.assignedToEmail)
83
+ queryParams.assignedToEmail = params.assignedToEmail;
84
+ if (params.status)
85
+ queryParams.status = params.status;
86
+ if (params.relatedGoal)
87
+ queryParams.relatedGoal = params.relatedGoal;
88
+ if (params.startDate)
89
+ queryParams.startDate = params.startDate;
90
+ if (params.endDate)
91
+ queryParams.endDate = params.endDate;
92
+ const response = await apiClient.get("/task", queryParams);
93
+ const tasks = response.tasks || [];
94
+ const total = response.total ?? tasks.length;
95
+ const hasMore = total > params.offset + tasks.length;
96
+ const nextOffset = hasMore ? params.offset + tasks.length : undefined;
97
+ const output = {
98
+ total,
99
+ count: tasks.length,
100
+ offset: params.offset,
101
+ tasks: tasks.map((task) => ({
102
+ id: task.id,
103
+ title: task.title,
104
+ descriptionText: task.descriptionText || "",
105
+ createdAt: task.createdAt || "",
106
+ dueDate: task.dueDate || "",
107
+ assignedBy: task.assignedBy || null,
108
+ assignedTo: task.assignedTo || [],
109
+ relatedGoal: task.relatedGoal || "",
110
+ labels: task.labels || [],
111
+ status: task.status || "",
112
+ })),
113
+ has_more: hasMore,
114
+ ...(nextOffset !== undefined ? { next_offset: nextOffset } : {}),
115
+ };
116
+ let textContent;
117
+ if (params.response_format === ResponseFormat.MARKDOWN) {
118
+ const lines = [`# Tasks (${total} total)`, ""];
119
+ if (tasks.length === 0) {
120
+ lines.push("No tasks found matching the criteria.");
121
+ }
122
+ else {
123
+ lines.push(`Showing ${tasks.length} of ${total} tasks\n`);
124
+ tasks.forEach((task) => {
125
+ lines.push(`## ${task.title} (${task.id})`);
126
+ if (task.descriptionText) {
127
+ lines.push(`- **Description**: ${task.descriptionText}`);
128
+ }
129
+ if (task.status) {
130
+ lines.push(`- **Status**: ${task.status}`);
131
+ }
132
+ if (task.dueDate) {
133
+ lines.push(`- **Due Date**: ${task.dueDate}`);
134
+ }
135
+ if (task.createdAt) {
136
+ lines.push(`- **Created At**: ${task.createdAt}`);
137
+ }
138
+ if (task.assignedBy) {
139
+ lines.push(`- **Assigned By**: ${task.assignedBy.displayName}${task.assignedBy.jobTitle ? ` (${task.assignedBy.jobTitle})` : ""}`);
140
+ }
141
+ if (task.assignedTo && task.assignedTo.length > 0) {
142
+ lines.push(`- **Assigned To**: ${task.assignedTo.map((a) => `${a.displayName} (${a.mail})`).join(", ")}`);
143
+ }
144
+ if (task.relatedGoal) {
145
+ lines.push(`- **Related Goal**: ${task.relatedGoal}`);
146
+ }
147
+ if (task.labels && task.labels.length > 0) {
148
+ lines.push(`- **Labels**: ${task.labels.map((l) => l.title).join(", ")}`);
149
+ }
150
+ lines.push("");
151
+ });
152
+ if (hasMore) {
153
+ lines.push(`\n*Use offset=${nextOffset} to get more results*`);
154
+ }
155
+ }
156
+ textContent = lines.join("\n");
157
+ }
158
+ else {
159
+ textContent = JSON.stringify(output, null, 2);
160
+ }
161
+ // Check character limit
162
+ if (textContent.length > CHARACTER_LIMIT) {
163
+ const truncated = output.tasks.slice(0, Math.floor(output.tasks.length / 2));
164
+ const truncatedOutput = { ...output, tasks: truncated, truncated: true };
165
+ textContent = params.response_format === ResponseFormat.MARKDOWN
166
+ ? `# Tasks (Truncated)\n\nResponse truncated from ${output.tasks.length} to ${truncated.length} tasks. Use filters or pagination to see more results.\n\n${JSON.stringify(truncatedOutput, null, 2)}`
167
+ : JSON.stringify(truncatedOutput, null, 2);
168
+ }
169
+ return {
170
+ content: [{ type: "text", text: textContent }],
171
+ structuredContent: output,
172
+ };
173
+ }
174
+ catch (error) {
175
+ return {
176
+ content: [{
177
+ type: "text",
178
+ text: handleApiError(error),
179
+ }],
180
+ };
181
+ }
182
+ });
183
+ // Get Task Schema
184
+ const GetTaskInputSchema = z.object({
185
+ taskId: z.string().min(1).describe("The ID of the task to retrieve"),
186
+ response_format: z.nativeEnum(ResponseFormat).default(ResponseFormat.MARKDOWN)
187
+ .describe("Output format: 'markdown' for human-readable or 'json' for machine-readable"),
188
+ }).strict();
189
+ server.registerTool("teamflect_get_task", {
190
+ title: "Get Task by ID",
191
+ description: `Retrieve a single task by its ID from Teamflect.
192
+
193
+ This tool fetches detailed information about a specific task including its assignees, related goal, and labels.
194
+
195
+ Args:
196
+ - taskId (string, required): The unique identifier of the task
197
+ - response_format ('markdown' | 'json', optional): Output format (default: 'markdown')
198
+
199
+ Returns:
200
+ Complete task details including all fields and relationships.
201
+
202
+ Error Handling:
203
+ - Returns "Error: Resource not found" if taskId doesn't exist
204
+ - Returns "Error: Authentication failed" if API key is invalid`,
205
+ inputSchema: GetTaskInputSchema,
206
+ annotations: {
207
+ readOnlyHint: true,
208
+ destructiveHint: false,
209
+ idempotentHint: true,
210
+ openWorldHint: true,
211
+ },
212
+ }, async (params) => {
213
+ try {
214
+ const task = await apiClient.get(`/task/${params.taskId}`);
215
+ let textContent;
216
+ if (params.response_format === ResponseFormat.MARKDOWN) {
217
+ const lines = [`# ${task.title}`, "", `**Task ID**: ${task.id}`, ""];
218
+ if (task.descriptionText) {
219
+ lines.push(`- **Description**: ${task.descriptionText}`);
220
+ }
221
+ if (task.status) {
222
+ lines.push(`- **Status**: ${task.status}`);
223
+ }
224
+ if (task.dueDate) {
225
+ lines.push(`- **Due Date**: ${task.dueDate}`);
226
+ }
227
+ if (task.createdAt) {
228
+ lines.push(`- **Created At**: ${task.createdAt}`);
229
+ }
230
+ if (task.assignedBy) {
231
+ lines.push(`- **Assigned By**: ${task.assignedBy.displayName}${task.assignedBy.jobTitle ? ` (${task.assignedBy.jobTitle})` : ""}${task.assignedBy.department ? ` - ${task.assignedBy.department}` : ""}`);
232
+ }
233
+ if (task.assignedTo && task.assignedTo.length > 0) {
234
+ lines.push(`- **Assigned To**: ${task.assignedTo.map((a) => `${a.displayName} (${a.mail})`).join(", ")}`);
235
+ }
236
+ if (task.relatedGoal) {
237
+ lines.push(`- **Related Goal**: ${task.relatedGoal}`);
238
+ }
239
+ if (task.labels && task.labels.length > 0) {
240
+ lines.push(`- **Labels**: ${task.labels.map((l) => l.title).join(", ")}`);
241
+ }
242
+ textContent = lines.join("\n");
243
+ }
244
+ else {
245
+ textContent = JSON.stringify(task, null, 2);
246
+ }
247
+ return {
248
+ content: [{ type: "text", text: textContent }],
249
+ structuredContent: task,
250
+ };
251
+ }
252
+ catch (error) {
253
+ return {
254
+ content: [{
255
+ type: "text",
256
+ text: handleApiError(error),
257
+ }],
258
+ };
259
+ }
260
+ });
261
+ }
262
+ //# 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,7 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { TeamflectApiClient } from "../services/apiClient.js";
3
+ /**
4
+ * Register user-related tools
5
+ */
6
+ export declare function registerUserTools(server: McpServer, apiClient: TeamflectApiClient): void;
7
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAK9D;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,GAAG,IAAI,CAqbxF"}