mcp-spec-cli 1.0.9

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 (111) hide show
  1. package/README.md +49 -0
  2. package/api/spec-workflow.openapi.yaml +1305 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +151 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/features/check/analyzeStage.d.ts +20 -0
  8. package/dist/features/check/analyzeStage.d.ts.map +1 -0
  9. package/dist/features/check/analyzeStage.js +114 -0
  10. package/dist/features/check/analyzeStage.js.map +1 -0
  11. package/dist/features/check/checkWorkflow.d.ts +10 -0
  12. package/dist/features/check/checkWorkflow.d.ts.map +1 -0
  13. package/dist/features/check/checkWorkflow.js +92 -0
  14. package/dist/features/check/checkWorkflow.js.map +1 -0
  15. package/dist/features/check/generateNextDocument.d.ts +14 -0
  16. package/dist/features/check/generateNextDocument.d.ts.map +1 -0
  17. package/dist/features/check/generateNextDocument.js +64 -0
  18. package/dist/features/check/generateNextDocument.js.map +1 -0
  19. package/dist/features/confirm/confirmStage.d.ts +9 -0
  20. package/dist/features/confirm/confirmStage.d.ts.map +1 -0
  21. package/dist/features/confirm/confirmStage.js +101 -0
  22. package/dist/features/confirm/confirmStage.js.map +1 -0
  23. package/dist/features/executeWorkflow.d.ts +15 -0
  24. package/dist/features/executeWorkflow.d.ts.map +1 -0
  25. package/dist/features/executeWorkflow.js +97 -0
  26. package/dist/features/executeWorkflow.js.map +1 -0
  27. package/dist/features/init/createRequirementsDoc.d.ts +11 -0
  28. package/dist/features/init/createRequirementsDoc.d.ts.map +1 -0
  29. package/dist/features/init/createRequirementsDoc.js +36 -0
  30. package/dist/features/init/createRequirementsDoc.js.map +1 -0
  31. package/dist/features/init/initWorkflow.d.ts +12 -0
  32. package/dist/features/init/initWorkflow.d.ts.map +1 -0
  33. package/dist/features/init/initWorkflow.js +103 -0
  34. package/dist/features/init/initWorkflow.js.map +1 -0
  35. package/dist/features/shared/SpecManager.d.ts +33 -0
  36. package/dist/features/shared/SpecManager.d.ts.map +1 -0
  37. package/dist/features/shared/SpecManager.js +103 -0
  38. package/dist/features/shared/SpecManager.js.map +1 -0
  39. package/dist/features/shared/confirmationStatus.d.ts +24 -0
  40. package/dist/features/shared/confirmationStatus.d.ts.map +1 -0
  41. package/dist/features/shared/confirmationStatus.js +69 -0
  42. package/dist/features/shared/confirmationStatus.js.map +1 -0
  43. package/dist/features/shared/documentAnalyzer.d.ts +18 -0
  44. package/dist/features/shared/documentAnalyzer.d.ts.map +1 -0
  45. package/dist/features/shared/documentAnalyzer.js +34 -0
  46. package/dist/features/shared/documentAnalyzer.js.map +1 -0
  47. package/dist/features/shared/documentStatus.d.ts +18 -0
  48. package/dist/features/shared/documentStatus.d.ts.map +1 -0
  49. package/dist/features/shared/documentStatus.js +66 -0
  50. package/dist/features/shared/documentStatus.js.map +1 -0
  51. package/dist/features/shared/documentTemplates.d.ts +8 -0
  52. package/dist/features/shared/documentTemplates.d.ts.map +1 -0
  53. package/dist/features/shared/documentTemplates.js +89 -0
  54. package/dist/features/shared/documentTemplates.js.map +1 -0
  55. package/dist/features/shared/documentUtils.d.ts +9 -0
  56. package/dist/features/shared/documentUtils.d.ts.map +1 -0
  57. package/dist/features/shared/documentUtils.js +38 -0
  58. package/dist/features/shared/documentUtils.js.map +1 -0
  59. package/dist/features/shared/mcpTypes.d.ts +83 -0
  60. package/dist/features/shared/mcpTypes.d.ts.map +1 -0
  61. package/dist/features/shared/mcpTypes.js +41 -0
  62. package/dist/features/shared/mcpTypes.js.map +1 -0
  63. package/dist/features/shared/openApiLoader.d.ts +88 -0
  64. package/dist/features/shared/openApiLoader.d.ts.map +1 -0
  65. package/dist/features/shared/openApiLoader.js +166 -0
  66. package/dist/features/shared/openApiLoader.js.map +1 -0
  67. package/dist/features/shared/openApiTypes.d.ts +101 -0
  68. package/dist/features/shared/openApiTypes.d.ts.map +1 -0
  69. package/dist/features/shared/openApiTypes.js +4 -0
  70. package/dist/features/shared/openApiTypes.js.map +1 -0
  71. package/dist/features/shared/progressCalculator.d.ts +22 -0
  72. package/dist/features/shared/progressCalculator.d.ts.map +1 -0
  73. package/dist/features/shared/progressCalculator.js +45 -0
  74. package/dist/features/shared/progressCalculator.js.map +1 -0
  75. package/dist/features/shared/responseBuilder.d.ts +13 -0
  76. package/dist/features/shared/responseBuilder.d.ts.map +1 -0
  77. package/dist/features/shared/responseBuilder.js +303 -0
  78. package/dist/features/shared/responseBuilder.js.map +1 -0
  79. package/dist/features/shared/taskGuidanceTemplate.d.ts +22 -0
  80. package/dist/features/shared/taskGuidanceTemplate.d.ts.map +1 -0
  81. package/dist/features/shared/taskGuidanceTemplate.js +145 -0
  82. package/dist/features/shared/taskGuidanceTemplate.js.map +1 -0
  83. package/dist/features/shared/taskParser.d.ts +17 -0
  84. package/dist/features/shared/taskParser.d.ts.map +1 -0
  85. package/dist/features/shared/taskParser.js +259 -0
  86. package/dist/features/shared/taskParser.js.map +1 -0
  87. package/dist/features/shared/typeGuards.d.ts +54 -0
  88. package/dist/features/shared/typeGuards.d.ts.map +1 -0
  89. package/dist/features/shared/typeGuards.js +96 -0
  90. package/dist/features/shared/typeGuards.js.map +1 -0
  91. package/dist/features/skip/skipStage.d.ts +9 -0
  92. package/dist/features/skip/skipStage.d.ts.map +1 -0
  93. package/dist/features/skip/skipStage.js +122 -0
  94. package/dist/features/skip/skipStage.js.map +1 -0
  95. package/dist/features/task/completeTask.d.ts +13 -0
  96. package/dist/features/task/completeTask.d.ts.map +1 -0
  97. package/dist/features/task/completeTask.js +362 -0
  98. package/dist/features/task/completeTask.js.map +1 -0
  99. package/dist/index.d.ts +7 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +51 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/logger.d.ts +6 -0
  104. package/dist/logger.d.ts.map +1 -0
  105. package/dist/logger.js +23 -0
  106. package/dist/logger.js.map +1 -0
  107. package/dist/tools/specTools.d.ts +3 -0
  108. package/dist/tools/specTools.d.ts.map +1 -0
  109. package/dist/tools/specTools.js +107 -0
  110. package/dist/tools/specTools.js.map +1 -0
  111. package/package.json +44 -0
