@revealui/mcp 0.1.0 → 0.1.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 (293) hide show
  1. package/LICENSE +22 -0
  2. package/LICENSE.commercial +111 -0
  3. package/README.md +3 -0
  4. package/dist/{packages/mcp/src/adapters → adapters}/db.d.ts +1 -1
  5. package/dist/adapters/db.d.ts.map +1 -0
  6. package/dist/adapters/db.js.map +1 -0
  7. package/dist/config/index.d.ts.map +1 -0
  8. package/dist/config/index.js.map +1 -0
  9. package/dist/contracts.d.ts.map +1 -0
  10. package/dist/contracts.js.map +1 -0
  11. package/dist/{packages/mcp/src/hypervisor.d.ts → hypervisor.d.ts} +56 -0
  12. package/dist/hypervisor.d.ts.map +1 -0
  13. package/dist/{packages/mcp/src/hypervisor.js → hypervisor.js} +209 -1
  14. package/dist/hypervisor.js.map +1 -0
  15. package/dist/{packages/mcp/src/index.d.ts → index.d.ts} +9 -5
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/{packages/mcp/src/index.js → index.js} +8 -4
  18. package/dist/index.js.map +1 -0
  19. package/dist/{packages/mcp/src/servers → servers}/adapter.d.ts +11 -1
  20. package/dist/servers/adapter.d.ts.map +1 -0
  21. package/dist/{packages/mcp/src/servers → servers}/adapter.js +20 -4
  22. package/dist/servers/adapter.js.map +1 -0
  23. package/dist/servers/revealui-content.d.ts +21 -0
  24. package/dist/servers/revealui-content.d.ts.map +1 -0
  25. package/dist/servers/revealui-content.js +211 -0
  26. package/dist/servers/revealui-content.js.map +1 -0
  27. package/dist/servers/revealui-email.d.ts +18 -0
  28. package/dist/servers/revealui-email.d.ts.map +1 -0
  29. package/dist/servers/revealui-email.js +190 -0
  30. package/dist/servers/revealui-email.js.map +1 -0
  31. package/dist/servers/revealui-stripe.d.ts +19 -0
  32. package/dist/servers/revealui-stripe.d.ts.map +1 -0
  33. package/dist/servers/revealui-stripe.js +228 -0
  34. package/dist/servers/revealui-stripe.js.map +1 -0
  35. package/package.json +50 -11
  36. package/.env.example +0 -9
  37. package/MCP_MAINTENANCE.md +0 -265
  38. package/__tests__/crdt.integration.test.ts +0 -156
  39. package/configs/README.md +0 -77
  40. package/configs/claude-template.json +0 -54
  41. package/dist/packages/core/src/database/ssl-config.d.ts +0 -9
  42. package/dist/packages/core/src/database/ssl-config.d.ts.map +0 -1
  43. package/dist/packages/core/src/database/ssl-config.js +0 -8
  44. package/dist/packages/core/src/database/ssl-config.js.map +0 -1
  45. package/dist/packages/core/src/features.d.ts +0 -86
  46. package/dist/packages/core/src/features.d.ts.map +0 -1
  47. package/dist/packages/core/src/features.js +0 -93
  48. package/dist/packages/core/src/features.js.map +0 -1
  49. package/dist/packages/core/src/license.d.ts +0 -75
  50. package/dist/packages/core/src/license.d.ts.map +0 -1
  51. package/dist/packages/core/src/license.js +0 -174
  52. package/dist/packages/core/src/license.js.map +0 -1
  53. package/dist/packages/core/src/monitoring/alerts.d.ts +0 -118
  54. package/dist/packages/core/src/monitoring/alerts.d.ts.map +0 -1
  55. package/dist/packages/core/src/monitoring/alerts.js +0 -325
  56. package/dist/packages/core/src/monitoring/alerts.js.map +0 -1
  57. package/dist/packages/core/src/monitoring/cleanup-manager.d.ts +0 -71
  58. package/dist/packages/core/src/monitoring/cleanup-manager.d.ts.map +0 -1
  59. package/dist/packages/core/src/monitoring/cleanup-manager.js +0 -227
  60. package/dist/packages/core/src/monitoring/cleanup-manager.js.map +0 -1
  61. package/dist/packages/core/src/monitoring/health-monitor.d.ts +0 -22
  62. package/dist/packages/core/src/monitoring/health-monitor.d.ts.map +0 -1
  63. package/dist/packages/core/src/monitoring/health-monitor.js +0 -143
  64. package/dist/packages/core/src/monitoring/health-monitor.js.map +0 -1
  65. package/dist/packages/core/src/monitoring/index.d.ts +0 -14
  66. package/dist/packages/core/src/monitoring/index.d.ts.map +0 -1
  67. package/dist/packages/core/src/monitoring/index.js +0 -18
  68. package/dist/packages/core/src/monitoring/index.js.map +0 -1
  69. package/dist/packages/core/src/monitoring/process-registry.d.ts +0 -97
  70. package/dist/packages/core/src/monitoring/process-registry.d.ts.map +0 -1
  71. package/dist/packages/core/src/monitoring/process-registry.js +0 -223
  72. package/dist/packages/core/src/monitoring/process-registry.js.map +0 -1
  73. package/dist/packages/core/src/monitoring/types.d.ts +0 -231
  74. package/dist/packages/core/src/monitoring/types.d.ts.map +0 -1
  75. package/dist/packages/core/src/monitoring/types.js +0 -43
  76. package/dist/packages/core/src/monitoring/types.js.map +0 -1
  77. package/dist/packages/core/src/monitoring/zombie-detector.d.ts +0 -81
  78. package/dist/packages/core/src/monitoring/zombie-detector.d.ts.map +0 -1
  79. package/dist/packages/core/src/monitoring/zombie-detector.js +0 -232
  80. package/dist/packages/core/src/monitoring/zombie-detector.js.map +0 -1
  81. package/dist/packages/core/src/observability/logger.d.ts +0 -47
  82. package/dist/packages/core/src/observability/logger.d.ts.map +0 -1
  83. package/dist/packages/core/src/observability/logger.js +0 -141
  84. package/dist/packages/core/src/observability/logger.js.map +0 -1
  85. package/dist/packages/core/src/utils/logger-server.d.ts +0 -32
  86. package/dist/packages/core/src/utils/logger-server.d.ts.map +0 -1
  87. package/dist/packages/core/src/utils/logger-server.js +0 -69
  88. package/dist/packages/core/src/utils/logger-server.js.map +0 -1
  89. package/dist/packages/core/src/utils/request-context.d.ts +0 -143
  90. package/dist/packages/core/src/utils/request-context.d.ts.map +0 -1
  91. package/dist/packages/core/src/utils/request-context.js +0 -169
  92. package/dist/packages/core/src/utils/request-context.js.map +0 -1
  93. package/dist/packages/dev/src/code-validator/index.d.ts +0 -20
  94. package/dist/packages/dev/src/code-validator/index.d.ts.map +0 -1
  95. package/dist/packages/dev/src/code-validator/index.js +0 -20
  96. package/dist/packages/dev/src/code-validator/index.js.map +0 -1
  97. package/dist/packages/dev/src/code-validator/types.d.ts +0 -67
  98. package/dist/packages/dev/src/code-validator/types.d.ts.map +0 -1
  99. package/dist/packages/dev/src/code-validator/types.js +0 -7
  100. package/dist/packages/dev/src/code-validator/types.js.map +0 -1
  101. package/dist/packages/dev/src/code-validator/validator.d.ts +0 -48
  102. package/dist/packages/dev/src/code-validator/validator.d.ts.map +0 -1
  103. package/dist/packages/dev/src/code-validator/validator.js +0 -176
  104. package/dist/packages/dev/src/code-validator/validator.js.map +0 -1
  105. package/dist/packages/mcp/src/adapters/db.d.ts.map +0 -1
  106. package/dist/packages/mcp/src/adapters/db.js.map +0 -1
  107. package/dist/packages/mcp/src/config/index.d.ts.map +0 -1
  108. package/dist/packages/mcp/src/config/index.js.map +0 -1
  109. package/dist/packages/mcp/src/contracts.d.ts.map +0 -1
  110. package/dist/packages/mcp/src/contracts.js.map +0 -1
  111. package/dist/packages/mcp/src/hypervisor.d.ts.map +0 -1
  112. package/dist/packages/mcp/src/hypervisor.js.map +0 -1
  113. package/dist/packages/mcp/src/index.d.ts.map +0 -1
  114. package/dist/packages/mcp/src/index.js.map +0 -1
  115. package/dist/packages/mcp/src/servers/adapter.d.ts.map +0 -1
  116. package/dist/packages/mcp/src/servers/adapter.js.map +0 -1
  117. package/dist/packages/mcp/src/servers/code-validator.d.ts +0 -24
  118. package/dist/packages/mcp/src/servers/code-validator.d.ts.map +0 -1
  119. package/dist/packages/mcp/src/servers/code-validator.js +0 -156
  120. package/dist/packages/mcp/src/servers/code-validator.js.map +0 -1
  121. package/dist/packages/mcp/src/servers/neon.d.ts +0 -11
  122. package/dist/packages/mcp/src/servers/neon.d.ts.map +0 -1
  123. package/dist/packages/mcp/src/servers/neon.js +0 -90
  124. package/dist/packages/mcp/src/servers/neon.js.map +0 -1
  125. package/dist/packages/mcp/src/servers/next-devtools.d.ts +0 -11
  126. package/dist/packages/mcp/src/servers/next-devtools.d.ts.map +0 -1
  127. package/dist/packages/mcp/src/servers/next-devtools.js +0 -215
  128. package/dist/packages/mcp/src/servers/next-devtools.js.map +0 -1
  129. package/dist/packages/mcp/src/servers/playwright.d.ts +0 -11
  130. package/dist/packages/mcp/src/servers/playwright.d.ts.map +0 -1
  131. package/dist/packages/mcp/src/servers/playwright.js +0 -68
  132. package/dist/packages/mcp/src/servers/playwright.js.map +0 -1
  133. package/dist/packages/mcp/src/servers/stripe.d.ts +0 -11
  134. package/dist/packages/mcp/src/servers/stripe.d.ts.map +0 -1
  135. package/dist/packages/mcp/src/servers/stripe.js +0 -86
  136. package/dist/packages/mcp/src/servers/stripe.js.map +0 -1
  137. package/dist/packages/mcp/src/servers/supabase.d.ts +0 -11
  138. package/dist/packages/mcp/src/servers/supabase.d.ts.map +0 -1
  139. package/dist/packages/mcp/src/servers/supabase.js +0 -144
  140. package/dist/packages/mcp/src/servers/supabase.js.map +0 -1
  141. package/dist/packages/mcp/src/servers/vercel.d.ts +0 -11
  142. package/dist/packages/mcp/src/servers/vercel.d.ts.map +0 -1
  143. package/dist/packages/mcp/src/servers/vercel.js +0 -87
  144. package/dist/packages/mcp/src/servers/vercel.js.map +0 -1
  145. package/dist/packages/mcp/src/servers/vultr-test.d.ts +0 -3
  146. package/dist/packages/mcp/src/servers/vultr-test.d.ts.map +0 -1
  147. package/dist/packages/mcp/src/servers/vultr-test.js +0 -82
  148. package/dist/packages/mcp/src/servers/vultr-test.js.map +0 -1
  149. package/dist/scripts/lib/analyzers/console-analyzer.d.ts +0 -188
  150. package/dist/scripts/lib/analyzers/console-analyzer.d.ts.map +0 -1
  151. package/dist/scripts/lib/analyzers/console-analyzer.js +0 -432
  152. package/dist/scripts/lib/analyzers/console-analyzer.js.map +0 -1
  153. package/dist/scripts/lib/analyzers/index.d.ts +0 -11
  154. package/dist/scripts/lib/analyzers/index.d.ts.map +0 -1
  155. package/dist/scripts/lib/analyzers/index.js +0 -11
  156. package/dist/scripts/lib/analyzers/index.js.map +0 -1
  157. package/dist/scripts/lib/args.d.ts +0 -104
  158. package/dist/scripts/lib/args.d.ts.map +0 -1
  159. package/dist/scripts/lib/args.js +0 -304
  160. package/dist/scripts/lib/args.js.map +0 -1
  161. package/dist/scripts/lib/cache.d.ts +0 -185
  162. package/dist/scripts/lib/cache.d.ts.map +0 -1
  163. package/dist/scripts/lib/cache.js +0 -390
  164. package/dist/scripts/lib/cache.js.map +0 -1
  165. package/dist/scripts/lib/cli/dispatch.d.ts +0 -116
  166. package/dist/scripts/lib/cli/dispatch.d.ts.map +0 -1
  167. package/dist/scripts/lib/cli/dispatch.js +0 -206
  168. package/dist/scripts/lib/cli/dispatch.js.map +0 -1
  169. package/dist/scripts/lib/cli/index.d.ts +0 -10
  170. package/dist/scripts/lib/cli/index.d.ts.map +0 -1
  171. package/dist/scripts/lib/cli/index.js +0 -10
  172. package/dist/scripts/lib/cli/index.js.map +0 -1
  173. package/dist/scripts/lib/database/ssl-config.d.ts +0 -26
  174. package/dist/scripts/lib/database/ssl-config.d.ts.map +0 -1
  175. package/dist/scripts/lib/database/ssl-config.js +0 -47
  176. package/dist/scripts/lib/database/ssl-config.js.map +0 -1
  177. package/dist/scripts/lib/errors.d.ts +0 -218
  178. package/dist/scripts/lib/errors.d.ts.map +0 -1
  179. package/dist/scripts/lib/errors.js +0 -543
  180. package/dist/scripts/lib/errors.js.map +0 -1
  181. package/dist/scripts/lib/exec.d.ts +0 -107
  182. package/dist/scripts/lib/exec.d.ts.map +0 -1
  183. package/dist/scripts/lib/exec.js +0 -232
  184. package/dist/scripts/lib/exec.js.map +0 -1
  185. package/dist/scripts/lib/index.d.ts +0 -50
  186. package/dist/scripts/lib/index.d.ts.map +0 -1
  187. package/dist/scripts/lib/index.js +0 -65
  188. package/dist/scripts/lib/index.js.map +0 -1
  189. package/dist/scripts/lib/logger.d.ts +0 -50
  190. package/dist/scripts/lib/logger.d.ts.map +0 -1
  191. package/dist/scripts/lib/logger.js +0 -159
  192. package/dist/scripts/lib/logger.js.map +0 -1
  193. package/dist/scripts/lib/output.d.ts +0 -149
  194. package/dist/scripts/lib/output.d.ts.map +0 -1
  195. package/dist/scripts/lib/output.js +0 -263
  196. package/dist/scripts/lib/output.js.map +0 -1
  197. package/dist/scripts/lib/parallel.d.ts +0 -164
  198. package/dist/scripts/lib/parallel.d.ts.map +0 -1
  199. package/dist/scripts/lib/parallel.js +0 -355
  200. package/dist/scripts/lib/parallel.js.map +0 -1
  201. package/dist/scripts/lib/paths.d.ts +0 -92
  202. package/dist/scripts/lib/paths.d.ts.map +0 -1
  203. package/dist/scripts/lib/paths.js +0 -171
  204. package/dist/scripts/lib/paths.js.map +0 -1
  205. package/dist/scripts/lib/state/adapters/memory.d.ts +0 -42
  206. package/dist/scripts/lib/state/adapters/memory.d.ts.map +0 -1
  207. package/dist/scripts/lib/state/adapters/memory.js +0 -110
  208. package/dist/scripts/lib/state/adapters/memory.js.map +0 -1
  209. package/dist/scripts/lib/state/adapters/pglite.d.ts +0 -46
  210. package/dist/scripts/lib/state/adapters/pglite.d.ts.map +0 -1
  211. package/dist/scripts/lib/state/adapters/pglite.js +0 -256
  212. package/dist/scripts/lib/state/adapters/pglite.js.map +0 -1
  213. package/dist/scripts/lib/state/index.d.ts +0 -16
  214. package/dist/scripts/lib/state/index.d.ts.map +0 -1
  215. package/dist/scripts/lib/state/index.js +0 -16
  216. package/dist/scripts/lib/state/index.js.map +0 -1
  217. package/dist/scripts/lib/state/types.d.ts +0 -111
  218. package/dist/scripts/lib/state/types.d.ts.map +0 -1
  219. package/dist/scripts/lib/state/types.js +0 -8
  220. package/dist/scripts/lib/state/types.js.map +0 -1
  221. package/dist/scripts/lib/state/workflow-state.d.ts +0 -110
  222. package/dist/scripts/lib/state/workflow-state.d.ts.map +0 -1
  223. package/dist/scripts/lib/state/workflow-state.js +0 -331
  224. package/dist/scripts/lib/state/workflow-state.js.map +0 -1
  225. package/dist/scripts/lib/telemetry.d.ts +0 -194
  226. package/dist/scripts/lib/telemetry.d.ts.map +0 -1
  227. package/dist/scripts/lib/telemetry.js +0 -394
  228. package/dist/scripts/lib/telemetry.js.map +0 -1
  229. package/dist/scripts/lib/utils.d.ts +0 -270
  230. package/dist/scripts/lib/utils.d.ts.map +0 -1
  231. package/dist/scripts/lib/utils.js +0 -473
  232. package/dist/scripts/lib/utils.js.map +0 -1
  233. package/dist/scripts/lib/validation/database.d.ts +0 -83
  234. package/dist/scripts/lib/validation/database.d.ts.map +0 -1
  235. package/dist/scripts/lib/validation/database.js +0 -199
  236. package/dist/scripts/lib/validation/database.js.map +0 -1
  237. package/dist/scripts/lib/validation/env.d.ts +0 -80
  238. package/dist/scripts/lib/validation/env.d.ts.map +0 -1
  239. package/dist/scripts/lib/validation/env.js +0 -246
  240. package/dist/scripts/lib/validation/env.js.map +0 -1
  241. package/dist/scripts/lib/validation/index.d.ts +0 -16
  242. package/dist/scripts/lib/validation/index.d.ts.map +0 -1
  243. package/dist/scripts/lib/validation/index.js +0 -16
  244. package/dist/scripts/lib/validation/index.js.map +0 -1
  245. package/dist/scripts/lib/validation/post-execution.d.ts +0 -74
  246. package/dist/scripts/lib/validation/post-execution.d.ts.map +0 -1
  247. package/dist/scripts/lib/validation/post-execution.js +0 -110
  248. package/dist/scripts/lib/validation/post-execution.js.map +0 -1
  249. package/dist/scripts/lib/validation/pre-execution.d.ts +0 -165
  250. package/dist/scripts/lib/validation/pre-execution.d.ts.map +0 -1
  251. package/dist/scripts/lib/validation/pre-execution.js +0 -466
  252. package/dist/scripts/lib/validation/pre-execution.js.map +0 -1
  253. package/dist/scripts/lib/validators/documentation-validator.d.ts +0 -242
  254. package/dist/scripts/lib/validators/documentation-validator.d.ts.map +0 -1
  255. package/dist/scripts/lib/validators/documentation-validator.js +0 -584
  256. package/dist/scripts/lib/validators/documentation-validator.js.map +0 -1
  257. package/dist/scripts/lib/validators/index.d.ts +0 -11
  258. package/dist/scripts/lib/validators/index.d.ts.map +0 -1
  259. package/dist/scripts/lib/validators/index.js +0 -11
  260. package/dist/scripts/lib/validators/index.js.map +0 -1
  261. package/docker-compose.yml +0 -46
  262. package/docs/INDEX.md +0 -88
  263. package/docs/README.md +0 -774
  264. package/docs/SETUP.md +0 -264
  265. package/docs/servers/code-validator.md +0 -586
  266. package/eslint.config.js +0 -7
  267. package/migrations/0001_add_crdt_columns.sql +0 -8
  268. package/migrations/0001_rollback.sql +0 -6
  269. package/migrations/005_performance_indexes.sql +0 -190
  270. package/migrations/backfill_crdt_meta.js +0 -45
  271. package/src/__tests__/hypervisor.test.ts +0 -212
  272. package/src/adapters/db.ts +0 -180
  273. package/src/config/config.json +0 -49
  274. package/src/config/index.ts +0 -30
  275. package/src/contracts.ts +0 -221
  276. package/src/hypervisor.ts +0 -464
  277. package/src/index.ts +0 -87
  278. package/src/servers/adapter.ts +0 -643
  279. package/src/servers/code-validator.ts +0 -188
  280. package/src/servers/neon.ts +0 -103
  281. package/src/servers/next-devtools.ts +0 -230
  282. package/src/servers/playwright.ts +0 -77
  283. package/src/servers/stripe.ts +0 -99
  284. package/src/servers/supabase.ts +0 -161
  285. package/src/servers/vercel.ts +0 -100
  286. package/src/servers/vultr-test.ts +0 -97
  287. package/tsconfig.json +0 -12
  288. package/vitest.config.ts +0 -22
  289. /package/dist/{packages/mcp/src/adapters → adapters}/db.js +0 -0
  290. /package/dist/{packages/mcp/src/config → config}/index.d.ts +0 -0
  291. /package/dist/{packages/mcp/src/config → config}/index.js +0 -0
  292. /package/dist/{packages/mcp/src/contracts.d.ts → contracts.d.ts} +0 -0
  293. /package/dist/{packages/mcp/src/contracts.js → contracts.js} +0 -0
