rtaskmaster-mcp 0.2.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.
- package/LICENSE +21 -0
- package/README.md +244 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/storage.d.ts +38 -0
- package/dist/core/storage.d.ts.map +1 -0
- package/dist/core/storage.js +83 -0
- package/dist/core/storage.js.map +1 -0
- package/dist/core/task-manager.d.ts +67 -0
- package/dist/core/task-manager.d.ts.map +1 -0
- package/dist/core/task-manager.js +243 -0
- package/dist/core/task-manager.js.map +1 -0
- package/dist/core/types.d.ts +67 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +5 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +5 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/tools.d.ts +9 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +817 -0
- package/dist/mcp/tools.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task Manager - Core business logic for task operations
|
|
3
|
+
*/
|
|
4
|
+
import { TaskStorage } from './storage.js';
|
|
5
|
+
export class TaskManager {
|
|
6
|
+
storage;
|
|
7
|
+
constructor(projectRoot) {
|
|
8
|
+
this.storage = new TaskStorage(projectRoot);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Check if initialized
|
|
12
|
+
*/
|
|
13
|
+
isInitialized() {
|
|
14
|
+
return this.storage.isInitialized();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Initialize Ragnar
|
|
18
|
+
*/
|
|
19
|
+
initialize(projectName) {
|
|
20
|
+
return this.storage.initialize(projectName);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Generate next task ID
|
|
24
|
+
*/
|
|
25
|
+
generateTaskId(tasks) {
|
|
26
|
+
if (tasks.length === 0)
|
|
27
|
+
return '1';
|
|
28
|
+
const maxId = Math.max(...tasks.map((t) => parseInt(t.id, 10) || 0));
|
|
29
|
+
return String(maxId + 1);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Generate next subtask ID
|
|
33
|
+
*/
|
|
34
|
+
generateSubtaskId(subtasks) {
|
|
35
|
+
if (subtasks.length === 0)
|
|
36
|
+
return '1';
|
|
37
|
+
const maxId = Math.max(...subtasks.map((s) => parseInt(s.id, 10) || 0));
|
|
38
|
+
return String(maxId + 1);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get all tasks with optional filtering
|
|
42
|
+
*/
|
|
43
|
+
getTasks(filter) {
|
|
44
|
+
let tasks = this.storage.getTasks();
|
|
45
|
+
if (filter?.status) {
|
|
46
|
+
const statuses = Array.isArray(filter.status)
|
|
47
|
+
? filter.status
|
|
48
|
+
: [filter.status];
|
|
49
|
+
tasks = tasks.filter((t) => statuses.includes(t.status));
|
|
50
|
+
}
|
|
51
|
+
if (filter?.priority) {
|
|
52
|
+
tasks = tasks.filter((t) => t.priority === filter.priority);
|
|
53
|
+
}
|
|
54
|
+
return tasks;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get a task by ID (supports dot notation for subtasks: "1.2")
|
|
58
|
+
*/
|
|
59
|
+
getTask(taskId) {
|
|
60
|
+
const tasks = this.storage.getTasks();
|
|
61
|
+
const parts = taskId.split('.');
|
|
62
|
+
const task = tasks.find((t) => t.id === parts[0]);
|
|
63
|
+
if (!task)
|
|
64
|
+
return null;
|
|
65
|
+
if (parts.length === 1)
|
|
66
|
+
return task;
|
|
67
|
+
// It's a subtask reference
|
|
68
|
+
const subtask = task.subtasks.find((s) => s.id === parts[1]);
|
|
69
|
+
return subtask || null;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get parent task (for subtask operations)
|
|
73
|
+
*/
|
|
74
|
+
getParentTask(taskId) {
|
|
75
|
+
const tasks = this.storage.getTasks();
|
|
76
|
+
const parentId = taskId.split('.')[0];
|
|
77
|
+
return tasks.find((t) => t.id === parentId) || null;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Create a new task
|
|
81
|
+
*/
|
|
82
|
+
createTask(input) {
|
|
83
|
+
const tasks = this.storage.getTasks();
|
|
84
|
+
const now = new Date().toISOString();
|
|
85
|
+
const task = {
|
|
86
|
+
id: this.generateTaskId(tasks),
|
|
87
|
+
title: input.title,
|
|
88
|
+
description: input.description || '',
|
|
89
|
+
status: 'pending',
|
|
90
|
+
priority: input.priority || 'medium',
|
|
91
|
+
dependencies: input.dependencies || [],
|
|
92
|
+
subtasks: [],
|
|
93
|
+
details: input.details,
|
|
94
|
+
testStrategy: input.testStrategy,
|
|
95
|
+
createdAt: now,
|
|
96
|
+
updatedAt: now,
|
|
97
|
+
};
|
|
98
|
+
tasks.push(task);
|
|
99
|
+
this.storage.saveTasks(tasks);
|
|
100
|
+
return task;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Update an existing task
|
|
104
|
+
*/
|
|
105
|
+
updateTask(taskId, input) {
|
|
106
|
+
const tasks = this.storage.getTasks();
|
|
107
|
+
const index = tasks.findIndex((t) => t.id === taskId);
|
|
108
|
+
if (index === -1)
|
|
109
|
+
return null;
|
|
110
|
+
const task = tasks[index];
|
|
111
|
+
const updatedTask = {
|
|
112
|
+
...task,
|
|
113
|
+
...input,
|
|
114
|
+
updatedAt: new Date().toISOString(),
|
|
115
|
+
};
|
|
116
|
+
tasks[index] = updatedTask;
|
|
117
|
+
this.storage.saveTasks(tasks);
|
|
118
|
+
return updatedTask;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Delete a task
|
|
122
|
+
*/
|
|
123
|
+
deleteTask(taskId) {
|
|
124
|
+
const tasks = this.storage.getTasks();
|
|
125
|
+
const index = tasks.findIndex((t) => t.id === taskId);
|
|
126
|
+
if (index === -1)
|
|
127
|
+
return false;
|
|
128
|
+
tasks.splice(index, 1);
|
|
129
|
+
// Also remove this task from any dependencies
|
|
130
|
+
for (const task of tasks) {
|
|
131
|
+
task.dependencies = task.dependencies.filter((d) => d !== taskId);
|
|
132
|
+
}
|
|
133
|
+
this.storage.saveTasks(tasks);
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Set task status
|
|
138
|
+
*/
|
|
139
|
+
setStatus(taskId, status) {
|
|
140
|
+
const tasks = this.storage.getTasks();
|
|
141
|
+
const parts = taskId.split('.');
|
|
142
|
+
const taskIndex = tasks.findIndex((t) => t.id === parts[0]);
|
|
143
|
+
if (taskIndex === -1)
|
|
144
|
+
return null;
|
|
145
|
+
const now = new Date().toISOString();
|
|
146
|
+
if (parts.length === 1) {
|
|
147
|
+
// Update task status
|
|
148
|
+
tasks[taskIndex].status = status;
|
|
149
|
+
tasks[taskIndex].updatedAt = now;
|
|
150
|
+
this.storage.saveTasks(tasks);
|
|
151
|
+
return tasks[taskIndex];
|
|
152
|
+
}
|
|
153
|
+
// Update subtask status
|
|
154
|
+
const subtaskIndex = tasks[taskIndex].subtasks.findIndex((s) => s.id === parts[1]);
|
|
155
|
+
if (subtaskIndex === -1)
|
|
156
|
+
return null;
|
|
157
|
+
tasks[taskIndex].subtasks[subtaskIndex].status = status;
|
|
158
|
+
tasks[taskIndex].subtasks[subtaskIndex].updatedAt = now;
|
|
159
|
+
tasks[taskIndex].updatedAt = now;
|
|
160
|
+
this.storage.saveTasks(tasks);
|
|
161
|
+
return tasks[taskIndex].subtasks[subtaskIndex];
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Add a subtask to a task
|
|
165
|
+
*/
|
|
166
|
+
addSubtask(taskId, input) {
|
|
167
|
+
const tasks = this.storage.getTasks();
|
|
168
|
+
const taskIndex = tasks.findIndex((t) => t.id === taskId);
|
|
169
|
+
if (taskIndex === -1)
|
|
170
|
+
return null;
|
|
171
|
+
const now = new Date().toISOString();
|
|
172
|
+
const subtask = {
|
|
173
|
+
id: this.generateSubtaskId(tasks[taskIndex].subtasks),
|
|
174
|
+
title: input.title,
|
|
175
|
+
description: input.description,
|
|
176
|
+
status: 'pending',
|
|
177
|
+
createdAt: now,
|
|
178
|
+
updatedAt: now,
|
|
179
|
+
};
|
|
180
|
+
tasks[taskIndex].subtasks.push(subtask);
|
|
181
|
+
tasks[taskIndex].updatedAt = now;
|
|
182
|
+
this.storage.saveTasks(tasks);
|
|
183
|
+
return subtask;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Get the next task to work on
|
|
187
|
+
* Prioritizes: in-progress > high priority pending > medium > low
|
|
188
|
+
* Only returns tasks with satisfied dependencies
|
|
189
|
+
*/
|
|
190
|
+
getNextTask() {
|
|
191
|
+
const tasks = this.storage.getTasks();
|
|
192
|
+
const doneTasks = new Set(tasks.filter((t) => t.status === 'done').map((t) => t.id));
|
|
193
|
+
// Filter to tasks that can be worked on
|
|
194
|
+
const availableTasks = tasks.filter((t) => {
|
|
195
|
+
if (t.status === 'done' || t.status === 'blocked' || t.status === 'deferred') {
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
// Check all dependencies are done
|
|
199
|
+
return t.dependencies.every((d) => doneTasks.has(d));
|
|
200
|
+
});
|
|
201
|
+
if (availableTasks.length === 0)
|
|
202
|
+
return null;
|
|
203
|
+
// First, check for in-progress tasks
|
|
204
|
+
const inProgress = availableTasks.find((t) => t.status === 'in-progress');
|
|
205
|
+
if (inProgress)
|
|
206
|
+
return inProgress;
|
|
207
|
+
// Sort by priority
|
|
208
|
+
const priorityOrder = {
|
|
209
|
+
high: 0,
|
|
210
|
+
medium: 1,
|
|
211
|
+
low: 2,
|
|
212
|
+
};
|
|
213
|
+
availableTasks.sort((a, b) => {
|
|
214
|
+
const aPriority = priorityOrder[a.priority] ?? 1;
|
|
215
|
+
const bPriority = priorityOrder[b.priority] ?? 1;
|
|
216
|
+
if (aPriority !== bPriority)
|
|
217
|
+
return aPriority - bPriority;
|
|
218
|
+
// If same priority, prefer lower ID (earlier created)
|
|
219
|
+
return parseInt(a.id, 10) - parseInt(b.id, 10);
|
|
220
|
+
});
|
|
221
|
+
return availableTasks[0] || null;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Get task statistics
|
|
225
|
+
*/
|
|
226
|
+
getStats() {
|
|
227
|
+
const tasks = this.storage.getTasks();
|
|
228
|
+
const total = tasks.length;
|
|
229
|
+
const stats = {
|
|
230
|
+
total,
|
|
231
|
+
pending: tasks.filter((t) => t.status === 'pending').length,
|
|
232
|
+
inProgress: tasks.filter((t) => t.status === 'in-progress').length,
|
|
233
|
+
done: tasks.filter((t) => t.status === 'done').length,
|
|
234
|
+
blocked: tasks.filter((t) => t.status === 'blocked').length,
|
|
235
|
+
deferred: tasks.filter((t) => t.status === 'deferred').length,
|
|
236
|
+
completionPercentage: total > 0
|
|
237
|
+
? Math.round((tasks.filter((t) => t.status === 'done').length / total) * 100)
|
|
238
|
+
: 0,
|
|
239
|
+
};
|
|
240
|
+
return stats;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=task-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-manager.js","sourceRoot":"","sources":["../../src/core/task-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types for Ragnar Task Master
|
|
3
|
+
*/
|
|
4
|
+
export type TaskStatus = 'pending' | 'in-progress' | 'done' | 'blocked' | 'deferred';
|
|
5
|
+
export type TaskPriority = 'high' | 'medium' | 'low';
|
|
6
|
+
export interface Subtask {
|
|
7
|
+
id: string;
|
|
8
|
+
title: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
status: TaskStatus;
|
|
11
|
+
createdAt: string;
|
|
12
|
+
updatedAt: string;
|
|
13
|
+
}
|
|
14
|
+
export interface Task {
|
|
15
|
+
id: string;
|
|
16
|
+
title: string;
|
|
17
|
+
description: string;
|
|
18
|
+
status: TaskStatus;
|
|
19
|
+
priority: TaskPriority;
|
|
20
|
+
dependencies: string[];
|
|
21
|
+
subtasks: Subtask[];
|
|
22
|
+
details?: string;
|
|
23
|
+
testStrategy?: string;
|
|
24
|
+
createdAt: string;
|
|
25
|
+
updatedAt: string;
|
|
26
|
+
}
|
|
27
|
+
export interface TaskStore {
|
|
28
|
+
version: string;
|
|
29
|
+
projectName?: string;
|
|
30
|
+
tasks: Task[];
|
|
31
|
+
lastUpdated: string;
|
|
32
|
+
}
|
|
33
|
+
export interface CreateTaskInput {
|
|
34
|
+
title: string;
|
|
35
|
+
description?: string;
|
|
36
|
+
priority?: TaskPriority;
|
|
37
|
+
dependencies?: string[];
|
|
38
|
+
details?: string;
|
|
39
|
+
testStrategy?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface UpdateTaskInput {
|
|
42
|
+
title?: string;
|
|
43
|
+
description?: string;
|
|
44
|
+
status?: TaskStatus;
|
|
45
|
+
priority?: TaskPriority;
|
|
46
|
+
dependencies?: string[];
|
|
47
|
+
details?: string;
|
|
48
|
+
testStrategy?: string;
|
|
49
|
+
}
|
|
50
|
+
export interface CreateSubtaskInput {
|
|
51
|
+
title: string;
|
|
52
|
+
description?: string;
|
|
53
|
+
}
|
|
54
|
+
export interface TaskFilter {
|
|
55
|
+
status?: TaskStatus | TaskStatus[];
|
|
56
|
+
priority?: TaskPriority;
|
|
57
|
+
}
|
|
58
|
+
export interface TaskStats {
|
|
59
|
+
total: number;
|
|
60
|
+
pending: number;
|
|
61
|
+
inProgress: number;
|
|
62
|
+
done: number;
|
|
63
|
+
blocked: number;
|
|
64
|
+
deferred: number;
|
|
65
|
+
completionPercentage: number;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AACrF,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAErD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;GAEG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* RTaskmaster - MCP Server Entry Point
|
|
4
|
+
*/
|
|
5
|
+
import { FastMCP } from 'fastmcp';
|
|
6
|
+
import { registerTools } from './mcp/tools.js';
|
|
7
|
+
const server = new FastMCP({
|
|
8
|
+
name: 'RTaskmaster',
|
|
9
|
+
version: '0.2.0',
|
|
10
|
+
});
|
|
11
|
+
// Register all tools
|
|
12
|
+
registerTools(server);
|
|
13
|
+
// Start the server
|
|
14
|
+
server.start({
|
|
15
|
+
transportType: 'stdio',
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC;IACzB,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,qBAAqB;AACrB,aAAa,CAAC,MAAM,CAAC,CAAC;AAEtB,mBAAmB;AACnB,MAAM,CAAC,KAAK,CAAC;IACX,aAAa,EAAE,OAAO;CACvB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tools - All tool definitions for RTaskmaster Task Master
|
|
3
|
+
*/
|
|
4
|
+
import type { FastMCP } from "fastmcp";
|
|
5
|
+
/**
|
|
6
|
+
* Register all RTaskmaster MCP tools
|
|
7
|
+
*/
|
|
8
|
+
export declare function registerTools(server: FastMCP): void;
|
|
9
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AA6BvC;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,QAq5B5C"}
|