@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,174 @@
|
|
|
1
|
+
import { executeAction, success, required, resolveProjectContext } from "./shared/actionHandler.js";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Tool Registration
|
|
4
|
+
// ============================================================================
|
|
5
|
+
export function registerTimeTrackingTools() {
|
|
6
|
+
return [
|
|
7
|
+
{
|
|
8
|
+
name: "time",
|
|
9
|
+
description: [
|
|
10
|
+
"Time tracking. Actions: active, start, stop, logs, analytics, team, reports, productivity, timeline.",
|
|
11
|
+
"",
|
|
12
|
+
"Workflow:",
|
|
13
|
+
"1. Use 'active' first to check if there is already a running timer",
|
|
14
|
+
"2. To start: get the task_uuid from 'task' tool (action: my, today, or filter), then call 'start' with task_uuid",
|
|
15
|
+
"3. To stop: get time_tracking_id from 'active' response, then call 'stop'",
|
|
16
|
+
"4. 'logs' shows time entries for a project",
|
|
17
|
+
"5. 'analytics'/'team'/'reports'/'productivity'/'timeline': requires company_slug. Optional: project_slug, period",
|
|
18
|
+
"",
|
|
19
|
+
"'active' and 'logs' require company_slug (auto-resolved if omitted).",
|
|
20
|
+
"'start' requires task_uuid (ask user which task if not specified).",
|
|
21
|
+
"'stop' requires time_tracking_id (get from 'active' response).",
|
|
22
|
+
"Period options: today, yesterday, last-7-days, last-14-days, last-15-days, this-month, last-month, last-30-days",
|
|
23
|
+
].join("\n"),
|
|
24
|
+
inputSchema: {
|
|
25
|
+
type: "object",
|
|
26
|
+
properties: {
|
|
27
|
+
action: {
|
|
28
|
+
type: "string",
|
|
29
|
+
enum: ["active", "start", "stop", "logs", "analytics", "team", "reports", "productivity", "timeline"],
|
|
30
|
+
description: "Which operation to perform"
|
|
31
|
+
},
|
|
32
|
+
task_uuid: {
|
|
33
|
+
type: "string",
|
|
34
|
+
description: "Task's unique ID to track time on. Required for: start"
|
|
35
|
+
},
|
|
36
|
+
time_tracking_id: {
|
|
37
|
+
type: "string",
|
|
38
|
+
description: "Active timer's ID (get from 'active' action). Required for: stop"
|
|
39
|
+
},
|
|
40
|
+
project_slug: {
|
|
41
|
+
type: "string",
|
|
42
|
+
description: "Project identifier. Required for: logs"
|
|
43
|
+
},
|
|
44
|
+
company_slug: {
|
|
45
|
+
type: "string",
|
|
46
|
+
description: "Workspace identifier. Required for: active, logs (auto-resolved if omitted)"
|
|
47
|
+
},
|
|
48
|
+
description: {
|
|
49
|
+
type: "string",
|
|
50
|
+
description: "What you're working on (optional note for start)"
|
|
51
|
+
},
|
|
52
|
+
period: {
|
|
53
|
+
type: "string",
|
|
54
|
+
description: "Time period for analytics: today, yesterday, last-7-days, last-14-days, this-month, last-month, last-30-days"
|
|
55
|
+
},
|
|
56
|
+
report_type: {
|
|
57
|
+
type: "string",
|
|
58
|
+
description: "For 'reports' action: report type (default: summary)"
|
|
59
|
+
},
|
|
60
|
+
hourly_rate: {
|
|
61
|
+
type: "number",
|
|
62
|
+
description: "For 'reports' action: hourly rate for cost calculations"
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
required: ["action"],
|
|
66
|
+
},
|
|
67
|
+
annotations: { title: "Time Tracking", readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
|
|
68
|
+
},
|
|
69
|
+
];
|
|
70
|
+
}
|
|
71
|
+
// ============================================================================
|
|
72
|
+
// Action Handlers
|
|
73
|
+
// ============================================================================
|
|
74
|
+
const timeHandlers = {
|
|
75
|
+
active: async (client, args) => {
|
|
76
|
+
// Resolve company_slug: use provided, or fetch user's first workspace
|
|
77
|
+
let companySlug = args.company_slug;
|
|
78
|
+
if (!companySlug) {
|
|
79
|
+
const workspaces = await client.getWorkspaces({ perPage: 1 });
|
|
80
|
+
const list = workspaces.data;
|
|
81
|
+
if (list && list.length > 0) {
|
|
82
|
+
companySlug = list[0].slug;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (!companySlug)
|
|
86
|
+
return required("company_slug");
|
|
87
|
+
const timer = await client.getActiveTimer(companySlug);
|
|
88
|
+
const ctx = { company_slug: companySlug };
|
|
89
|
+
return success(JSON.stringify(timer || { active: false }, null, 2), ctx);
|
|
90
|
+
},
|
|
91
|
+
start: async (client, args) => {
|
|
92
|
+
if (!args.task_uuid)
|
|
93
|
+
return required("task_uuid (use 'task' tool with action 'my' or 'today' to find the task UUID)");
|
|
94
|
+
const result = await client.startTimer(args.task_uuid, args.description);
|
|
95
|
+
return success(JSON.stringify({ started: true, timer: result }, null, 2));
|
|
96
|
+
},
|
|
97
|
+
stop: async (client, args) => {
|
|
98
|
+
if (!args.time_tracking_id)
|
|
99
|
+
return required("time_tracking_id (use 'time' tool with action 'active' to get the ID)");
|
|
100
|
+
const timer = await client.stopTimer(args.time_tracking_id);
|
|
101
|
+
return success(JSON.stringify({ stopped: true, timer }, null, 2));
|
|
102
|
+
},
|
|
103
|
+
logs: async (client, args) => {
|
|
104
|
+
// Auto-resolve project context
|
|
105
|
+
const resolved = await resolveProjectContext(client, {
|
|
106
|
+
company_slug: args.company_slug,
|
|
107
|
+
project_slug: args.project_slug
|
|
108
|
+
});
|
|
109
|
+
if (!resolved)
|
|
110
|
+
return required("project_slug (or project name to search)");
|
|
111
|
+
const logs = await client.getTimeLogs(resolved.project_slug, resolved.company_slug);
|
|
112
|
+
return success(JSON.stringify(logs, null, 2));
|
|
113
|
+
},
|
|
114
|
+
analytics: async (client, args) => {
|
|
115
|
+
if (!args.company_slug)
|
|
116
|
+
return required("company_slug");
|
|
117
|
+
const data = await client.getTimeTrackingAnalytics(args.company_slug, {
|
|
118
|
+
project_slug: args.project_slug,
|
|
119
|
+
period: args.period,
|
|
120
|
+
});
|
|
121
|
+
const ctx = { company_slug: args.company_slug };
|
|
122
|
+
return success(JSON.stringify(data, null, 2), ctx);
|
|
123
|
+
},
|
|
124
|
+
team: async (client, args) => {
|
|
125
|
+
if (!args.company_slug)
|
|
126
|
+
return required("company_slug");
|
|
127
|
+
const data = await client.getTimeTrackingTeam(args.company_slug, {
|
|
128
|
+
project_slug: args.project_slug,
|
|
129
|
+
period: args.period,
|
|
130
|
+
});
|
|
131
|
+
const ctx = { company_slug: args.company_slug };
|
|
132
|
+
return success(JSON.stringify(data, null, 2), ctx);
|
|
133
|
+
},
|
|
134
|
+
reports: async (client, args) => {
|
|
135
|
+
if (!args.company_slug)
|
|
136
|
+
return required("company_slug");
|
|
137
|
+
const data = await client.getTimeTrackingReports(args.company_slug, {
|
|
138
|
+
project_slug: args.project_slug,
|
|
139
|
+
period: args.period,
|
|
140
|
+
report_type: args.report_type,
|
|
141
|
+
hourly_rate: args.hourly_rate,
|
|
142
|
+
});
|
|
143
|
+
const ctx = { company_slug: args.company_slug };
|
|
144
|
+
return success(JSON.stringify(data, null, 2), ctx);
|
|
145
|
+
},
|
|
146
|
+
productivity: async (client, args) => {
|
|
147
|
+
if (!args.company_slug)
|
|
148
|
+
return required("company_slug");
|
|
149
|
+
const data = await client.getTimeTrackingProductivity(args.company_slug, {
|
|
150
|
+
project_slug: args.project_slug,
|
|
151
|
+
period: args.period,
|
|
152
|
+
});
|
|
153
|
+
const ctx = { company_slug: args.company_slug };
|
|
154
|
+
return success(JSON.stringify(data, null, 2), ctx);
|
|
155
|
+
},
|
|
156
|
+
timeline: async (client, args) => {
|
|
157
|
+
if (!args.company_slug)
|
|
158
|
+
return required("company_slug");
|
|
159
|
+
const data = await client.getTimeTrackingTimeline(args.company_slug, {
|
|
160
|
+
project_slug: args.project_slug,
|
|
161
|
+
period: args.period,
|
|
162
|
+
});
|
|
163
|
+
const ctx = { company_slug: args.company_slug };
|
|
164
|
+
return success(JSON.stringify(data, null, 2), ctx);
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
// ============================================================================
|
|
168
|
+
// Main Handler
|
|
169
|
+
// ============================================================================
|
|
170
|
+
export async function handleTimeTrackingTool(client, _name, args = {}) {
|
|
171
|
+
const action = args.action;
|
|
172
|
+
return executeAction(timeHandlers, action, client, args);
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=timeTracking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeTracking.js","sourceRoot":"","sources":["../../src/tools/timeTracking.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User Story MCP Tool (Consolidated)
|
|
3
|
+
*
|
|
4
|
+
* Uses Action Handler pattern for clean, extensible code.
|
|
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
|
+
export declare function registerUserStoryTools(): Tool[];
|
|
10
|
+
export declare function handleUserStoryTool(client: GitScrumClient, _name: string, args?: Record<string, unknown>): Promise<ToolResponse>;
|
|
11
|
+
//# sourceMappingURL=userStories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userStories.d.ts","sourceRoot":"","sources":["../../src/tools/userStories.ts"],"names":[],"mappings":"AAAA;;;;GAIG;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,sBAAsB,IAAI,IAAI,EAAE,CA4D/C;AAoHD,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,OAAO,CAAC,YAAY,CAAC,CAIvB"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { executeAction, success, required, resolveProjectContext } from "./shared/actionHandler.js";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Tool Registration
|
|
4
|
+
// ============================================================================
|
|
5
|
+
export function registerUserStoryTools() {
|
|
6
|
+
return [
|
|
7
|
+
{
|
|
8
|
+
name: "user_story",
|
|
9
|
+
description: [
|
|
10
|
+
"User stories. Actions: list, all, get, create, update.",
|
|
11
|
+
"",
|
|
12
|
+
"Workflow:",
|
|
13
|
+
"- 'list': requires company_slug + project_slug (returns stories with their slug)",
|
|
14
|
+
"- 'all': no params needed (returns all user stories across workspaces)",
|
|
15
|
+
"- 'get': requires slug (from 'list' response) + company_slug + project_slug",
|
|
16
|
+
"- 'create': requires title + company_slug + project_slug",
|
|
17
|
+
"- 'update': requires slug (from 'list' response) + company_slug + project_slug",
|
|
18
|
+
].join("\n"),
|
|
19
|
+
inputSchema: {
|
|
20
|
+
type: "object",
|
|
21
|
+
properties: {
|
|
22
|
+
action: {
|
|
23
|
+
type: "string",
|
|
24
|
+
enum: ["list", "all", "get", "create", "update"],
|
|
25
|
+
description: "Which operation to perform"
|
|
26
|
+
},
|
|
27
|
+
project_slug: {
|
|
28
|
+
type: "string",
|
|
29
|
+
description: "Project identifier (always required)"
|
|
30
|
+
},
|
|
31
|
+
company_slug: {
|
|
32
|
+
type: "string",
|
|
33
|
+
description: "Workspace identifier (always required)"
|
|
34
|
+
},
|
|
35
|
+
slug: {
|
|
36
|
+
type: "string",
|
|
37
|
+
description: "Existing story's unique identifier. Only for: get, update. NOT for create."
|
|
38
|
+
},
|
|
39
|
+
title: {
|
|
40
|
+
type: "string",
|
|
41
|
+
description: "Story title text. Required when creating a new story."
|
|
42
|
+
},
|
|
43
|
+
additional_information: {
|
|
44
|
+
type: "string",
|
|
45
|
+
description: "Story details/context in markdown (optional for create)"
|
|
46
|
+
},
|
|
47
|
+
acceptance_criteria: {
|
|
48
|
+
type: "string",
|
|
49
|
+
description: "Definition of done - what must be true for story to be complete (optional)"
|
|
50
|
+
},
|
|
51
|
+
epic_uuid: {
|
|
52
|
+
type: "string",
|
|
53
|
+
description: "Epic UUID to associate story with (from 'epic' tool 'list'). Optional for create/update"
|
|
54
|
+
},
|
|
55
|
+
user_story_priority_id: {
|
|
56
|
+
type: "number",
|
|
57
|
+
description: "Priority ID (from 'project' action 'efforts'). Optional - auto-defaults on create"
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
required: ["action", "company_slug", "project_slug"],
|
|
61
|
+
},
|
|
62
|
+
annotations: { title: "User Stories", readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
|
|
63
|
+
},
|
|
64
|
+
];
|
|
65
|
+
}
|
|
66
|
+
// ============================================================================
|
|
67
|
+
// Action Handlers
|
|
68
|
+
// ============================================================================
|
|
69
|
+
const userStoryHandlers = {
|
|
70
|
+
list: async (client, args) => {
|
|
71
|
+
// Auto-resolve project context
|
|
72
|
+
const resolved = await resolveProjectContext(client, {
|
|
73
|
+
company_slug: args.company_slug,
|
|
74
|
+
project_slug: args.project_slug
|
|
75
|
+
});
|
|
76
|
+
if (!resolved)
|
|
77
|
+
return required("project_slug (or company_slug + project_slug)");
|
|
78
|
+
const stories = await client.getUserStories(resolved.project_slug, resolved.company_slug);
|
|
79
|
+
const ctx = { company_slug: resolved.company_slug, project_slug: resolved.project_slug };
|
|
80
|
+
return success(JSON.stringify(stories, null, 2), ctx);
|
|
81
|
+
},
|
|
82
|
+
all: async (client) => {
|
|
83
|
+
const stories = await client.getAllWorkspacesUserStories();
|
|
84
|
+
return success(JSON.stringify(stories, null, 2));
|
|
85
|
+
},
|
|
86
|
+
get: async (client, args) => {
|
|
87
|
+
if (!args.slug)
|
|
88
|
+
return required("slug");
|
|
89
|
+
// Auto-resolve project context
|
|
90
|
+
const resolved = await resolveProjectContext(client, {
|
|
91
|
+
company_slug: args.company_slug,
|
|
92
|
+
project_slug: args.project_slug
|
|
93
|
+
});
|
|
94
|
+
if (!resolved)
|
|
95
|
+
return required("project_slug (or company_slug + project_slug)");
|
|
96
|
+
const story = await client.getUserStory(args.slug, resolved.project_slug, resolved.company_slug);
|
|
97
|
+
const ctx = {
|
|
98
|
+
company_slug: resolved.company_slug,
|
|
99
|
+
project_slug: resolved.project_slug,
|
|
100
|
+
user_story_slug: args.slug
|
|
101
|
+
};
|
|
102
|
+
return success(JSON.stringify(story, null, 2), ctx);
|
|
103
|
+
},
|
|
104
|
+
create: async (client, args) => {
|
|
105
|
+
if (!args.title)
|
|
106
|
+
return required("title");
|
|
107
|
+
// Auto-resolve project context
|
|
108
|
+
const resolved = await resolveProjectContext(client, {
|
|
109
|
+
company_slug: args.company_slug,
|
|
110
|
+
project_slug: args.project_slug
|
|
111
|
+
});
|
|
112
|
+
if (!resolved)
|
|
113
|
+
return required("project_slug (or company_slug + project_slug)");
|
|
114
|
+
const story = await client.createUserStory({
|
|
115
|
+
title: args.title,
|
|
116
|
+
project_slug: resolved.project_slug,
|
|
117
|
+
company_slug: resolved.company_slug,
|
|
118
|
+
additional_information: args.additional_information,
|
|
119
|
+
acceptance_criteria: args.acceptance_criteria,
|
|
120
|
+
epic_uuid: args.epic_uuid,
|
|
121
|
+
user_story_priority_id: args.user_story_priority_id,
|
|
122
|
+
});
|
|
123
|
+
const ctx = { company_slug: resolved.company_slug, project_slug: resolved.project_slug };
|
|
124
|
+
return success(JSON.stringify({ created: true, story }, null, 2), ctx);
|
|
125
|
+
},
|
|
126
|
+
update: async (client, args) => {
|
|
127
|
+
if (!args.slug)
|
|
128
|
+
return required("slug");
|
|
129
|
+
const resolved = await resolveProjectContext(client, {
|
|
130
|
+
company_slug: args.company_slug,
|
|
131
|
+
project_slug: args.project_slug
|
|
132
|
+
});
|
|
133
|
+
if (!resolved)
|
|
134
|
+
return required("project_slug (or company_slug + project_slug)");
|
|
135
|
+
const data = {
|
|
136
|
+
project_slug: resolved.project_slug,
|
|
137
|
+
company_slug: resolved.company_slug,
|
|
138
|
+
};
|
|
139
|
+
if (args.title !== undefined)
|
|
140
|
+
data.title = args.title;
|
|
141
|
+
if (args.additional_information !== undefined)
|
|
142
|
+
data.additional_information = args.additional_information;
|
|
143
|
+
if (args.acceptance_criteria !== undefined)
|
|
144
|
+
data.acceptance_criteria = args.acceptance_criteria;
|
|
145
|
+
if (args.epic_uuid !== undefined)
|
|
146
|
+
data.epic_uuid = args.epic_uuid;
|
|
147
|
+
if (args.user_story_priority_id !== undefined)
|
|
148
|
+
data.user_story_priority_id = args.user_story_priority_id;
|
|
149
|
+
const result = await client.updateUserStory(args.slug, data);
|
|
150
|
+
const ctx = {
|
|
151
|
+
company_slug: resolved.company_slug,
|
|
152
|
+
project_slug: resolved.project_slug,
|
|
153
|
+
user_story_slug: args.slug
|
|
154
|
+
};
|
|
155
|
+
return success(JSON.stringify({ updated: true, story: result }, null, 2), ctx);
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
// ============================================================================
|
|
159
|
+
// Main Handler
|
|
160
|
+
// ============================================================================
|
|
161
|
+
export async function handleUserStoryTool(client, _name, args = {}) {
|
|
162
|
+
// Auto-resolution is now in handlers
|
|
163
|
+
const action = args.action;
|
|
164
|
+
return executeAction(userStoryHandlers, action, client, args);
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=userStories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userStories.js","sourceRoot":"","sources":["../../src/tools/userStories.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wiki MCP Tool (Consolidated)
|
|
3
|
+
*
|
|
4
|
+
* Uses Action Handler pattern for clean, extensible code.
|
|
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
|
+
export declare function registerWikiTools(): Tool[];
|
|
10
|
+
export declare function handleWikiTool(client: GitScrumClient, _name: string, args?: Record<string, unknown>): Promise<ToolResponse>;
|
|
11
|
+
//# sourceMappingURL=wiki.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki.d.ts","sourceRoot":"","sources":["../../src/tools/wiki.ts"],"names":[],"mappings":"AAAA;;;;GAIG;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,iBAAiB,IAAI,IAAI,EAAE,CA+D1C;AAyGD,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,OAAO,CAAC,YAAY,CAAC,CAGvB"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { executeAction, success, required, resolveProjectContext } from "./shared/actionHandler.js";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Tool Registration
|
|
4
|
+
// ============================================================================
|
|
5
|
+
export function registerWikiTools() {
|
|
6
|
+
return [
|
|
7
|
+
{
|
|
8
|
+
name: "wiki",
|
|
9
|
+
description: [
|
|
10
|
+
"Wiki pages. Actions: list, get, create, update, search.",
|
|
11
|
+
"",
|
|
12
|
+
"All actions require company_slug + project_slug.",
|
|
13
|
+
"'get'/'update' require uuid (from 'list' response).",
|
|
14
|
+
"'search' requires q (search query, min 2 chars).",
|
|
15
|
+
].join("\n"),
|
|
16
|
+
inputSchema: {
|
|
17
|
+
type: "object",
|
|
18
|
+
properties: {
|
|
19
|
+
action: {
|
|
20
|
+
type: "string",
|
|
21
|
+
enum: ["list", "get", "create", "update", "search"],
|
|
22
|
+
description: "Which operation to perform",
|
|
23
|
+
},
|
|
24
|
+
project_slug: {
|
|
25
|
+
type: "string",
|
|
26
|
+
description: "Project identifier (always required)"
|
|
27
|
+
},
|
|
28
|
+
company_slug: {
|
|
29
|
+
type: "string",
|
|
30
|
+
description: "Workspace identifier (always required)"
|
|
31
|
+
},
|
|
32
|
+
uuid: {
|
|
33
|
+
type: "string",
|
|
34
|
+
description: "Existing page's unique ID. Only for: get, update. NOT for create."
|
|
35
|
+
},
|
|
36
|
+
title: {
|
|
37
|
+
type: "string",
|
|
38
|
+
description: "Page title/heading text. Required when creating a new page."
|
|
39
|
+
},
|
|
40
|
+
content: {
|
|
41
|
+
type: "string",
|
|
42
|
+
description: "Page body text in Markdown. This is the actual content to save. Required for create."
|
|
43
|
+
},
|
|
44
|
+
parent_uuid: {
|
|
45
|
+
type: "string",
|
|
46
|
+
description: "Parent page ID for nested pages (optional)"
|
|
47
|
+
},
|
|
48
|
+
q: {
|
|
49
|
+
type: "string",
|
|
50
|
+
description: "Search query (min 2 chars). Required for search action."
|
|
51
|
+
},
|
|
52
|
+
limit: {
|
|
53
|
+
type: "number",
|
|
54
|
+
description: "Max results for search (default 20, max 50)"
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
required: ["action", "company_slug", "project_slug"],
|
|
58
|
+
},
|
|
59
|
+
annotations: {
|
|
60
|
+
title: "Wiki Documentation",
|
|
61
|
+
readOnlyHint: false,
|
|
62
|
+
destructiveHint: false,
|
|
63
|
+
idempotentHint: false,
|
|
64
|
+
openWorldHint: false,
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
];
|
|
68
|
+
}
|
|
69
|
+
// ============================================================================
|
|
70
|
+
// Action Handlers
|
|
71
|
+
// ============================================================================
|
|
72
|
+
const wikiHandlers = {
|
|
73
|
+
list: async (client, args) => {
|
|
74
|
+
const resolved = await resolveProjectContext(client, {
|
|
75
|
+
company_slug: args.company_slug,
|
|
76
|
+
project_slug: args.project_slug
|
|
77
|
+
});
|
|
78
|
+
if (!resolved)
|
|
79
|
+
return required("project_slug (or company_slug + project_slug)");
|
|
80
|
+
const pages = await client.getWikiPages(resolved.project_slug, resolved.company_slug);
|
|
81
|
+
const ctx = { company_slug: resolved.company_slug, project_slug: resolved.project_slug };
|
|
82
|
+
return success(JSON.stringify(pages, null, 2), ctx);
|
|
83
|
+
},
|
|
84
|
+
get: async (client, args) => {
|
|
85
|
+
if (!args.uuid)
|
|
86
|
+
return required("uuid");
|
|
87
|
+
const resolved = await resolveProjectContext(client, {
|
|
88
|
+
company_slug: args.company_slug,
|
|
89
|
+
project_slug: args.project_slug
|
|
90
|
+
});
|
|
91
|
+
if (!resolved)
|
|
92
|
+
return required("project_slug (or company_slug + project_slug)");
|
|
93
|
+
const page = await client.getWikiPage(args.uuid, resolved.project_slug, resolved.company_slug);
|
|
94
|
+
const ctx = { company_slug: resolved.company_slug, project_slug: resolved.project_slug };
|
|
95
|
+
return success(JSON.stringify(page, null, 2), ctx);
|
|
96
|
+
},
|
|
97
|
+
create: async (client, args) => {
|
|
98
|
+
if (!args.title || !args.content)
|
|
99
|
+
return required("title and content");
|
|
100
|
+
const resolved = await resolveProjectContext(client, {
|
|
101
|
+
company_slug: args.company_slug,
|
|
102
|
+
project_slug: args.project_slug
|
|
103
|
+
});
|
|
104
|
+
if (!resolved)
|
|
105
|
+
return required("project_slug (or company_slug + project_slug)");
|
|
106
|
+
const page = await client.createWikiPage({
|
|
107
|
+
title: args.title,
|
|
108
|
+
content: args.content,
|
|
109
|
+
project_slug: resolved.project_slug,
|
|
110
|
+
company_slug: resolved.company_slug,
|
|
111
|
+
parent_uuid: args.parent_uuid,
|
|
112
|
+
});
|
|
113
|
+
const ctx = { company_slug: resolved.company_slug, project_slug: resolved.project_slug };
|
|
114
|
+
return success(JSON.stringify({ created: true, page }, null, 2), ctx);
|
|
115
|
+
},
|
|
116
|
+
update: async (client, args) => {
|
|
117
|
+
if (!args.uuid)
|
|
118
|
+
return required("uuid");
|
|
119
|
+
const resolved = await resolveProjectContext(client, {
|
|
120
|
+
company_slug: args.company_slug,
|
|
121
|
+
project_slug: args.project_slug
|
|
122
|
+
});
|
|
123
|
+
if (!resolved)
|
|
124
|
+
return required("project_slug (or company_slug + project_slug)");
|
|
125
|
+
const updateData = {};
|
|
126
|
+
if (args.title)
|
|
127
|
+
updateData.title = args.title;
|
|
128
|
+
if (args.content)
|
|
129
|
+
updateData.content = args.content;
|
|
130
|
+
await client.updateWikiPage(args.uuid, resolved.project_slug, resolved.company_slug, updateData);
|
|
131
|
+
return success(JSON.stringify({ updated: true, uuid: args.uuid }, null, 2));
|
|
132
|
+
},
|
|
133
|
+
search: async (client, args) => {
|
|
134
|
+
if (!args.q)
|
|
135
|
+
return required("q (search query, min 2 characters)");
|
|
136
|
+
const resolved = await resolveProjectContext(client, {
|
|
137
|
+
company_slug: args.company_slug,
|
|
138
|
+
project_slug: args.project_slug
|
|
139
|
+
});
|
|
140
|
+
if (!resolved)
|
|
141
|
+
return required("project_slug (or company_slug + project_slug)");
|
|
142
|
+
const results = await client.searchWikiPages(resolved.project_slug, resolved.company_slug, args.q, args.limit);
|
|
143
|
+
const ctx = { company_slug: resolved.company_slug, project_slug: resolved.project_slug };
|
|
144
|
+
return success(JSON.stringify(results, null, 2), ctx);
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
// ============================================================================
|
|
148
|
+
// Main Handler
|
|
149
|
+
// ============================================================================
|
|
150
|
+
export async function handleWikiTool(client, _name, args = {}) {
|
|
151
|
+
const action = args.action;
|
|
152
|
+
return executeAction(wikiHandlers, action, client, args);
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=wiki.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki.js","sourceRoot":"","sources":["../../src/tools/wiki.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow Tools (Kanban Columns) - Consolidated
|
|
3
|
+
*
|
|
4
|
+
* Uses Action Handler pattern for clean, extensible code.
|
|
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
|
+
export declare function registerWorkflowTools(): Tool[];
|
|
10
|
+
export declare function handleWorkflowTool(client: GitScrumClient, _name: string, args?: Record<string, unknown>): Promise<ToolResponse>;
|
|
11
|
+
//# sourceMappingURL=workflows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/tools/workflows.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,EAOL,KAAK,YAAY,EAElB,MAAM,2BAA2B,CAAC;AAqCnC,wBAAgB,qBAAqB,IAAI,IAAI,EAAE,CAsD9C;AAgED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,OAAO,CAAC,YAAY,CAAC,CAGvB"}
|