@@ -1,188 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Code Validator MCP Server
5
- *
6
- * Model Context Protocol server that exposes code validation tools
7
- * for AI assistants to validate code before writing to disk.
8
- *
9
- * This server provides:
10
- * - validate_code: Validate code content against standards
11
- * - get_standards: Get current code standards configuration
12
- *
13
- * Usage:
14
- * Add to Claude Code MCP config:
15
- * {
16
- * "mcpServers": {
17
- * "revealui-validator": {
18
- * "command": "node",
19
- * "args": ["./packages/mcp/src/servers/code-validator.ts"]
20
- * }
21
- * }
22
- * }
23
- */
24
-
25
- import { resolve } from 'node:path'
26
- import { Server } from '@modelcontextprotocol/sdk/server/index.js'
27
- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
28
- import {
29
- type CallToolRequest,
30
- CallToolRequestSchema,
31
- ListToolsRequestSchema,
32
- type Tool,
33
- } from '@modelcontextprotocol/sdk/types.js'
34
- import { logger } from '@revealui/core/observability/logger'
35
- import { ErrorCode, ScriptError } from '../../../../scripts/lib/errors.js'
36
- import { createValidator, loadStandards } from '../../../dev/src/code-validator/index.js'
37
- import { checkMcpLicense } from '../index.js'
38
-
39
- const STANDARDS_PATH = resolve(process.cwd(), '.revealui/code-standards.json')
40
-
41
- // Initialize MCP server
42
- const server = new Server(
43
- {
44
- name: 'revealui-code-validator',
45
- version: '1.0.0',
46
- },
47
- {
48
- capabilities: {
49
- tools: {},
50
- },
51
- },
52
- )
53
-
54
- // Define tools
55
- const TOOLS: Tool[] = [
56
- {
57
- name: 'validate_code',
58
- description:
59
- 'Validates code content against RevealUI standards to prevent technical debt (console.log, any types, etc.)', // ai-validator-ignore - documentation text
60
- inputSchema: {
61
- type: 'object',
62
- properties: {
63
- code: {
64
- type: 'string',
65
- description: 'The code content to validate',
66
- },
67
- filePath: {
68
- type: 'string',
69
- description: 'Optional file path for path-based exemptions',
70
- },
71
- autoFix: {
72
- type: 'boolean',
73
- description: 'Whether to apply automatic fixes',
74
- default: false,
75
- },
76
- },
77
- required: ['code'],
78
- },
79
- },
80
- {
81
- name: 'get_standards',
82
- description: 'Get the current code standards configuration',
83
- inputSchema: {
84
- type: 'object',
85
- properties: {},
86
- },
87
- },
88
- ]
89
-
90
- // Handle tool listing
91
- server.setRequestHandler(ListToolsRequestSchema, async () => {
92
- return {
93
- tools: TOOLS,
94
- }
95
- })
96
-
97
- // Handle tool calls
98
- server.setRequestHandler(CallToolRequestSchema, async (request: CallToolRequest) => {
99
- try {
100
- switch (request.params.name) {
101
- case 'validate_code': {
102
- const {
103
- code,
104
- filePath,
105
- autoFix = false,
106
- } = request.params.arguments as {
107
- code: string
108
- filePath?: string
109
- autoFix?: boolean
110
- }
111
-
112
- const validator = await createValidator(STANDARDS_PATH)
113
-
114
- // Auto-fix if requested
115
- let codeToValidate = code
116
- let fixesApplied = 0
117
-
118
- if (autoFix) {
119
- const fixResult = validator.autoFix(code)
120
- codeToValidate = fixResult.code
121
- fixesApplied = fixResult.fixesApplied
122
- }
123
-
124
- // Validate
125
- const result = validator.validate(codeToValidate, { filePath })
126
-
127
- // Format response
128
- const response = {
129
- valid: result.valid,
130
- violations: result.violations,
131
- stats: result.stats,
132
- summary: `${result.errors} errors, ${result.warnings} warnings, ${result.info} info`,
133
- fixesApplied,
134
- fixedCode: autoFix && fixesApplied > 0 ? codeToValidate : undefined,
135
- formatted: validator.formatResult(result, { colors: false }),
136
- }
137
-
138
- return {
139
- content: [
140
- {
141
- type: 'text',
142
- text: JSON.stringify(response, null, 2),
143
- },
144
- ],
145
- }
146
- }
147
-
148
- case 'get_standards': {
149
- const standards = await loadStandards(STANDARDS_PATH)
150
- return {
151
- content: [
152
- {
153
- type: 'text',
154
- text: JSON.stringify(standards, null, 2),
155
- },
156
- ],
157
- }
158
- }
159
-
160
- default:
161
- throw new ScriptError(`Unknown tool: ${request.params.name}`, ErrorCode.NOT_FOUND)
162
- }
163
- } catch (error) {
164
- return {
165
- content: [
166
- {
167
- type: 'text',
168
- text: `Error: ${error instanceof Error ? error.message : String(error)}`,
169
- },
170
- ],
171
- isError: true,
172
- }
173
- }
174
- })
175
-
176
- // Start server
177
- async function main() {
178
- if (!(await checkMcpLicense())) {
179
- process.exit(ErrorCode.CONFIG_ERROR)
180
- }
181
- const transport = new StdioServerTransport()
182
- await server.connect(transport)
183
- }
184
-
185
- main().catch((error) => {
186
- logger.error('Server error', error instanceof Error ? error : new Error(String(error)))
187
- process.exit(1)
188
- })
@@ -1,103 +0,0 @@
1
- #!/usr/bin/env tsx
2
-
3
- /**
4
- * Neon MCP Server Launcher
5
- *
6
- * Starts the Neon Database MCP server for AI-powered database management.
7
- *
8
- * Usage:
9
- * pnpm mcp:neon
10
- */
11
-
12
- import { spawn } from 'node:child_process'
13
- import { createLogger, getProjectRoot } from '@revealui/scripts'
14
- import { ErrorCode } from '@revealui/scripts/errors'
15
- import { config } from 'dotenv'
16
- import { checkMcpLicense } from '../index.js'
17
-
18
- const logger = createLogger()
19
-
20
- // Load environment variables
21
- config()
22
-
23
- const MAX_RESTARTS = 3
24
- const RESTART_DELAYS_MS = [2000, 4000, 8000]
25
-
26
- async function spawnNeon(neonApiKey: string): Promise<number | null> {
27
- return new Promise((resolve) => {
28
- // Pass credentials via environment only — never as CLI arguments (visible in ps aux).
29
- // mcp-server-neon reads NEON_API_KEY from the environment.
30
- // Using pnpm exec instead of dlx so pnpm overrides apply to dependencies.
31
- const child = spawn('pnpm', ['exec', 'mcp-server-neon', 'start'], {
32
- stdio: 'inherit',
33
- env: { ...process.env, NEON_API_KEY: neonApiKey },
34
- })
35
-
36
- child.on('error', (error) => {
37
- logger.error(`Failed to start NeonDB MCP server: ${error.message}`)
38
- resolve(ErrorCode.CONFIG_ERROR)
39
- })
40
-
41
- child.on('exit', (code) => resolve(code ?? 0))
42
-
43
- process.on('SIGINT', () => {
44
- child.kill('SIGINT')
45
- })
46
- process.on('SIGTERM', () => {
47
- child.kill('SIGTERM')
48
- })
49
- })
50
- }
51
-
52
- async function startNeonMCP() {
53
- try {
54
- await getProjectRoot(import.meta.url)
55
- // Neon MCP uses local package @neondatabase/mcp-server-neon
56
- const neonApiKey = process.env.NEON_API_KEY
57
-
58
- if (!neonApiKey) {
59
- logger.error('NEON_API_KEY environment variable is required')
60
- logger.info(' Get your API key from: https://console.neon.tech/app/settings/api-keys')
61
- process.exit(ErrorCode.CONFIG_ERROR)
62
- }
63
-
64
- const withRestart = process.argv.includes('--restart')
65
- logger.header('Starting NeonDB MCP Server (Local)')
66
- logger.info(` API Key: ${neonApiKey.substring(0, 12)}...`)
67
- if (withRestart) logger.info(' Restart mode: enabled (up to 3 attempts)')
68
-
69
- let attempt = 0
70
- while (true) {
71
- const code = await spawnNeon(neonApiKey)
72
- if (!withRestart || attempt >= MAX_RESTARTS) {
73
- process.exit(code ?? 0)
74
- }
75
- const delay = RESTART_DELAYS_MS[attempt] ?? 8000
76
- attempt++
77
- logger.warning(
78
- ` Server exited (code ${code}). Restarting in ${delay / 1000}s (attempt ${attempt}/${MAX_RESTARTS})...`,
79
- )
80
- await new Promise((resolve) => setTimeout(resolve, delay))
81
- }
82
- } catch (error) {
83
- logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`)
84
- process.exit(ErrorCode.EXECUTION_ERROR)
85
- }
86
- }
87
-
88
- /**
89
- * Main function
90
- */
91
- async function main() {
92
- try {
93
- if (!(await checkMcpLicense())) {
94
- process.exit(ErrorCode.CONFIG_ERROR)
95
- }
96
- await startNeonMCP()
97
- } catch (error) {
98
- logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`)
99
- process.exit(ErrorCode.EXECUTION_ERROR)
100
- }
101
- }
102
-
103
- main()
@@ -1,230 +0,0 @@
1
- #!/usr/bin/env tsx
2
-
3
- /**
4
- * Next.js DevTools MCP Server Launcher
5
- *
6
- * Starts the Next.js DevTools MCP server for AI-powered Next.js development.
7
- *
8
- * Usage:
9
- * pnpm mcp:next-devtools
10
- */
11
-
12
- import { spawn } from 'node:child_process'
13
- import { createServer } from 'node:net'
14
- import { createLogger, getProjectRoot } from '@revealui/scripts'
15
- import { ErrorCode } from '@revealui/scripts/errors'
16
- import { config } from 'dotenv'
17
- import { checkMcpLicense } from '../index.js'
18
-
19
- const logger = createLogger()
20
-
21
- // Load environment variables
22
- config()
23
-
24
- async function checkPort(port: number): Promise<boolean> {
25
- return new Promise((resolve) => {
26
- const server = createServer()
27
- server.listen(port, () => {
28
- server.once('close', () => resolve(false))
29
- server.close()
30
- })
31
- server.on('error', () => resolve(true))
32
- })
33
- }
34
-
35
- async function startNextDevToolsMCP() {
36
- try {
37
- await getProjectRoot(import.meta.url)
38
-
39
- // Check if we're being invoked by an MCP client (non-TTY stdin)
40
- // MCP servers need clean stdio pipes for JSON-RPC protocol
41
- const isMCPSession = !process.stdin.isTTY
42
- const stdioConfig: 'inherit' | ['pipe', 'pipe', 'pipe'] = isMCPSession
43
- ? ['pipe', 'pipe', 'pipe'] // stdin, stdout, stderr as pipes for MCP protocol
44
- : 'inherit' // Use inherit for interactive/debugging sessions
45
-
46
- // Only log when running interactively (not via MCP client)
47
- if (!isMCPSession) {
48
- logger.header('Starting Next.js DevTools MCP Server')
49
- logger.info(' This server provides Next.js 16+ development tools for coding agents')
50
- logger.info(' Features: Runtime diagnostics, upgrade automation, Cache Components setup')
51
- }
52
-
53
- // Spawn the next-devtools-mcp process
54
- // Use pnpm exec for locally installed package
55
- // next-devtools-mcp automatically discovers Next.js dev servers and connects to them
56
- const child = spawn('pnpm', ['exec', 'next-devtools-mcp'], {
57
- stdio: stdioConfig,
58
- env: {
59
- ...process.env,
60
- // Disable telemetry if NEXT_TELEMETRY_DISABLED is set
61
- NEXT_TELEMETRY_DISABLED: process.env.NEXT_TELEMETRY_DISABLED || '0',
62
- },
63
- })
64
-
65
- // Pipe stdio when running as MCP server (for JSON-RPC protocol)
66
- if (isMCPSession) {
67
- const { stdin, stdout, stderr } = child
68
- if (stdin) {
69
- process.stdin.pipe(stdin)
70
- }
71
- stdout?.pipe(process.stdout)
72
- stderr?.pipe(process.stderr)
73
- } else {
74
- // Check CMS dev server
75
- const cmsPort = 4000
76
- const cmsRunning = await checkPort(cmsPort)
77
- // In interactive mode, provide feedback that the server is running
78
- // MCP servers don't produce output until they receive JSON-RPC messages
79
- logger.info('\n📊 Server Discovery')
80
- logger.info('📝 Next Steps')
81
- if (!cmsRunning) {
82
- logger.info('1. Start your CMS dev server:')
83
- logger.info(' cd apps/cms && pnpm dev')
84
- logger.info('')
85
- }
86
- logger.info('2. Ensure Next.js DevTools MCP is running:')
87
- logger.info(' pnpm mcp:next-devtools')
88
- logger.info(' (or pnpm mcp:all for all servers)')
89
- logger.info('')
90
- logger.info('3. In Cursor, you can now ask:')
91
- logger.info(' - "What errors are in my Next.js app?"')
92
- logger.info(' - "Show me my application routes"')
93
- logger.info(' - "Help me upgrade to Next.js 16"')
94
- logger.info(' - "Enable Cache Components in my app"')
95
- logger.info('')
96
-
97
- if (cmsRunning) {
98
- logger.success(`Next.js CMS app detected on port ${cmsPort}`)
99
- logger.info(` URL: http://localhost:${cmsPort}`)
100
- logger.info(` MCP Endpoint: http://localhost:${cmsPort}/_next/mcp`)
101
- logger.info(' Server started successfully ✓')
102
- logger.info(' Waiting for MCP client connections...')
103
- logger.info(' (This server communicates via JSON-RPC protocol on stdin/stdout)')
104
- logger.info('')
105
- logger.info(' To use this with Cursor IDE:')
106
- logger.info(" • Ensure it's configured in .cursor/mcp-config.json")
107
- logger.info(' • Cursor will automatically start it when needed')
108
- logger.info('')
109
- logger.info('')
110
-
111
- logger.info('🛠️ Available Next.js DevTools MCP Tools')
112
- logger.info('1. nextjs_index')
113
- logger.info(' - Discovers all running Next.js 16+ dev servers')
114
- logger.info(' - Lists available diagnostic tools')
115
- logger.info(' - Shows server metadata (port, PID, URL)')
116
- logger.info('')
117
- logger.info('2. nextjs_call')
118
- logger.info(' - Executes runtime diagnostics on dev server')
119
- logger.info(' - Can query:')
120
- logger.info(' • Real-time build/runtime errors')
121
- logger.info(' • Application routes and pages')
122
- logger.info(' • Component metadata')
123
- logger.info(' • Development server logs')
124
- logger.info(' • Server Actions')
125
- logger.info('')
126
- logger.info('3. upgrade_nextjs_16')
127
- logger.info(' - Automated Next.js 16 upgrade')
128
- logger.info(' - Runs official codemods')
129
- logger.info(' - Handles async API changes')
130
- logger.info(' - Fixes deprecated features')
131
- logger.info('')
132
- logger.info('4. enable_cache_components')
133
- logger.info(' - Complete Cache Components setup')
134
- logger.info(' - Automated error detection and fixing')
135
- logger.info(' - Route verification')
136
- logger.info(' - Intelligent boundary setup')
137
- logger.info('')
138
-
139
- logger.info('💡 How to Use with Your CMS App')
140
- logger.info('Once your CMS dev server is running (pnpm dev in apps/cms):')
141
- logger.info('')
142
- logger.info('1. Auto-discovery:')
143
- logger.info(' The MCP server will automatically detect your CMS app')
144
- logger.info(" when it's running on http://localhost:4000")
145
- logger.info('')
146
- logger.info('2. Query runtime errors:')
147
- logger.info(' "Next Devtools, what errors are in my Next.js app?"')
148
- logger.info(' → Returns real-time build and runtime errors')
149
- logger.info('')
150
- logger.info('3. Check application routes:')
151
- logger.info(' "Next Devtools, show me my application routes"')
152
- logger.info(' → Lists all routes, pages, and dynamic segments')
153
- logger.info('')
154
- logger.info('4. View dev server logs:')
155
- logger.info(' "Next Devtools, what\'s in the dev server logs?"')
156
- logger.info(' → Shows recent development server output')
157
- logger.info('')
158
- logger.info('5. Upgrade assistance:')
159
- logger.info(' "Next Devtools, help me upgrade to Next.js 16"')
160
- logger.info(' → Guides through upgrade with automated codemods')
161
- logger.info('')
162
- logger.info('6. Cache Components setup:')
163
- logger.info(' "Next Devtools, enable Cache Components"')
164
- logger.info(' → Automated setup with error detection/fixing')
165
- logger.info('')
166
-
167
- logger.info('🔗 Integration with Your Setup')
168
- logger.success('Next.js DevTools MCP is configured in:')
169
- logger.info(' - .cursor/mcp-config.json')
170
- logger.info(' - package.json scripts (mcp:next-devtools)')
171
- logger.info(' - Included in mcp:all command')
172
- logger.info('')
173
- logger.success('Your CMS app is Next.js 16.1.1 - fully compatible!')
174
- logger.success('Dev server runs on port 4000 with Turbopack')
175
- logger.success('MCP endpoint available at: /_next/mcp')
176
- logger.info('')
177
- logger.info(' Press Ctrl+C to stop the server')
178
- } else {
179
- logger.warning(`Next.js CMS app not running on port ${cmsPort}`)
180
- logger.info(` Start it with: cd apps/cms && pnpm dev`)
181
- }
182
- }
183
-
184
- child.on('error', (error) => {
185
- if (!isMCPSession) {
186
- logger.error(`Failed to start Next.js DevTools MCP server: ${error.message}`)
187
- }
188
- process.exit(ErrorCode.CONFIG_ERROR)
189
- })
190
-
191
- child.on('exit', (code) => {
192
- process.exit(code ?? 0)
193
- })
194
-
195
- // Handle termination signals
196
- process.on('SIGINT', () => {
197
- if (!isMCPSession) {
198
- logger.info('\n🛑 Stopping Next.js DevTools MCP Server...')
199
- }
200
- child.kill('SIGINT')
201
- })
202
-
203
- process.on('SIGTERM', () => {
204
- if (!isMCPSession) {
205
- logger.info('\n🛑 Stopping Next.js DevTools MCP Server...')
206
- }
207
- child.kill('SIGTERM')
208
- })
209
- } catch (error) {
210
- logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`)
211
- process.exit(ErrorCode.EXECUTION_ERROR)
212
- }
213
- }
214
-
215
- /**
216
- * Main function
217
- */
218
- async function main() {
219
- try {
220
- if (!(await checkMcpLicense())) {
221
- process.exit(ErrorCode.CONFIG_ERROR)
222
- }
223
- await startNextDevToolsMCP()
224
- } catch (error) {
225
- logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`)
226
- process.exit(ErrorCode.EXECUTION_ERROR)
227
- }
228
- }
229
-
230
- main()
@@ -1,77 +0,0 @@
1
- #!/usr/bin/env tsx
2
-
3
- /**
4
- * Playwright MCP Server Launcher
5
- *
6
- * Starts the Playwright MCP server for AI-powered browser automation.
7
- *
8
- * Usage:
9
- * pnpm mcp:playwright
10
- */
11
-
12
- import { spawn } from 'node:child_process'
13
- import { createLogger, getProjectRoot } from '@revealui/scripts'
14
- import { ErrorCode } from '@revealui/scripts/errors'
15
- import { config } from 'dotenv'
16
- import { checkMcpLicense } from '../index.js'
17
-
18
- const logger = createLogger()
19
-
20
- // Load environment variables
21
- config()
22
-
23
- async function startPlaywrightMCP() {
24
- try {
25
- await getProjectRoot(import.meta.url)
26
- logger.header('Starting Playwright MCP Server')
27
-
28
- // Spawn the Playwright MCP server
29
- // Using @executeautomation/playwright-mcp-server which is the most popular option
30
- const child = spawn('pnpm', ['dlx', '@executeautomation/playwright-mcp-server'], {
31
- stdio: 'inherit',
32
- env: {
33
- ...process.env,
34
- },
35
- })
36
-
37
- child.on('error', (error) => {
38
- logger.error(`Failed to start Playwright MCP server: ${error.message}`)
39
- process.exit(ErrorCode.CONFIG_ERROR)
40
- })
41
-
42
- child.on('exit', (code) => {
43
- process.exit(code ?? 0)
44
- })
45
-
46
- // Handle termination signals
47
- process.on('SIGINT', () => {
48
- logger.info('\n🛑 Stopping Playwright MCP Server...')
49
- child.kill('SIGINT')
50
- })
51
-
52
- process.on('SIGTERM', () => {
53
- logger.info('\n🛑 Stopping Playwright MCP Server...')
54
- child.kill('SIGTERM')
55
- })
56
- } catch (error) {
57
- logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`)
58
- process.exit(ErrorCode.EXECUTION_ERROR)
59
- }
60
- }
61
-
62
- /**
63
- * Main function
64
- */
65
- async function main() {
66
- try {
67
- if (!(await checkMcpLicense())) {
68
- process.exit(ErrorCode.CONFIG_ERROR)
69
- }
70
- await startPlaywrightMCP()
71
- } catch (error) {
72
- logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`)
73
- process.exit(ErrorCode.EXECUTION_ERROR)
74
- }
75
- }
76
-
77
- main()
@@ -1,99 +0,0 @@
1
- #!/usr/bin/env tsx
2
-
3
- /**
4
- * Stripe MCP Server Launcher
5
- *
6
- * Starts the Stripe MCP server for AI-powered payment management.
7
- *
8
- * Usage:
9
- * pnpm mcp:stripe
10
- */
11
-
12
- import { spawn } from 'node:child_process'
13
- import { createLogger, getProjectRoot } from '@revealui/scripts'
14
- import { ErrorCode } from '@revealui/scripts/errors'
15
- import { config } from 'dotenv'
16
- import { checkMcpLicense } from '../index.js'
17
-
18
- const logger = createLogger()
19
-
20
- // Load environment variables
21
- config()
22
-
23
- const MAX_RESTARTS = 3
24
- const RESTART_DELAYS_MS = [2000, 4000, 8000]
25
-
26
- async function spawnStripe(stripeSecretKey: string): Promise<number | null> {
27
- return new Promise((resolve) => {
28
- const child = spawn('pnpm', ['dlx', '@stripe/mcp', '--tools=all'], {
29
- stdio: 'inherit',
30
- env: { ...process.env, STRIPE_SECRET_KEY: stripeSecretKey },
31
- })
32
-
33
- child.on('error', (error) => {
34
- logger.error(`Failed to start Stripe MCP server: ${error.message}`)
35
- resolve(ErrorCode.CONFIG_ERROR)
36
- })
37
-
38
- child.on('exit', (code) => resolve(code ?? 0))
39
-
40
- process.on('SIGINT', () => {
41
- child.kill('SIGINT')
42
- })
43
- process.on('SIGTERM', () => {
44
- child.kill('SIGTERM')
45
- })
46
- })
47
- }
48
-
49
- async function startStripeMCP() {
50
- try {
51
- await getProjectRoot(import.meta.url)
52
- const stripeSecretKey = process.env.STRIPE_SECRET_KEY
53
-
54
- if (!stripeSecretKey) {
55
- logger.error('STRIPE_SECRET_KEY environment variable is required')
56
- logger.info(' Get your key from: https://dashboard.stripe.com/apikeys')
57
- process.exit(ErrorCode.CONFIG_ERROR)
58
- }
59
-
60
- const withRestart = process.argv.includes('--restart')
61
- logger.header('Starting Stripe MCP Server')
62
- logger.info(` Secret Key: ${stripeSecretKey.substring(0, 12)}...`)
63
- if (withRestart) logger.info(' Restart mode: enabled (up to 3 attempts)')
64
-
65
- let attempt = 0
66
- while (true) {
67
- const code = await spawnStripe(stripeSecretKey)
68
- if (!withRestart || attempt >= MAX_RESTARTS) {
69
- process.exit(code ?? 0)
70
- }
71
- const delay = RESTART_DELAYS_MS[attempt] ?? 8000
72
- attempt++
73
- logger.warning(
74
- ` Server exited (code ${code}). Restarting in ${delay / 1000}s (attempt ${attempt}/${MAX_RESTARTS})...`,
75
- )
76
- await new Promise((resolve) => setTimeout(resolve, delay))
77
- }
78
- } catch (error) {
79
- logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`)
80
- process.exit(ErrorCode.EXECUTION_ERROR)
81
- }
82
- }
83
-
84
- /**
85
- * Main function
86
- */
87
- async function main() {
88
- try {
89
- if (!(await checkMcpLicense())) {
90
- process.exit(ErrorCode.CONFIG_ERROR)
91
- }
92
- await startStripeMCP()
93
- } catch (error) {
94
- logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`)
95
- process.exit(ErrorCode.EXECUTION_ERROR)
96
- }
97
- }
98
-
99
- main()