@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,161 +0,0 @@
1
- #!/usr/bin/env tsx
2
-
3
- /**
4
- * Supabase MCP Server Launcher
5
- *
6
- * Starts the Supabase MCP server for AI-powered database management.
7
- *
8
- * Usage:
9
- * pnpm mcp:supabase
10
- */
11
-
12
- import { spawn } from 'node:child_process'
13
- import { randomBytes } from 'node:crypto'
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 startSupabaseMCP() {
25
- try {
26
- await getProjectRoot(import.meta.url)
27
- // Supabase MCP uses local package supabase-mcp
28
- // Verified: Package expects SUPABASE_URL, SUPABASE_ANON_KEY, and SUPABASE_SERVICE_ROLE_KEY
29
- // Source: node_modules/supabase-mcp/dist/esm/config.js and services/supabase.js
30
- //
31
- // NEW API KEY SUPPORT (2025):
32
- // Supabase introduced new API keys: sb_publishable_... (replaces anon) and sb_secret_... (replaces service_role)
33
- // Legacy keys (anon/service_role JWT) still work but will be deprecated in Nov 2025
34
- // The @supabase/supabase-js client accepts any key format, so we support both
35
- // Reference: https://github.com/orgs/supabase/discussions/29260
36
- const supabaseUrl = process.env.SUPABASE_URL
37
-
38
- // Support both legacy and new API key formats
39
- // New format: SUPABASE_PUBLISHABLE_KEY (sb_publishable_...) or SUPABASE_ANON_KEY (legacy)
40
- // New format: SUPABASE_SECRET_KEY (sb_secret_...) or SUPABASE_SERVICE_ROLE_KEY (legacy)
41
- const supabaseAnonKey = process.env.SUPABASE_PUBLISHABLE_KEY || process.env.SUPABASE_ANON_KEY
42
- const supabaseServiceRoleKey =
43
- process.env.SUPABASE_SECRET_KEY || process.env.SUPABASE_SERVICE_ROLE_KEY
44
-
45
- if (!supabaseUrl) {
46
- logger.error('SUPABASE_URL is required')
47
- logger.info(' Get your credentials from: https://supabase.com/dashboard → Settings → API')
48
- process.exit(ErrorCode.CONFIG_ERROR)
49
- }
50
-
51
- if (!supabaseAnonKey) {
52
- logger.error('SUPABASE_ANON_KEY or SUPABASE_PUBLISHABLE_KEY is required')
53
- logger.info(' Legacy: SUPABASE_ANON_KEY (anon JWT key)')
54
- logger.info(' New: SUPABASE_PUBLISHABLE_KEY (sb_publishable_... key)')
55
- logger.info(' Get from: https://supabase.com/dashboard → Settings → API')
56
- process.exit(ErrorCode.CONFIG_ERROR)
57
- }
58
-
59
- if (!supabaseServiceRoleKey) {
60
- logger.error('SUPABASE_SERVICE_ROLE_KEY or SUPABASE_SECRET_KEY is required')
61
- logger.info(' Legacy: SUPABASE_SERVICE_ROLE_KEY (service_role JWT key)')
62
- logger.info(' New: SUPABASE_SECRET_KEY (sb_secret_... key)')
63
- logger.info(' Note: Required for MCP server operations (full database access)')
64
- logger.info(' Get from: https://supabase.com/dashboard → Settings → API')
65
- process.exit(ErrorCode.CONFIG_ERROR)
66
- }
67
-
68
- // MCP_API_KEY is required by supabase-mcp package for server authentication
69
- // This is NOT a Supabase key - it's a key you generate yourself to secure the MCP server
70
- let mcpApiKey = process.env.MCP_API_KEY
71
- if (!mcpApiKey) {
72
- // Auto-generate a secure random key if not provided
73
- mcpApiKey = randomBytes(32).toString('hex')
74
- logger.warning('⚠️ MCP_API_KEY not set - auto-generated a secure key')
75
- logger.warning(' Add this to your .env file to persist it:')
76
- logger.warning(` MCP_API_KEY=${mcpApiKey}`)
77
- logger.warning(' (This key secures your MCP server endpoint)')
78
- }
79
-
80
- const withRestart = process.argv.includes('--restart')
81
- logger.header('Starting Supabase MCP Server (Local)')
82
- logger.info(` Supabase URL: ${supabaseUrl}`)
83
- if (withRestart) logger.info(' Restart mode: enabled (up to 3 attempts)')
84
-
85
- // Detect key format for logging
86
- const usingNewKeys = process.env.SUPABASE_PUBLISHABLE_KEY || process.env.SUPABASE_SECRET_KEY
87
- if (usingNewKeys) {
88
- logger.info(' Using new API key format (sb_publishable_/sb_secret_)')
89
- } else {
90
- logger.info(' Using legacy API key format (anon/service_role JWT)')
91
- logger.warning(' ⚠️ Consider migrating to new keys before Nov 2025')
92
- logger.info(' See: https://github.com/orgs/supabase/discussions/29260')
93
- }
94
-
95
- // Build env once — used for all spawn attempts
96
- // Package validates: SUPABASE_URL, SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY, MCP_API_KEY
97
- // We map new keys to legacy variable names for package compatibility
98
- const spawnEnv = {
99
- ...process.env,
100
- SUPABASE_URL: supabaseUrl,
101
- SUPABASE_ANON_KEY: supabaseAnonKey,
102
- SUPABASE_SERVICE_ROLE_KEY: supabaseServiceRoleKey,
103
- MCP_API_KEY: mcpApiKey,
104
- SUPABASE_PUBLISHABLE_KEY: process.env.SUPABASE_PUBLISHABLE_KEY,
105
- SUPABASE_SECRET_KEY: process.env.SUPABASE_SECRET_KEY,
106
- }
107
-
108
- const MaxRestarts = 3
109
- const RestartDelaysMs = [2000, 4000, 8000]
110
-
111
- const spawnSupabase = (): Promise<number | null> =>
112
- new Promise((resolve) => {
113
- const child = spawn('pnpm', ['dlx', 'supabase-mcp'], { stdio: 'inherit', env: spawnEnv })
114
- child.on('error', (error) => {
115
- logger.error(`Failed to start Supabase MCP server: ${error.message}`)
116
- resolve(ErrorCode.CONFIG_ERROR)
117
- })
118
- child.on('exit', (code) => resolve(code ?? 0))
119
- process.on('SIGINT', () => {
120
- child.kill('SIGINT')
121
- })
122
- process.on('SIGTERM', () => {
123
- child.kill('SIGTERM')
124
- })
125
- })
126
-
127
- let attempt = 0
128
- while (true) {
129
- const code = await spawnSupabase()
130
- if (!withRestart || attempt >= MaxRestarts) {
131
- process.exit(code ?? 0)
132
- }
133
- const delay = RestartDelaysMs[attempt] ?? 8000
134
- attempt++
135
- logger.warning(
136
- ` Server exited (code ${code}). Restarting in ${delay / 1000}s (attempt ${attempt}/${MaxRestarts})...`,
137
- )
138
- await new Promise((resolve) => setTimeout(resolve, delay))
139
- }
140
- } catch (error) {
141
- logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`)
142
- process.exit(ErrorCode.EXECUTION_ERROR)
143
- }
144
- }
145
-
146
- /**
147
- * Main function
148
- */
149
- async function main() {
150
- try {
151
- if (!(await checkMcpLicense())) {
152
- process.exit(ErrorCode.CONFIG_ERROR)
153
- }
154
- await startSupabaseMCP()
155
- } catch (error) {
156
- logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`)
157
- process.exit(ErrorCode.EXECUTION_ERROR)
158
- }
159
- }
160
-
161
- main()
@@ -1,100 +0,0 @@
1
- #!/usr/bin/env tsx
2
-
3
- /**
4
- * Vercel MCP Server Launcher
5
- *
6
- * Starts the Vercel MCP server for AI-powered Vercel management.
7
- *
8
- * Usage:
9
- * pnpm mcp:vercel
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 spawnVercel(vercelApiKey: string): Promise<number | null> {
27
- return new Promise((resolve) => {
28
- // Pass credentials via environment only — never as CLI arguments (visible in ps aux).
29
- const child = spawn('pnpm', ['exec', 'vercel-mcp'], {
30
- stdio: 'inherit',
31
- env: { ...process.env, VERCEL_API_KEY: vercelApiKey },
32
- })
33
-
34
- child.on('error', (error) => {
35
- logger.error(`Failed to start Vercel MCP server: ${error.message}`)
36
- resolve(ErrorCode.CONFIG_ERROR)
37
- })
38
-
39
- child.on('exit', (code) => resolve(code ?? 0))
40
-
41
- process.on('SIGINT', () => {
42
- child.kill('SIGINT')
43
- })
44
- process.on('SIGTERM', () => {
45
- child.kill('SIGTERM')
46
- })
47
- })
48
- }
49
-
50
- async function startVercelMCP() {
51
- try {
52
- await getProjectRoot(import.meta.url)
53
- const vercelApiKey = process.env.VERCEL_API_KEY ?? process.env.VERCEL_TOKEN
54
-
55
- if (!vercelApiKey) {
56
- logger.error('VERCEL_API_KEY environment variable is required')
57
- logger.info(' Get your token from: https://vercel.com/account/tokens')
58
- process.exit(ErrorCode.CONFIG_ERROR)
59
- }
60
-
61
- const withRestart = process.argv.includes('--restart')
62
- logger.header('Starting Vercel MCP Server')
63
- logger.info(` API Key: ${vercelApiKey.substring(0, 8)}...`)
64
- if (withRestart) logger.info(' Restart mode: enabled (up to 3 attempts)')
65
-
66
- let attempt = 0
67
- while (true) {
68
- const code = await spawnVercel(vercelApiKey)
69
- if (!withRestart || attempt >= MAX_RESTARTS) {
70
- process.exit(code ?? 0)
71
- }
72
- const delay = RESTART_DELAYS_MS[attempt] ?? 8000
73
- attempt++
74
- logger.warning(
75
- ` Server exited (code ${code}). Restarting in ${delay / 1000}s (attempt ${attempt}/${MAX_RESTARTS})...`,
76
- )
77
- await new Promise((resolve) => setTimeout(resolve, delay))
78
- }
79
- } catch (error) {
80
- logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`)
81
- process.exit(ErrorCode.EXECUTION_ERROR)
82
- }
83
- }
84
-
85
- /**
86
- * Main function
87
- */
88
- async function main() {
89
- try {
90
- if (!(await checkMcpLicense())) {
91
- process.exit(ErrorCode.CONFIG_ERROR)
92
- }
93
- await startVercelMCP()
94
- } catch (error) {
95
- logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`)
96
- process.exit(ErrorCode.EXECUTION_ERROR)
97
- }
98
- }
99
-
100
- main()
@@ -1,97 +0,0 @@
1
- #!/usr/bin/env node
2
- // Demo script to exercise Vultr Inference (chat + embeddings)
3
- // Usage:
4
- // Use ts-node or compile to JS. Example with ts-node:
5
- // VULTR_API_KEY=your_key VULTR_MODEL=your-model-id ts-node packages/ai/scripts/test-vultr.ts
6
-
7
- import { logger } from '@revealui/core/observability/logger'
8
- import { checkMcpLicense } from '../index.js'
9
-
10
- const KEY = process.env.VULTR_API_KEY
11
- const MODEL = process.env.VULTR_MODEL
12
- const BASE = process.env.VULTR_BASE_URL || 'https://api.vultrinference.com/v1'
13
-
14
- if (!(KEY && MODEL)) {
15
- logger.error(
16
- 'Missing VULTR_API_KEY or VULTR_MODEL environment variables',
17
- new Error('Missing required environment variables'),
18
- )
19
- process.exit(1)
20
- }
21
-
22
- const headers = {
23
- 'Content-Type': 'application/json',
24
- // biome-ignore lint/style/useNamingConvention: API field name
25
- Authorization: `Bearer ${KEY}`,
26
- }
27
-
28
- async function chat(prompt: string) {
29
- const body = {
30
- model: MODEL,
31
- messages: [{ role: 'user', content: prompt }],
32
- max_tokens: 256,
33
- }
34
-
35
- const res = await fetch(`${BASE}/chat/completions`, {
36
- method: 'POST',
37
- headers,
38
- body: JSON.stringify(body),
39
- })
40
-
41
- if (!res.ok) {
42
- const err = await res.text().catch(() => res.statusText)
43
- throw new Error(`Chat request failed: ${res.status} ${err}`)
44
- }
45
-
46
- const data = (await res.json()) as { choices?: unknown[] }
47
- logger.info('Chat response', { data })
48
- const choice = Array.isArray(data.choices)
49
- ? (data.choices[0] as { message?: { content: string }; text?: string } | undefined)
50
- : undefined
51
- const message = choice?.message
52
- ? choice.message
53
- : choice?.text
54
- ? { content: choice.text }
55
- : undefined
56
- if (message) {
57
- logger.info('Assistant output', {
58
- content: typeof message.content === 'string' ? message.content : JSON.stringify(message),
59
- })
60
- }
61
- }
62
-
63
- async function embed(inputs: string | string[]) {
64
- const body = {
65
- model: MODEL,
66
- input: Array.isArray(inputs) ? inputs : [inputs],
67
- }
68
-
69
- const res = await fetch(`${BASE}/embeddings`, {
70
- method: 'POST',
71
- headers,
72
- body: JSON.stringify(body),
73
- })
74
-
75
- if (!res.ok) {
76
- const err = await res.text().catch(() => res.statusText)
77
- throw new Error(`Embeddings request failed: ${res.status} ${err}`)
78
- }
79
-
80
- const data = await res.json()
81
- logger.info('Embeddings response', { data })
82
- }
83
-
84
- async function main() {
85
- if (!(await checkMcpLicense())) {
86
- process.exit(2)
87
- }
88
- try {
89
- await chat('What is the capital of France?')
90
- await embed('This is a test embedding.')
91
- } catch (err) {
92
- logger.error('Error during demo', err instanceof Error ? err : new Error(String(err)))
93
- process.exitCode = 2
94
- }
95
- }
96
-
97
- await main()
package/tsconfig.json DELETED
@@ -1,12 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "./dist",
5
- "declaration": true,
6
- "declarationMap": true,
7
- "sourceMap": true,
8
- "noEmit": false
9
- },
10
- "include": ["src/**/*"],
11
- "exclude": ["node_modules", "dist", "__tests__", "**/*.test.ts", "**/*.spec.ts"]
12
- }
package/vitest.config.ts DELETED
@@ -1,22 +0,0 @@
1
- import { defineConfig } from 'vitest/config'
2
-
3
- export default defineConfig({
4
- resolve: {
5
- conditions: ['import', 'module', 'browser', 'default'],
6
- },
7
- test: {
8
- globals: true,
9
- environment: 'node',
10
- include: ['__tests__/**/*.test.ts', 'src/**/*.test.ts'],
11
- env: {
12
- // Set NODE_ENV to 'test' to skip integration tests that require database setup
13
- // Integration tests will check for TEST_DATABASE_URL and skip if not present
14
- NODE_ENV: 'test',
15
- },
16
- coverage: {
17
- provider: 'v8',
18
- reporter: ['text', 'json', 'html', 'lcov'],
19
- exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/__tests__/**'],
20
- },
21
- },
22
- })