@gitscrum-studio/mcp-server 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.
- package/LICENSE +21 -0
- package/README.md +250 -0
- package/dist/auth/DeviceAuthenticator.d.ts +51 -0
- package/dist/auth/DeviceAuthenticator.d.ts.map +1 -0
- package/dist/auth/DeviceAuthenticator.js +89 -0
- package/dist/auth/DeviceAuthenticator.js.map +1 -0
- package/dist/auth/RateLimiter.d.ts +58 -0
- package/dist/auth/RateLimiter.d.ts.map +1 -0
- package/dist/auth/RateLimiter.js +181 -0
- package/dist/auth/RateLimiter.js.map +1 -0
- package/dist/auth/TokenManager.d.ts +62 -0
- package/dist/auth/TokenManager.d.ts.map +1 -0
- package/dist/auth/TokenManager.js +164 -0
- package/dist/auth/TokenManager.js.map +1 -0
- package/dist/client/GitScrumClient.d.ts +1002 -0
- package/dist/client/GitScrumClient.d.ts.map +1 -0
- package/dist/client/GitScrumClient.js +1835 -0
- package/dist/client/GitScrumClient.js.map +1 -0
- package/dist/context/ActiveContext.d.ts +79 -0
- package/dist/context/ActiveContext.d.ts.map +1 -0
- package/dist/context/ActiveContext.js +151 -0
- package/dist/context/ActiveContext.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +152 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/activity.d.ts +12 -0
- package/dist/tools/activity.d.ts.map +1 -0
- package/dist/tools/activity.js +106 -0
- package/dist/tools/activity.js.map +1 -0
- package/dist/tools/analytics.d.ts +11 -0
- package/dist/tools/analytics.d.ts.map +1 -0
- package/dist/tools/analytics.js +117 -0
- package/dist/tools/analytics.js.map +1 -0
- package/dist/tools/auth.d.ts +17 -0
- package/dist/tools/auth.d.ts.map +1 -0
- package/dist/tools/auth.js +173 -0
- package/dist/tools/auth.js.map +1 -0
- package/dist/tools/budget.d.ts +12 -0
- package/dist/tools/budget.d.ts.map +1 -0
- package/dist/tools/budget.js +109 -0
- package/dist/tools/budget.js.map +1 -0
- package/dist/tools/clientflow.d.ts +12 -0
- package/dist/tools/clientflow.d.ts.map +1 -0
- package/dist/tools/clientflow.js +476 -0
- package/dist/tools/clientflow.js.map +1 -0
- package/dist/tools/comments.d.ts +11 -0
- package/dist/tools/comments.d.ts.map +1 -0
- package/dist/tools/comments.js +99 -0
- package/dist/tools/comments.js.map +1 -0
- package/dist/tools/discussions.d.ts +12 -0
- package/dist/tools/discussions.d.ts.map +1 -0
- package/dist/tools/discussions.js +200 -0
- package/dist/tools/discussions.js.map +1 -0
- package/dist/tools/epics.d.ts +11 -0
- package/dist/tools/epics.d.ts.map +1 -0
- package/dist/tools/epics.js +122 -0
- package/dist/tools/epics.js.map +1 -0
- package/dist/tools/labels.d.ts +11 -0
- package/dist/tools/labels.d.ts.map +1 -0
- package/dist/tools/labels.js +138 -0
- package/dist/tools/labels.js.map +1 -0
- package/dist/tools/notes.d.ts +11 -0
- package/dist/tools/notes.d.ts.map +1 -0
- package/dist/tools/notes.js +201 -0
- package/dist/tools/notes.js.map +1 -0
- package/dist/tools/projects.d.ts +12 -0
- package/dist/tools/projects.d.ts.map +1 -0
- package/dist/tools/projects.js +272 -0
- package/dist/tools/projects.js.map +1 -0
- package/dist/tools/search.d.ts +17 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +56 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/shared/actionHandler.d.ts +67 -0
- package/dist/tools/shared/actionHandler.d.ts.map +1 -0
- package/dist/tools/shared/actionHandler.js +98 -0
- package/dist/tools/shared/actionHandler.js.map +1 -0
- package/dist/tools/shared/initModules.d.ts +6 -0
- package/dist/tools/shared/initModules.d.ts.map +1 -0
- package/dist/tools/shared/initModules.js +166 -0
- package/dist/tools/shared/initModules.js.map +1 -0
- package/dist/tools/shared/toolRegistry.d.ts +45 -0
- package/dist/tools/shared/toolRegistry.d.ts.map +1 -0
- package/dist/tools/shared/toolRegistry.js +59 -0
- package/dist/tools/shared/toolRegistry.js.map +1 -0
- package/dist/tools/sprints.d.ts +11 -0
- package/dist/tools/sprints.d.ts.map +1 -0
- package/dist/tools/sprints.js +271 -0
- package/dist/tools/sprints.js.map +1 -0
- package/dist/tools/standup.d.ts +11 -0
- package/dist/tools/standup.d.ts.map +1 -0
- package/dist/tools/standup.js +89 -0
- package/dist/tools/standup.js.map +1 -0
- package/dist/tools/taskTypes.d.ts +11 -0
- package/dist/tools/taskTypes.d.ts.map +1 -0
- package/dist/tools/taskTypes.js +132 -0
- package/dist/tools/taskTypes.js.map +1 -0
- package/dist/tools/tasks.d.ts +12 -0
- package/dist/tools/tasks.d.ts.map +1 -0
- package/dist/tools/tasks.js +470 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/tools/timeTracking.d.ts +11 -0
- package/dist/tools/timeTracking.d.ts.map +1 -0
- package/dist/tools/timeTracking.js +174 -0
- package/dist/tools/timeTracking.js.map +1 -0
- package/dist/tools/userStories.d.ts +11 -0
- package/dist/tools/userStories.d.ts.map +1 -0
- package/dist/tools/userStories.js +166 -0
- package/dist/tools/userStories.js.map +1 -0
- package/dist/tools/wiki.d.ts +11 -0
- package/dist/tools/wiki.d.ts.map +1 -0
- package/dist/tools/wiki.js +154 -0
- package/dist/tools/wiki.js.map +1 -0
- package/dist/tools/workflows.d.ts +11 -0
- package/dist/tools/workflows.d.ts.map +1 -0
- package/dist/tools/workflows.js +144 -0
- package/dist/tools/workflows.js.map +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { executeAction, success, required, normalizeColor } from "./shared/actionHandler.js";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Tool Registration
|
|
4
|
+
// ============================================================================
|
|
5
|
+
export function registerNoteTools() {
|
|
6
|
+
return [
|
|
7
|
+
{
|
|
8
|
+
name: "note",
|
|
9
|
+
description: [
|
|
10
|
+
"Notes. Actions: list, get, create, update, share, revisions.",
|
|
11
|
+
"",
|
|
12
|
+
"company_slug is optional (auto-inferred from user).",
|
|
13
|
+
"'get'/'update'/'share'/'revisions' require uuid (from 'list' response).",
|
|
14
|
+
].join("\n"),
|
|
15
|
+
inputSchema: {
|
|
16
|
+
type: "object",
|
|
17
|
+
properties: {
|
|
18
|
+
action: {
|
|
19
|
+
type: "string",
|
|
20
|
+
enum: ["list", "get", "create", "update", "share", "revisions"],
|
|
21
|
+
description: "Which operation to perform"
|
|
22
|
+
},
|
|
23
|
+
company_slug: {
|
|
24
|
+
type: "string",
|
|
25
|
+
description: "Workspace identifier (optional - auto-detected from user if not provided)"
|
|
26
|
+
},
|
|
27
|
+
uuid: {
|
|
28
|
+
type: "string",
|
|
29
|
+
description: "⚠️ ONLY for existing notes! This is the note's database ID. NEVER use for action=create. Use ONLY for: get, update, share, revisions."
|
|
30
|
+
},
|
|
31
|
+
title: {
|
|
32
|
+
type: "string",
|
|
33
|
+
description: "Note title/heading text. Required for action=create."
|
|
34
|
+
},
|
|
35
|
+
content: {
|
|
36
|
+
type: "string",
|
|
37
|
+
description: "The note body text you want to save (Markdown). This is where you put the actual content! Required for action=create."
|
|
38
|
+
},
|
|
39
|
+
folder_uuid: {
|
|
40
|
+
type: "string",
|
|
41
|
+
description: "Folder ID to organize note into (optional)"
|
|
42
|
+
},
|
|
43
|
+
color: {
|
|
44
|
+
type: "string",
|
|
45
|
+
description: "Color code: gray, blue, red, green, yellow, purple, coral, amber, sky, lime (or hex without #)"
|
|
46
|
+
},
|
|
47
|
+
search: {
|
|
48
|
+
type: "string",
|
|
49
|
+
description: "Search term to filter notes (only for list action)"
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
required: ["action"],
|
|
53
|
+
},
|
|
54
|
+
annotations: { title: "Notes", readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: "note_folder",
|
|
58
|
+
description: [
|
|
59
|
+
"Note folders. Actions: list, create, update, move.",
|
|
60
|
+
"",
|
|
61
|
+
"'move' requires note_uuid (from 'note' tool 'list') and folder_uuid (from 'list' response).",
|
|
62
|
+
].join("\n"),
|
|
63
|
+
inputSchema: {
|
|
64
|
+
type: "object",
|
|
65
|
+
properties: {
|
|
66
|
+
action: {
|
|
67
|
+
type: "string",
|
|
68
|
+
enum: ["list", "create", "update", "move"],
|
|
69
|
+
description: "Which operation to perform"
|
|
70
|
+
},
|
|
71
|
+
company_slug: {
|
|
72
|
+
type: "string",
|
|
73
|
+
description: "Workspace identifier (always required)"
|
|
74
|
+
},
|
|
75
|
+
uuid: {
|
|
76
|
+
type: "string",
|
|
77
|
+
description: "Existing folder's unique ID. Only for update action."
|
|
78
|
+
},
|
|
79
|
+
name: {
|
|
80
|
+
type: "string",
|
|
81
|
+
description: "Folder name text. Required for create and update."
|
|
82
|
+
},
|
|
83
|
+
note_uuid: {
|
|
84
|
+
type: "string",
|
|
85
|
+
description: "Note ID to move. Required for move action."
|
|
86
|
+
},
|
|
87
|
+
folder_uuid: {
|
|
88
|
+
type: "string",
|
|
89
|
+
description: "Target folder ID to move note into. Omit to unfile note."
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
required: ["action", "company_slug"],
|
|
93
|
+
},
|
|
94
|
+
annotations: { title: "Note Folders", readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
|
|
95
|
+
},
|
|
96
|
+
];
|
|
97
|
+
}
|
|
98
|
+
// ============================================================================
|
|
99
|
+
// Note Action Handlers
|
|
100
|
+
// ============================================================================
|
|
101
|
+
const noteHandlers = {
|
|
102
|
+
list: async (client, args) => {
|
|
103
|
+
if (!args.company_slug)
|
|
104
|
+
return required("company_slug");
|
|
105
|
+
const notes = await client.getNotes(args.company_slug, {
|
|
106
|
+
folder_uuid: args.folder_uuid,
|
|
107
|
+
color: args.color,
|
|
108
|
+
search: args.search,
|
|
109
|
+
});
|
|
110
|
+
return success(JSON.stringify(notes, null, 2));
|
|
111
|
+
},
|
|
112
|
+
get: async (client, args) => {
|
|
113
|
+
if (!args.uuid)
|
|
114
|
+
return required("uuid");
|
|
115
|
+
const note = await client.getNote(args.uuid, args.company_slug);
|
|
116
|
+
return success(JSON.stringify(note, null, 2));
|
|
117
|
+
},
|
|
118
|
+
create: async (client, args) => {
|
|
119
|
+
if (!args.company_slug)
|
|
120
|
+
return required("company_slug");
|
|
121
|
+
const note = await client.createNote({
|
|
122
|
+
title: args.title,
|
|
123
|
+
content: args.content,
|
|
124
|
+
company_slug: args.company_slug,
|
|
125
|
+
folder_uuid: args.folder_uuid,
|
|
126
|
+
color: args.color ? normalizeColor(args.color) : undefined,
|
|
127
|
+
});
|
|
128
|
+
return success(JSON.stringify({ created: true, note }, null, 2));
|
|
129
|
+
},
|
|
130
|
+
update: async (client, args) => {
|
|
131
|
+
if (!args.uuid)
|
|
132
|
+
return required("uuid");
|
|
133
|
+
const updateData = {};
|
|
134
|
+
if (args.title)
|
|
135
|
+
updateData.title = args.title;
|
|
136
|
+
if (args.content)
|
|
137
|
+
updateData.content = args.content;
|
|
138
|
+
if (args.folder_uuid)
|
|
139
|
+
updateData.folder_uuid = args.folder_uuid;
|
|
140
|
+
if (args.color)
|
|
141
|
+
updateData.color = normalizeColor(args.color);
|
|
142
|
+
await client.updateNote(args.uuid, updateData);
|
|
143
|
+
return success(JSON.stringify({ updated: true, uuid: args.uuid }, null, 2));
|
|
144
|
+
},
|
|
145
|
+
share: async (client, args) => {
|
|
146
|
+
if (!args.uuid)
|
|
147
|
+
return required("uuid");
|
|
148
|
+
const note = await client.toggleNoteShare(args.uuid);
|
|
149
|
+
return success(JSON.stringify(note, null, 2));
|
|
150
|
+
},
|
|
151
|
+
revisions: async (client, args) => {
|
|
152
|
+
if (!args.uuid)
|
|
153
|
+
return required("uuid");
|
|
154
|
+
if (!args.company_slug)
|
|
155
|
+
return required("company_slug");
|
|
156
|
+
const revisions = await client.getNoteRevisions(args.uuid, args.company_slug);
|
|
157
|
+
return success(JSON.stringify(revisions, null, 2));
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
// ============================================================================
|
|
161
|
+
// Folder Action Handlers
|
|
162
|
+
// ============================================================================
|
|
163
|
+
const folderHandlers = {
|
|
164
|
+
list: async (client, args) => {
|
|
165
|
+
const folders = await client.getNoteFolders(args.company_slug);
|
|
166
|
+
return success(JSON.stringify(folders, null, 2));
|
|
167
|
+
},
|
|
168
|
+
create: async (client, args) => {
|
|
169
|
+
if (!args.name)
|
|
170
|
+
return required("name");
|
|
171
|
+
const folder = await client.createNoteFolder({ name: args.name, company_slug: args.company_slug });
|
|
172
|
+
return success(JSON.stringify({ created: true, folder }, null, 2));
|
|
173
|
+
},
|
|
174
|
+
update: async (client, args) => {
|
|
175
|
+
if (!args.uuid || !args.name)
|
|
176
|
+
return required("uuid and name");
|
|
177
|
+
await client.updateNoteFolder(args.uuid, { name: args.name });
|
|
178
|
+
return success(JSON.stringify({ updated: true, uuid: args.uuid }, null, 2));
|
|
179
|
+
},
|
|
180
|
+
move: async (client, args) => {
|
|
181
|
+
if (!args.note_uuid)
|
|
182
|
+
return required("note_uuid");
|
|
183
|
+
await client.moveNoteToFolder(args.note_uuid, args.folder_uuid || null);
|
|
184
|
+
return success(JSON.stringify({ moved: true, note_uuid: args.note_uuid, folder_uuid: args.folder_uuid || null }, null, 2));
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
// ============================================================================
|
|
188
|
+
// Main Handler
|
|
189
|
+
// ============================================================================
|
|
190
|
+
export async function handleNoteTool(client, name, args = {}) {
|
|
191
|
+
const action = args.action;
|
|
192
|
+
// note_folder always requires company_slug
|
|
193
|
+
if (name === "note_folder") {
|
|
194
|
+
if (!args.company_slug)
|
|
195
|
+
return required("company_slug");
|
|
196
|
+
return executeAction(folderHandlers, action, client, args);
|
|
197
|
+
}
|
|
198
|
+
// note: validation is done per-action (get only needs uuid)
|
|
199
|
+
return executeAction(noteHandlers, action, client, args);
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=notes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notes.js","sourceRoot":"","sources":["../../src/tools/notes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project/Workspace MCP Tools (Consolidated)
|
|
3
|
+
*
|
|
4
|
+
* Uses Action Handler pattern for clean, extensible code.
|
|
5
|
+
* STATELESS - each call must provide all required parameters.
|
|
6
|
+
*/
|
|
7
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
8
|
+
import type { GitScrumClient } from "../client/GitScrumClient.js";
|
|
9
|
+
import { type ToolResponse } from "./shared/actionHandler.js";
|
|
10
|
+
export declare function registerProjectTools(): Tool[];
|
|
11
|
+
export declare function handleProjectTool(client: GitScrumClient, name: string, args?: Record<string, unknown>): Promise<ToolResponse>;
|
|
12
|
+
//# sourceMappingURL=projects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAML,KAAK,YAAY,EAElB,MAAM,2BAA2B,CAAC;AAMnC,wBAAgB,oBAAoB,IAAI,IAAI,EAAE,CAuF7C;AA2MD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,OAAO,CAAC,YAAY,CAAC,CAcvB"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { executeAction, success, required, resolveProjectContext } from "./shared/actionHandler.js";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Tool Registration
|
|
4
|
+
// ============================================================================
|
|
5
|
+
export function registerProjectTools() {
|
|
6
|
+
return [
|
|
7
|
+
{
|
|
8
|
+
name: "workspace",
|
|
9
|
+
description: [
|
|
10
|
+
"Workspace management. Actions: list, find (by name), get, stats.",
|
|
11
|
+
"",
|
|
12
|
+
"This is the starting point. Use 'list' to get all workspaces and their company_slug.",
|
|
13
|
+
"company_slug is needed by most other tools.",
|
|
14
|
+
].join("\n"),
|
|
15
|
+
inputSchema: {
|
|
16
|
+
type: "object",
|
|
17
|
+
properties: {
|
|
18
|
+
action: {
|
|
19
|
+
type: "string",
|
|
20
|
+
enum: ["list", "find", "get", "stats"],
|
|
21
|
+
description: "Which operation to perform"
|
|
22
|
+
},
|
|
23
|
+
name: {
|
|
24
|
+
type: "string",
|
|
25
|
+
description: "Workspace name to search for. Required for: find"
|
|
26
|
+
},
|
|
27
|
+
company_slug: {
|
|
28
|
+
type: "string",
|
|
29
|
+
description: "Workspace identifier. Required for: get, stats"
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
required: ["action"],
|
|
33
|
+
},
|
|
34
|
+
annotations: { title: "Workspaces", readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: "project",
|
|
38
|
+
description: [
|
|
39
|
+
"Project management. Actions: create, find (by name), list, get, stats, tasks, workflows, types, efforts, labels, members.",
|
|
40
|
+
"",
|
|
41
|
+
"Workflow:",
|
|
42
|
+
"- 'list': requires company_slug (from 'workspace' tool). Returns projects with their project_slug.",
|
|
43
|
+
"- 'find': search by name, returns project_slug + company_slug",
|
|
44
|
+
"- 'workflows'/'types'/'efforts'/'labels': returns IDs used by 'task' tool for create/update",
|
|
45
|
+
"- 'members': returns project assignees (name, username, avatar). Use to know who can be assigned tasks",
|
|
46
|
+
"- 'create': requires company_slug + name",
|
|
47
|
+
].join("\n"),
|
|
48
|
+
inputSchema: {
|
|
49
|
+
type: "object",
|
|
50
|
+
properties: {
|
|
51
|
+
action: {
|
|
52
|
+
type: "string",
|
|
53
|
+
enum: ["create", "find", "list", "get", "stats", "tasks", "workflows", "types", "efforts", "labels", "members"],
|
|
54
|
+
description: "Which operation to perform"
|
|
55
|
+
},
|
|
56
|
+
name: {
|
|
57
|
+
type: "string",
|
|
58
|
+
description: "Project name. Required for: create, find"
|
|
59
|
+
},
|
|
60
|
+
company_slug: {
|
|
61
|
+
type: "string",
|
|
62
|
+
description: "Workspace identifier. Required for: create, list, get, stats, tasks, etc. Optional for: find"
|
|
63
|
+
},
|
|
64
|
+
project_slug: {
|
|
65
|
+
type: "string",
|
|
66
|
+
description: "Project identifier. Required for: get, stats, tasks, workflows, types, efforts, labels, members"
|
|
67
|
+
},
|
|
68
|
+
status: {
|
|
69
|
+
type: "string",
|
|
70
|
+
enum: ["in_progress", "completed", "archived"],
|
|
71
|
+
description: "Filter projects by status. Optional for: list"
|
|
72
|
+
},
|
|
73
|
+
description: {
|
|
74
|
+
type: "string",
|
|
75
|
+
description: "Project description. Optional for: create"
|
|
76
|
+
},
|
|
77
|
+
visibility: {
|
|
78
|
+
type: "string",
|
|
79
|
+
enum: ["public", "private"],
|
|
80
|
+
description: "Project visibility (default: public). Optional for: create"
|
|
81
|
+
},
|
|
82
|
+
client_uuid: {
|
|
83
|
+
type: "string",
|
|
84
|
+
description: "Client UUID to associate project with. Optional for: create"
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
required: ["action"],
|
|
88
|
+
},
|
|
89
|
+
annotations: { title: "Projects", readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
|
|
90
|
+
},
|
|
91
|
+
];
|
|
92
|
+
}
|
|
93
|
+
// ============================================================================
|
|
94
|
+
// Workspace Action Handlers
|
|
95
|
+
// ============================================================================
|
|
96
|
+
const workspaceHandlers = {
|
|
97
|
+
list: async (client) => {
|
|
98
|
+
const response = await client.getWorkspaces();
|
|
99
|
+
return success(JSON.stringify(response, null, 2));
|
|
100
|
+
},
|
|
101
|
+
find: async (client, args) => {
|
|
102
|
+
if (!args.name)
|
|
103
|
+
return required("name");
|
|
104
|
+
const workspace = await client.findWorkspaceByName(args.name);
|
|
105
|
+
if (!workspace) {
|
|
106
|
+
return success(JSON.stringify({ found: false, query: args.name }, null, 2));
|
|
107
|
+
}
|
|
108
|
+
const ctx = { company_slug: workspace.slug };
|
|
109
|
+
return success(JSON.stringify({ found: true, workspace }, null, 2), ctx);
|
|
110
|
+
},
|
|
111
|
+
get: async (client, args) => {
|
|
112
|
+
if (!args.company_slug)
|
|
113
|
+
return required("company_slug");
|
|
114
|
+
const ws = await client.getWorkspace(args.company_slug);
|
|
115
|
+
const ctx = { company_slug: args.company_slug };
|
|
116
|
+
return success(JSON.stringify(ws, null, 2), ctx);
|
|
117
|
+
},
|
|
118
|
+
stats: async (client, args) => {
|
|
119
|
+
if (!args.company_slug)
|
|
120
|
+
return required("company_slug");
|
|
121
|
+
const stats = await client.getWorkspaceStats(args.company_slug);
|
|
122
|
+
const ctx = { company_slug: args.company_slug };
|
|
123
|
+
return success(JSON.stringify(stats, null, 2), ctx);
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
// ============================================================================
|
|
127
|
+
// Project Action Handlers
|
|
128
|
+
// ============================================================================
|
|
129
|
+
const projectHandlers = {
|
|
130
|
+
create: async (client, args) => {
|
|
131
|
+
if (!args.company_slug)
|
|
132
|
+
return required("company_slug");
|
|
133
|
+
if (!args.name)
|
|
134
|
+
return required("name");
|
|
135
|
+
// Permission check is handled by the API
|
|
136
|
+
const result = await client.createProject(args.company_slug, {
|
|
137
|
+
name: args.name,
|
|
138
|
+
description: args.description,
|
|
139
|
+
visibility: args.visibility,
|
|
140
|
+
client_uuid: args.client_uuid,
|
|
141
|
+
});
|
|
142
|
+
const ctx = {
|
|
143
|
+
company_slug: args.company_slug,
|
|
144
|
+
project_slug: result.project_slug
|
|
145
|
+
};
|
|
146
|
+
return success(JSON.stringify({ created: true, project: result }, null, 2), ctx);
|
|
147
|
+
},
|
|
148
|
+
find: async (client, args) => {
|
|
149
|
+
if (!args.name)
|
|
150
|
+
return required("name");
|
|
151
|
+
const project = await client.findProjectByName(args.name, args.company_slug);
|
|
152
|
+
if (!project) {
|
|
153
|
+
return success(JSON.stringify({ found: false, query: args.name }, null, 2));
|
|
154
|
+
}
|
|
155
|
+
const ctx = { company_slug: project.company_slug, project_slug: project.project_slug };
|
|
156
|
+
return success(JSON.stringify({ found: true, project }, null, 2), ctx);
|
|
157
|
+
},
|
|
158
|
+
list: async (client, args) => {
|
|
159
|
+
if (!args.company_slug)
|
|
160
|
+
return required("company_slug");
|
|
161
|
+
const response = await client.getProjects(args.company_slug, { status: args.status });
|
|
162
|
+
const ctx = { company_slug: args.company_slug };
|
|
163
|
+
return success(JSON.stringify(response, null, 2), ctx);
|
|
164
|
+
},
|
|
165
|
+
get: async (client, args) => {
|
|
166
|
+
// Auto-resolve project context
|
|
167
|
+
const resolved = await resolveProjectContext(client, {
|
|
168
|
+
company_slug: args.company_slug,
|
|
169
|
+
project_slug: args.project_slug
|
|
170
|
+
});
|
|
171
|
+
if (!resolved)
|
|
172
|
+
return required("project_slug (or company_slug + project_slug)");
|
|
173
|
+
const project = await client.getProject(resolved.project_slug, resolved.company_slug);
|
|
174
|
+
const ctx = { company_slug: resolved.company_slug, project_slug: resolved.project_slug };
|
|
175
|
+
return success(JSON.stringify(project, null, 2), ctx);
|
|
176
|
+
},
|
|
177
|
+
stats: async (client, args) => {
|
|
178
|
+
// Auto-resolve project context
|
|
179
|
+
const resolved = await resolveProjectContext(client, {
|
|
180
|
+
company_slug: args.company_slug,
|
|
181
|
+
project_slug: args.project_slug
|
|
182
|
+
});
|
|
183
|
+
if (!resolved)
|
|
184
|
+
return required("project_slug (or company_slug + project_slug)");
|
|
185
|
+
const stats = await client.getProjectStats(resolved.project_slug, resolved.company_slug);
|
|
186
|
+
const ctx = { company_slug: resolved.company_slug, project_slug: resolved.project_slug };
|
|
187
|
+
return success(JSON.stringify(stats, null, 2), ctx);
|
|
188
|
+
},
|
|
189
|
+
tasks: async (client, args) => {
|
|
190
|
+
// Auto-resolve project context
|
|
191
|
+
const resolved = await resolveProjectContext(client, {
|
|
192
|
+
company_slug: args.company_slug,
|
|
193
|
+
project_slug: args.project_slug
|
|
194
|
+
});
|
|
195
|
+
if (!resolved)
|
|
196
|
+
return required("project_slug (or company_slug + project_slug)");
|
|
197
|
+
const tasks = await client.getProjectTasks(resolved.project_slug, resolved.company_slug);
|
|
198
|
+
const ctx = { company_slug: resolved.company_slug, project_slug: resolved.project_slug };
|
|
199
|
+
return success(JSON.stringify(tasks, null, 2), ctx);
|
|
200
|
+
},
|
|
201
|
+
workflows: async (client, args) => {
|
|
202
|
+
const resolved = await resolveProjectContext(client, {
|
|
203
|
+
company_slug: args.company_slug,
|
|
204
|
+
project_slug: args.project_slug
|
|
205
|
+
});
|
|
206
|
+
if (!resolved)
|
|
207
|
+
return required("project_slug (or company_slug + project_slug)");
|
|
208
|
+
const workflows = await client.getProjectWorkflows(resolved.project_slug, resolved.company_slug);
|
|
209
|
+
const ctx = { company_slug: resolved.company_slug, project_slug: resolved.project_slug };
|
|
210
|
+
return success(JSON.stringify(workflows, null, 2), ctx);
|
|
211
|
+
},
|
|
212
|
+
types: async (client, args) => {
|
|
213
|
+
const resolved = await resolveProjectContext(client, {
|
|
214
|
+
company_slug: args.company_slug,
|
|
215
|
+
project_slug: args.project_slug
|
|
216
|
+
});
|
|
217
|
+
if (!resolved)
|
|
218
|
+
return required("project_slug (or company_slug + project_slug)");
|
|
219
|
+
const types = await client.getProjectTypes(resolved.project_slug, resolved.company_slug);
|
|
220
|
+
const ctx = { company_slug: resolved.company_slug, project_slug: resolved.project_slug };
|
|
221
|
+
return success(JSON.stringify(types, null, 2), ctx);
|
|
222
|
+
},
|
|
223
|
+
efforts: async (client, args) => {
|
|
224
|
+
const resolved = await resolveProjectContext(client, {
|
|
225
|
+
company_slug: args.company_slug,
|
|
226
|
+
project_slug: args.project_slug
|
|
227
|
+
});
|
|
228
|
+
if (!resolved)
|
|
229
|
+
return required("project_slug (or company_slug + project_slug)");
|
|
230
|
+
const efforts = await client.getProjectEfforts(resolved.project_slug, resolved.company_slug);
|
|
231
|
+
const ctx = { company_slug: resolved.company_slug, project_slug: resolved.project_slug };
|
|
232
|
+
return success(JSON.stringify(efforts, null, 2), ctx);
|
|
233
|
+
},
|
|
234
|
+
labels: async (client, args) => {
|
|
235
|
+
const resolved = await resolveProjectContext(client, {
|
|
236
|
+
company_slug: args.company_slug,
|
|
237
|
+
project_slug: args.project_slug
|
|
238
|
+
});
|
|
239
|
+
if (!resolved)
|
|
240
|
+
return required("project_slug (or company_slug + project_slug)");
|
|
241
|
+
const labels = await client.getProjectLabels(resolved.project_slug, resolved.company_slug);
|
|
242
|
+
const ctx = { company_slug: resolved.company_slug, project_slug: resolved.project_slug };
|
|
243
|
+
return success(JSON.stringify(labels, null, 2), ctx);
|
|
244
|
+
},
|
|
245
|
+
members: async (client, args) => {
|
|
246
|
+
const resolved = await resolveProjectContext(client, {
|
|
247
|
+
company_slug: args.company_slug,
|
|
248
|
+
project_slug: args.project_slug
|
|
249
|
+
});
|
|
250
|
+
if (!resolved)
|
|
251
|
+
return required("project_slug (or company_slug + project_slug)");
|
|
252
|
+
const members = await client.getProjectMembers(resolved.project_slug, resolved.company_slug);
|
|
253
|
+
const ctx = { company_slug: resolved.company_slug, project_slug: resolved.project_slug };
|
|
254
|
+
return success(JSON.stringify(members, null, 2), ctx);
|
|
255
|
+
},
|
|
256
|
+
};
|
|
257
|
+
// ============================================================================
|
|
258
|
+
// Main Handler
|
|
259
|
+
// ============================================================================
|
|
260
|
+
export async function handleProjectTool(client, name, args = {}) {
|
|
261
|
+
const action = args.action;
|
|
262
|
+
switch (name) {
|
|
263
|
+
case "workspace":
|
|
264
|
+
return executeAction(workspaceHandlers, action, client, args);
|
|
265
|
+
case "project":
|
|
266
|
+
// Handlers now use auto-resolution for missing company_slug
|
|
267
|
+
return executeAction(projectHandlers, action, client, args);
|
|
268
|
+
default:
|
|
269
|
+
return { content: [{ type: "text", text: `Unknown tool: ${name}` }], isError: true };
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search Tools
|
|
3
|
+
*
|
|
4
|
+
* MCP tools for searching across GitScrum entities
|
|
5
|
+
*/
|
|
6
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
7
|
+
import type { GitScrumClient } from "../client/GitScrumClient.js";
|
|
8
|
+
import { type ToolResponse } from "./shared/actionHandler.js";
|
|
9
|
+
/**
|
|
10
|
+
* Register search tools
|
|
11
|
+
*/
|
|
12
|
+
export declare function registerSearchTools(): Tool[];
|
|
13
|
+
/**
|
|
14
|
+
* Handle search tool calls
|
|
15
|
+
*/
|
|
16
|
+
export declare function handleSearchTool(client: GitScrumClient, _name: string, args?: Record<string, unknown>): Promise<ToolResponse>;
|
|
17
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,2BAA2B,CAAC;AAEnC;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,EAAE,CA+B5C;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,OAAO,CAAC,YAAY,CAAC,CAavB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search Tools
|
|
3
|
+
*
|
|
4
|
+
* MCP tools for searching across GitScrum entities
|
|
5
|
+
*/
|
|
6
|
+
import { success, required } from "./shared/actionHandler.js";
|
|
7
|
+
/**
|
|
8
|
+
* Register search tools
|
|
9
|
+
*/
|
|
10
|
+
export function registerSearchTools() {
|
|
11
|
+
return [
|
|
12
|
+
{
|
|
13
|
+
name: "search",
|
|
14
|
+
description: [
|
|
15
|
+
"Search across workspaces, projects, tasks, sprints, wiki, notes by name.",
|
|
16
|
+
"",
|
|
17
|
+
"Use to discover slugs and UUIDs needed by other tools.",
|
|
18
|
+
"Results include entity type, name, and identifiers.",
|
|
19
|
+
].join("\n"),
|
|
20
|
+
inputSchema: {
|
|
21
|
+
type: "object",
|
|
22
|
+
properties: {
|
|
23
|
+
query: {
|
|
24
|
+
type: "string",
|
|
25
|
+
description: "Search text (min 2 chars)",
|
|
26
|
+
},
|
|
27
|
+
categories: {
|
|
28
|
+
type: "string",
|
|
29
|
+
description: "Filter: workspaces, tasks, projects, user_stories, sprints, wiki, notes",
|
|
30
|
+
},
|
|
31
|
+
limit: {
|
|
32
|
+
type: "number",
|
|
33
|
+
description: "Results per category (default: 5)",
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
required: ["query"],
|
|
37
|
+
},
|
|
38
|
+
annotations: { title: "Search", readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
39
|
+
},
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Handle search tool calls
|
|
44
|
+
*/
|
|
45
|
+
export async function handleSearchTool(client, _name, args = {}) {
|
|
46
|
+
const query = args.query;
|
|
47
|
+
if (!query || query.length < 2) {
|
|
48
|
+
return required("query (min 2 chars)");
|
|
49
|
+
}
|
|
50
|
+
const results = await client.search(query, {
|
|
51
|
+
categories: args.categories,
|
|
52
|
+
limit: args.limit,
|
|
53
|
+
});
|
|
54
|
+
return success(JSON.stringify(results, null, 2));
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EACL,OAAO,EACP,QAAQ,EAET,MAAM,2BAA2B,CAAC;AAEnC;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE;gBACX,0EAA0E;gBAC1E,EAAE;gBACF,wDAAwD;gBACxD,qDAAqD;aACtD,CAAC,IAAI,CAAC,IAAI,CAAC;YACZ,WAAW,EAAE;gBACX,IAAI,EAAE,QAAiB;gBACvB,UAAU,EAAE;oBACV,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,2BAA2B;qBACzC;oBACD,UAAU,EAAE;wBACV,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,yEAAyE;qBACvF;oBACD,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,mCAAmC;qBACjD;iBACF;gBACD,QAAQ,EAAE,CAAC,OAAO,CAAC;aACpB;YACD,WAAW,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;SACzH;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAsB,EACtB,KAAa,EACb,OAAgC,EAAE;IAElC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAe,CAAC;IAEnC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;QACzC,UAAU,EAAE,IAAI,CAAC,UAAgC;QACjD,KAAK,EAAE,IAAI,CAAC,KAA2B;KACxC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC"}
|