@specforge/mcp 2.0.1 → 2.0.3

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 (80) hide show
  1. package/dist/tools/core/admin.d.ts +7 -0
  2. package/dist/tools/core/admin.d.ts.map +1 -0
  3. package/dist/tools/core/admin.js +77 -0
  4. package/dist/tools/core/admin.js.map +1 -0
  5. package/dist/tools/core/bulk.d.ts +7 -0
  6. package/dist/tools/core/bulk.d.ts.map +1 -0
  7. package/dist/tools/core/bulk.js +125 -0
  8. package/dist/tools/core/bulk.js.map +1 -0
  9. package/dist/tools/core/context.d.ts +7 -0
  10. package/dist/tools/core/context.d.ts.map +1 -0
  11. package/dist/tools/core/context.js +75 -0
  12. package/dist/tools/core/context.js.map +1 -0
  13. package/dist/tools/core/dependency.d.ts +7 -0
  14. package/dist/tools/core/dependency.d.ts.map +1 -0
  15. package/dist/tools/core/dependency.js +74 -0
  16. package/dist/tools/core/dependency.js.map +1 -0
  17. package/dist/tools/core/epic.d.ts +7 -0
  18. package/dist/tools/core/epic.d.ts.map +1 -0
  19. package/dist/tools/core/epic.js +158 -0
  20. package/dist/tools/core/epic.js.map +1 -0
  21. package/dist/tools/core/help.d.ts +6 -0
  22. package/dist/tools/core/help.d.ts.map +1 -0
  23. package/dist/tools/core/help.js +112 -0
  24. package/dist/tools/core/help.js.map +1 -0
  25. package/dist/tools/core/index.d.ts +18 -0
  26. package/dist/tools/core/index.d.ts.map +1 -0
  27. package/dist/tools/core/index.js +20 -0
  28. package/dist/tools/core/index.js.map +1 -0
  29. package/dist/tools/core/job.d.ts +7 -0
  30. package/dist/tools/core/job.d.ts.map +1 -0
  31. package/dist/tools/core/job.js +50 -0
  32. package/dist/tools/core/job.js.map +1 -0
  33. package/dist/tools/core/link.d.ts +7 -0
  34. package/dist/tools/core/link.d.ts.map +1 -0
  35. package/dist/tools/core/link.js +76 -0
  36. package/dist/tools/core/link.js.map +1 -0
  37. package/dist/tools/core/lookup.d.ts +7 -0
  38. package/dist/tools/core/lookup.d.ts.map +1 -0
  39. package/dist/tools/core/lookup.js +107 -0
  40. package/dist/tools/core/lookup.js.map +1 -0
  41. package/dist/tools/core/pattern.d.ts +7 -0
  42. package/dist/tools/core/pattern.d.ts.map +1 -0
  43. package/dist/tools/core/pattern.js +61 -0
  44. package/dist/tools/core/pattern.js.map +1 -0
  45. package/dist/tools/core/project.d.ts +7 -0
  46. package/dist/tools/core/project.d.ts.map +1 -0
  47. package/dist/tools/core/project.js +60 -0
  48. package/dist/tools/core/project.js.map +1 -0
  49. package/dist/tools/core/router.d.ts +3 -0
  50. package/dist/tools/core/router.d.ts.map +1 -0
  51. package/dist/tools/core/router.js +16 -0
  52. package/dist/tools/core/router.js.map +1 -0
  53. package/dist/tools/core/session.d.ts +7 -0
  54. package/dist/tools/core/session.d.ts.map +1 -0
  55. package/dist/tools/core/session.js +117 -0
  56. package/dist/tools/core/session.js.map +1 -0
  57. package/dist/tools/core/specification.d.ts +7 -0
  58. package/dist/tools/core/specification.d.ts.map +1 -0
  59. package/dist/tools/core/specification.js +107 -0
  60. package/dist/tools/core/specification.js.map +1 -0
  61. package/dist/tools/core/ticket.d.ts +7 -0
  62. package/dist/tools/core/ticket.d.ts.map +1 -0
  63. package/dist/tools/core/ticket.js +213 -0
  64. package/dist/tools/core/ticket.js.map +1 -0
  65. package/dist/tools/core/types.d.ts +13 -0
  66. package/dist/tools/core/types.d.ts.map +1 -0
  67. package/dist/tools/core/types.js +3 -0
  68. package/dist/tools/core/types.js.map +1 -0
  69. package/dist/tools/core/workflow.d.ts +7 -0
  70. package/dist/tools/core/workflow.d.ts.map +1 -0
  71. package/dist/tools/core/workflow.js +63 -0
  72. package/dist/tools/core/workflow.js.map +1 -0
  73. package/dist/tools/index.d.ts.map +1 -1
  74. package/dist/tools/index.js +49 -0
  75. package/dist/tools/index.js.map +1 -1
  76. package/dist/types/index.d.ts +38 -1
  77. package/dist/types/index.d.ts.map +1 -1
  78. package/dist/types/index.js +20 -0
  79. package/dist/types/index.js.map +1 -1
  80. package/package.json +1 -1
