@revealui/mcp 0.0.1-pre.0 → 0.1.0

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 (270) hide show
  1. package/.env.example +9 -0
  2. package/MCP_MAINTENANCE.md +265 -0
  3. package/README.md +260 -0
  4. package/__tests__/crdt.integration.test.ts +156 -0
  5. package/configs/README.md +77 -0
  6. package/configs/claude-template.json +54 -0
  7. package/dist/packages/core/src/database/ssl-config.d.ts +9 -0
  8. package/dist/packages/core/src/database/ssl-config.d.ts.map +1 -0
  9. package/dist/packages/core/src/database/ssl-config.js +8 -0
  10. package/dist/packages/core/src/database/ssl-config.js.map +1 -0
  11. package/dist/packages/core/src/features.d.ts +86 -0
  12. package/dist/packages/core/src/features.d.ts.map +1 -0
  13. package/dist/packages/core/src/features.js +93 -0
  14. package/dist/packages/core/src/features.js.map +1 -0
  15. package/dist/packages/core/src/license.d.ts +75 -0
  16. package/dist/packages/core/src/license.d.ts.map +1 -0
  17. package/dist/packages/core/src/license.js +174 -0
  18. package/dist/packages/core/src/license.js.map +1 -0
  19. package/dist/packages/core/src/monitoring/alerts.d.ts +118 -0
  20. package/dist/packages/core/src/monitoring/alerts.d.ts.map +1 -0
  21. package/dist/packages/core/src/monitoring/alerts.js +325 -0
  22. package/dist/packages/core/src/monitoring/alerts.js.map +1 -0
  23. package/dist/packages/core/src/monitoring/cleanup-manager.d.ts +71 -0
  24. package/dist/packages/core/src/monitoring/cleanup-manager.d.ts.map +1 -0
  25. package/dist/packages/core/src/monitoring/cleanup-manager.js +227 -0
  26. package/dist/packages/core/src/monitoring/cleanup-manager.js.map +1 -0
  27. package/dist/packages/core/src/monitoring/health-monitor.d.ts +22 -0
  28. package/dist/packages/core/src/monitoring/health-monitor.d.ts.map +1 -0
  29. package/dist/packages/core/src/monitoring/health-monitor.js +143 -0
  30. package/dist/packages/core/src/monitoring/health-monitor.js.map +1 -0
  31. package/dist/packages/core/src/monitoring/index.d.ts +14 -0
  32. package/dist/packages/core/src/monitoring/index.d.ts.map +1 -0
  33. package/dist/packages/core/src/monitoring/index.js +18 -0
  34. package/dist/packages/core/src/monitoring/index.js.map +1 -0
  35. package/dist/packages/core/src/monitoring/process-registry.d.ts +97 -0
  36. package/dist/packages/core/src/monitoring/process-registry.d.ts.map +1 -0
  37. package/dist/packages/core/src/monitoring/process-registry.js +223 -0
  38. package/dist/packages/core/src/monitoring/process-registry.js.map +1 -0
  39. package/dist/packages/core/src/monitoring/types.d.ts +231 -0
  40. package/dist/packages/core/src/monitoring/types.d.ts.map +1 -0
  41. package/dist/packages/core/src/monitoring/types.js +43 -0
  42. package/dist/packages/core/src/monitoring/types.js.map +1 -0
  43. package/dist/packages/core/src/monitoring/zombie-detector.d.ts +81 -0
  44. package/dist/packages/core/src/monitoring/zombie-detector.d.ts.map +1 -0
  45. package/dist/packages/core/src/monitoring/zombie-detector.js +232 -0
  46. package/dist/packages/core/src/monitoring/zombie-detector.js.map +1 -0
  47. package/dist/packages/core/src/observability/logger.d.ts +47 -0
  48. package/dist/packages/core/src/observability/logger.d.ts.map +1 -0
  49. package/dist/packages/core/src/observability/logger.js +141 -0
  50. package/dist/packages/core/src/observability/logger.js.map +1 -0
  51. package/dist/packages/core/src/utils/logger-server.d.ts +32 -0
  52. package/dist/packages/core/src/utils/logger-server.d.ts.map +1 -0
  53. package/dist/packages/core/src/utils/logger-server.js +69 -0
  54. package/dist/packages/core/src/utils/logger-server.js.map +1 -0
  55. package/dist/packages/core/src/utils/request-context.d.ts +143 -0
  56. package/dist/packages/core/src/utils/request-context.d.ts.map +1 -0
  57. package/dist/packages/core/src/utils/request-context.js +169 -0
  58. package/dist/packages/core/src/utils/request-context.js.map +1 -0
  59. package/dist/packages/dev/src/code-validator/index.d.ts +20 -0
  60. package/dist/packages/dev/src/code-validator/index.d.ts.map +1 -0
  61. package/dist/packages/dev/src/code-validator/index.js +20 -0
  62. package/dist/packages/dev/src/code-validator/index.js.map +1 -0
  63. package/dist/packages/dev/src/code-validator/types.d.ts +67 -0
  64. package/dist/packages/dev/src/code-validator/types.d.ts.map +1 -0
  65. package/dist/packages/dev/src/code-validator/types.js +7 -0
  66. package/dist/packages/dev/src/code-validator/types.js.map +1 -0
  67. package/dist/packages/dev/src/code-validator/validator.d.ts +48 -0
  68. package/dist/packages/dev/src/code-validator/validator.d.ts.map +1 -0
  69. package/dist/packages/dev/src/code-validator/validator.js +176 -0
  70. package/dist/packages/dev/src/code-validator/validator.js.map +1 -0
  71. package/dist/packages/mcp/src/adapters/db.d.ts +46 -0
  72. package/dist/packages/mcp/src/adapters/db.d.ts.map +1 -0
  73. package/dist/packages/mcp/src/adapters/db.js +127 -0
  74. package/dist/packages/mcp/src/adapters/db.js.map +1 -0
  75. package/dist/packages/mcp/src/config/index.d.ts +11 -0
  76. package/dist/packages/mcp/src/config/index.d.ts.map +1 -0
  77. package/dist/packages/mcp/src/config/index.js +18 -0
  78. package/dist/packages/mcp/src/config/index.js.map +1 -0
  79. package/dist/packages/mcp/src/contracts.d.ts +131 -0
  80. package/dist/packages/mcp/src/contracts.d.ts.map +1 -0
  81. package/dist/packages/mcp/src/contracts.js +153 -0
  82. package/dist/packages/mcp/src/contracts.js.map +1 -0
  83. package/dist/packages/mcp/src/hypervisor.d.ts +132 -0
  84. package/dist/packages/mcp/src/hypervisor.d.ts.map +1 -0
  85. package/dist/packages/mcp/src/hypervisor.js +359 -0
  86. package/dist/packages/mcp/src/hypervisor.js.map +1 -0
  87. package/dist/packages/mcp/src/index.d.ts +25 -0
  88. package/dist/packages/mcp/src/index.d.ts.map +1 -0
  89. package/dist/packages/mcp/src/index.js +41 -0
  90. package/dist/packages/mcp/src/index.js.map +1 -0
  91. package/dist/packages/mcp/src/servers/adapter.d.ts +199 -0
  92. package/dist/packages/mcp/src/servers/adapter.d.ts.map +1 -0
  93. package/dist/packages/mcp/src/servers/adapter.js +487 -0
  94. package/dist/packages/mcp/src/servers/adapter.js.map +1 -0
  95. package/dist/packages/mcp/src/servers/code-validator.d.ts +24 -0
  96. package/dist/packages/mcp/src/servers/code-validator.d.ts.map +1 -0
  97. package/dist/packages/mcp/src/servers/code-validator.js +156 -0
  98. package/dist/packages/mcp/src/servers/code-validator.js.map +1 -0
  99. package/dist/packages/mcp/src/servers/neon.d.ts +11 -0
  100. package/dist/packages/mcp/src/servers/neon.d.ts.map +1 -0
  101. package/dist/packages/mcp/src/servers/neon.js +90 -0
  102. package/dist/packages/mcp/src/servers/neon.js.map +1 -0
  103. package/dist/packages/mcp/src/servers/next-devtools.d.ts +11 -0
  104. package/dist/packages/mcp/src/servers/next-devtools.d.ts.map +1 -0
  105. package/dist/packages/mcp/src/servers/next-devtools.js +215 -0
  106. package/dist/packages/mcp/src/servers/next-devtools.js.map +1 -0
  107. package/dist/packages/mcp/src/servers/playwright.d.ts +11 -0
  108. package/dist/packages/mcp/src/servers/playwright.d.ts.map +1 -0
  109. package/dist/packages/mcp/src/servers/playwright.js +68 -0
  110. package/dist/packages/mcp/src/servers/playwright.js.map +1 -0
  111. package/dist/packages/mcp/src/servers/stripe.d.ts +11 -0
  112. package/dist/packages/mcp/src/servers/stripe.d.ts.map +1 -0
  113. package/dist/packages/mcp/src/servers/stripe.js +86 -0
  114. package/dist/packages/mcp/src/servers/stripe.js.map +1 -0
  115. package/dist/packages/mcp/src/servers/supabase.d.ts +11 -0
  116. package/dist/packages/mcp/src/servers/supabase.d.ts.map +1 -0
  117. package/dist/packages/mcp/src/servers/supabase.js +144 -0
  118. package/dist/packages/mcp/src/servers/supabase.js.map +1 -0
  119. package/dist/packages/mcp/src/servers/vercel.d.ts +11 -0
  120. package/dist/packages/mcp/src/servers/vercel.d.ts.map +1 -0
  121. package/dist/packages/mcp/src/servers/vercel.js +87 -0
  122. package/dist/packages/mcp/src/servers/vercel.js.map +1 -0
  123. package/dist/packages/mcp/src/servers/vultr-test.d.ts +3 -0
  124. package/dist/packages/mcp/src/servers/vultr-test.d.ts.map +1 -0
  125. package/dist/packages/mcp/src/servers/vultr-test.js +82 -0
  126. package/dist/packages/mcp/src/servers/vultr-test.js.map +1 -0
  127. package/dist/scripts/lib/analyzers/console-analyzer.d.ts +188 -0
  128. package/dist/scripts/lib/analyzers/console-analyzer.d.ts.map +1 -0
  129. package/dist/scripts/lib/analyzers/console-analyzer.js +432 -0
  130. package/dist/scripts/lib/analyzers/console-analyzer.js.map +1 -0
  131. package/dist/scripts/lib/analyzers/index.d.ts +11 -0
  132. package/dist/scripts/lib/analyzers/index.d.ts.map +1 -0
  133. package/dist/scripts/lib/analyzers/index.js +11 -0
  134. package/dist/scripts/lib/analyzers/index.js.map +1 -0
  135. package/dist/scripts/lib/args.d.ts +104 -0
  136. package/dist/scripts/lib/args.d.ts.map +1 -0
  137. package/dist/scripts/lib/args.js +304 -0
  138. package/dist/scripts/lib/args.js.map +1 -0
  139. package/dist/scripts/lib/cache.d.ts +185 -0
  140. package/dist/scripts/lib/cache.d.ts.map +1 -0
  141. package/dist/scripts/lib/cache.js +390 -0
  142. package/dist/scripts/lib/cache.js.map +1 -0
  143. package/dist/scripts/lib/cli/dispatch.d.ts +116 -0
  144. package/dist/scripts/lib/cli/dispatch.d.ts.map +1 -0
  145. package/dist/scripts/lib/cli/dispatch.js +206 -0
  146. package/dist/scripts/lib/cli/dispatch.js.map +1 -0
  147. package/dist/scripts/lib/cli/index.d.ts +10 -0
  148. package/dist/scripts/lib/cli/index.d.ts.map +1 -0
  149. package/dist/scripts/lib/cli/index.js +10 -0
  150. package/dist/scripts/lib/cli/index.js.map +1 -0
  151. package/dist/scripts/lib/database/ssl-config.d.ts +26 -0
  152. package/dist/scripts/lib/database/ssl-config.d.ts.map +1 -0
  153. package/dist/scripts/lib/database/ssl-config.js +47 -0
  154. package/dist/scripts/lib/database/ssl-config.js.map +1 -0
  155. package/dist/scripts/lib/errors.d.ts +218 -0
  156. package/dist/scripts/lib/errors.d.ts.map +1 -0
  157. package/dist/scripts/lib/errors.js +543 -0
  158. package/dist/scripts/lib/errors.js.map +1 -0
  159. package/dist/scripts/lib/exec.d.ts +107 -0
  160. package/dist/scripts/lib/exec.d.ts.map +1 -0
  161. package/dist/scripts/lib/exec.js +232 -0
  162. package/dist/scripts/lib/exec.js.map +1 -0
  163. package/dist/scripts/lib/index.d.ts +50 -0
  164. package/dist/scripts/lib/index.d.ts.map +1 -0
  165. package/dist/scripts/lib/index.js +65 -0
  166. package/dist/scripts/lib/index.js.map +1 -0
  167. package/dist/scripts/lib/logger.d.ts +50 -0
  168. package/dist/scripts/lib/logger.d.ts.map +1 -0
  169. package/dist/scripts/lib/logger.js +159 -0
  170. package/dist/scripts/lib/logger.js.map +1 -0
  171. package/dist/scripts/lib/output.d.ts +149 -0
  172. package/dist/scripts/lib/output.d.ts.map +1 -0
  173. package/dist/scripts/lib/output.js +263 -0
  174. package/dist/scripts/lib/output.js.map +1 -0
  175. package/dist/scripts/lib/parallel.d.ts +164 -0
  176. package/dist/scripts/lib/parallel.d.ts.map +1 -0
  177. package/dist/scripts/lib/parallel.js +355 -0
  178. package/dist/scripts/lib/parallel.js.map +1 -0
  179. package/dist/scripts/lib/paths.d.ts +92 -0
  180. package/dist/scripts/lib/paths.d.ts.map +1 -0
  181. package/dist/scripts/lib/paths.js +171 -0
  182. package/dist/scripts/lib/paths.js.map +1 -0
  183. package/dist/scripts/lib/state/adapters/memory.d.ts +42 -0
  184. package/dist/scripts/lib/state/adapters/memory.d.ts.map +1 -0
  185. package/dist/scripts/lib/state/adapters/memory.js +110 -0
  186. package/dist/scripts/lib/state/adapters/memory.js.map +1 -0
  187. package/dist/scripts/lib/state/adapters/pglite.d.ts +46 -0
  188. package/dist/scripts/lib/state/adapters/pglite.d.ts.map +1 -0
  189. package/dist/scripts/lib/state/adapters/pglite.js +256 -0
  190. package/dist/scripts/lib/state/adapters/pglite.js.map +1 -0
  191. package/dist/scripts/lib/state/index.d.ts +16 -0
  192. package/dist/scripts/lib/state/index.d.ts.map +1 -0
  193. package/dist/scripts/lib/state/index.js +16 -0
  194. package/dist/scripts/lib/state/index.js.map +1 -0
  195. package/dist/scripts/lib/state/types.d.ts +111 -0
  196. package/dist/scripts/lib/state/types.d.ts.map +1 -0
  197. package/dist/scripts/lib/state/types.js +8 -0
  198. package/dist/scripts/lib/state/types.js.map +1 -0
  199. package/dist/scripts/lib/state/workflow-state.d.ts +110 -0
  200. package/dist/scripts/lib/state/workflow-state.d.ts.map +1 -0
  201. package/dist/scripts/lib/state/workflow-state.js +331 -0
  202. package/dist/scripts/lib/state/workflow-state.js.map +1 -0
  203. package/dist/scripts/lib/telemetry.d.ts +194 -0
  204. package/dist/scripts/lib/telemetry.d.ts.map +1 -0
  205. package/dist/scripts/lib/telemetry.js +394 -0
  206. package/dist/scripts/lib/telemetry.js.map +1 -0
  207. package/dist/scripts/lib/utils.d.ts +270 -0
  208. package/dist/scripts/lib/utils.d.ts.map +1 -0
  209. package/dist/scripts/lib/utils.js +473 -0
  210. package/dist/scripts/lib/utils.js.map +1 -0
  211. package/dist/scripts/lib/validation/database.d.ts +83 -0
  212. package/dist/scripts/lib/validation/database.d.ts.map +1 -0
  213. package/dist/scripts/lib/validation/database.js +199 -0
  214. package/dist/scripts/lib/validation/database.js.map +1 -0
  215. package/dist/scripts/lib/validation/env.d.ts +80 -0
  216. package/dist/scripts/lib/validation/env.d.ts.map +1 -0
  217. package/dist/scripts/lib/validation/env.js +246 -0
  218. package/dist/scripts/lib/validation/env.js.map +1 -0
  219. package/dist/scripts/lib/validation/index.d.ts +16 -0
  220. package/dist/scripts/lib/validation/index.d.ts.map +1 -0
  221. package/dist/scripts/lib/validation/index.js +16 -0
  222. package/dist/scripts/lib/validation/index.js.map +1 -0
  223. package/dist/scripts/lib/validation/post-execution.d.ts +74 -0
  224. package/dist/scripts/lib/validation/post-execution.d.ts.map +1 -0
  225. package/dist/scripts/lib/validation/post-execution.js +110 -0
  226. package/dist/scripts/lib/validation/post-execution.js.map +1 -0
  227. package/dist/scripts/lib/validation/pre-execution.d.ts +165 -0
  228. package/dist/scripts/lib/validation/pre-execution.d.ts.map +1 -0
  229. package/dist/scripts/lib/validation/pre-execution.js +466 -0
  230. package/dist/scripts/lib/validation/pre-execution.js.map +1 -0
  231. package/dist/scripts/lib/validators/documentation-validator.d.ts +242 -0
  232. package/dist/scripts/lib/validators/documentation-validator.d.ts.map +1 -0
  233. package/dist/scripts/lib/validators/documentation-validator.js +584 -0
  234. package/dist/scripts/lib/validators/documentation-validator.js.map +1 -0
  235. package/dist/scripts/lib/validators/index.d.ts +11 -0
  236. package/dist/scripts/lib/validators/index.d.ts.map +1 -0
  237. package/dist/scripts/lib/validators/index.js +11 -0
  238. package/dist/scripts/lib/validators/index.js.map +1 -0
  239. package/docker-compose.yml +46 -0
  240. package/docs/INDEX.md +88 -0
  241. package/docs/README.md +774 -0
  242. package/docs/SETUP.md +264 -0
  243. package/docs/servers/code-validator.md +586 -0
  244. package/eslint.config.js +7 -0
  245. package/migrations/0001_add_crdt_columns.sql +8 -0
  246. package/migrations/0001_rollback.sql +6 -0
  247. package/migrations/005_performance_indexes.sql +190 -0
  248. package/migrations/backfill_crdt_meta.js +45 -0
  249. package/package.json +21 -85
  250. package/src/__tests__/hypervisor.test.ts +212 -0
  251. package/src/adapters/db.ts +180 -0
  252. package/src/config/config.json +49 -0
  253. package/src/config/index.ts +30 -0
  254. package/src/contracts.ts +221 -0
  255. package/src/hypervisor.ts +464 -0
  256. package/src/index.ts +87 -0
  257. package/src/servers/adapter.ts +643 -0
  258. package/src/servers/code-validator.ts +188 -0
  259. package/src/servers/neon.ts +103 -0
  260. package/src/servers/next-devtools.ts +230 -0
  261. package/src/servers/playwright.ts +77 -0
  262. package/src/servers/stripe.ts +99 -0
  263. package/src/servers/supabase.ts +161 -0
  264. package/src/servers/vercel.ts +100 -0
  265. package/src/servers/vultr-test.ts +97 -0
  266. package/tsconfig.json +12 -0
  267. package/vitest.config.ts +22 -0
  268. package/LICENSE +0 -202
  269. package/dist/index.js +0 -10990
  270. package/dist/index.js.map +0 -1
