@cube8021/taskforge-mcp 1.0.0

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.
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * TaskForge MCP Client
4
+ *
5
+ * A Model Context Protocol server that wraps the TaskForge HTTP API.
6
+ * This allows Claude Code to interact with TaskForge through the standard MCP interface.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}
package/dist/index.js ADDED
@@ -0,0 +1,715 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * TaskForge MCP Client
4
+ *
5
+ * A Model Context Protocol server that wraps the TaskForge HTTP API.
6
+ * This allows Claude Code to interact with TaskForge through the standard MCP interface.
7
+ */
8
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
10
+ import { z } from "zod";
11
+ // =============================================================================
12
+ // Configuration
13
+ // =============================================================================
14
+ const API_URL = process.env.API_URL || "https://taskforge.support.tools";
15
+ const API_TOKEN = process.env.TASKFORGE_API_TOKEN;
16
+ if (!API_TOKEN) {
17
+ console.error("Error: TASKFORGE_API_TOKEN environment variable is required");
18
+ process.exit(1);
19
+ }
20
+ async function apiRequest(method, path, body, queryParams) {
21
+ const url = new URL(`${API_URL}${path}`);
22
+ // Add query params
23
+ if (queryParams) {
24
+ for (const [key, value] of Object.entries(queryParams)) {
25
+ if (value !== undefined && value !== null) {
26
+ url.searchParams.set(key, String(value));
27
+ }
28
+ }
29
+ }
30
+ const headers = {
31
+ "Authorization": `Bearer ${API_TOKEN}`,
32
+ "Content-Type": "application/json",
33
+ };
34
+ const options = {
35
+ method,
36
+ headers,
37
+ };
38
+ if (body && method !== "GET") {
39
+ options.body = JSON.stringify(body);
40
+ }
41
+ const response = await fetch(url.toString(), options);
42
+ const text = await response.text();
43
+ let data;
44
+ try {
45
+ data = JSON.parse(text);
46
+ }
47
+ catch {
48
+ throw new Error(`Invalid JSON response: ${text}`);
49
+ }
50
+ if (!response.ok) {
51
+ const errorData = data;
52
+ throw new Error(errorData.error || errorData.message || `API error: ${response.status}`);
53
+ }
54
+ return data;
55
+ }
56
+ // Helper to format response for MCP
57
+ function mcpResponse(data) {
58
+ return {
59
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
60
+ };
61
+ }
62
+ // =============================================================================
63
+ // MCP Server Setup
64
+ // =============================================================================
65
+ const server = new McpServer({
66
+ name: "taskforge-mcp",
67
+ version: "1.0.0",
68
+ });
69
+ // =============================================================================
70
+ // Project Tools (8)
71
+ // =============================================================================
72
+ server.tool("createProject", "Create a new project", {
73
+ name: z.string().describe("Project name"),
74
+ description: z.string().optional().describe("Project description"),
75
+ status: z.enum(["active", "completed", "archived"]).optional().describe("Project status"),
76
+ }, async ({ name, description, status }) => {
77
+ const result = await apiRequest("POST", "/api/v1/projects", { name, description, status });
78
+ return mcpResponse(result);
79
+ });
80
+ server.tool("listProjects", "List all projects with optional filtering and pagination", {
81
+ status: z.enum(["active", "completed", "archived"]).optional().describe("Filter by status"),
82
+ limit: z.number().optional().describe("Max results (default 100)"),
83
+ offset: z.number().optional().describe("Pagination offset"),
84
+ organization_id: z.number().optional().describe("Filter by organization"),
85
+ team_id: z.number().optional().describe("Filter by team"),
86
+ user_id: z.number().optional().describe("Filter by direct user membership"),
87
+ }, async ({ status, limit, offset, organization_id, team_id, user_id }) => {
88
+ const result = await apiRequest("GET", "/api/v1/projects", undefined, {
89
+ status, limit, offset, organization_id, team_id, user_id
90
+ });
91
+ return mcpResponse(result);
92
+ });
93
+ server.tool("getProject", "Get a specific project by ID", {
94
+ projectId: z.number().describe("Project ID"),
95
+ }, async ({ projectId }) => {
96
+ const result = await apiRequest("GET", `/api/v1/projects/${projectId}`);
97
+ return mcpResponse(result);
98
+ });
99
+ server.tool("updateProject", "Update an existing project", {
100
+ projectId: z.number().describe("Project ID"),
101
+ name: z.string().optional().describe("New project name"),
102
+ description: z.string().optional().describe("New description"),
103
+ status: z.enum(["active", "completed", "archived"]).optional().describe("New status"),
104
+ }, async ({ projectId, ...updates }) => {
105
+ const result = await apiRequest("PUT", `/api/v1/projects/${projectId}`, updates);
106
+ return mcpResponse(result);
107
+ });
108
+ server.tool("archiveProject", "Archive (soft delete) a project", {
109
+ projectId: z.number().describe("Project ID"),
110
+ }, async ({ projectId }) => {
111
+ const result = await apiRequest("DELETE", `/api/v1/projects/${projectId}`);
112
+ return mcpResponse(result);
113
+ });
114
+ server.tool("createSubProject", "Create a sub-project under a parent project", {
115
+ parentId: z.number().describe("Parent project ID"),
116
+ name: z.string().describe("Sub-project name"),
117
+ description: z.string().optional().describe("Sub-project description"),
118
+ }, async ({ parentId, name, description }) => {
119
+ const result = await apiRequest("POST", `/api/v1/projects/${parentId}/subprojects`, { name, description });
120
+ return mcpResponse(result);
121
+ });
122
+ server.tool("moveProject", "Move a project to a new parent (or to root level if newParentId is null)", {
123
+ projectId: z.number().describe("Project ID to move"),
124
+ newParentId: z.number().nullable().describe("New parent ID (null for root level)"),
125
+ }, async ({ projectId, newParentId }) => {
126
+ const result = await apiRequest("PUT", `/api/v1/projects/${projectId}/move`, { new_parent_id: newParentId });
127
+ return mcpResponse(result);
128
+ });
129
+ server.tool("getProjectTree", "Get hierarchical tree view of a project and all its sub-projects", {
130
+ projectId: z.number().describe("Project ID"),
131
+ }, async ({ projectId }) => {
132
+ const result = await apiRequest("GET", `/api/v1/projects/${projectId}/tree`);
133
+ return mcpResponse(result);
134
+ });
135
+ // =============================================================================
136
+ // Task Tools (18)
137
+ // =============================================================================
138
+ server.tool("createTask", "Create a new task with optional project planning fields", {
139
+ projectId: z.number().describe("Project ID"),
140
+ name: z.string().describe("Task name"),
141
+ description: z.string().optional().describe("Task description"),
142
+ status: z.enum(["todo", "planned", "in_progress", "done", "blocked"]).optional().describe("Task status"),
143
+ priority: z.enum(["low", "medium", "high", "urgent"]).optional().describe("Task priority"),
144
+ featureId: z.number().optional().describe("Feature ID"),
145
+ sprintId: z.number().optional().describe("Sprint ID"),
146
+ estimatedHours: z.number().optional().describe("Estimated hours"),
147
+ assignee: z.string().optional().describe("Assignee email"),
148
+ parentTaskId: z.number().optional().describe("Parent task ID for subtasks"),
149
+ }, async ({ projectId, featureId, sprintId, estimatedHours, parentTaskId, ...rest }) => {
150
+ const result = await apiRequest("POST", "/api/v1/tasks", {
151
+ project_id: projectId,
152
+ feature_id: featureId,
153
+ sprint_id: sprintId,
154
+ estimated_hours: estimatedHours,
155
+ parent_task_id: parentTaskId,
156
+ ...rest,
157
+ });
158
+ return mcpResponse(result);
159
+ });
160
+ server.tool("getTasks", "List tasks with optional filtering and pagination", {
161
+ projectId: z.number().optional().describe("Filter by project ID"),
162
+ featureId: z.number().optional().describe("Filter by feature ID"),
163
+ sprintId: z.number().optional().describe("Filter by sprint ID"),
164
+ status: z.enum(["todo", "planned", "in_progress", "done", "blocked"]).optional().describe("Filter by status"),
165
+ priority: z.enum(["low", "medium", "high", "urgent"]).optional().describe("Filter by priority"),
166
+ assignee: z.string().optional().describe("Filter by assignee email"),
167
+ limit: z.number().optional().describe("Max results"),
168
+ offset: z.number().optional().describe("Pagination offset"),
169
+ }, async ({ projectId, featureId, sprintId, ...rest }) => {
170
+ const result = await apiRequest("GET", "/api/v1/tasks", undefined, {
171
+ project_id: projectId,
172
+ feature_id: featureId,
173
+ sprint_id: sprintId,
174
+ ...rest,
175
+ });
176
+ return mcpResponse(result);
177
+ });
178
+ server.tool("getTask", "Get a specific task by ID with full details", {
179
+ taskId: z.number().describe("Task ID"),
180
+ }, async ({ taskId }) => {
181
+ const result = await apiRequest("GET", `/api/v1/tasks/${taskId}`);
182
+ return mcpResponse(result);
183
+ });
184
+ server.tool("updateTask", "Update an existing task with automatic lifecycle management", {
185
+ taskId: z.number().describe("Task ID"),
186
+ name: z.string().optional().describe("New task name"),
187
+ description: z.string().optional().describe("New description"),
188
+ status: z.enum(["todo", "planned", "in_progress", "done", "blocked"]).optional().describe("New status"),
189
+ priority: z.enum(["low", "medium", "high", "urgent"]).optional().describe("New priority"),
190
+ featureId: z.number().optional().describe("New feature ID"),
191
+ sprintId: z.number().optional().describe("New sprint ID"),
192
+ estimatedHours: z.number().optional().describe("New estimated hours"),
193
+ actualHours: z.number().optional().describe("Actual hours spent"),
194
+ assignee: z.string().optional().describe("New assignee email"),
195
+ outcome: z.string().optional().describe("Task outcome/results"),
196
+ }, async ({ taskId, featureId, sprintId, estimatedHours, actualHours, ...rest }) => {
197
+ const result = await apiRequest("PUT", `/api/v1/tasks/${taskId}`, {
198
+ feature_id: featureId,
199
+ sprint_id: sprintId,
200
+ estimated_hours: estimatedHours,
201
+ actual_hours: actualHours,
202
+ ...rest,
203
+ });
204
+ return mcpResponse(result);
205
+ });
206
+ server.tool("deleteTask", "Delete (soft delete) a task", {
207
+ taskId: z.number().describe("Task ID"),
208
+ }, async ({ taskId }) => {
209
+ const result = await apiRequest("DELETE", `/api/v1/tasks/${taskId}`);
210
+ return mcpResponse(result);
211
+ });
212
+ server.tool("setDependency", "Set a blocking dependency between tasks (task A is blocked by task B)", {
213
+ taskId: z.number().describe("Task that will be blocked"),
214
+ blockedByTaskId: z.number().describe("Task that blocks"),
215
+ }, async ({ taskId, blockedByTaskId }) => {
216
+ const result = await apiRequest("POST", `/api/v1/tasks/${taskId}/dependencies`, {
217
+ blocked_by_task_id: blockedByTaskId,
218
+ });
219
+ return mcpResponse(result);
220
+ });
221
+ server.tool("clearDependency", "Clear a blocking dependency from a task", {
222
+ taskId: z.number().describe("Task ID"),
223
+ }, async ({ taskId }) => {
224
+ const result = await apiRequest("DELETE", `/api/v1/tasks/${taskId}/dependencies`);
225
+ return mcpResponse(result);
226
+ });
227
+ server.tool("addDependency", "Add a single dependency to a task (supports multi-dependency)", {
228
+ taskId: z.number().describe("Task that depends on another"),
229
+ dependsOnTaskId: z.number().describe("Task it depends on"),
230
+ }, async ({ taskId, dependsOnTaskId }) => {
231
+ const result = await apiRequest("POST", "/api/v1/tasks/dependencies/add", {
232
+ task_id: taskId,
233
+ depends_on_task_id: dependsOnTaskId,
234
+ });
235
+ return mcpResponse(result);
236
+ });
237
+ server.tool("removeDependency", "Remove a specific dependency from a task", {
238
+ taskId: z.number().describe("Task ID"),
239
+ dependsOnTaskId: z.number().describe("Dependency to remove"),
240
+ }, async ({ taskId, dependsOnTaskId }) => {
241
+ const result = await apiRequest("POST", "/api/v1/tasks/dependencies/remove", {
242
+ task_id: taskId,
243
+ depends_on_task_id: dependsOnTaskId,
244
+ });
245
+ return mcpResponse(result);
246
+ });
247
+ server.tool("setDependencies", "Atomically replace all dependencies for a task (pass empty array to remove all)", {
248
+ taskId: z.number().describe("Task ID"),
249
+ dependsOnTaskIds: z.array(z.number()).describe("Array of task IDs this task depends on"),
250
+ }, async ({ taskId, dependsOnTaskIds }) => {
251
+ const result = await apiRequest("POST", "/api/v1/tasks/dependencies/set", {
252
+ task_id: taskId,
253
+ depends_on_task_ids: dependsOnTaskIds,
254
+ });
255
+ return mcpResponse(result);
256
+ });
257
+ server.tool("getBlockedTasks", "Get all blocked tasks for a project", {
258
+ projectId: z.number().describe("Project ID"),
259
+ }, async ({ projectId }) => {
260
+ const result = await apiRequest("GET", `/api/v1/projects/${projectId}/blocked-tasks`);
261
+ return mcpResponse(result);
262
+ });
263
+ server.tool("createSubtask", "Create a subtask under a parent task (inherits project/feature/sprint from parent)", {
264
+ parentTaskId: z.number().describe("Parent task ID"),
265
+ name: z.string().describe("Subtask name"),
266
+ description: z.string().optional().describe("Subtask description"),
267
+ priority: z.enum(["low", "medium", "high", "urgent"]).optional().describe("Priority"),
268
+ estimatedHours: z.number().optional().describe("Estimated hours"),
269
+ }, async ({ parentTaskId, estimatedHours, ...rest }) => {
270
+ const result = await apiRequest("POST", `/api/v1/tasks/${parentTaskId}/subtasks`, {
271
+ estimated_hours: estimatedHours,
272
+ ...rest,
273
+ });
274
+ return mcpResponse(result);
275
+ });
276
+ server.tool("getReadyTasks", "Get all tasks ready to start (dependencies met, parent started, no blocking subtasks)", {
277
+ projectId: z.number().describe("Project ID"),
278
+ featureId: z.number().optional().describe("Filter by feature"),
279
+ sprintId: z.number().optional().describe("Filter by sprint"),
280
+ limit: z.number().optional().describe("Max results"),
281
+ offset: z.number().optional().describe("Pagination offset"),
282
+ }, async ({ projectId, featureId, sprintId, limit, offset }) => {
283
+ const result = await apiRequest("GET", "/api/v1/tasks/ready", undefined, {
284
+ project_id: projectId,
285
+ feature_id: featureId,
286
+ sprint_id: sprintId,
287
+ limit,
288
+ offset,
289
+ });
290
+ return mcpResponse(result);
291
+ });
292
+ server.tool("getTaskTree", "Get hierarchical tree view of a task and all its subtasks", {
293
+ taskId: z.number().describe("Task ID"),
294
+ }, async ({ taskId }) => {
295
+ const result = await apiRequest("GET", `/api/v1/tasks/${taskId}/tree`);
296
+ return mcpResponse(result);
297
+ });
298
+ server.tool("planTask", "Create/update task design without marking as in_progress - used by planning agents", {
299
+ taskId: z.number().describe("Task ID"),
300
+ designApproach: z.string().describe("High-level design decisions and trade-offs"),
301
+ plan: z.string().describe("Step-by-step implementation plan"),
302
+ filesAffected: z.array(z.string()).optional().describe("File paths to modify"),
303
+ successCriteria: z.string().describe("Markdown checklist defining 'done'"),
304
+ risksAndMitigations: z.string().optional().describe("Risk assessment"),
305
+ }, async ({ taskId, designApproach, filesAffected, successCriteria, risksAndMitigations, plan }) => {
306
+ const result = await apiRequest("POST", `/api/v1/tasks/${taskId}/plan`, {
307
+ design_approach: designApproach,
308
+ plan,
309
+ files_affected: filesAffected,
310
+ success_criteria: successCriteria,
311
+ risks_and_mitigations: risksAndMitigations,
312
+ });
313
+ return mcpResponse(result);
314
+ });
315
+ server.tool("getUnplannedTasks", "Find tasks needing design work (status=todo, no plan) - entry point for planning agents", {
316
+ projectId: z.number().describe("Project ID"),
317
+ featureId: z.number().optional().describe("Filter by feature"),
318
+ sprintId: z.number().optional().describe("Filter by sprint"),
319
+ limit: z.number().optional().describe("Max results"),
320
+ offset: z.number().optional().describe("Pagination offset"),
321
+ }, async ({ projectId, featureId, sprintId, limit, offset }) => {
322
+ const result = await apiRequest("GET", "/api/v1/tasks/unplanned", undefined, {
323
+ project_id: projectId,
324
+ feature_id: featureId,
325
+ sprint_id: sprintId,
326
+ limit,
327
+ offset,
328
+ });
329
+ return mcpResponse(result);
330
+ });
331
+ server.tool("getPlannedTasks", "Find tasks ready for implementation (status=planned, has plan) - entry point for execution agents", {
332
+ projectId: z.number().describe("Project ID"),
333
+ featureId: z.number().optional().describe("Filter by feature"),
334
+ sprintId: z.number().optional().describe("Filter by sprint"),
335
+ limit: z.number().optional().describe("Max results"),
336
+ offset: z.number().optional().describe("Pagination offset"),
337
+ }, async ({ projectId, featureId, sprintId, limit, offset }) => {
338
+ const result = await apiRequest("GET", "/api/v1/tasks/planned", undefined, {
339
+ project_id: projectId,
340
+ feature_id: featureId,
341
+ sprint_id: sprintId,
342
+ limit,
343
+ offset,
344
+ });
345
+ return mcpResponse(result);
346
+ });
347
+ server.tool("getSpawnedTasks", "Get all tasks that were spawned from a given task", {
348
+ taskId: z.number().describe("Source task ID"),
349
+ }, async ({ taskId }) => {
350
+ const result = await apiRequest("GET", `/api/v1/tasks/${taskId}/spawned`);
351
+ return mcpResponse(result);
352
+ });
353
+ // =============================================================================
354
+ // Feature Tools (8)
355
+ // =============================================================================
356
+ server.tool("createFeature", "Create a new feature to organize tasks within a project", {
357
+ projectId: z.number().describe("Project ID"),
358
+ name: z.string().describe("Feature name"),
359
+ description: z.string().optional().describe("Feature description"),
360
+ }, async ({ projectId, ...rest }) => {
361
+ const result = await apiRequest("POST", "/api/v1/features", {
362
+ project_id: projectId,
363
+ ...rest,
364
+ });
365
+ return mcpResponse(result);
366
+ });
367
+ server.tool("listFeatures", "List features for a project with pagination", {
368
+ projectId: z.number().describe("Project ID"),
369
+ limit: z.number().optional().describe("Max results"),
370
+ offset: z.number().optional().describe("Pagination offset"),
371
+ }, async ({ projectId, limit, offset }) => {
372
+ const result = await apiRequest("GET", "/api/v1/features", undefined, {
373
+ project_id: projectId,
374
+ limit,
375
+ offset,
376
+ });
377
+ return mcpResponse(result);
378
+ });
379
+ server.tool("getFeature", "Get a specific feature by ID", {
380
+ featureId: z.number().describe("Feature ID"),
381
+ }, async ({ featureId }) => {
382
+ const result = await apiRequest("GET", `/api/v1/features/${featureId}`);
383
+ return mcpResponse(result);
384
+ });
385
+ server.tool("updateFeature", "Update an existing feature", {
386
+ featureId: z.number().describe("Feature ID"),
387
+ name: z.string().optional().describe("New feature name"),
388
+ description: z.string().optional().describe("New description"),
389
+ }, async ({ featureId, ...updates }) => {
390
+ const result = await apiRequest("PUT", `/api/v1/features/${featureId}`, updates);
391
+ return mcpResponse(result);
392
+ });
393
+ server.tool("deleteFeature", "Delete (soft delete) a feature", {
394
+ featureId: z.number().describe("Feature ID"),
395
+ }, async ({ featureId }) => {
396
+ const result = await apiRequest("DELETE", `/api/v1/features/${featureId}`);
397
+ return mcpResponse(result);
398
+ });
399
+ server.tool("createSubFeature", "Create a sub-feature under a parent feature", {
400
+ parentId: z.number().describe("Parent feature ID"),
401
+ name: z.string().describe("Sub-feature name"),
402
+ description: z.string().optional().describe("Sub-feature description"),
403
+ }, async ({ parentId, name, description }) => {
404
+ const result = await apiRequest("POST", `/api/v1/features/${parentId}/subfeatures`, { name, description });
405
+ return mcpResponse(result);
406
+ });
407
+ server.tool("moveFeature", "Move a feature to a new parent (or to root level if newParentId is null)", {
408
+ featureId: z.number().describe("Feature ID to move"),
409
+ newParentId: z.number().nullable().describe("New parent ID (null for root level)"),
410
+ }, async ({ featureId, newParentId }) => {
411
+ const result = await apiRequest("PUT", `/api/v1/features/${featureId}/move`, { new_parent_id: newParentId });
412
+ return mcpResponse(result);
413
+ });
414
+ server.tool("getFeatureTree", "Get hierarchical tree view of a feature and all its sub-features", {
415
+ featureId: z.number().describe("Feature ID"),
416
+ }, async ({ featureId }) => {
417
+ const result = await apiRequest("GET", `/api/v1/features/${featureId}/tree`);
418
+ return mcpResponse(result);
419
+ });
420
+ // =============================================================================
421
+ // Sprint Tools (6)
422
+ // =============================================================================
423
+ server.tool("createSprint", "Create a new sprint for time-boxed work", {
424
+ projectId: z.number().describe("Project ID"),
425
+ name: z.string().describe("Sprint name"),
426
+ status: z.enum(["planned", "active", "completed"]).optional().describe("Sprint status"),
427
+ startDate: z.string().optional().describe("Start date (ISO 8601)"),
428
+ endDate: z.string().optional().describe("End date (ISO 8601)"),
429
+ }, async ({ projectId, startDate, endDate, ...rest }) => {
430
+ const result = await apiRequest("POST", "/api/v1/sprints", {
431
+ project_id: projectId,
432
+ start_date: startDate,
433
+ end_date: endDate,
434
+ ...rest,
435
+ });
436
+ return mcpResponse(result);
437
+ });
438
+ server.tool("listSprints", "List sprints for a project with optional status filtering", {
439
+ projectId: z.number().describe("Project ID"),
440
+ status: z.enum(["planned", "active", "completed"]).optional().describe("Filter by status"),
441
+ limit: z.number().optional().describe("Max results"),
442
+ offset: z.number().optional().describe("Pagination offset"),
443
+ }, async ({ projectId, status, limit, offset }) => {
444
+ const result = await apiRequest("GET", "/api/v1/sprints", undefined, {
445
+ project_id: projectId,
446
+ status,
447
+ limit,
448
+ offset,
449
+ });
450
+ return mcpResponse(result);
451
+ });
452
+ server.tool("getSprint", "Get a specific sprint by ID", {
453
+ sprintId: z.number().describe("Sprint ID"),
454
+ }, async ({ sprintId }) => {
455
+ const result = await apiRequest("GET", `/api/v1/sprints/${sprintId}`);
456
+ return mcpResponse(result);
457
+ });
458
+ server.tool("updateSprint", "Update an existing sprint (name, status, dates)", {
459
+ sprintId: z.number().describe("Sprint ID"),
460
+ name: z.string().optional().describe("New sprint name"),
461
+ status: z.enum(["planned", "active", "completed"]).optional().describe("New status"),
462
+ startDate: z.string().optional().describe("New start date (ISO 8601)"),
463
+ endDate: z.string().optional().describe("New end date (ISO 8601)"),
464
+ }, async ({ sprintId, startDate, endDate, ...rest }) => {
465
+ const result = await apiRequest("PUT", `/api/v1/sprints/${sprintId}`, {
466
+ start_date: startDate,
467
+ end_date: endDate,
468
+ ...rest,
469
+ });
470
+ return mcpResponse(result);
471
+ });
472
+ server.tool("deleteSprint", "Delete (soft delete) a sprint", {
473
+ sprintId: z.number().describe("Sprint ID"),
474
+ }, async ({ sprintId }) => {
475
+ const result = await apiRequest("DELETE", `/api/v1/sprints/${sprintId}`);
476
+ return mcpResponse(result);
477
+ });
478
+ server.tool("getCurrentSprint", "Get the currently active sprint for a project", {
479
+ projectId: z.number().describe("Project ID"),
480
+ }, async ({ projectId }) => {
481
+ const result = await apiRequest("GET", `/api/v1/projects/${projectId}/current-sprint`);
482
+ return mcpResponse(result);
483
+ });
484
+ // =============================================================================
485
+ // Repository Tools (4)
486
+ // =============================================================================
487
+ server.tool("createRepository", "Create a new repository and associate it with a project", {
488
+ projectId: z.number().describe("Project ID"),
489
+ url: z.string().describe("Repository URL (git or https)"),
490
+ name: z.string().optional().describe("Repository name"),
491
+ }, async ({ projectId, url, name }) => {
492
+ const result = await apiRequest("POST", "/api/v1/repositories", {
493
+ project_id: projectId,
494
+ url,
495
+ name,
496
+ });
497
+ return mcpResponse(result);
498
+ });
499
+ server.tool("listRepositories", "List repositories for a project with pagination", {
500
+ projectId: z.number().describe("Project ID"),
501
+ limit: z.number().optional().describe("Max results"),
502
+ offset: z.number().optional().describe("Pagination offset"),
503
+ }, async ({ projectId, limit, offset }) => {
504
+ const result = await apiRequest("GET", "/api/v1/repositories", undefined, {
505
+ project_id: projectId,
506
+ limit,
507
+ offset,
508
+ });
509
+ return mcpResponse(result);
510
+ });
511
+ server.tool("getRepository", "Get a specific repository by ID", {
512
+ repositoryId: z.number().describe("Repository ID"),
513
+ }, async ({ repositoryId }) => {
514
+ const result = await apiRequest("GET", `/api/v1/repositories/${repositoryId}`);
515
+ return mcpResponse(result);
516
+ });
517
+ server.tool("deleteRepository", "Delete a repository", {
518
+ repositoryId: z.number().describe("Repository ID"),
519
+ }, async ({ repositoryId }) => {
520
+ const result = await apiRequest("DELETE", `/api/v1/repositories/${repositoryId}`);
521
+ return mcpResponse(result);
522
+ });
523
+ // =============================================================================
524
+ // Activity Tools (2)
525
+ // =============================================================================
526
+ server.tool("getActivityLog", "Get activity logs with optional filtering and pagination", {
527
+ projectId: z.number().optional().describe("Filter by project ID"),
528
+ entityType: z.string().optional().describe("Filter by entity type (project, task, feature, sprint)"),
529
+ entityId: z.number().optional().describe("Filter by entity ID"),
530
+ action: z.string().optional().describe("Filter by action type"),
531
+ limit: z.number().optional().describe("Max results"),
532
+ offset: z.number().optional().describe("Pagination offset"),
533
+ }, async ({ projectId, entityType, entityId, action, limit, offset }) => {
534
+ const result = await apiRequest("GET", "/api/v1/activity", undefined, {
535
+ project_id: projectId,
536
+ entity_type: entityType,
537
+ entity_id: entityId,
538
+ action,
539
+ limit,
540
+ offset,
541
+ });
542
+ return mcpResponse(result);
543
+ });
544
+ server.tool("getEntityActivity", "Get all activity logs for a specific entity", {
545
+ entityType: z.string().describe("Entity type (project, task, feature, sprint)"),
546
+ entityId: z.number().describe("Entity ID"),
547
+ limit: z.number().optional().describe("Max results"),
548
+ offset: z.number().optional().describe("Pagination offset"),
549
+ }, async ({ entityType, entityId, limit, offset }) => {
550
+ const result = await apiRequest("GET", "/api/v1/activity/entity", undefined, {
551
+ entity_type: entityType,
552
+ entity_id: entityId,
553
+ limit,
554
+ offset,
555
+ });
556
+ return mcpResponse(result);
557
+ });
558
+ // =============================================================================
559
+ // Project Status Tool (1)
560
+ // =============================================================================
561
+ server.tool("getProjectStatus", "Get comprehensive project status with task breakdown, completion rates, sprint progress, and blocked tasks", {
562
+ projectId: z.number().describe("Project ID"),
563
+ }, async ({ projectId }) => {
564
+ const result = await apiRequest("GET", `/api/v1/projects/${projectId}/status`);
565
+ return mcpResponse(result);
566
+ });
567
+ // =============================================================================
568
+ // Note Tools (5)
569
+ // =============================================================================
570
+ server.tool("createNote", "Create a new note/comment on a project, feature, sprint, or task", {
571
+ entityType: z.string().describe("Entity type (project, feature, sprint, task)"),
572
+ entityId: z.number().describe("Entity ID"),
573
+ content: z.string().describe("Note content"),
574
+ }, async ({ entityType, entityId, content }) => {
575
+ const result = await apiRequest("POST", "/api/v1/notes", {
576
+ entity_type: entityType,
577
+ entity_id: entityId,
578
+ content,
579
+ });
580
+ return mcpResponse(result);
581
+ });
582
+ server.tool("listNotes", "List notes with optional filtering by entity type and entity ID", {
583
+ entityType: z.string().optional().describe("Filter by entity type"),
584
+ entityId: z.number().optional().describe("Filter by entity ID"),
585
+ limit: z.number().optional().describe("Max results"),
586
+ offset: z.number().optional().describe("Pagination offset"),
587
+ }, async ({ entityType, entityId, limit, offset }) => {
588
+ const result = await apiRequest("GET", "/api/v1/notes", undefined, {
589
+ entity_type: entityType,
590
+ entity_id: entityId,
591
+ limit,
592
+ offset,
593
+ });
594
+ return mcpResponse(result);
595
+ });
596
+ server.tool("getNote", "Get a specific note by ID", {
597
+ noteId: z.number().describe("Note ID"),
598
+ }, async ({ noteId }) => {
599
+ const result = await apiRequest("GET", `/api/v1/notes/${noteId}`);
600
+ return mcpResponse(result);
601
+ });
602
+ server.tool("updateNote", "Update an existing note", {
603
+ noteId: z.number().describe("Note ID"),
604
+ content: z.string().describe("New note content"),
605
+ }, async ({ noteId, content }) => {
606
+ const result = await apiRequest("PUT", `/api/v1/notes/${noteId}`, { content });
607
+ return mcpResponse(result);
608
+ });
609
+ server.tool("deleteNote", "Delete a note", {
610
+ noteId: z.number().describe("Note ID"),
611
+ }, async ({ noteId }) => {
612
+ const result = await apiRequest("DELETE", `/api/v1/notes/${noteId}`);
613
+ return mcpResponse(result);
614
+ });
615
+ // =============================================================================
616
+ // Execution Order Tools (7)
617
+ // =============================================================================
618
+ server.tool("getExecutionOrder", "Get ordered list of tasks/entities for a project based on dependencies and priorities", {
619
+ projectId: z.number().describe("Project ID"),
620
+ featureId: z.number().optional().describe("Filter by feature"),
621
+ sprintId: z.number().optional().describe("Filter by sprint"),
622
+ entityTypes: z.array(z.string()).optional().describe("Filter by entity types"),
623
+ limit: z.number().optional().describe("Max results"),
624
+ offset: z.number().optional().describe("Pagination offset"),
625
+ }, async ({ projectId, featureId, sprintId, entityTypes, limit, offset }) => {
626
+ const result = await apiRequest("GET", `/api/v1/execution-order/projects/${projectId}`, undefined, {
627
+ feature_id: featureId,
628
+ sprint_id: sprintId,
629
+ entity_types: entityTypes?.join(","),
630
+ limit,
631
+ offset,
632
+ });
633
+ return mcpResponse(result);
634
+ });
635
+ server.tool("getNextTask", "Get the next task to work on, respecting WIP limits and dependency order", {
636
+ projectId: z.number().describe("Project ID"),
637
+ maxInProgress: z.number().optional().describe("WIP limit (default: 3)"),
638
+ featureId: z.number().optional().describe("Filter by feature"),
639
+ sprintId: z.number().optional().describe("Filter by sprint"),
640
+ }, async ({ projectId, maxInProgress, featureId, sprintId }) => {
641
+ const result = await apiRequest("GET", `/api/v1/execution-order/projects/${projectId}/next`, undefined, {
642
+ max_in_progress: maxInProgress,
643
+ feature_id: featureId,
644
+ sprint_id: sprintId,
645
+ });
646
+ return mcpResponse(result);
647
+ });
648
+ server.tool("addEntityDependency", "Create a cross-entity dependency (task->task, task->feature, feature->task, etc)", {
649
+ sourceEntityType: z.string().describe("Source entity type (task, feature)"),
650
+ sourceEntityId: z.number().describe("Source entity ID"),
651
+ targetEntityType: z.string().describe("Target entity type (task, feature)"),
652
+ targetEntityId: z.number().describe("Target entity ID"),
653
+ dependencyType: z.enum(["blocks", "soft"]).optional().describe("Dependency type (blocks or soft)"),
654
+ }, async ({ sourceEntityType, sourceEntityId, targetEntityType, targetEntityId, dependencyType }) => {
655
+ const result = await apiRequest("POST", "/api/v1/execution-order/dependencies", {
656
+ source_entity_type: sourceEntityType,
657
+ source_entity_id: sourceEntityId,
658
+ target_entity_type: targetEntityType,
659
+ target_entity_id: targetEntityId,
660
+ dependency_type: dependencyType,
661
+ });
662
+ return mcpResponse(result);
663
+ });
664
+ server.tool("removeEntityDependency", "Remove an existing dependency relationship between two entities", {
665
+ sourceEntityType: z.string().describe("Source entity type"),
666
+ sourceEntityId: z.number().describe("Source entity ID"),
667
+ targetEntityType: z.string().describe("Target entity type"),
668
+ targetEntityId: z.number().describe("Target entity ID"),
669
+ }, async ({ sourceEntityType, sourceEntityId, targetEntityType, targetEntityId }) => {
670
+ const result = await apiRequest("DELETE", "/api/v1/execution-order/dependencies", {
671
+ source_entity_type: sourceEntityType,
672
+ source_entity_id: sourceEntityId,
673
+ target_entity_type: targetEntityType,
674
+ target_entity_id: targetEntityId,
675
+ });
676
+ return mcpResponse(result);
677
+ });
678
+ server.tool("getEntityDependencies", "Get all dependencies for a specific entity (what it depends on)", {
679
+ entityType: z.string().describe("Entity type (task, feature)"),
680
+ entityId: z.number().describe("Entity ID"),
681
+ }, async ({ entityType, entityId }) => {
682
+ const result = await apiRequest("GET", `/api/v1/execution-order/dependencies/${entityType}/${entityId}`);
683
+ return mcpResponse(result);
684
+ });
685
+ server.tool("setTaskExecutionOrder", "Set manual execution order for a task (takes priority over automatic ordering)", {
686
+ taskId: z.number().describe("Task ID"),
687
+ executionOrder: z.number().describe("Execution order number"),
688
+ }, async ({ taskId, executionOrder }) => {
689
+ const result = await apiRequest("PUT", "/api/v1/execution-order/tasks/order", {
690
+ task_id: taskId,
691
+ execution_order: executionOrder,
692
+ });
693
+ return mcpResponse(result);
694
+ });
695
+ server.tool("reorderTasks", "Bulk reorder tasks by providing an ordered list of task IDs", {
696
+ taskIds: z.array(z.number()).describe("Ordered array of task IDs"),
697
+ }, async ({ taskIds }) => {
698
+ const result = await apiRequest("PUT", "/api/v1/execution-order/tasks/reorder", {
699
+ task_ids: taskIds,
700
+ });
701
+ return mcpResponse(result);
702
+ });
703
+ // =============================================================================
704
+ // Start Server
705
+ // =============================================================================
706
+ async function main() {
707
+ const transport = new StdioServerTransport();
708
+ await server.connect(transport);
709
+ console.error("TaskForge MCP server started");
710
+ }
711
+ main().catch((error) => {
712
+ console.error("Fatal error:", error);
713
+ process.exit(1);
714
+ });
715
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@cube8021/taskforge-mcp",
3
+ "version": "1.0.0",
4
+ "description": "MCP client for TaskForge - AI-assisted project management",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "type": "module",
9
+ "main": "dist/index.js",
10
+ "bin": {
11
+ "taskforge-mcp": "dist/index.js"
12
+ },
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "watch": "tsc --watch",
16
+ "start": "node dist/index.js",
17
+ "dev": "tsx src/index.ts",
18
+ "inspect": "npx @modelcontextprotocol/inspector node dist/index.js"
19
+ },
20
+ "keywords": [
21
+ "mcp",
22
+ "taskforge",
23
+ "project-management",
24
+ "ai",
25
+ "claude"
26
+ ],
27
+ "author": "SupportTools",
28
+ "license": "MIT",
29
+ "dependencies": {
30
+ "@modelcontextprotocol/sdk": "^1.0.0",
31
+ "zod": "^3.24.0"
32
+ },
33
+ "devDependencies": {
34
+ "@types/node": "^22.0.0",
35
+ "tsx": "^4.19.0",
36
+ "typescript": "^5.7.0"
37
+ },
38
+ "engines": {
39
+ "node": ">=18.0.0"
40
+ },
41
+ "files": [
42
+ "dist/**/*"
43
+ ]
44
+ }