@@ -0,0 +1,107 @@
1
+ import { z } from 'zod';
2
+ import { execFile } from 'child_process';
3
+ import { promisify } from 'util';
4
+ import { fileURLToPath } from 'url';
5
+ import { dirname, join } from 'path';
6
+ const execFileAsync = promisify(execFile);
7
+ const __filename = fileURLToPath(import.meta.url);
8
+ const __dirname = dirname(__filename);
9
+ const isTs = __filename.endsWith('.ts');
10
+ const cliCmd = isTs ? 'npx' : 'node';
11
+ const cliPath = join(__dirname, '..', isTs ? 'cli.ts' : 'cli.js');
12
+ async function runCli(args) {
13
+ try {
14
+ const execArgs = isTs ? ['tsx', cliPath, ...args] : [cliPath, ...args];
15
+ const { stdout, stderr } = await execFileAsync(cliCmd, execArgs, {
16
+ cwd: process.cwd(),
17
+ env: process.env
18
+ });
19
+ if (stderr && stderr.trim().length > 0 && !stdout) {
20
+ throw new Error(stderr);
21
+ }
22
+ return stdout.trim();
23
+ }
24
+ catch (error) {
25
+ if (error.stdout)
26
+ return error.stdout.trim();
27
+ throw new Error(error.message || String(error));
28
+ }
29
+ }
30
+ export function registerSpecTools(server) {
31
+ server.registerTool('sc_status', {
32
+ description: 'Get a health check of the active project and discover next steps.',
33
+ inputSchema: {
34
+ feature: z.string().optional().describe('Feature name (optional)')
35
+ }
36
+ }, async (args) => {
37
+ try {
38
+ const cliArgs = ['status'];
39
+ if (args.feature)
40
+ cliArgs.push('--feature', args.feature);
41
+ const result = await runCli(cliArgs);
42
+ return { content: [{ type: 'text', text: result }] };
43
+ }
44
+ catch (error) {
45
+ return { content: [{ type: 'text', text: `Error: ${error.message}` }], isError: true };
46
+ }
47
+ });
48
+ server.registerTool('sc_help', {
49
+ description: 'Learn how to use the CLI tools and get deep documentation.',
50
+ inputSchema: {
51
+ topic: z.string().optional().describe('Topic to get help for')
52
+ }
53
+ }, async (args) => {
54
+ try {
55
+ const cliArgs = ['help'];
56
+ if (args.topic)
57
+ cliArgs.push(args.topic);
58
+ const result = await runCli(cliArgs);
59
+ return { content: [{ type: 'text', text: result }] };
60
+ }
61
+ catch (error) {
62
+ return { content: [{ type: 'text', text: `Error: ${error.message}` }], isError: true };
63
+ }
64
+ });
65
+ server.registerTool('sc_exec', {
66
+ description: 'The primary workhorse tool. Run `sc_help` for usage details.',
67
+ inputSchema: {
68
+ action: z.enum(['init', 'plan', 'todo']).describe('The action to perform'),
69
+ resource: z.string().optional().describe('The resource to act upon (e.g. "list", "start") for todo'),
70
+ flags: z.record(z.string()).optional().describe('Key-value pairs for flags (e.g. {"feature": "auth", "id": "1"})')
71
+ }
72
+ }, async (args) => {
73
+ try {
74
+ const cliArgs = ['exec', args.action];
75
+ if (args.resource)
76
+ cliArgs.push(args.resource);
77
+ if (args.flags) {
78
+ for (const [k, v] of Object.entries(args.flags)) {
79
+ cliArgs.push(`--${k}`, String(v));
80
+ }
81
+ }
82
+ const result = await runCli(cliArgs);
83
+ return { content: [{ type: 'text', text: result }] };
84
+ }
85
+ catch (error) {
86
+ return { content: [{ type: 'text', text: `Error: ${error.message}` }], isError: true };
87
+ }
88
+ });
89
+ server.registerTool('sc_verify', {
90
+ description: 'A dedicated tool to validate that the last action worked.',
91
+ inputSchema: {
92
+ feature: z.string().optional().describe('Feature name (optional)')
93
+ }
94
+ }, async (args) => {
95
+ try {
96
+ const cliArgs = ['verify'];
97
+ if (args.feature)
98
+ cliArgs.push('--feature', args.feature);
99
+ const result = await runCli(cliArgs);
100
+ return { content: [{ type: 'text', text: result }] };
101
+ }
102
+ catch (error) {
103
+ return { content: [{ type: 'text', text: `Error: ${error.message}` }], isError: true };
104
+ }
105
+ });
106
+ }
107
+ //# sourceMappingURL=specTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specTools.js","sourceRoot":"","sources":["../../src/tools/specTools.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "mcp-spec-cli",
3
+ "version": "1.0.9",
4
+ "description": "MCP server for managing spec workflow (requirements, design, implementation)",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "spec-cli": "dist/cli.js",
9
+ "mcp-spec-cli": "dist/cli.js",
10
+ "spec-mcp": "dist/index.js"
11
+ },
12
+ "files": [
13
+ "dist/**/*",
14
+ "api/**/*"
15
+ ],
16
+ "keywords": [
17
+ "mcp",
18
+ "workflow",
19
+ "spec",
20
+ "requirements",
21
+ "design",
22
+ "implementation",
23
+ "openapi"
24
+ ],
25
+ "author": "kingkongshot",
26
+ "license": "MIT",
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "git+https://github.com/kingkongshot/specs-workflow-mcp.git"
30
+ },
31
+ "bugs": {
32
+ "url": "https://github.com/kingkongshot/specs-workflow-mcp/issues"
33
+ },
34
+ "homepage": "https://github.com/kingkongshot/specs-workflow-mcp#readme",
35
+ "dependencies": {
36
+ "@modelcontextprotocol/sdk": "^1.0.6",
37
+ "@types/js-yaml": "^4.0.9",
38
+ "js-yaml": "^4.1.0",
39
+ "zod": "^3.25.76"
40
+ },
41
+ "engines": {
42
+ "node": ">=18.0.0"
43
+ }
44
+ }