@stackguide/mcp-server 3.2.0 → 3.8.1

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 (177) hide show
  1. package/README.md +315 -9
  2. package/dist/config/persistence.d.ts +16 -0
  3. package/dist/config/persistence.d.ts.map +1 -1
  4. package/dist/config/persistence.js +53 -0
  5. package/dist/config/persistence.js.map +1 -1
  6. package/dist/handlers/analyze.d.ts +11 -0
  7. package/dist/handlers/analyze.d.ts.map +1 -0
  8. package/dist/handlers/analyze.js +274 -0
  9. package/dist/handlers/analyze.js.map +1 -0
  10. package/dist/handlers/config.d.ts +1 -8
  11. package/dist/handlers/config.d.ts.map +1 -1
  12. package/dist/handlers/config.js +7 -1
  13. package/dist/handlers/config.js.map +1 -1
  14. package/dist/handlers/context.d.ts +1 -5
  15. package/dist/handlers/context.d.ts.map +1 -1
  16. package/dist/handlers/context.js +7 -1
  17. package/dist/handlers/context.js.map +1 -1
  18. package/dist/handlers/cursor.d.ts +1 -7
  19. package/dist/handlers/cursor.d.ts.map +1 -1
  20. package/dist/handlers/cursor.js +7 -1
  21. package/dist/handlers/cursor.js.map +1 -1
  22. package/dist/handlers/custom-rule.d.ts +1 -11
  23. package/dist/handlers/custom-rule.d.ts.map +1 -1
  24. package/dist/handlers/custom-rule.js +7 -1
  25. package/dist/handlers/custom-rule.js.map +1 -1
  26. package/dist/handlers/docs.d.ts +1 -8
  27. package/dist/handlers/docs.d.ts.map +1 -1
  28. package/dist/handlers/docs.js +7 -1
  29. package/dist/handlers/docs.js.map +1 -1
  30. package/dist/handlers/generate.d.ts +1 -13
  31. package/dist/handlers/generate.d.ts.map +1 -1
  32. package/dist/handlers/generate.js +6 -3
  33. package/dist/handlers/generate.js.map +1 -1
  34. package/dist/handlers/health.d.ts +1 -8
  35. package/dist/handlers/health.d.ts.map +1 -1
  36. package/dist/handlers/health.js +11 -3
  37. package/dist/handlers/health.js.map +1 -1
  38. package/dist/handlers/help.d.ts +1 -5
  39. package/dist/handlers/help.d.ts.map +1 -1
  40. package/dist/handlers/help.js +7 -1
  41. package/dist/handlers/help.js.map +1 -1
  42. package/dist/handlers/index.d.ts +1 -0
  43. package/dist/handlers/index.d.ts.map +1 -1
  44. package/dist/handlers/index.js +1 -0
  45. package/dist/handlers/index.js.map +1 -1
  46. package/dist/handlers/knowledge.d.ts +1 -8
  47. package/dist/handlers/knowledge.d.ts.map +1 -1
  48. package/dist/handlers/knowledge.js +7 -1
  49. package/dist/handlers/knowledge.js.map +1 -1
  50. package/dist/handlers/prompts.d.ts +31 -0
  51. package/dist/handlers/prompts.d.ts.map +1 -0
  52. package/dist/handlers/prompts.js +225 -0
  53. package/dist/handlers/prompts.js.map +1 -0
  54. package/dist/handlers/resources.d.ts +27 -0
  55. package/dist/handlers/resources.d.ts.map +1 -0
  56. package/dist/handlers/resources.js +210 -0
  57. package/dist/handlers/resources.js.map +1 -0
  58. package/dist/handlers/review.d.ts.map +1 -1
  59. package/dist/handlers/review.js +18 -1
  60. package/dist/handlers/review.js.map +1 -1
  61. package/dist/handlers/rules.d.ts +1 -9
  62. package/dist/handlers/rules.d.ts.map +1 -1
  63. package/dist/handlers/rules.js +7 -1
  64. package/dist/handlers/rules.js.map +1 -1
  65. package/dist/handlers/setup.d.ts +1 -0
  66. package/dist/handlers/setup.d.ts.map +1 -1
  67. package/dist/handlers/setup.js +42 -0
  68. package/dist/handlers/setup.js.map +1 -1
  69. package/dist/index.d.ts +4 -2
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +29 -417
  72. package/dist/index.js.map +1 -1
  73. package/dist/router/index.d.ts +69 -0
  74. package/dist/router/index.d.ts.map +1 -0
  75. package/dist/router/index.js +151 -0
  76. package/dist/router/index.js.map +1 -0
  77. package/dist/services/ast/analyzer.d.ts +55 -0
  78. package/dist/services/ast/analyzer.d.ts.map +1 -0
  79. package/dist/services/ast/analyzer.js +268 -0
  80. package/dist/services/ast/analyzer.js.map +1 -0
  81. package/dist/services/ast/index.d.ts +10 -0
  82. package/dist/services/ast/index.d.ts.map +1 -0
  83. package/dist/services/ast/index.js +12 -0
  84. package/dist/services/ast/index.js.map +1 -0
  85. package/dist/services/ast/rules.d.ts +13 -0
  86. package/dist/services/ast/rules.d.ts.map +1 -0
  87. package/dist/services/ast/rules.js +358 -0
  88. package/dist/services/ast/rules.js.map +1 -0
  89. package/dist/services/ast/treeSitterParser.d.ts +54 -0
  90. package/dist/services/ast/treeSitterParser.d.ts.map +1 -0
  91. package/dist/services/ast/treeSitterParser.js +394 -0
  92. package/dist/services/ast/treeSitterParser.js.map +1 -0
  93. package/dist/services/ast/types.d.ts +167 -0
  94. package/dist/services/ast/types.d.ts.map +1 -0
  95. package/dist/services/ast/types.js +35 -0
  96. package/dist/services/ast/types.js.map +1 -0
  97. package/dist/services/codeAnalyzer.d.ts.map +1 -1
  98. package/dist/services/codeAnalyzer.js +43 -3
  99. package/dist/services/codeAnalyzer.js.map +1 -1
  100. package/dist/services/httpClient.d.ts +45 -0
  101. package/dist/services/httpClient.d.ts.map +1 -0
  102. package/dist/services/httpClient.js +309 -0
  103. package/dist/services/httpClient.js.map +1 -0
  104. package/dist/services/intelligence/configGenerator.d.ts +28 -0
  105. package/dist/services/intelligence/configGenerator.d.ts.map +1 -0
  106. package/dist/services/intelligence/configGenerator.js +404 -0
  107. package/dist/services/intelligence/configGenerator.js.map +1 -0
  108. package/dist/services/intelligence/dependencyAdvisor.d.ts +24 -0
  109. package/dist/services/intelligence/dependencyAdvisor.d.ts.map +1 -0
  110. package/dist/services/intelligence/dependencyAdvisor.js +404 -0
  111. package/dist/services/intelligence/dependencyAdvisor.js.map +1 -0
  112. package/dist/services/intelligence/index.d.ts +12 -0
  113. package/dist/services/intelligence/index.d.ts.map +1 -0
  114. package/dist/services/intelligence/index.js +16 -0
  115. package/dist/services/intelligence/index.js.map +1 -0
  116. package/dist/services/intelligence/projectFs.d.ts +11 -0
  117. package/dist/services/intelligence/projectFs.d.ts.map +1 -0
  118. package/dist/services/intelligence/projectFs.js +30 -0
  119. package/dist/services/intelligence/projectFs.js.map +1 -0
  120. package/dist/services/intelligence/projectIntelligence.d.ts +26 -0
  121. package/dist/services/intelligence/projectIntelligence.d.ts.map +1 -0
  122. package/dist/services/intelligence/projectIntelligence.js +344 -0
  123. package/dist/services/intelligence/projectIntelligence.js.map +1 -0
  124. package/dist/services/intelligence/structureAnalyzer.d.ts +27 -0
  125. package/dist/services/intelligence/structureAnalyzer.d.ts.map +1 -0
  126. package/dist/services/intelligence/structureAnalyzer.js +286 -0
  127. package/dist/services/intelligence/structureAnalyzer.js.map +1 -0
  128. package/dist/services/intelligence/templates.d.ts +22 -0
  129. package/dist/services/intelligence/templates.d.ts.map +1 -0
  130. package/dist/services/intelligence/templates.js +521 -0
  131. package/dist/services/intelligence/templates.js.map +1 -0
  132. package/dist/services/intelligence/types.d.ts +222 -0
  133. package/dist/services/intelligence/types.d.ts.map +1 -0
  134. package/dist/services/intelligence/types.js +7 -0
  135. package/dist/services/intelligence/types.js.map +1 -0
  136. package/dist/services/projectFs.d.ts +85 -0
  137. package/dist/services/projectFs.d.ts.map +1 -0
  138. package/dist/services/projectFs.js +287 -0
  139. package/dist/services/projectFs.js.map +1 -0
  140. package/dist/services/rulesEngine.d.ts +255 -0
  141. package/dist/services/rulesEngine.d.ts.map +1 -0
  142. package/dist/services/rulesEngine.js +483 -0
  143. package/dist/services/rulesEngine.js.map +1 -0
  144. package/dist/services/webDocumentation.d.ts +9 -0
  145. package/dist/services/webDocumentation.d.ts.map +1 -1
  146. package/dist/services/webDocumentation.js +144 -1
  147. package/dist/services/webDocumentation.js.map +1 -1
  148. package/dist/storage/index.d.ts +7 -0
  149. package/dist/storage/index.d.ts.map +1 -0
  150. package/dist/storage/index.js +7 -0
  151. package/dist/storage/index.js.map +1 -0
  152. package/dist/storage/sqlite.d.ts +92 -0
  153. package/dist/storage/sqlite.d.ts.map +1 -0
  154. package/dist/storage/sqlite.js +471 -0
  155. package/dist/storage/sqlite.js.map +1 -0
  156. package/dist/storage/types.d.ts +147 -0
  157. package/dist/storage/types.d.ts.map +1 -0
  158. package/dist/storage/types.js +13 -0
  159. package/dist/storage/types.js.map +1 -0
  160. package/dist/tools/definitions.d.ts +87 -0
  161. package/dist/tools/definitions.d.ts.map +1 -1
  162. package/dist/tools/definitions.js +34 -0
  163. package/dist/tools/definitions.js.map +1 -1
  164. package/dist/utils/logger.d.ts +11 -2
  165. package/dist/utils/logger.d.ts.map +1 -1
  166. package/dist/utils/logger.js +30 -2
  167. package/dist/utils/logger.js.map +1 -1
  168. package/dist/utils/validation.d.ts +3 -3
  169. package/dist/validation/index.d.ts +8 -0
  170. package/dist/validation/index.d.ts.map +1 -0
  171. package/dist/validation/index.js +19 -0
  172. package/dist/validation/index.js.map +1 -0
  173. package/dist/validation/schemas.d.ts +341 -0
  174. package/dist/validation/schemas.d.ts.map +1 -0
  175. package/dist/validation/schemas.js +244 -0
  176. package/dist/validation/schemas.js.map +1 -0
  177. package/package.json +9 -2
