@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.
Files changed (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +250 -0
  3. package/dist/auth/DeviceAuthenticator.d.ts +51 -0
  4. package/dist/auth/DeviceAuthenticator.d.ts.map +1 -0
  5. package/dist/auth/DeviceAuthenticator.js +89 -0
  6. package/dist/auth/DeviceAuthenticator.js.map +1 -0
  7. package/dist/auth/RateLimiter.d.ts +58 -0
  8. package/dist/auth/RateLimiter.d.ts.map +1 -0
  9. package/dist/auth/RateLimiter.js +181 -0
  10. package/dist/auth/RateLimiter.js.map +1 -0
  11. package/dist/auth/TokenManager.d.ts +62 -0
  12. package/dist/auth/TokenManager.d.ts.map +1 -0
  13. package/dist/auth/TokenManager.js +164 -0
  14. package/dist/auth/TokenManager.js.map +1 -0
  15. package/dist/client/GitScrumClient.d.ts +1002 -0
  16. package/dist/client/GitScrumClient.d.ts.map +1 -0
  17. package/dist/client/GitScrumClient.js +1835 -0
  18. package/dist/client/GitScrumClient.js.map +1 -0
  19. package/dist/context/ActiveContext.d.ts +79 -0
  20. package/dist/context/ActiveContext.d.ts.map +1 -0
  21. package/dist/context/ActiveContext.js +151 -0
  22. package/dist/context/ActiveContext.js.map +1 -0
  23. package/dist/index.d.ts +15 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +152 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/tools/activity.d.ts +12 -0
  28. package/dist/tools/activity.d.ts.map +1 -0
  29. package/dist/tools/activity.js +106 -0
  30. package/dist/tools/activity.js.map +1 -0
  31. package/dist/tools/analytics.d.ts +11 -0
  32. package/dist/tools/analytics.d.ts.map +1 -0
  33. package/dist/tools/analytics.js +117 -0
  34. package/dist/tools/analytics.js.map +1 -0
  35. package/dist/tools/auth.d.ts +17 -0
  36. package/dist/tools/auth.d.ts.map +1 -0
  37. package/dist/tools/auth.js +173 -0
  38. package/dist/tools/auth.js.map +1 -0
  39. package/dist/tools/budget.d.ts +12 -0
  40. package/dist/tools/budget.d.ts.map +1 -0
  41. package/dist/tools/budget.js +109 -0
  42. package/dist/tools/budget.js.map +1 -0
  43. package/dist/tools/clientflow.d.ts +12 -0
  44. package/dist/tools/clientflow.d.ts.map +1 -0
  45. package/dist/tools/clientflow.js +476 -0
  46. package/dist/tools/clientflow.js.map +1 -0
  47. package/dist/tools/comments.d.ts +11 -0
  48. package/dist/tools/comments.d.ts.map +1 -0
  49. package/dist/tools/comments.js +99 -0
  50. package/dist/tools/comments.js.map +1 -0
  51. package/dist/tools/discussions.d.ts +12 -0
  52. package/dist/tools/discussions.d.ts.map +1 -0
  53. package/dist/tools/discussions.js +200 -0
  54. package/dist/tools/discussions.js.map +1 -0
  55. package/dist/tools/epics.d.ts +11 -0
  56. package/dist/tools/epics.d.ts.map +1 -0
  57. package/dist/tools/epics.js +122 -0
  58. package/dist/tools/epics.js.map +1 -0
  59. package/dist/tools/labels.d.ts +11 -0
  60. package/dist/tools/labels.d.ts.map +1 -0
  61. package/dist/tools/labels.js +138 -0
  62. package/dist/tools/labels.js.map +1 -0
  63. package/dist/tools/notes.d.ts +11 -0
  64. package/dist/tools/notes.d.ts.map +1 -0
  65. package/dist/tools/notes.js +201 -0
  66. package/dist/tools/notes.js.map +1 -0
  67. package/dist/tools/projects.d.ts +12 -0
  68. package/dist/tools/projects.d.ts.map +1 -0
  69. package/dist/tools/projects.js +272 -0
  70. package/dist/tools/projects.js.map +1 -0
  71. package/dist/tools/search.d.ts +17 -0
  72. package/dist/tools/search.d.ts.map +1 -0
  73. package/dist/tools/search.js +56 -0
  74. package/dist/tools/search.js.map +1 -0
  75. package/dist/tools/shared/actionHandler.d.ts +67 -0
  76. package/dist/tools/shared/actionHandler.d.ts.map +1 -0
  77. package/dist/tools/shared/actionHandler.js +98 -0
  78. package/dist/tools/shared/actionHandler.js.map +1 -0
  79. package/dist/tools/shared/initModules.d.ts +6 -0
  80. package/dist/tools/shared/initModules.d.ts.map +1 -0
  81. package/dist/tools/shared/initModules.js +166 -0
  82. package/dist/tools/shared/initModules.js.map +1 -0
  83. package/dist/tools/shared/toolRegistry.d.ts +45 -0
  84. package/dist/tools/shared/toolRegistry.d.ts.map +1 -0
  85. package/dist/tools/shared/toolRegistry.js +59 -0
  86. package/dist/tools/shared/toolRegistry.js.map +1 -0
  87. package/dist/tools/sprints.d.ts +11 -0
  88. package/dist/tools/sprints.d.ts.map +1 -0
  89. package/dist/tools/sprints.js +271 -0
  90. package/dist/tools/sprints.js.map +1 -0
  91. package/dist/tools/standup.d.ts +11 -0
  92. package/dist/tools/standup.d.ts.map +1 -0
  93. package/dist/tools/standup.js +89 -0
  94. package/dist/tools/standup.js.map +1 -0
  95. package/dist/tools/taskTypes.d.ts +11 -0
  96. package/dist/tools/taskTypes.d.ts.map +1 -0
  97. package/dist/tools/taskTypes.js +132 -0
  98. package/dist/tools/taskTypes.js.map +1 -0
  99. package/dist/tools/tasks.d.ts +12 -0
  100. package/dist/tools/tasks.d.ts.map +1 -0
  101. package/dist/tools/tasks.js +470 -0
  102. package/dist/tools/tasks.js.map +1 -0
  103. package/dist/tools/timeTracking.d.ts +11 -0
  104. package/dist/tools/timeTracking.d.ts.map +1 -0
  105. package/dist/tools/timeTracking.js +174 -0
  106. package/dist/tools/timeTracking.js.map +1 -0
  107. package/dist/tools/userStories.d.ts +11 -0
  108. package/dist/tools/userStories.d.ts.map +1 -0
  109. package/dist/tools/userStories.js +166 -0
  110. package/dist/tools/userStories.js.map +1 -0
  111. package/dist/tools/wiki.d.ts +11 -0
  112. package/dist/tools/wiki.d.ts.map +1 -0
  113. package/dist/tools/wiki.js +154 -0
  114. package/dist/tools/wiki.js.map +1 -0
  115. package/dist/tools/workflows.d.ts +11 -0
  116. package/dist/tools/workflows.d.ts.map +1 -0
  117. package/dist/tools/workflows.js +144 -0
  118. package/dist/tools/workflows.js.map +1 -0
  119. package/package.json +89 -0
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Shared Action Handler Pattern
3
+ *
4
+ * Eliminates switch statements with a clean, extensible map-based approach.
5
+ * Each tool defines its actions as a record of handlers.
6
+ */
7
+ import type { GitScrumClient } from "../../client/GitScrumClient.js";
8
+ /** Standard MCP response */
9
+ export type ToolResponse = {
10
+ content: Array<{
11
+ type: "text";
12
+ text: string;
13
+ }>;
14
+ isError?: boolean;
15
+ };
16
+ /** Handler function signature */
17
+ export type ActionHandler<TArgs = Record<string, unknown>> = (client: GitScrumClient, args: TArgs) => Promise<ToolResponse>;
18
+ /** Map of action name to handler */
19
+ export type ActionHandlerMap<TArgs = Record<string, unknown>> = Record<string, ActionHandler<TArgs>>;
20
+ /** Execute action from handler map with error handling */
21
+ export declare function executeAction(handlers: ActionHandlerMap<any>, action: string, client: GitScrumClient, args: any): Promise<ToolResponse>;
22
+ /** Context object for LLM memory */
23
+ export interface ResponseContext {
24
+ company_slug?: string;
25
+ project_slug?: string;
26
+ sprint_slug?: string;
27
+ user_story_slug?: string;
28
+ task_uuid?: string;
29
+ }
30
+ /** Success response */
31
+ export declare function success(text: string, context?: ResponseContext): ToolResponse;
32
+ /** Error response */
33
+ export declare function error(message: string): ToolResponse;
34
+ /** Validation error */
35
+ export declare function required(field: string): ToolResponse;
36
+ /** Normalize color input: supports named colors and hex codes (strips #) */
37
+ export declare function normalizeColor(color: string): string;
38
+ interface ResolvedContext {
39
+ company_slug: string;
40
+ project_slug: string;
41
+ }
42
+ /**
43
+ * Intelligently resolves project context from partial information.
44
+ * STATELESS: Performs API calls to find missing data.
45
+ *
46
+ * Resolution strategies (in order):
47
+ * 1. Both company_slug and project_slug provided → use as-is
48
+ * 2. Only project identifier provided (name OR slug) → search and get both slugs
49
+ * 3. Only company_slug provided → return null (need project)
50
+ * 4. Nothing provided → return null
51
+ *
52
+ * The key insight: project_slug might be:
53
+ * - An actual slug (e.g., "my-project")
54
+ * - A project name (e.g., "My Project")
55
+ * - A UUID
56
+ *
57
+ * We try to find it by searching.
58
+ *
59
+ * @returns ResolvedContext or null if resolution failed
60
+ */
61
+ export declare function resolveProjectContext(client: GitScrumClient, args: {
62
+ company_slug?: string;
63
+ project_slug?: string;
64
+ project_name?: string;
65
+ }): Promise<ResolvedContext | null>;
66
+ export {};
67
+ //# sourceMappingURL=actionHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actionHandler.d.ts","sourceRoot":"","sources":["../../../src/tools/shared/actionHandler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,4BAA4B;AAC5B,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAC;AAEF,iCAAiC;AACjC,MAAM,MAAM,aAAa,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAC3D,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,KAAK,KACR,OAAO,CAAC,YAAY,CAAC,CAAC;AAE3B,oCAAoC;AACpC,MAAM,MAAM,gBAAgB,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CACpE,MAAM,EACN,aAAa,CAAC,KAAK,CAAC,CACrB,CAAC;AAEF,0DAA0D;AAE1D,wBAAsB,aAAa,CACjC,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAC/B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,cAAc,EAEtB,IAAI,EAAE,GAAG,GACR,OAAO,CAAC,YAAY,CAAC,CAYvB;AAMD,oCAAoC;AACpC,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD,uBAAuB;AACvB,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,YAAY,CAG7E;AAED,qBAAqB;AACrB,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAEnD;AAED,uBAAuB;AACvB,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAEpD;AAYD,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGpD;AAMD,UAAU,eAAe;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE;IACJ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACA,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CA6BjC"}
@@ -0,0 +1,98 @@
1
+ /** Execute action from handler map with error handling */
2
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
3
+ export async function executeAction(handlers, action, client,
4
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+ args) {
6
+ const handler = handlers[action];
7
+ if (!handler) {
8
+ return error(`Unknown action: ${action}`);
9
+ }
10
+ try {
11
+ return await handler(client, args);
12
+ }
13
+ catch (err) {
14
+ return error(err instanceof Error ? err.message : String(err));
15
+ }
16
+ }
17
+ /** Format context block for LLM (user doesn't need to see, LLM uses for next calls) */
18
+ function formatContext(ctx) {
19
+ const parts = Object.entries(ctx)
20
+ .filter(([, v]) => v !== undefined && v !== null)
21
+ .map(([k, v]) => `${k}: ${v}`);
22
+ if (parts.length === 0)
23
+ return "";
24
+ return `\n\n---context\n${parts.join("\n")}\n---`;
25
+ }
26
+ /** Success response */
27
+ export function success(text, context) {
28
+ const contextBlock = context ? formatContext(context) : "";
29
+ return { content: [{ type: "text", text: text + contextBlock }] };
30
+ }
31
+ /** Error response */
32
+ export function error(message) {
33
+ return { content: [{ type: "text", text: message }], isError: true };
34
+ }
35
+ /** Validation error */
36
+ export function required(field) {
37
+ return { content: [{ type: "text", text: `Error: ${field} required` }], isError: true };
38
+ }
39
+ // ============================================================================
40
+ // Color Helper
41
+ // ============================================================================
42
+ const COLOR_MAP = {
43
+ gray: "8B949E", blue: "58A6FF", red: "F85149", green: "3FB950",
44
+ yellow: "D29922", purple: "A371F7", coral: "FF7B72", amber: "F2CC60",
45
+ sky: "79C0FF", lime: "56D364",
46
+ };
47
+ /** Normalize color input: supports named colors and hex codes (strips #) */
48
+ export function normalizeColor(color) {
49
+ const lower = color.toLowerCase().replace("#", "");
50
+ return COLOR_MAP[lower] || lower.toUpperCase();
51
+ }
52
+ /**
53
+ * Intelligently resolves project context from partial information.
54
+ * STATELESS: Performs API calls to find missing data.
55
+ *
56
+ * Resolution strategies (in order):
57
+ * 1. Both company_slug and project_slug provided → use as-is
58
+ * 2. Only project identifier provided (name OR slug) → search and get both slugs
59
+ * 3. Only company_slug provided → return null (need project)
60
+ * 4. Nothing provided → return null
61
+ *
62
+ * The key insight: project_slug might be:
63
+ * - An actual slug (e.g., "my-project")
64
+ * - A project name (e.g., "My Project")
65
+ * - A UUID
66
+ *
67
+ * We try to find it by searching.
68
+ *
69
+ * @returns ResolvedContext or null if resolution failed
70
+ */
71
+ export async function resolveProjectContext(client, args) {
72
+ // Case 1: Both provided - use as-is (trust the caller)
73
+ if (args.company_slug && args.project_slug) {
74
+ return {
75
+ company_slug: args.company_slug,
76
+ project_slug: args.project_slug,
77
+ };
78
+ }
79
+ // Determine what project identifier we have
80
+ const projectIdentifier = args.project_slug || args.project_name;
81
+ // Case 2: We have a project identifier (name, slug, or uuid) - search for it
82
+ if (projectIdentifier) {
83
+ const found = await client.findProjectByName(projectIdentifier, args.company_slug);
84
+ if (found) {
85
+ return {
86
+ company_slug: found.company_slug,
87
+ project_slug: found.project_slug,
88
+ };
89
+ }
90
+ // If we have company_slug but couldn't find project, return null
91
+ // The project identifier might be wrong
92
+ return null;
93
+ }
94
+ // Case 3: Only company_slug, no project - can't resolve full context
95
+ // Case 4: Nothing provided
96
+ return null;
97
+ }
98
+ //# sourceMappingURL=actionHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actionHandler.js","sourceRoot":"","sources":["../../../src/tools/shared/actionHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Registers all tool modules with the central registry.
3
+ * Call this once during server initialization.
4
+ */
5
+ export declare function initializeToolModules(): void;
6
+ //# sourceMappingURL=initModules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initModules.d.ts","sourceRoot":"","sources":["../../../src/tools/shared/initModules.ts"],"names":[],"mappings":"AA8JA;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CA2B5C"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Tool Modules Initialization
3
+ *
4
+ * Centralizes all tool module registration.
5
+ * This provides a single source of truth for tool routing.
6
+ */
7
+ import { registerModule } from './toolRegistry.js';
8
+ // Tool handlers
9
+ import { registerAuthTools, handleAuthTool } from '../auth.js';
10
+ import { registerTaskTools, handleTaskTool } from '../tasks.js';
11
+ import { registerProjectTools, handleProjectTool } from '../projects.js';
12
+ import { registerSprintTools, handleSprintTool } from '../sprints.js';
13
+ import { registerTimeTrackingTools, handleTimeTrackingTool } from '../timeTracking.js';
14
+ import { registerUserStoryTools, handleUserStoryTool } from '../userStories.js';
15
+ import { registerWikiTools, handleWikiTool } from '../wiki.js';
16
+ import { registerSearchTools, handleSearchTool } from '../search.js';
17
+ import { registerNoteTools, handleNoteTool } from '../notes.js';
18
+ import { registerWorkflowTools, handleWorkflowTool } from '../workflows.js';
19
+ import { registerLabelTools, handleLabelTool } from '../labels.js';
20
+ import { registerTaskTypeTools, handleTaskTypeTool } from '../taskTypes.js';
21
+ import { registerClientFlowTools, handleClientFlowTool } from '../clientflow.js';
22
+ import { registerStandupTools, handleStandupTool } from '../standup.js';
23
+ import { registerCommentTools, handleCommentTool } from '../comments.js';
24
+ import { registerAnalyticsTools, handleAnalyticsTool } from '../analytics.js';
25
+ import { registerEpicTools, handleEpicTool } from '../epics.js';
26
+ import { registerDiscussionTools, handleDiscussionTool } from '../discussions.js';
27
+ import { registerActivityTools, handleActivityTool } from '../activity.js';
28
+ import { registerBudgetTools, handleBudgetTool } from '../budget.js';
29
+ // ============================================================================
30
+ // Tool Module Definitions
31
+ // ============================================================================
32
+ const authModule = {
33
+ tools: registerAuthTools(),
34
+ handler: handleAuthTool,
35
+ handles: ['auth_login', 'auth_complete', 'auth_status', 'auth_logout'],
36
+ };
37
+ const taskModule = {
38
+ tools: registerTaskTools(),
39
+ handler: handleTaskTool,
40
+ handles: ['task'],
41
+ };
42
+ const projectModule = {
43
+ tools: registerProjectTools(),
44
+ handler: handleProjectTool,
45
+ handles: ['project', 'workspace'],
46
+ };
47
+ const sprintModule = {
48
+ tools: registerSprintTools(),
49
+ handler: handleSprintTool,
50
+ handles: ['sprint'],
51
+ };
52
+ const timeTrackingModule = {
53
+ tools: registerTimeTrackingTools(),
54
+ handler: handleTimeTrackingTool,
55
+ handles: ['time'],
56
+ };
57
+ const userStoryModule = {
58
+ tools: registerUserStoryTools(),
59
+ handler: handleUserStoryTool,
60
+ handles: ['user_story'],
61
+ };
62
+ const wikiModule = {
63
+ tools: registerWikiTools(),
64
+ handler: handleWikiTool,
65
+ handles: ['wiki'],
66
+ };
67
+ const searchModule = {
68
+ tools: registerSearchTools(),
69
+ handler: handleSearchTool,
70
+ handles: ['search'],
71
+ };
72
+ const noteModule = {
73
+ tools: registerNoteTools(),
74
+ handler: handleNoteTool,
75
+ handles: ['note', 'note_folder'],
76
+ };
77
+ const workflowModule = {
78
+ tools: registerWorkflowTools(),
79
+ handler: handleWorkflowTool,
80
+ handles: ['workflow'],
81
+ };
82
+ const labelModule = {
83
+ tools: registerLabelTools(),
84
+ handler: handleLabelTool,
85
+ handles: ['label'],
86
+ };
87
+ const taskTypeModule = {
88
+ tools: registerTaskTypeTools(),
89
+ handler: handleTaskTypeTool,
90
+ handles: ['task_type'],
91
+ };
92
+ const clientFlowModule = {
93
+ tools: registerClientFlowTools(),
94
+ handler: handleClientFlowTool,
95
+ handles: ['client', 'invoice', 'proposal', 'clientflow_dashboard', 'clientflow_cross_workspace'],
96
+ };
97
+ const standupModule = {
98
+ tools: registerStandupTools(),
99
+ handler: handleStandupTool,
100
+ handles: ['standup'],
101
+ };
102
+ const commentModule = {
103
+ tools: registerCommentTools(),
104
+ handler: handleCommentTool,
105
+ handles: ['comment'],
106
+ };
107
+ const analyticsModule = {
108
+ tools: registerAnalyticsTools(),
109
+ handler: handleAnalyticsTool,
110
+ handles: ['analytics'],
111
+ };
112
+ const epicModule = {
113
+ tools: registerEpicTools(),
114
+ handler: handleEpicTool,
115
+ handles: ['epic'],
116
+ };
117
+ const discussionModule = {
118
+ tools: registerDiscussionTools(),
119
+ handler: handleDiscussionTool,
120
+ handles: ['discussion'],
121
+ };
122
+ const activityModule = {
123
+ tools: registerActivityTools(),
124
+ handler: handleActivityTool,
125
+ handles: ['activity'],
126
+ };
127
+ const budgetModule = {
128
+ tools: registerBudgetTools(),
129
+ handler: handleBudgetTool,
130
+ handles: ['budget'],
131
+ };
132
+ // ============================================================================
133
+ // Initialize All Modules
134
+ // ============================================================================
135
+ /**
136
+ * Registers all tool modules with the central registry.
137
+ * Call this once during server initialization.
138
+ */
139
+ export function initializeToolModules() {
140
+ const modules = [
141
+ authModule,
142
+ taskModule,
143
+ projectModule,
144
+ sprintModule,
145
+ timeTrackingModule,
146
+ userStoryModule,
147
+ wikiModule,
148
+ searchModule,
149
+ noteModule,
150
+ workflowModule,
151
+ labelModule,
152
+ taskTypeModule,
153
+ clientFlowModule,
154
+ standupModule,
155
+ commentModule,
156
+ analyticsModule,
157
+ epicModule,
158
+ discussionModule,
159
+ activityModule,
160
+ budgetModule,
161
+ ];
162
+ for (const module of modules) {
163
+ registerModule(module);
164
+ }
165
+ }
166
+ //# sourceMappingURL=initModules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initModules.js","sourceRoot":"","sources":["../../../src/tools/shared/initModules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Tool Registry - Centralized Tool Registration & Routing
3
+ *
4
+ * Eliminates if/else chains with a declarative map-based approach.
5
+ * Each tool module registers itself here.
6
+ */
7
+ import type { Tool } from "@modelcontextprotocol/sdk/types.js";
8
+ import type { GitScrumClient } from "../../client/GitScrumClient.js";
9
+ import type { ToolResponse } from "./actionHandler.js";
10
+ /** Standardized handler signature for all tools */
11
+ export type ToolHandler = (client: GitScrumClient, name: string, args: Record<string, unknown>) => Promise<ToolResponse>;
12
+ /** Tool module definition */
13
+ export interface ToolModule {
14
+ /** Tool definitions for MCP */
15
+ tools: Tool[];
16
+ /** Handler function */
17
+ handler: ToolHandler;
18
+ /** Tool names this module handles */
19
+ handles: string[];
20
+ }
21
+ /**
22
+ * Register a tool module
23
+ */
24
+ export declare function registerModule(module: ToolModule): void;
25
+ /**
26
+ * Get all registered tools
27
+ */
28
+ export declare function getAllTools(): Tool[];
29
+ /**
30
+ * Route a tool call to the appropriate handler
31
+ */
32
+ export declare function routeToolCall(client: GitScrumClient, name: string, args: Record<string, unknown>): Promise<ToolResponse>;
33
+ /**
34
+ * Check if a tool is registered
35
+ */
36
+ export declare function isToolRegistered(name: string): boolean;
37
+ /**
38
+ * Get handler for a specific tool
39
+ */
40
+ export declare function getHandler(name: string): ToolHandler | undefined;
41
+ /**
42
+ * Clear all registered tools (for testing)
43
+ */
44
+ export declare function clearRegistry(): void;
45
+ //# sourceMappingURL=toolRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolRegistry.d.ts","sourceRoot":"","sources":["../../../src/tools/shared/toolRegistry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD,mDAAmD;AACnD,MAAM,MAAM,WAAW,GAAG,CACxB,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,OAAO,CAAC,YAAY,CAAC,CAAC;AAE3B,6BAA6B;AAC7B,MAAM,WAAW,UAAU;IACzB,+BAA+B;IAC/B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,uBAAuB;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,qCAAqC;IACrC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAYD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAQvD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,EAAE,CAEpC;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,YAAY,CAAC,CAYvB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAEhE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAGpC"}
@@ -0,0 +1,59 @@
1
+ // ============================================================================
2
+ // Registry
3
+ // ============================================================================
4
+ /** Map of tool name → handler */
5
+ const handlerMap = new Map();
6
+ /** All registered tools */
7
+ const allTools = [];
8
+ /**
9
+ * Register a tool module
10
+ */
11
+ export function registerModule(module) {
12
+ // Add tools to collection
13
+ allTools.push(...module.tools);
14
+ // Map each handled name to the handler
15
+ for (const name of module.handles) {
16
+ handlerMap.set(name, module.handler);
17
+ }
18
+ }
19
+ /**
20
+ * Get all registered tools
21
+ */
22
+ export function getAllTools() {
23
+ return allTools;
24
+ }
25
+ /**
26
+ * Route a tool call to the appropriate handler
27
+ */
28
+ export async function routeToolCall(client, name, args) {
29
+ // Direct lookup
30
+ const handler = handlerMap.get(name);
31
+ if (handler) {
32
+ return handler(client, name, args);
33
+ }
34
+ // Unknown tool
35
+ return {
36
+ content: [{ type: "text", text: `Unknown tool: ${name}` }],
37
+ isError: true,
38
+ };
39
+ }
40
+ /**
41
+ * Check if a tool is registered
42
+ */
43
+ export function isToolRegistered(name) {
44
+ return handlerMap.has(name);
45
+ }
46
+ /**
47
+ * Get handler for a specific tool
48
+ */
49
+ export function getHandler(name) {
50
+ return handlerMap.get(name);
51
+ }
52
+ /**
53
+ * Clear all registered tools (for testing)
54
+ */
55
+ export function clearRegistry() {
56
+ handlerMap.clear();
57
+ allTools.length = 0;
58
+ }
59
+ //# sourceMappingURL=toolRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolRegistry.js","sourceRoot":"","sources":["../../../src/tools/shared/toolRegistry.ts"],"names":[],"mappings":"AA+BA,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,iCAAiC;AACjC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;AAElD,2BAA2B;AAC3B,MAAM,QAAQ,GAAW,EAAE,CAAC;AAE5B;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAkB;IAC/C,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE/B,uCAAuC;IACvC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAClC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAsB,EACtB,IAAY,EACZ,IAA6B;IAE7B,gBAAgB;IAChB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,eAAe;IACf,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC;QAC1D,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,UAAU,CAAC,KAAK,EAAE,CAAC;IACnB,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACtB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Sprint 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 registerSprintTools(): Tool[];
10
+ export declare function handleSprintTool(client: GitScrumClient, _name: string, args?: Record<string, unknown>): Promise<ToolResponse>;
11
+ //# sourceMappingURL=sprints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprints.d.ts","sourceRoot":"","sources":["../../src/tools/sprints.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,EAQL,KAAK,YAAY,EAElB,MAAM,2BAA2B,CAAC;AAMnC,wBAAgB,mBAAmB,IAAI,IAAI,EAAE,CAyE5C;AA2ND,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,OAAO,CAAC,YAAY,CAAC,CAGvB"}