@@ -0,0 +1,112 @@
1
+ // mcp/src/tools/core/help.ts
2
+ import { createOperationRouter } from './router.js';
3
+ // Tool registry for help system
4
+ const CONSOLIDATED_TOOLS = [
5
+ { name: 'ticket', description: 'Manage tickets', operations: ['create', 'get', 'update', 'list', 'search'] },
6
+ { name: 'epic', description: 'Manage epics', operations: ['create', 'get', 'update', 'list', 'lookup'] },
7
+ { name: 'specification', description: 'Manage specifications', operations: ['create', 'get', 'update', 'import', 'list'] },
8
+ { name: 'project', description: 'Manage projects', operations: ['get', 'list', 'lookup'] },
9
+ { name: 'session', description: 'Manage work sessions', operations: ['start', 'complete', 'progress', 'end', 'report'] },
10
+ { name: 'context', description: 'Get and manage context', operations: ['working', 'implementation', 'set'] },
11
+ { name: 'dependency', description: 'Manage ticket dependencies', operations: ['add', 'remove', 'tree'] },
12
+ { name: 'bulk', description: 'Bulk operations', operations: ['create_tickets', 'update_tickets', 'add_dependencies'] },
13
+ { name: 'lookup', description: 'Look up entities', operations: ['ticket', 'epic', 'specification', 'project', 'tickets_by_status'] },
14
+ { name: 'workflow', description: 'Get workflow info', operations: ['next_actionable', 'blocked', 'critical_path'] },
15
+ { name: 'pattern', description: 'Manage patterns', operations: ['get', 'set'] },
16
+ { name: 'job', description: 'Manage async jobs', operations: ['status', 'cancel'] },
17
+ { name: 'link', description: 'Link external resources', operations: ['commit', 'pull_request'] },
18
+ { name: 'admin', description: 'Admin utilities', operations: ['reset_tickets', 'validate_counts'] },
19
+ { name: 'help', description: 'Get help', operations: ['tools', 'operations', 'examples'] },
20
+ ];
21
+ const TOOL_EXAMPLES = {
22
+ ticket: [
23
+ { description: 'Create a ticket', call: { operation: 'create', epicId: 'epic-123', title: 'Fix bug', priority: 'high' } },
24
+ { description: 'Get a ticket', call: { operation: 'get', ticketId: 'ticket-456' } },
25
+ { description: 'Update status', call: { operation: 'update', ticketId: 'ticket-456', status: 'done' } },
26
+ { description: 'List tickets', call: { operation: 'list', epicId: 'epic-123' } },
27
+ { description: 'Search tickets', call: { operation: 'search', query: 'authentication', projectId: 'proj-1' } },
28
+ ],
29
+ epic: [
30
+ { description: 'Create an epic', call: { operation: 'create', specificationId: 'spec-123', title: 'Auth', description: 'Auth epic', objective: 'Implement auth' } },
31
+ { description: 'Get an epic', call: { operation: 'get', epicId: 'epic-456' } },
32
+ ],
33
+ session: [
34
+ { description: 'Start working', call: { operation: 'start', ticketId: 'ticket-123' } },
35
+ { description: 'Report progress', call: { operation: 'progress', ticketId: 'ticket-123', progress: 50 } },
36
+ { description: 'Complete work', call: { operation: 'complete', ticketId: 'ticket-123', summary: 'Fixed the bug' } },
37
+ ],
38
+ bulk: [
39
+ { description: 'Create multiple tickets', call: { operation: 'create_tickets', epicId: 'epic-1', tickets: [{ title: 'Task 1' }, { title: 'Task 2' }] } },
40
+ ],
41
+ };
42
+ export const helpTool = {
43
+ name: 'help',
44
+ description: `Get help and documentation. Operations:
45
+ - tools: List all available tools
46
+ - operations: List operations for a tool
47
+ - examples: Show usage examples`,
48
+ inputSchema: {
49
+ type: 'object',
50
+ properties: {
51
+ operation: {
52
+ type: 'string',
53
+ enum: ['tools', 'operations', 'examples'],
54
+ description: 'The operation to perform',
55
+ },
56
+ tool: { type: 'string', description: 'Tool name for operations/examples' },
57
+ },
58
+ required: ['operation'],
59
+ },
60
+ };
61
+ function validateRequired(args, ...fields) {
62
+ for (const field of fields) {
63
+ if (args[field] === undefined || args[field] === null || args[field] === '') {
64
+ throw new Error(`${field} is required`);
65
+ }
66
+ }
67
+ }
68
+ export function createHelpOperations() {
69
+ return {
70
+ tools: async (_args, _userId) => {
71
+ return {
72
+ tools: CONSOLIDATED_TOOLS,
73
+ count: CONSOLIDATED_TOOLS.length,
74
+ };
75
+ },
76
+ operations: async (args, _userId) => {
77
+ validateRequired(args, 'tool');
78
+ const toolName = args.tool;
79
+ const tool = CONSOLIDATED_TOOLS.find((t) => t.name === toolName);
80
+ if (!tool) {
81
+ const validTools = CONSOLIDATED_TOOLS.map((t) => t.name).join(', ');
82
+ throw new Error(`Unknown tool '${toolName}'. Valid tools: ${validTools}`);
83
+ }
84
+ return {
85
+ tool: tool.name,
86
+ description: tool.description,
87
+ operations: tool.operations,
88
+ };
89
+ },
90
+ examples: async (args, _userId) => {
91
+ validateRequired(args, 'tool');
92
+ const toolName = args.tool;
93
+ const examples = TOOL_EXAMPLES[toolName];
94
+ if (!examples) {
95
+ return {
96
+ tool: toolName,
97
+ examples: [],
98
+ message: `No examples available for '${toolName}'`,
99
+ };
100
+ }
101
+ return {
102
+ tool: toolName,
103
+ examples,
104
+ };
105
+ },
106
+ };
107
+ }
108
+ export function createHelpHandler() {
109
+ const operations = createHelpOperations();
110
+ return createOperationRouter('help', operations);
111
+ }
112
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../../src/tools/core/help.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export * from './types.js';
2
+ export * from './router.js';
3
+ export * from './ticket.js';
4
+ export * from './epic.js';
5
+ export * from './specification.js';
6
+ export * from './project.js';
7
+ export * from './session.js';
8
+ export * from './context.js';
9
+ export * from './dependency.js';
10
+ export * from './bulk.js';
11
+ export * from './lookup.js';
12
+ export * from './workflow.js';
13
+ export * from './pattern.js';
14
+ export * from './job.js';
15
+ export * from './link.js';
16
+ export * from './admin.js';
17
+ export * from './help.js';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/core/index.ts"],"names":[],"mappings":"AAEA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,20 @@
1
+ // mcp/src/tools/core/index.ts
2
+ export * from './types.js';
3
+ export * from './router.js';
4
+ export * from './ticket.js';
5
+ export * from './epic.js';
6
+ export * from './specification.js';
7
+ export * from './project.js';
8
+ export * from './session.js';
9
+ export * from './context.js';
10
+ export * from './dependency.js';
11
+ export * from './bulk.js';
12
+ export * from './lookup.js';
13
+ export * from './workflow.js';
14
+ export * from './pattern.js';
15
+ export * from './job.js';
16
+ export * from './link.js';
17
+ export * from './admin.js';
18
+ export * from './help.js';
19
+ // Consolidated tools will be exported here
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/core/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAE9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAE1B,2CAA2C"}
@@ -0,0 +1,7 @@
1
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import { ConsolidatedToolArgs, OperationHandler } from './types.js';
3
+ import { ApiClient } from '../../client/api-client.js';
4
+ export declare const jobTool: Tool;
5
+ export declare function createJobOperations(apiClient: ApiClient): Record<string, OperationHandler>;
6
+ export declare function createJobHandler(apiClient: ApiClient): (args: ConsolidatedToolArgs, userId: string) => Promise<unknown>;
7
+ //# sourceMappingURL=job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../../src/tools/core/job.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,eAAO,MAAM,OAAO,EAAE,IAmBrB,CAAC;AAUF,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAgB1F;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,oEAGpD"}
@@ -0,0 +1,50 @@
1
+ // mcp/src/tools/core/job.ts
2
+ import { createOperationRouter } from './router.js';
3
+ export const jobTool = {
4
+ name: 'job',
5
+ description: `Manage async jobs. Operations:
6
+ - status: Get job status
7
+ - cancel: Cancel a running job`,
8
+ inputSchema: {
9
+ type: 'object',
10
+ properties: {
11
+ operation: {
12
+ type: 'string',
13
+ enum: ['status', 'cancel'],
14
+ description: 'The operation to perform',
15
+ },
16
+ jobId: { type: 'string', description: 'Job ID' },
17
+ // Response options
18
+ format: { type: 'string', enum: ['json', 'toon'] },
19
+ },
20
+ required: ['operation'],
21
+ },
22
+ };
23
+ function validateRequired(args, ...fields) {
24
+ for (const field of fields) {
25
+ if (args[field] === undefined || args[field] === null || args[field] === '') {
26
+ throw new Error(`${field} is required`);
27
+ }
28
+ }
29
+ }
30
+ export function createJobOperations(apiClient) {
31
+ return {
32
+ status: async (args, _userId) => {
33
+ validateRequired(args, 'jobId');
34
+ return await apiClient.call('get_job_status', {
35
+ jobId: args.jobId,
36
+ });
37
+ },
38
+ cancel: async (args, _userId) => {
39
+ validateRequired(args, 'jobId');
40
+ return await apiClient.call('cancel_job', {
41
+ jobId: args.jobId,
42
+ });
43
+ },
44
+ };
45
+ }
46
+ export function createJobHandler(apiClient) {
47
+ const operations = createJobOperations(apiClient);
48
+ return createOperationRouter('job', operations);
49
+ }
50
+ //# sourceMappingURL=job.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job.js","sourceRoot":"","sources":["../../../src/tools/core/job.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAG5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAIpD,MAAM,CAAC,MAAM,OAAO,GAAS;IAC3B,IAAI,EAAE,KAAK;IACX,WAAW,EAAE;;+BAEgB;IAC7B,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAC1B,WAAW,EAAE,0BAA0B;aACxC;YACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE;YAChD,mBAAmB;YACnB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;SACnD;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC;KACxB;CACF,CAAC;AAEF,SAAS,gBAAgB,CAAC,IAA0B,EAAE,GAAG,MAAgB;IACvE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,cAAc,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAoB;IACtD,OAAO;QACL,MAAM,EAAE,KAAK,EAAE,IAA0B,EAAE,OAAe,EAAE,EAAE;YAC5D,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAChC,OAAO,MAAM,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC5C,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,IAA0B,EAAE,OAAe,EAAE,EAAE;YAC5D,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAChC,OAAO,MAAM,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE;gBACxC,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,SAAoB;IACnD,MAAM,UAAU,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAClD,OAAO,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import { ConsolidatedToolArgs, OperationHandler } from './types.js';
3
+ import { ApiClient } from '../../client/api-client.js';
4
+ export declare const linkTool: Tool;
5
+ export declare function createLinkOperations(apiClient: ApiClient): Record<string, OperationHandler>;
6
+ export declare function createLinkHandler(apiClient: ApiClient): (args: ConsolidatedToolArgs, userId: string) => Promise<unknown>;
7
+ //# sourceMappingURL=link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../src/tools/core/link.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,eAAO,MAAM,QAAQ,EAAE,IA2BtB,CAAC;AAgBF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CA6B3F;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,oEAGrD"}
@@ -0,0 +1,76 @@
1
+ // mcp/src/tools/core/link.ts
2
+ import { createOperationRouter } from './router.js';
3
+ export const linkTool = {
4
+ name: 'link',
5
+ description: `Link external resources to tickets. Operations:
6
+ - commit: Link a git commit
7
+ - pull_request: Link a pull request`,
8
+ inputSchema: {
9
+ type: 'object',
10
+ properties: {
11
+ operation: {
12
+ type: 'string',
13
+ enum: ['commit', 'pull_request'],
14
+ description: 'The operation to perform',
15
+ },
16
+ ticketId: { type: 'string', description: 'Ticket ID' },
17
+ // For commit
18
+ sha: { type: 'string', description: 'Git commit SHA' },
19
+ message: { type: 'string', description: 'Commit message' },
20
+ // For pull_request
21
+ prNumber: { type: 'number', description: 'PR number' },
22
+ prUrl: { type: 'string', description: 'PR URL' },
23
+ title: { type: 'string', description: 'PR title' },
24
+ // Common
25
+ author: { type: 'string', description: 'Author' },
26
+ repoUrl: { type: 'string', description: 'Repository URL' },
27
+ },
28
+ required: ['operation', 'ticketId'],
29
+ },
30
+ };
31
+ function validateRequired(args, ...fields) {
32
+ for (const field of fields) {
33
+ if (args[field] === undefined || args[field] === null || args[field] === '') {
34
+ throw new Error(`${field} is required`);
35
+ }
36
+ }
37
+ }
38
+ function validateSha(sha) {
39
+ if (!/^[a-f0-9]{7,40}$/i.test(sha)) {
40
+ throw new Error('sha must be a valid git commit hash (7-40 hex characters)');
41
+ }
42
+ }
43
+ export function createLinkOperations(apiClient) {
44
+ return {
45
+ commit: async (args, _userId) => {
46
+ validateRequired(args, 'ticketId', 'sha');
47
+ validateSha(args.sha);
48
+ return await apiClient.call('link_commit', {
49
+ ticketId: args.ticketId,
50
+ sha: args.sha,
51
+ message: args.message,
52
+ author: args.author,
53
+ repoUrl: args.repoUrl,
54
+ });
55
+ },
56
+ pull_request: async (args, _userId) => {
57
+ validateRequired(args, 'ticketId');
58
+ if (!args.prNumber && !args.prUrl) {
59
+ throw new Error('Either prNumber or prUrl must be provided');
60
+ }
61
+ return await apiClient.call('link_pull_request', {
62
+ ticketId: args.ticketId,
63
+ prNumber: args.prNumber,
64
+ prUrl: args.prUrl,
65
+ title: args.title,
66
+ author: args.author,
67
+ repoUrl: args.repoUrl,
68
+ });
69
+ },
70
+ };
71
+ }
72
+ export function createLinkHandler(apiClient) {
73
+ const operations = createLinkOperations(apiClient);
74
+ return createOperationRouter('link', operations);
75
+ }
76
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../../src/tools/core/link.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import { ConsolidatedToolArgs, OperationHandler } from './types.js';
3
+ import { ApiClient } from '../../client/api-client.js';
4
+ export declare const lookupTool: Tool;
5
+ export declare function createLookupOperations(apiClient: ApiClient): Record<string, OperationHandler>;
6
+ export declare function createLookupHandler(apiClient: ApiClient): (args: ConsolidatedToolArgs, userId: string) => Promise<unknown>;
7
+ //# sourceMappingURL=lookup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lookup.d.ts","sourceRoot":"","sources":["../../../src/tools/core/lookup.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,eAAO,MAAM,UAAU,EAAE,IAiCxB,CAAC;AAUF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CA8D7F;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,oEAGvD"}
@@ -0,0 +1,107 @@
1
+ // mcp/src/tools/core/lookup.ts
2
+ import { createOperationRouter } from './router.js';
3
+ export const lookupTool = {
4
+ name: 'lookup',
5
+ description: `Look up entities by name or criteria. Operations:
6
+ - ticket: Find ticket by name or number
7
+ - epic: Find epic by name or number
8
+ - specification: Find specification by name
9
+ - project: Find project by name
10
+ - tickets_by_status: Look up multiple tickets by IDs`,
11
+ inputSchema: {
12
+ type: 'object',
13
+ properties: {
14
+ operation: {
15
+ type: 'string',
16
+ enum: ['ticket', 'epic', 'specification', 'project', 'tickets_by_status'],
17
+ description: 'The operation to perform',
18
+ },
19
+ // For ticket lookup
20
+ epicId: { type: 'string', description: 'Epic ID for ticket lookup' },
21
+ // For epic lookup
22
+ specificationId: { type: 'string', description: 'Specification ID for epic lookup' },
23
+ // For specification lookup
24
+ projectId: { type: 'string', description: 'Project ID for specification lookup' },
25
+ // For name-based lookups
26
+ name: { type: 'string', description: 'Name to search for' },
27
+ title: { type: 'string', description: 'Title to search for' },
28
+ number: { type: 'number', description: 'Number for ticket/epic lookup' },
29
+ // For tickets_by_status
30
+ ticketIds: { type: 'array', items: { type: 'string' }, description: 'Ticket IDs to look up' },
31
+ // Response options
32
+ format: { type: 'string', enum: ['json', 'toon'] },
33
+ },
34
+ required: ['operation'],
35
+ },
36
+ };
37
+ function validateRequired(args, ...fields) {
38
+ for (const field of fields) {
39
+ if (args[field] === undefined || args[field] === null || args[field] === '') {
40
+ throw new Error(`${field} is required`);
41
+ }
42
+ }
43
+ }
44
+ export function createLookupOperations(apiClient) {
45
+ return {
46
+ ticket: async (args, _userId) => {
47
+ validateRequired(args, 'epicId');
48
+ if (!args.title && args.number === undefined) {
49
+ throw new Error("Must provide either 'title' or 'number'");
50
+ }
51
+ return await apiClient.call('lookup_ticket', {
52
+ epicId: args.epicId,
53
+ title: args.title,
54
+ number: args.number,
55
+ format: args.format,
56
+ });
57
+ },
58
+ epic: async (args, _userId) => {
59
+ validateRequired(args, 'specificationId');
60
+ if (!args.title && args.number === undefined) {
61
+ throw new Error("Must provide either 'title' or 'number'");
62
+ }
63
+ return await apiClient.call('lookup_epic', {
64
+ specificationId: args.specificationId,
65
+ title: args.title,
66
+ number: args.number,
67
+ format: args.format,
68
+ });
69
+ },
70
+ specification: async (args, _userId) => {
71
+ validateRequired(args, 'projectId', 'title');
72
+ return await apiClient.call('lookup_specification', {
73
+ projectId: args.projectId,
74
+ title: args.title,
75
+ format: args.format,
76
+ });
77
+ },
78
+ project: async (args, _userId) => {
79
+ validateRequired(args, 'name');
80
+ return await apiClient.call('lookup_project', {
81
+ name: args.name,
82
+ format: args.format,
83
+ });
84
+ },
85
+ tickets_by_status: async (args, _userId) => {
86
+ validateRequired(args, 'ticketIds');
87
+ if (!Array.isArray(args.ticketIds)) {
88
+ throw new Error('ticketIds must be an array');
89
+ }
90
+ const MAX_BATCH_SIZE = 50;
91
+ if (args.ticketIds.length > MAX_BATCH_SIZE) {
92
+ throw new Error(`Maximum ${MAX_BATCH_SIZE} tickets per call`);
93
+ }
94
+ if (args.ticketIds.length === 0) {
95
+ return { tickets: [], notFound: [] };
96
+ }
97
+ return await apiClient.call('lookup_tickets_by_status', {
98
+ ticketIds: args.ticketIds,
99
+ });
100
+ },
101
+ };
102
+ }
103
+ export function createLookupHandler(apiClient) {
104
+ const operations = createLookupOperations(apiClient);
105
+ return createOperationRouter('lookup', operations);
106
+ }
107
+ //# sourceMappingURL=lookup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../../src/tools/core/lookup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import { ConsolidatedToolArgs, OperationHandler } from './types.js';
3
+ import { ApiClient } from '../../client/api-client.js';
4
+ export declare const patternTool: Tool;
5
+ export declare function createPatternOperations(apiClient: ApiClient): Record<string, OperationHandler>;
6
+ export declare function createPatternHandler(apiClient: ApiClient): (args: ConsolidatedToolArgs, userId: string) => Promise<unknown>;
7
+ //# sourceMappingURL=pattern.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../../../src/tools/core/pattern.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,eAAO,MAAM,WAAW,EAAE,IAsBzB,CAAC;AAUF,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAwB9F;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,oEAGxD"}
@@ -0,0 +1,61 @@
1
+ // mcp/src/tools/core/pattern.ts
2
+ import { createOperationRouter } from './router.js';
3
+ export const patternTool = {
4
+ name: 'pattern',
5
+ description: `Manage implementation patterns. Operations:
6
+ - get: Get patterns for a specification or ticket
7
+ - set: Set patterns for a specification/epic`,
8
+ inputSchema: {
9
+ type: 'object',
10
+ properties: {
11
+ operation: {
12
+ type: 'string',
13
+ enum: ['get', 'set'],
14
+ description: 'The operation to perform',
15
+ },
16
+ specificationId: { type: 'string', description: 'Specification ID' },
17
+ epicId: { type: 'string', description: 'Epic ID' },
18
+ ticketId: { type: 'string', description: 'Ticket ID for get operation' },
19
+ patterns: { type: 'object', description: 'Patterns to set' },
20
+ // Response options
21
+ format: { type: 'string', enum: ['json', 'toon'] },
22
+ },
23
+ required: ['operation'],
24
+ },
25
+ };
26
+ function validateRequired(args, ...fields) {
27
+ for (const field of fields) {
28
+ if (args[field] === undefined || args[field] === null || args[field] === '') {
29
+ throw new Error(`${field} is required`);
30
+ }
31
+ }
32
+ }
33
+ export function createPatternOperations(apiClient) {
34
+ return {
35
+ get: async (args, _userId) => {
36
+ if (!args.specificationId && !args.ticketId) {
37
+ throw new Error('Either specificationId or ticketId is required');
38
+ }
39
+ return await apiClient.call('get_patterns', {
40
+ specificationId: args.specificationId,
41
+ ticketId: args.ticketId,
42
+ });
43
+ },
44
+ set: async (args, _userId) => {
45
+ if (!args.specificationId && !args.epicId) {
46
+ throw new Error('Either specificationId or epicId is required');
47
+ }
48
+ validateRequired(args, 'patterns');
49
+ return await apiClient.call('set_patterns', {
50
+ specificationId: args.specificationId,
51
+ epicId: args.epicId,
52
+ patterns: args.patterns,
53
+ });
54
+ },
55
+ };
56
+ }
57
+ export function createPatternHandler(apiClient) {
58
+ const operations = createPatternOperations(apiClient);
59
+ return createOperationRouter('pattern', operations);
60
+ }
61
+ //# sourceMappingURL=pattern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../../src/tools/core/pattern.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAGhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAIpD,MAAM,CAAC,MAAM,WAAW,GAAS;IAC/B,IAAI,EAAE,SAAS;IACf,WAAW,EAAE;;6CAE8B;IAC3C,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;gBACpB,WAAW,EAAE,0BAA0B;aACxC;YACD,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;YACpE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE;YAClD,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;YACxE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;YAC5D,mBAAmB;YACnB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;SACnD;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC;KACxB;CACF,CAAC;AAEF,SAAS,gBAAgB,CAAC,IAA0B,EAAE,GAAG,MAAgB;IACvE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,cAAc,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,SAAoB;IAC1D,OAAO;QACL,GAAG,EAAE,KAAK,EAAE,IAA0B,EAAE,OAAe,EAAE,EAAE;YACzD,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACpE,CAAC;YACD,OAAO,MAAM,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE;gBAC1C,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;QACL,CAAC;QAED,GAAG,EAAE,KAAK,EAAE,IAA0B,EAAE,OAAe,EAAE,EAAE;YACzD,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAClE,CAAC;YACD,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACnC,OAAO,MAAM,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE;gBAC1C,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAoB;IACvD,MAAM,UAAU,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACtD,OAAO,qBAAqB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import { ConsolidatedToolArgs, OperationHandler } from './types.js';
3
+ import { ApiClient } from '../../client/api-client.js';
4
+ export declare const projectTool: Tool;
5
+ export declare function createProjectOperations(apiClient: ApiClient): Record<string, OperationHandler>;
6
+ export declare function createProjectHandler(apiClient: ApiClient): (args: ConsolidatedToolArgs, userId: string) => Promise<unknown>;
7
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../../src/tools/core/project.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,eAAO,MAAM,WAAW,EAAE,IAyBzB,CAAC;AAUF,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAqB9F;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,oEAGxD"}
@@ -0,0 +1,60 @@
1
+ // mcp/src/tools/core/project.ts
2
+ import { createOperationRouter } from './router.js';
3
+ export const projectTool = {
4
+ name: 'project',
5
+ description: `Manage projects. Operations:
6
+ - get: Get project by ID
7
+ - list: List all projects
8
+ - lookup: Find project by name`,
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ operation: {
13
+ type: 'string',
14
+ enum: ['get', 'list', 'lookup'],
15
+ description: 'The operation to perform',
16
+ },
17
+ // For get
18
+ projectId: { type: 'string', description: 'Project ID' },
19
+ // For lookup
20
+ name: { type: 'string', description: 'Project name for lookup' },
21
+ // Response options
22
+ format: { type: 'string', enum: ['json', 'toon'] },
23
+ responseMode: { type: 'string', enum: ['full', 'minimal', 'summary', 'id-only'] },
24
+ include: { type: 'array', items: { type: 'string' } },
25
+ },
26
+ required: ['operation'],
27
+ },
28
+ };
29
+ function validateRequired(args, ...fields) {
30
+ for (const field of fields) {
31
+ if (args[field] === undefined || args[field] === null || args[field] === '') {
32
+ throw new Error(`${field} is required`);
33
+ }
34
+ }
35
+ }
36
+ export function createProjectOperations(apiClient) {
37
+ return {
38
+ get: async (args, _userId) => {
39
+ validateRequired(args, 'projectId');
40
+ return await apiClient.call('get_project', {
41
+ projectId: args.projectId,
42
+ });
43
+ },
44
+ list: async (_args, _userId) => {
45
+ return await apiClient.call('list_projects', {});
46
+ },
47
+ lookup: async (args, _userId) => {
48
+ validateRequired(args, 'name');
49
+ return await apiClient.call('lookup_project', {
50
+ name: args.name,
51
+ format: args.format,
52
+ });
53
+ },
54
+ };
55
+ }
56
+ export function createProjectHandler(apiClient) {
57
+ const operations = createProjectOperations(apiClient);
58
+ return createOperationRouter('project', operations);
59
+ }
60
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/tools/core/project.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAGhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAIpD,MAAM,CAAC,MAAM,WAAW,GAAS;IAC/B,IAAI,EAAE,SAAS;IACf,WAAW,EAAE;;;+BAGgB;IAC7B,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC;gBAC/B,WAAW,EAAE,0BAA0B;aACxC;YACD,UAAU;YACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;YACxD,aAAa;YACb,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;YAChE,mBAAmB;YACnB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;YAClD,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;YACjF,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;SACtD;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC;KACxB;CACF,CAAC;AAEF,SAAS,gBAAgB,CAAC,IAA0B,EAAE,GAAG,MAAgB;IACvE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,cAAc,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,SAAoB;IAC1D,OAAO;QACL,GAAG,EAAE,KAAK,EAAE,IAA0B,EAAE,OAAe,EAAE,EAAE;YACzD,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACpC,OAAO,MAAM,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE;gBACzC,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,EAAE,KAAK,EAAE,KAA2B,EAAE,OAAe,EAAE,EAAE;YAC3D,OAAO,MAAM,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,IAA0B,EAAE,OAAe,EAAE,EAAE;YAC5D,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC/B,OAAO,MAAM,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC5C,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAoB;IACvD,MAAM,UAAU,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACtD,OAAO,qBAAqB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ConsolidatedToolArgs, OperationHandler } from './types.js';
2
+ export declare function createOperationRouter(toolName: string, operations: Record<string, OperationHandler>): (args: ConsolidatedToolArgs, userId: string) => Promise<unknown>;
3
+ //# sourceMappingURL=router.d.ts.map