@@ -0,0 +1,341 @@
1
+ /**
2
+ * Zod Validation Schemas
3
+ * Centralized input validation for all MCP handlers
4
+ * @version 3.6.0
5
+ */
6
+ import { z } from 'zod';
7
+ /** Project type enum */
8
+ export declare const ProjectTypeSchema: z.ZodEnum<["react-typescript", "react-node", "vue-node", "nextjs", "nestjs", "express", "rails", "laravel", "golang", "rust", "python-fastapi", "python-django", "python-flask", "custom"]>;
9
+ export type ProjectType = z.infer<typeof ProjectTypeSchema>;
10
+ /** Severity level enum */
11
+ export declare const SeveritySchema: z.ZodEnum<["error", "warning", "info", "suggestion"]>;
12
+ export type Severity = z.infer<typeof SeveritySchema>;
13
+ /** File path validation */
14
+ export declare const FilePathSchema: z.ZodEffects<z.ZodString, string, string>;
15
+ /** URL validation */
16
+ export declare const UrlSchema: z.ZodString;
17
+ /** Safe string (no special chars that could cause issues) */
18
+ export declare const SafeStringSchema: z.ZodEffects<z.ZodString, string, string>;
19
+ /** Identifier (alphanumeric + dash/underscore) */
20
+ export declare const IdentifierSchema: z.ZodString;
21
+ /** setup handler input */
22
+ export declare const SetupInputSchema: z.ZodObject<{
23
+ type: z.ZodOptional<z.ZodEnum<["react-typescript", "react-node", "vue-node", "nextjs", "nestjs", "express", "rails", "laravel", "golang", "rust", "python-fastapi", "python-django", "python-flask", "custom"]>>;
24
+ path: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
25
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
26
+ type: z.ZodOptional<z.ZodEnum<["react-typescript", "react-node", "vue-node", "nextjs", "nestjs", "express", "rails", "laravel", "golang", "rust", "python-fastapi", "python-django", "python-flask", "custom"]>>;
27
+ path: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
28
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
29
+ type: z.ZodOptional<z.ZodEnum<["react-typescript", "react-node", "vue-node", "nextjs", "nestjs", "express", "rails", "laravel", "golang", "rust", "python-fastapi", "python-django", "python-flask", "custom"]>>;
30
+ path: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
31
+ }, z.ZodTypeAny, "passthrough">>;
32
+ export type SetupInput = z.infer<typeof SetupInputSchema>;
33
+ /** rules handler input */
34
+ export declare const RulesInputSchema: z.ZodObject<{
35
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["list", "search", "get", "select"]>>>;
36
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
37
+ ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
38
+ category: z.ZodOptional<z.ZodEnum<["security", "performance", "best-practices", "coding-standards", "architecture", "testing"]>>;
39
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
40
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["list", "search", "get", "select"]>>>;
41
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
42
+ ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
43
+ category: z.ZodOptional<z.ZodEnum<["security", "performance", "best-practices", "coding-standards", "architecture", "testing"]>>;
44
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
45
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["list", "search", "get", "select"]>>>;
46
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
47
+ ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
48
+ category: z.ZodOptional<z.ZodEnum<["security", "performance", "best-practices", "coding-standards", "architecture", "testing"]>>;
49
+ }, z.ZodTypeAny, "passthrough">>;
50
+ export type RulesInput = z.infer<typeof RulesInputSchema>;
51
+ /** knowledge handler input */
52
+ export declare const KnowledgeInputSchema: z.ZodObject<{
53
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["list", "search", "get"]>>>;
54
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
55
+ category: z.ZodOptional<z.ZodEnum<["patterns", "common-issues", "architecture", "workflows"]>>;
56
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
57
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["list", "search", "get"]>>>;
58
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
59
+ category: z.ZodOptional<z.ZodEnum<["patterns", "common-issues", "architecture", "workflows"]>>;
60
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
61
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["list", "search", "get"]>>>;
62
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
63
+ category: z.ZodOptional<z.ZodEnum<["patterns", "common-issues", "architecture", "workflows"]>>;
64
+ }, z.ZodTypeAny, "passthrough">>;
65
+ export type KnowledgeInput = z.infer<typeof KnowledgeInputSchema>;
66
+ /** review handler input */
67
+ export declare const ReviewInputSchema: z.ZodObject<{
68
+ file: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
69
+ url: z.ZodOptional<z.ZodString>;
70
+ project: z.ZodOptional<z.ZodBoolean>;
71
+ focus: z.ZodDefault<z.ZodOptional<z.ZodEnum<["all", "security", "performance", "architecture", "coding-standards"]>>>;
72
+ incremental: z.ZodOptional<z.ZodBoolean>;
73
+ maxDepth: z.ZodOptional<z.ZodNumber>;
74
+ maxFiles: z.ZodOptional<z.ZodNumber>;
75
+ useCache: z.ZodOptional<z.ZodBoolean>;
76
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
77
+ file: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
78
+ url: z.ZodOptional<z.ZodString>;
79
+ project: z.ZodOptional<z.ZodBoolean>;
80
+ focus: z.ZodDefault<z.ZodOptional<z.ZodEnum<["all", "security", "performance", "architecture", "coding-standards"]>>>;
81
+ incremental: z.ZodOptional<z.ZodBoolean>;
82
+ maxDepth: z.ZodOptional<z.ZodNumber>;
83
+ maxFiles: z.ZodOptional<z.ZodNumber>;
84
+ useCache: z.ZodOptional<z.ZodBoolean>;
85
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
86
+ file: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
87
+ url: z.ZodOptional<z.ZodString>;
88
+ project: z.ZodOptional<z.ZodBoolean>;
89
+ focus: z.ZodDefault<z.ZodOptional<z.ZodEnum<["all", "security", "performance", "architecture", "coding-standards"]>>>;
90
+ incremental: z.ZodOptional<z.ZodBoolean>;
91
+ maxDepth: z.ZodOptional<z.ZodNumber>;
92
+ maxFiles: z.ZodOptional<z.ZodNumber>;
93
+ useCache: z.ZodOptional<z.ZodBoolean>;
94
+ }, z.ZodTypeAny, "passthrough">>;
95
+ export type ReviewInput = z.infer<typeof ReviewInputSchema>;
96
+ /** context handler input */
97
+ export declare const ContextInputSchema: z.ZodObject<{
98
+ full: z.ZodOptional<z.ZodBoolean>;
99
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
100
+ full: z.ZodOptional<z.ZodBoolean>;
101
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
102
+ full: z.ZodOptional<z.ZodBoolean>;
103
+ }, z.ZodTypeAny, "passthrough">>;
104
+ export type ContextInput = z.infer<typeof ContextInputSchema>;
105
+ /** docs handler input */
106
+ export declare const DocsInputSchema: z.ZodObject<{
107
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["fetch", "search", "list", "get", "remove", "suggest"]>>>;
108
+ url: z.ZodOptional<z.ZodString>;
109
+ urls: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
110
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
111
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
112
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["fetch", "search", "list", "get", "remove", "suggest"]>>>;
113
+ url: z.ZodOptional<z.ZodString>;
114
+ urls: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
115
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
116
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
117
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["fetch", "search", "list", "get", "remove", "suggest"]>>>;
118
+ url: z.ZodOptional<z.ZodString>;
119
+ urls: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
120
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
121
+ }, z.ZodTypeAny, "passthrough">>;
122
+ export type DocsInput = z.infer<typeof DocsInputSchema>;
123
+ /** cursor handler input */
124
+ export declare const CursorInputSchema: z.ZodObject<{
125
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["browse", "search", "popular", "import", "categories"]>>>;
126
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
127
+ slug: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
128
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
129
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["browse", "search", "popular", "import", "categories"]>>>;
130
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
131
+ slug: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
132
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
133
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["browse", "search", "popular", "import", "categories"]>>>;
134
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
135
+ slug: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
136
+ }, z.ZodTypeAny, "passthrough">>;
137
+ export type CursorInput = z.infer<typeof CursorInputSchema>;
138
+ /** config handler input */
139
+ export declare const ConfigInputSchema: z.ZodObject<{
140
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["save", "load", "list", "delete", "export", "import"]>>>;
141
+ name: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
142
+ id: z.ZodOptional<z.ZodString>;
143
+ json: z.ZodOptional<z.ZodString>;
144
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
145
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["save", "load", "list", "delete", "export", "import"]>>>;
146
+ name: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
147
+ id: z.ZodOptional<z.ZodString>;
148
+ json: z.ZodOptional<z.ZodString>;
149
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
150
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["save", "load", "list", "delete", "export", "import"]>>>;
151
+ name: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
152
+ id: z.ZodOptional<z.ZodString>;
153
+ json: z.ZodOptional<z.ZodString>;
154
+ }, z.ZodTypeAny, "passthrough">>;
155
+ export type ConfigInput = z.infer<typeof ConfigInputSchema>;
156
+ /** custom-rule handler input */
157
+ export declare const CustomRuleInputSchema: z.ZodObject<{
158
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["create", "update", "delete", "list", "export", "import"]>>>;
159
+ name: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
160
+ content: z.ZodOptional<z.ZodString>;
161
+ category: z.ZodOptional<z.ZodEnum<["security", "performance", "best-practices", "coding-standards", "architecture"]>>;
162
+ id: z.ZodOptional<z.ZodString>;
163
+ json: z.ZodOptional<z.ZodString>;
164
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
165
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["create", "update", "delete", "list", "export", "import"]>>>;
166
+ name: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
167
+ content: z.ZodOptional<z.ZodString>;
168
+ category: z.ZodOptional<z.ZodEnum<["security", "performance", "best-practices", "coding-standards", "architecture"]>>;
169
+ id: z.ZodOptional<z.ZodString>;
170
+ json: z.ZodOptional<z.ZodString>;
171
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
172
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["create", "update", "delete", "list", "export", "import"]>>>;
173
+ name: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
174
+ content: z.ZodOptional<z.ZodString>;
175
+ category: z.ZodOptional<z.ZodEnum<["security", "performance", "best-practices", "coding-standards", "architecture"]>>;
176
+ id: z.ZodOptional<z.ZodString>;
177
+ json: z.ZodOptional<z.ZodString>;
178
+ }, z.ZodTypeAny, "passthrough">>;
179
+ export type CustomRuleInput = z.infer<typeof CustomRuleInputSchema>;
180
+ /** generate handler input */
181
+ export declare const GenerateInputSchema: z.ZodObject<{
182
+ type: z.ZodEnum<["component", "hook", "service", "test", "api", "model", "util"]>;
183
+ name: z.ZodString;
184
+ options: z.ZodOptional<z.ZodObject<{
185
+ typescript: z.ZodOptional<z.ZodBoolean>;
186
+ withTests: z.ZodOptional<z.ZodBoolean>;
187
+ withStyles: z.ZodOptional<z.ZodBoolean>;
188
+ framework: z.ZodOptional<z.ZodString>;
189
+ scanProject: z.ZodOptional<z.ZodBoolean>;
190
+ }, "strip", z.ZodTypeAny, {
191
+ typescript?: boolean | undefined;
192
+ withTests?: boolean | undefined;
193
+ withStyles?: boolean | undefined;
194
+ framework?: string | undefined;
195
+ scanProject?: boolean | undefined;
196
+ }, {
197
+ typescript?: boolean | undefined;
198
+ withTests?: boolean | undefined;
199
+ withStyles?: boolean | undefined;
200
+ framework?: string | undefined;
201
+ scanProject?: boolean | undefined;
202
+ }>>;
203
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
204
+ type: z.ZodEnum<["component", "hook", "service", "test", "api", "model", "util"]>;
205
+ name: z.ZodString;
206
+ options: z.ZodOptional<z.ZodObject<{
207
+ typescript: z.ZodOptional<z.ZodBoolean>;
208
+ withTests: z.ZodOptional<z.ZodBoolean>;
209
+ withStyles: z.ZodOptional<z.ZodBoolean>;
210
+ framework: z.ZodOptional<z.ZodString>;
211
+ scanProject: z.ZodOptional<z.ZodBoolean>;
212
+ }, "strip", z.ZodTypeAny, {
213
+ typescript?: boolean | undefined;
214
+ withTests?: boolean | undefined;
215
+ withStyles?: boolean | undefined;
216
+ framework?: string | undefined;
217
+ scanProject?: boolean | undefined;
218
+ }, {
219
+ typescript?: boolean | undefined;
220
+ withTests?: boolean | undefined;
221
+ withStyles?: boolean | undefined;
222
+ framework?: string | undefined;
223
+ scanProject?: boolean | undefined;
224
+ }>>;
225
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
226
+ type: z.ZodEnum<["component", "hook", "service", "test", "api", "model", "util"]>;
227
+ name: z.ZodString;
228
+ options: z.ZodOptional<z.ZodObject<{
229
+ typescript: z.ZodOptional<z.ZodBoolean>;
230
+ withTests: z.ZodOptional<z.ZodBoolean>;
231
+ withStyles: z.ZodOptional<z.ZodBoolean>;
232
+ framework: z.ZodOptional<z.ZodString>;
233
+ scanProject: z.ZodOptional<z.ZodBoolean>;
234
+ }, "strip", z.ZodTypeAny, {
235
+ typescript?: boolean | undefined;
236
+ withTests?: boolean | undefined;
237
+ withStyles?: boolean | undefined;
238
+ framework?: string | undefined;
239
+ scanProject?: boolean | undefined;
240
+ }, {
241
+ typescript?: boolean | undefined;
242
+ withTests?: boolean | undefined;
243
+ withStyles?: boolean | undefined;
244
+ framework?: string | undefined;
245
+ scanProject?: boolean | undefined;
246
+ }>>;
247
+ }, z.ZodTypeAny, "passthrough">>;
248
+ export type GenerateInput = z.infer<typeof GenerateInputSchema>;
249
+ /** health handler input */
250
+ export declare const HealthInputSchema: z.ZodObject<{
251
+ detailed: z.ZodOptional<z.ZodBoolean>;
252
+ path: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
253
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
254
+ detailed: z.ZodOptional<z.ZodBoolean>;
255
+ path: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
256
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
257
+ detailed: z.ZodOptional<z.ZodBoolean>;
258
+ path: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
259
+ }, z.ZodTypeAny, "passthrough">>;
260
+ export type HealthInput = z.infer<typeof HealthInputSchema>;
261
+ /** help handler input */
262
+ export declare const HelpInputSchema: z.ZodObject<{
263
+ topic: z.ZodDefault<z.ZodOptional<z.ZodEnum<["setup", "rules", "review", "cursor", "docs", "config", "generate", "health", "all"]>>>;
264
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
265
+ topic: z.ZodDefault<z.ZodOptional<z.ZodEnum<["setup", "rules", "review", "cursor", "docs", "config", "generate", "health", "all"]>>>;
266
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
267
+ topic: z.ZodDefault<z.ZodOptional<z.ZodEnum<["setup", "rules", "review", "cursor", "docs", "config", "generate", "health", "all"]>>>;
268
+ }, z.ZodTypeAny, "passthrough">>;
269
+ export type HelpInput = z.infer<typeof HelpInputSchema>;
270
+ /** analyze_code tool input */
271
+ export declare const AnalyzeCodeInputSchema: z.ZodObject<{
272
+ code: z.ZodString;
273
+ language: z.ZodOptional<z.ZodString>;
274
+ filePath: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
275
+ categories: z.ZodOptional<z.ZodArray<z.ZodEnum<["security", "performance", "best-practices", "maintainability", "architecture"]>, "many">>;
276
+ }, "strict", z.ZodTypeAny, {
277
+ code: string;
278
+ categories?: ("best-practices" | "security" | "performance" | "architecture" | "maintainability")[] | undefined;
279
+ language?: string | undefined;
280
+ filePath?: string | undefined;
281
+ }, {
282
+ code: string;
283
+ categories?: ("best-practices" | "security" | "performance" | "architecture" | "maintainability")[] | undefined;
284
+ language?: string | undefined;
285
+ filePath?: string | undefined;
286
+ }>;
287
+ export type AnalyzeCodeInput = z.infer<typeof AnalyzeCodeInputSchema>;
288
+ /** get_rules tool input */
289
+ export declare const GetRulesInputSchema: z.ZodObject<{
290
+ language: z.ZodOptional<z.ZodString>;
291
+ category: z.ZodOptional<z.ZodEnum<["security", "performance", "best-practices", "maintainability", "architecture"]>>;
292
+ enabled: z.ZodOptional<z.ZodBoolean>;
293
+ }, "strict", z.ZodTypeAny, {
294
+ category?: "best-practices" | "security" | "performance" | "architecture" | "maintainability" | undefined;
295
+ enabled?: boolean | undefined;
296
+ language?: string | undefined;
297
+ }, {
298
+ category?: "best-practices" | "security" | "performance" | "architecture" | "maintainability" | undefined;
299
+ enabled?: boolean | undefined;
300
+ language?: string | undefined;
301
+ }>;
302
+ export type GetRulesInput = z.infer<typeof GetRulesInputSchema>;
303
+ /** Result type for validation */
304
+ export type ValidationResult<T> = {
305
+ success: true;
306
+ data: T;
307
+ } | {
308
+ success: false;
309
+ error: string;
310
+ details?: z.ZodIssue[];
311
+ };
312
+ /**
313
+ * Validate input against a schema
314
+ */
315
+ export declare function validate<T>(schema: z.ZodSchema<T>, input: unknown): ValidationResult<T>;
316
+ /**
317
+ * Validate and throw on failure
318
+ */
319
+ export declare function validateOrThrow<T>(schema: z.ZodSchema<T>, input: unknown, context?: string): T;
320
+ /**
321
+ * Create a validated handler wrapper
322
+ */
323
+ export declare function withValidation<TInput, TOutput>(schema: z.ZodSchema<TInput>, handler: (input: TInput) => Promise<TOutput>): (input: unknown) => Promise<TOutput>;
324
+ /**
325
+ * Sanitize string for safe display
326
+ */
327
+ export declare function sanitizeForDisplay(input: string, maxLength?: number): string;
328
+ /**
329
+ * Sanitize file path
330
+ */
331
+ export declare function sanitizePath(input: string): string;
332
+ /**
333
+ * Sanitize identifier
334
+ */
335
+ export declare function sanitizeIdentifier(input: string): string;
336
+ export declare const HANDLER_SCHEMAS: Record<string, z.ZodSchema>;
337
+ /**
338
+ * Validate handler input by handler name
339
+ */
340
+ export declare function validateHandlerInput(handlerName: string, input: unknown): ValidationResult<unknown>;
341
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/validation/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,244 @@
1
+ /**
2
+ * Zod Validation Schemas
3
+ * Centralized input validation for all MCP handlers
4
+ * @version 3.6.0
5
+ */
6
+ import { z } from 'zod';
7
+ // ============================================================================
8
+ // Common Schemas
9
+ // ============================================================================
10
+ /** Project type enum */
11
+ export const ProjectTypeSchema = z.enum([
12
+ 'react-typescript',
13
+ 'react-node',
14
+ 'vue-node',
15
+ 'nextjs',
16
+ 'nestjs',
17
+ 'express',
18
+ 'rails',
19
+ 'laravel',
20
+ 'golang',
21
+ 'rust',
22
+ 'python-fastapi',
23
+ 'python-django',
24
+ 'python-flask',
25
+ 'custom'
26
+ ]);
27
+ /** Severity level enum */
28
+ export const SeveritySchema = z.enum(['error', 'warning', 'info', 'suggestion']);
29
+ /** File path validation */
30
+ export const FilePathSchema = z.string()
31
+ .min(1, 'File path cannot be empty')
32
+ .max(1024, 'File path too long')
33
+ .refine((path) => !path.includes('\0'), 'File path contains invalid characters');
34
+ /** URL validation */
35
+ export const UrlSchema = z.string()
36
+ .url('Invalid URL format')
37
+ .max(2048, 'URL too long');
38
+ /** Safe string (no special chars that could cause issues) */
39
+ export const SafeStringSchema = z.string()
40
+ .max(1000, 'String too long')
41
+ .transform(s => s.trim());
42
+ /** Identifier (alphanumeric + dash/underscore) */
43
+ export const IdentifierSchema = z.string()
44
+ .min(1, 'Identifier cannot be empty')
45
+ .max(100, 'Identifier too long')
46
+ .regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/, 'Invalid identifier format');
47
+ // ============================================================================
48
+ // Handler Input Schemas
49
+ // ============================================================================
50
+ /** setup handler input */
51
+ export const SetupInputSchema = z.object({
52
+ type: ProjectTypeSchema.optional(),
53
+ path: FilePathSchema.optional()
54
+ }).passthrough();
55
+ /** rules handler input */
56
+ export const RulesInputSchema = z.object({
57
+ action: z.enum(['list', 'search', 'get', 'select']).optional().default('list'),
58
+ query: SafeStringSchema.optional(),
59
+ ids: z.array(z.string().max(200)).optional(),
60
+ category: z.enum(['security', 'performance', 'best-practices', 'coding-standards', 'architecture', 'testing']).optional()
61
+ }).passthrough();
62
+ /** knowledge handler input */
63
+ export const KnowledgeInputSchema = z.object({
64
+ action: z.enum(['list', 'search', 'get']).optional().default('list'),
65
+ query: SafeStringSchema.optional(),
66
+ category: z.enum(['patterns', 'common-issues', 'architecture', 'workflows']).optional()
67
+ }).passthrough();
68
+ /** review handler input */
69
+ export const ReviewInputSchema = z.object({
70
+ file: FilePathSchema.optional(),
71
+ url: UrlSchema.optional(),
72
+ project: z.boolean().optional(),
73
+ focus: z.enum(['all', 'security', 'performance', 'architecture', 'coding-standards']).optional().default('all'),
74
+ incremental: z.boolean().optional(),
75
+ maxDepth: z.number().int().min(1).max(20).optional(),
76
+ maxFiles: z.number().int().min(1).optional(),
77
+ useCache: z.boolean().optional()
78
+ }).passthrough();
79
+ /** context handler input */
80
+ export const ContextInputSchema = z.object({
81
+ full: z.boolean().optional()
82
+ }).passthrough();
83
+ /** docs handler input */
84
+ export const DocsInputSchema = z.object({
85
+ action: z.enum(['fetch', 'search', 'list', 'get', 'remove', 'suggest']).optional().default('list'),
86
+ url: z.string().max(2048).optional(), // Can be URL or ID for get/remove
87
+ urls: z.array(UrlSchema).optional(),
88
+ query: SafeStringSchema.optional()
89
+ }).passthrough();
90
+ /** cursor handler input */
91
+ export const CursorInputSchema = z.object({
92
+ action: z.enum(['browse', 'search', 'popular', 'import', 'categories']).optional().default('categories'),
93
+ query: SafeStringSchema.optional(),
94
+ slug: SafeStringSchema.optional()
95
+ }).passthrough();
96
+ /** config handler input */
97
+ export const ConfigInputSchema = z.object({
98
+ action: z.enum(['save', 'load', 'list', 'delete', 'export', 'import']).optional().default('list'),
99
+ name: SafeStringSchema.optional(),
100
+ id: z.string().max(200).optional(),
101
+ json: z.string().max(100000).optional()
102
+ }).passthrough();
103
+ /** custom-rule handler input */
104
+ export const CustomRuleInputSchema = z.object({
105
+ action: z.enum(['create', 'update', 'delete', 'list', 'export', 'import']).optional().default('list'),
106
+ name: SafeStringSchema.optional(),
107
+ content: z.string().max(50000).optional(),
108
+ category: z.enum(['security', 'performance', 'best-practices', 'coding-standards', 'architecture']).optional(),
109
+ id: z.string().max(200).optional(),
110
+ json: z.string().max(100000).optional()
111
+ }).passthrough();
112
+ /** generate handler input */
113
+ export const GenerateInputSchema = z.object({
114
+ type: z.enum(['component', 'hook', 'service', 'test', 'api', 'model', 'util']),
115
+ name: z.string().min(1).max(100),
116
+ options: z.object({
117
+ typescript: z.boolean().optional(),
118
+ withTests: z.boolean().optional(),
119
+ withStyles: z.boolean().optional(),
120
+ framework: z.string().max(50).optional(),
121
+ scanProject: z.boolean().optional()
122
+ }).optional()
123
+ }).passthrough();
124
+ /** health handler input */
125
+ export const HealthInputSchema = z.object({
126
+ detailed: z.boolean().optional(),
127
+ path: FilePathSchema.optional()
128
+ }).passthrough();
129
+ /** help handler input */
130
+ export const HelpInputSchema = z.object({
131
+ topic: z.enum(['setup', 'rules', 'review', 'cursor', 'docs', 'config', 'generate', 'health', 'all']).optional().default('all')
132
+ }).passthrough();
133
+ // ============================================================================
134
+ // Tool Argument Schemas
135
+ // ============================================================================
136
+ /** analyze_code tool input */
137
+ export const AnalyzeCodeInputSchema = z.object({
138
+ code: z.string().min(1, 'Code cannot be empty').max(100000, 'Code too large'),
139
+ language: z.string().max(50).optional(),
140
+ filePath: FilePathSchema.optional(),
141
+ categories: z.array(z.enum(['security', 'performance', 'best-practices', 'maintainability', 'architecture'])).optional()
142
+ }).strict();
143
+ /** get_rules tool input */
144
+ export const GetRulesInputSchema = z.object({
145
+ language: z.string().max(50).optional(),
146
+ category: z.enum(['security', 'performance', 'best-practices', 'maintainability', 'architecture']).optional(),
147
+ enabled: z.boolean().optional()
148
+ }).strict();
149
+ /**
150
+ * Validate input against a schema
151
+ */
152
+ export function validate(schema, input) {
153
+ const result = schema.safeParse(input);
154
+ if (result.success) {
155
+ return { success: true, data: result.data };
156
+ }
157
+ const errorMessages = result.error.issues.map(issue => {
158
+ const path = issue.path.join('.');
159
+ return path ? `${path}: ${issue.message}` : issue.message;
160
+ });
161
+ return {
162
+ success: false,
163
+ error: errorMessages.join('; '),
164
+ details: result.error.issues
165
+ };
166
+ }
167
+ /**
168
+ * Validate and throw on failure
169
+ */
170
+ export function validateOrThrow(schema, input, context) {
171
+ const result = validate(schema, input);
172
+ if (!result.success) {
173
+ const prefix = context ? `${context}: ` : '';
174
+ throw new Error(`${prefix}${result.error}`);
175
+ }
176
+ return result.data;
177
+ }
178
+ /**
179
+ * Create a validated handler wrapper
180
+ */
181
+ export function withValidation(schema, handler) {
182
+ return async (input) => {
183
+ const validated = validateOrThrow(schema, input);
184
+ return handler(validated);
185
+ };
186
+ }
187
+ // ============================================================================
188
+ // Sanitization Utilities
189
+ // ============================================================================
190
+ /**
191
+ * Sanitize string for safe display
192
+ */
193
+ export function sanitizeForDisplay(input, maxLength = 1000) {
194
+ return input
195
+ .slice(0, maxLength)
196
+ .replace(/[\x00-\x1F\x7F]/g, '') // Remove control characters
197
+ .trim();
198
+ }
199
+ /**
200
+ * Sanitize file path
201
+ */
202
+ export function sanitizePath(input) {
203
+ return input
204
+ .replace(/\.\./g, '') // Remove directory traversal
205
+ .replace(/^\/+/, '/') // Normalize leading slashes
206
+ .replace(/\\/g, '/'); // Normalize backslashes
207
+ }
208
+ /**
209
+ * Sanitize identifier
210
+ */
211
+ export function sanitizeIdentifier(input) {
212
+ return input
213
+ .replace(/[^a-zA-Z0-9_-]/g, '-')
214
+ .replace(/^-+|-+$/g, '')
215
+ .slice(0, 100);
216
+ }
217
+ // ============================================================================
218
+ // Schema Registry (for dynamic validation)
219
+ // ============================================================================
220
+ export const HANDLER_SCHEMAS = {
221
+ 'setup': SetupInputSchema,
222
+ 'rules': RulesInputSchema,
223
+ 'knowledge': KnowledgeInputSchema,
224
+ 'review': ReviewInputSchema,
225
+ 'context': ContextInputSchema,
226
+ 'docs': DocsInputSchema,
227
+ 'cursor': CursorInputSchema,
228
+ 'config': ConfigInputSchema,
229
+ 'custom-rule': CustomRuleInputSchema,
230
+ 'generate': GenerateInputSchema,
231
+ 'health': HealthInputSchema,
232
+ 'help': HelpInputSchema
233
+ };
234
+ /**
235
+ * Validate handler input by handler name
236
+ */
237
+ export function validateHandlerInput(handlerName, input) {
238
+ const schema = HANDLER_SCHEMAS[handlerName];
239
+ if (!schema) {
240
+ return { success: true, data: input }; // No schema, pass through
241
+ }
242
+ return validate(schema, input);
243
+ }
244
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/validation/schemas.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stackguide/mcp-server",
3
- "version": "3.2.0",
3
+ "version": "3.8.1",
4
4
  "description": "MCP Server for dynamic language and framework context loading - Compatible with Cursor and GitHub Copilot",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -34,10 +34,17 @@
34
34
  "license": "GPL-3.0",
35
35
  "dependencies": {
36
36
  "@modelcontextprotocol/sdk": "^1.0.0",
37
+ "better-sqlite3": "^12.5.0",
38
+ "tree-sitter": "^0.25.0",
39
+ "tree-sitter-go": "^0.25.0",
40
+ "tree-sitter-python": "^0.25.0",
41
+ "tree-sitter-rust": "^0.24.0",
42
+ "tree-sitter-typescript": "^0.23.2",
37
43
  "ts-morph": "^27.0.2",
38
- "zod": "^3.23.8"
44
+ "zod": "^3.25.76"
39
45
  },
40
46
  "devDependencies": {
47
+ "@types/better-sqlite3": "^7.6.13",
41
48
  "@types/node": "^20.10.0",
42
49
  "@vitest/coverage-v8": "^4.0.16",
43
50
  "tsx": "^4.7.0",