@@ -0,0 +1,487 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * MCP Adapter - Generic Model Context Protocol Integration
4
+ *
5
+ * Provides a unified interface for all MCP server integrations,
6
+ * eliminating code duplication across different service adapters.
7
+ *
8
+ * Usage:
9
+ * const adapter = new MCPAdapter('vercel', config)
10
+ * await adapter.execute(request)
11
+ */
12
+ import { randomBytes } from 'node:crypto';
13
+ import { registerCleanupHandler } from '@revealui/core/monitoring';
14
+ import { logger as coreLogger } from '@revealui/core/observability/logger';
15
+ import { createLogger } from '@revealui/scripts';
16
+ import { ErrorCode, ScriptError } from '@revealui/scripts/errors';
17
+ // =============================================================================
18
+ // Global Adapter Registry
19
+ // =============================================================================
20
+ /**
21
+ * Track all active MCP adapters for cleanup
22
+ */
23
+ const activeAdapters = new Set();
24
+ /**
25
+ * Dispose all active MCP adapters (cleanup on shutdown)
26
+ */
27
+ export function disposeAllAdapters() {
28
+ for (const adapter of activeAdapters) {
29
+ try {
30
+ adapter.dispose();
31
+ }
32
+ catch (error) {
33
+ coreLogger.error('Failed to dispose adapter', error instanceof Error ? error : new Error(String(error)));
34
+ }
35
+ }
36
+ activeAdapters.clear();
37
+ }
38
+ // Register cleanup handler
39
+ let cleanupHandlerRegistered = false;
40
+ function registerAdapterCleanup() {
41
+ if (cleanupHandlerRegistered)
42
+ return;
43
+ registerCleanupHandler('mcp-adapters', () => {
44
+ disposeAllAdapters();
45
+ }, 'Dispose all MCP adapters', 90);
46
+ cleanupHandlerRegistered = true;
47
+ }
48
+ /**
49
+ * In-memory idempotency cache for preventing duplicate operations.
50
+ * Each adapter instance has its own cache.
51
+ */
52
+ class IdempotencyCache {
53
+ cache = new Map();
54
+ cleanupInterval = null;
55
+ // biome-ignore lint/style/useNamingConvention: Constant should be uppercase
56
+ DEFAULT_TTL = 5 * 60 * 1000; // 5 minutes
57
+ constructor() {
58
+ // Cleanup expired entries every minute
59
+ this.cleanupInterval = setInterval(() => this.cleanup(), 60 * 1000);
60
+ }
61
+ /**
62
+ * Get a cached response by idempotency key
63
+ */
64
+ get(key) {
65
+ const cached = this.cache.get(key);
66
+ if (!cached)
67
+ return null;
68
+ if (Date.now() > cached.expiresAt) {
69
+ this.cache.delete(key);
70
+ return null;
71
+ }
72
+ return {
73
+ ...cached.response,
74
+ metadata: {
75
+ ...cached.response.metadata,
76
+ cached: true,
77
+ idempotencyKey: key,
78
+ },
79
+ };
80
+ }
81
+ /**
82
+ * Store a response with idempotency key
83
+ */
84
+ set(key, response, ttl) {
85
+ const expiresAt = Date.now() + (ttl || this.DEFAULT_TTL);
86
+ this.cache.set(key, { response, expiresAt });
87
+ }
88
+ /**
89
+ * Check if a key exists in the cache
90
+ */
91
+ has(key) {
92
+ const cached = this.cache.get(key);
93
+ if (!cached)
94
+ return false;
95
+ if (Date.now() > cached.expiresAt) {
96
+ this.cache.delete(key);
97
+ return false;
98
+ }
99
+ return true;
100
+ }
101
+ /**
102
+ * Remove expired entries
103
+ */
104
+ cleanup() {
105
+ const now = Date.now();
106
+ for (const [key, value] of this.cache.entries()) {
107
+ if (now > value.expiresAt) {
108
+ this.cache.delete(key);
109
+ }
110
+ }
111
+ }
112
+ /**
113
+ * Clear all cached entries
114
+ */
115
+ clear() {
116
+ this.cache.clear();
117
+ }
118
+ /**
119
+ * Stop the cleanup interval
120
+ */
121
+ dispose() {
122
+ if (this.cleanupInterval) {
123
+ clearInterval(this.cleanupInterval);
124
+ this.cleanupInterval = null;
125
+ }
126
+ }
127
+ /**
128
+ * Get cache statistics
129
+ */
130
+ stats() {
131
+ return {
132
+ size: this.cache.size,
133
+ keys: Array.from(this.cache.keys()),
134
+ };
135
+ }
136
+ }
137
+ export class MCPAdapter {
138
+ serviceName;
139
+ config;
140
+ logger = createLogger();
141
+ idempotencyCache = new IdempotencyCache();
142
+ constructor(serviceName, config) {
143
+ this.serviceName = serviceName;
144
+ this.config = {
145
+ timeout: 30000,
146
+ retries: 3,
147
+ environment: 'development',
148
+ ...config,
149
+ };
150
+ // Register adapter for cleanup
151
+ activeAdapters.add(this);
152
+ registerAdapterCleanup();
153
+ }
154
+ /**
155
+ * Dispose of adapter resources (cleanup idempotency cache)
156
+ */
157
+ dispose() {
158
+ this.idempotencyCache.dispose();
159
+ activeAdapters.delete(this);
160
+ }
161
+ /**
162
+ * Get idempotency cache statistics
163
+ */
164
+ getCacheStats() {
165
+ return this.idempotencyCache.stats();
166
+ }
167
+ /**
168
+ * Clear the idempotency cache
169
+ */
170
+ clearCache() {
171
+ this.idempotencyCache.clear();
172
+ }
173
+ /**
174
+ * Execute an MCP request
175
+ *
176
+ * If an idempotencyKey is provided in options, the request will be checked
177
+ * against the cache. If a cached response exists, it will be returned
178
+ * immediately. Otherwise, the request will be executed and the response
179
+ * will be cached for future duplicate requests.
180
+ */
181
+ async execute(request) {
182
+ const startTime = Date.now();
183
+ let attempts = 0;
184
+ const idempotencyKey = request.options?.idempotencyKey;
185
+ try {
186
+ this.validateRequest(request);
187
+ // Check idempotency cache first
188
+ if (idempotencyKey) {
189
+ const cached = this.idempotencyCache.get(idempotencyKey);
190
+ if (cached) {
191
+ this.logger.info(`[${this.serviceName}] Returning cached response for idempotency key: ${idempotencyKey}`);
192
+ return cached;
193
+ }
194
+ }
195
+ if (request.options?.dryRun) {
196
+ return this.createDryRunResponse(request);
197
+ }
198
+ while (attempts < (request.options?.retries || this.config.retries || 3)) {
199
+ attempts++;
200
+ try {
201
+ this.logger.info(`[${this.serviceName}] Executing ${request.action} (attempt ${attempts})`);
202
+ const result = await this.executeRequest(request);
203
+ const duration = Date.now() - startTime;
204
+ const response = {
205
+ success: true,
206
+ data: result,
207
+ metadata: {
208
+ duration,
209
+ retries: attempts - 1,
210
+ service: this.serviceName,
211
+ ...(idempotencyKey && { idempotencyKey }),
212
+ },
213
+ };
214
+ // Cache successful response if idempotency key provided
215
+ if (idempotencyKey) {
216
+ this.idempotencyCache.set(idempotencyKey, response, request.options?.idempotencyTTL);
217
+ }
218
+ return response;
219
+ }
220
+ catch (error) {
221
+ this.logger.warning(`[${this.serviceName}] Attempt ${attempts} failed: ${error}`);
222
+ if (attempts >= (request.options?.retries || this.config.retries || 3)) {
223
+ throw error;
224
+ }
225
+ // Wait before retry (exponential backoff)
226
+ const delay = Math.min(1000 * 2 ** (attempts - 1), 10000);
227
+ await new Promise((resolve) => setTimeout(resolve, delay));
228
+ }
229
+ }
230
+ throw new ScriptError('All retry attempts exhausted', ErrorCode.TIMEOUT_ERROR);
231
+ }
232
+ catch (error) {
233
+ const duration = Date.now() - startTime;
234
+ const response = {
235
+ success: false,
236
+ error: error instanceof Error ? error.message : String(error),
237
+ metadata: {
238
+ duration,
239
+ retries: attempts,
240
+ service: this.serviceName,
241
+ ...(idempotencyKey && { idempotencyKey }),
242
+ },
243
+ };
244
+ // Also cache failed responses to prevent duplicate attempts
245
+ // This prevents the same failing request from being retried repeatedly
246
+ if (idempotencyKey) {
247
+ this.idempotencyCache.set(idempotencyKey, response, request.options?.idempotencyTTL);
248
+ }
249
+ return response;
250
+ }
251
+ }
252
+ /**
253
+ * Validate the incoming request
254
+ */
255
+ validateRequest(request) {
256
+ if (!request.action) {
257
+ throw new ScriptError('Request must include an action', ErrorCode.VALIDATION_ERROR);
258
+ }
259
+ if (!this.isValidAction(request.action)) {
260
+ throw new ScriptError(`Unsupported action: ${request.action}`, ErrorCode.VALIDATION_ERROR);
261
+ }
262
+ }
263
+ /**
264
+ * Create a dry-run response
265
+ */
266
+ createDryRunResponse(request) {
267
+ return {
268
+ success: true,
269
+ data: {
270
+ dryRun: true,
271
+ action: request.action,
272
+ parameters: request.parameters,
273
+ message: `Would execute ${request.action} on ${this.serviceName}`,
274
+ },
275
+ };
276
+ }
277
+ /**
278
+ * Get authentication headers for API calls
279
+ */
280
+ getAuthHeaders() {
281
+ const headers = {
282
+ 'Content-Type': 'application/json',
283
+ 'User-Agent': `RevealUI-MCP/${this.serviceName}`,
284
+ };
285
+ if (this.config.apiKey) {
286
+ // Different services use different header names
287
+ const headerName = this.getAuthHeaderName();
288
+ headers[headerName] = this.config.apiKey;
289
+ }
290
+ return headers;
291
+ }
292
+ /**
293
+ * Make an HTTP request with proper error handling
294
+ */
295
+ async makeRequest(method, url, data) {
296
+ const headers = this.getAuthHeaders();
297
+ const timeout = this.config.timeout || 30000;
298
+ const controller = new AbortController();
299
+ const timer = setTimeout(() => controller.abort(), timeout);
300
+ try {
301
+ const response = await fetch(url, {
302
+ method,
303
+ headers,
304
+ body: data && (method === 'POST' || method === 'PUT') ? JSON.stringify(data) : undefined,
305
+ signal: controller.signal,
306
+ });
307
+ if (!response.ok) {
308
+ throw new ScriptError(`HTTP ${response.status} ${response.statusText}`, ErrorCode.NETWORK_ERROR);
309
+ }
310
+ const contentType = response.headers.get('content-type') ?? '';
311
+ if (contentType.includes('application/json')) {
312
+ return await response.json();
313
+ }
314
+ return await response.text();
315
+ }
316
+ catch (error) {
317
+ if (error instanceof ScriptError)
318
+ throw error;
319
+ throw new ScriptError(`Request to ${this.serviceName} failed: ${error}`, ErrorCode.NETWORK_ERROR);
320
+ }
321
+ finally {
322
+ clearTimeout(timer);
323
+ }
324
+ }
325
+ }
326
+ // Specific service adapters
327
+ export class VercelAdapter extends MCPAdapter {
328
+ constructor(config) {
329
+ super('vercel', config);
330
+ }
331
+ isValidAction(action) {
332
+ return ['deploy', 'list-deployments', 'get-deployment', 'delete-deployment'].includes(action);
333
+ }
334
+ getAuthHeaderName() {
335
+ return 'Authorization';
336
+ }
337
+ async executeRequest(request) {
338
+ const baseUrl = this.config.baseUrl || 'https://api.vercel.com';
339
+ switch (request.action) {
340
+ case 'deploy':
341
+ return this.makeRequest('POST', `${baseUrl}/v13/deployments`, request.parameters);
342
+ case 'list-deployments':
343
+ return this.makeRequest('GET', `${baseUrl}/v6/deployments`);
344
+ case 'get-deployment': {
345
+ const { id } = request.parameters || {};
346
+ if (!id)
347
+ throw new ScriptError('Deployment ID required', ErrorCode.VALIDATION_ERROR);
348
+ return this.makeRequest('GET', `${baseUrl}/v13/deployments/${String(id)}`);
349
+ }
350
+ case 'delete-deployment': {
351
+ const { deploymentId } = request.parameters || {};
352
+ if (!deploymentId)
353
+ throw new ScriptError('Deployment ID required', ErrorCode.VALIDATION_ERROR);
354
+ return this.makeRequest('DELETE', `${baseUrl}/v13/deployments/${String(deploymentId)}`);
355
+ }
356
+ default:
357
+ throw new ScriptError(`Unsupported action: ${request.action}`, ErrorCode.VALIDATION_ERROR);
358
+ }
359
+ }
360
+ }
361
+ export class StripeAdapter extends MCPAdapter {
362
+ constructor(config) {
363
+ super('stripe', config);
364
+ }
365
+ isValidAction(action) {
366
+ return [
367
+ 'create-payment-intent',
368
+ 'list-payment-intents',
369
+ 'create-customer',
370
+ 'list-customers',
371
+ ].includes(action);
372
+ }
373
+ getAuthHeaderName() {
374
+ return 'Authorization';
375
+ }
376
+ async executeRequest(request) {
377
+ const baseUrl = this.config.baseUrl || 'https://api.stripe.com/v1';
378
+ switch (request.action) {
379
+ case 'create-payment-intent':
380
+ return this.makeRequest('POST', `${baseUrl}/payment_intents`, request.parameters);
381
+ case 'list-payment-intents':
382
+ return this.makeRequest('GET', `${baseUrl}/payment_intents`);
383
+ case 'create-customer':
384
+ return this.makeRequest('POST', `${baseUrl}/customers`, request.parameters);
385
+ case 'list-customers':
386
+ return this.makeRequest('GET', `${baseUrl}/customers`);
387
+ default:
388
+ throw new ScriptError(`Unsupported action: ${request.action}`, ErrorCode.VALIDATION_ERROR);
389
+ }
390
+ }
391
+ }
392
+ export class NeonAdapter extends MCPAdapter {
393
+ constructor(config) {
394
+ super('neon', config);
395
+ }
396
+ isValidAction(action) {
397
+ return ['list-projects', 'create-project', 'get-project', 'delete-project'].includes(action);
398
+ }
399
+ getAuthHeaderName() {
400
+ return 'Authorization';
401
+ }
402
+ async executeRequest(request) {
403
+ const baseUrl = this.config.baseUrl || 'https://console.neon.tech/api/v2';
404
+ switch (request.action) {
405
+ case 'list-projects':
406
+ return this.makeRequest('GET', `${baseUrl}/projects`);
407
+ case 'create-project':
408
+ return this.makeRequest('POST', `${baseUrl}/projects`, request.parameters);
409
+ case 'get-project': {
410
+ const { id } = request.parameters || {};
411
+ if (!id)
412
+ throw new ScriptError('Project ID required', ErrorCode.VALIDATION_ERROR);
413
+ return this.makeRequest('GET', `${baseUrl}/projects/${String(id)}`);
414
+ }
415
+ case 'delete-project': {
416
+ const { projectId } = request.parameters || {};
417
+ if (!projectId)
418
+ throw new ScriptError('Project ID required', ErrorCode.VALIDATION_ERROR);
419
+ return this.makeRequest('DELETE', `${baseUrl}/projects/${String(projectId)}`);
420
+ }
421
+ default:
422
+ throw new ScriptError(`Unsupported action: ${request.action}`, ErrorCode.VALIDATION_ERROR);
423
+ }
424
+ }
425
+ }
426
+ // Factory function to create adapters
427
+ export function createMCPAdapter(service, config) {
428
+ switch (service.toLowerCase()) {
429
+ case 'vercel':
430
+ return new VercelAdapter(config);
431
+ case 'stripe':
432
+ return new StripeAdapter(config);
433
+ case 'neon':
434
+ return new NeonAdapter(config);
435
+ default:
436
+ throw new ScriptError(`Unsupported MCP service: ${service}`, ErrorCode.CONFIG_ERROR);
437
+ }
438
+ }
439
+ /**
440
+ * Generate an idempotency key based on the request content.
441
+ *
442
+ * This creates a deterministic key from the action and parameters,
443
+ * so identical requests will get the same key.
444
+ *
445
+ * @example
446
+ * ```typescript
447
+ * const key = generateIdempotencyKey({
448
+ * action: 'deploy',
449
+ * parameters: { projectId: '123' }
450
+ * })
451
+ * // Returns: "deploy:a1b2c3d4e5f6..."
452
+ * ```
453
+ */
454
+ export function generateIdempotencyKey(request) {
455
+ const content = JSON.stringify({
456
+ action: request.action,
457
+ parameters: request.parameters || {},
458
+ });
459
+ // Simple hash function for generating consistent keys
460
+ let hash = 0;
461
+ for (let i = 0; i < content.length; i++) {
462
+ const char = content.charCodeAt(i);
463
+ hash = (hash << 5) - hash + char;
464
+ hash = hash & hash; // Convert to 32-bit integer
465
+ }
466
+ // Convert to positive hex string
467
+ const hashHex = Math.abs(hash).toString(16).padStart(8, '0');
468
+ return `${request.action}:${hashHex}`;
469
+ }
470
+ /**
471
+ * Generate a unique idempotency key with timestamp.
472
+ *
473
+ * Use this when you want each request to be unique but still
474
+ * want idempotency protection against rapid duplicate submissions.
475
+ *
476
+ * @example
477
+ * ```typescript
478
+ * const key = generateUniqueIdempotencyKey('deploy')
479
+ * // Returns: "deploy:1706536800000:a1b2c3d4"
480
+ * ```
481
+ */
482
+ export function generateUniqueIdempotencyKey(action) {
483
+ const timestamp = Date.now();
484
+ const random = randomBytes(6).toString('hex');
485
+ return `${action}:${timestamp}:${random}`;
486
+ }
487
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../../src/servers/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Code Validator MCP Server
4
+ *
5
+ * Model Context Protocol server that exposes code validation tools
6
+ * for AI assistants to validate code before writing to disk.
7
+ *
8
+ * This server provides:
9
+ * - validate_code: Validate code content against standards
10
+ * - get_standards: Get current code standards configuration
11
+ *
12
+ * Usage:
13
+ * Add to Claude Code MCP config:
14
+ * {
15
+ * "mcpServers": {
16
+ * "revealui-validator": {
17
+ * "command": "node",
18
+ * "args": ["./packages/mcp/src/servers/code-validator.ts"]
19
+ * }
20
+ * }
21
+ * }
22
+ */
23
+ export {};
24
+ //# sourceMappingURL=code-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-validator.d.ts","sourceRoot":"","sources":["../../../../../src/servers/code-validator.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;GAoBG"}