@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 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../../../../dev/src/code-validator/validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * DB adapter for MCP.
3
+ * - `connectPglite()` initializes ElectricSQL/pglite client with CRDT metadata.
4
+ * - `connectPostgres()` creates a standard Postgres client with Electric metadata.
5
+ * - `createMcpDbClient()` factory that selects adapter based on config.
6
+ *
7
+ * Uses @revealui/contracts as the single source of truth for CRDT operation types.
8
+ */
9
+ import type { CrdtOperationsInsert, CrdtOperationsRow } from '@revealui/contracts';
10
+ export interface QueryResult<T = Record<string, unknown>> {
11
+ rows: T[];
12
+ affectedRows?: number;
13
+ }
14
+ export type McpDbClient = {
15
+ query: <T = Record<string, unknown>>(sql: string, params?: unknown[]) => Promise<QueryResult<T>>;
16
+ close: () => Promise<void>;
17
+ };
18
+ /** Re-export contracts CRDT types for consumers */
19
+ export type { CrdtOperationsRow, CrdtOperationsInsert };
20
+ /**
21
+ * Connect to PGlite (embedded PostgreSQL) for local development/testing.
22
+ * Uses dynamic import to avoid bundling @electric-sql/pglite when not needed.
23
+ *
24
+ * @param options - Optional connection options
25
+ * @param options.dataDir - Override the default data directory. Use ':memory:' for in-memory.
26
+ */
27
+ export declare function connectPglite(options?: {
28
+ dataDir?: string;
29
+ }): Promise<McpDbClient>;
30
+ /**
31
+ * Connect to PostgreSQL for production use.
32
+ * Supports Neon, Supabase, and generic PostgreSQL with SSL.
33
+ */
34
+ export declare function connectPostgres(): Promise<McpDbClient>;
35
+ /**
36
+ * Factory function that creates an MCP database client based on configuration.
37
+ * Reads `persistenceDriver` from getMcpConfig() to determine which adapter to use.
38
+ */
39
+ export declare function createMcpDbClient(): Promise<McpDbClient>;
40
+ declare const _default: {
41
+ connectPglite: typeof connectPglite;
42
+ connectPostgres: typeof connectPostgres;
43
+ createMcpDbClient: typeof createMcpDbClient;
44
+ };
45
+ export default _default;
46
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/db.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAGlF,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtD,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;IAChG,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B,CAAA;AAED,mDAAmD;AACnD,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAA;AA8BvD;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CA8CxF;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC,CA+C5D;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CAS9D;;;;;;AAED,wBAAoE"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * DB adapter for MCP.
3
+ * - `connectPglite()` initializes ElectricSQL/pglite client with CRDT metadata.
4
+ * - `connectPostgres()` creates a standard Postgres client with Electric metadata.
5
+ * - `createMcpDbClient()` factory that selects adapter based on config.
6
+ *
7
+ * Uses @revealui/contracts as the single source of truth for CRDT operation types.
8
+ */
9
+ import { mkdir } from 'node:fs/promises';
10
+ import { dirname } from 'node:path';
11
+ import getMcpConfig from '@revealui/config/mcp';
12
+ import { getSSLConfig } from '@revealui/core/database/ssl-config';
13
+ // CRDT operations table schema for conflict-free replication
14
+ const CRDT_TABLE_SQL = `
15
+ CREATE TABLE IF NOT EXISTS crdt_operations (
16
+ id TEXT PRIMARY KEY,
17
+ document_id TEXT NOT NULL,
18
+ operation_type TEXT NOT NULL,
19
+ payload JSONB NOT NULL,
20
+ vector_clock JSONB NOT NULL,
21
+ node_id TEXT NOT NULL,
22
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
23
+ applied_at TIMESTAMPTZ
24
+ );
25
+ CREATE INDEX IF NOT EXISTS idx_crdt_ops_document ON crdt_operations(document_id);
26
+ CREATE INDEX IF NOT EXISTS idx_crdt_ops_node ON crdt_operations(node_id);
27
+ CREATE INDEX IF NOT EXISTS idx_crdt_ops_created ON crdt_operations(created_at DESC);
28
+ `;
29
+ /**
30
+ * Connect to PGlite (embedded PostgreSQL) for local development/testing.
31
+ * Uses dynamic import to avoid bundling @electric-sql/pglite when not needed.
32
+ *
33
+ * @param options - Optional connection options
34
+ * @param options.dataDir - Override the default data directory. Use ':memory:' for in-memory.
35
+ */
36
+ export async function connectPglite(options) {
37
+ const cfg = getMcpConfig();
38
+ // Determine data directory from options, config, or default
39
+ // Use ':memory:' for in-memory database (useful for testing)
40
+ const dataDir = options?.dataDir || cfg.electricDatabaseUrl || '.revealui/mcp/pglite';
41
+ let db;
42
+ try {
43
+ // Ensure directory exists if not in-memory
44
+ if (dataDir !== ':memory:') {
45
+ await mkdir(dirname(dataDir), { recursive: true });
46
+ }
47
+ const { PGlite } = await import('@electric-sql/pglite');
48
+ db = new PGlite(dataDir);
49
+ await db.waitReady;
50
+ }
51
+ catch (error) {
52
+ const err = error;
53
+ if (err.message?.includes('Cannot find module') || err.message?.includes('MODULE_NOT_FOUND')) {
54
+ throw new Error('@electric-sql/pglite is not installed. Run: pnpm add -D @electric-sql/pglite');
55
+ }
56
+ throw error;
57
+ }
58
+ // Create CRDT operations table
59
+ await db.exec(CRDT_TABLE_SQL);
60
+ return {
61
+ async query(sql, params) {
62
+ const result = await db.query(sql, params);
63
+ return {
64
+ rows: result.rows,
65
+ affectedRows: result.affectedRows,
66
+ };
67
+ },
68
+ async close() {
69
+ await db.close();
70
+ },
71
+ };
72
+ }
73
+ /**
74
+ * Connect to PostgreSQL for production use.
75
+ * Supports Neon, Supabase, and generic PostgreSQL with SSL.
76
+ */
77
+ export async function connectPostgres() {
78
+ const cfg = getMcpConfig();
79
+ const connectionString = cfg.electricDatabaseUrl ||
80
+ process.env.DATABASE_URL ||
81
+ process.env.POSTGRES_URL ||
82
+ process.env.SUPABASE_DATABASE_URI;
83
+ if (!connectionString) {
84
+ throw new Error('Database connection string not found. Set ELECTRIC_DATABASE_URL, DATABASE_URL, POSTGRES_URL, or SUPABASE_DATABASE_URI.');
85
+ }
86
+ const { Pool } = await import('pg');
87
+ const pool = new Pool({
88
+ connectionString,
89
+ ssl: getSSLConfig(connectionString),
90
+ });
91
+ // Test connection
92
+ const client = await pool.connect();
93
+ try {
94
+ await client.query('SELECT 1');
95
+ }
96
+ finally {
97
+ client.release();
98
+ }
99
+ // Create CRDT operations table
100
+ await pool.query(CRDT_TABLE_SQL);
101
+ return {
102
+ async query(sql, params) {
103
+ const result = await pool.query(sql, params);
104
+ return {
105
+ rows: result.rows,
106
+ affectedRows: result.rowCount ?? undefined,
107
+ };
108
+ },
109
+ async close() {
110
+ await pool.end();
111
+ },
112
+ };
113
+ }
114
+ /**
115
+ * Factory function that creates an MCP database client based on configuration.
116
+ * Reads `persistenceDriver` from getMcpConfig() to determine which adapter to use.
117
+ */
118
+ export async function createMcpDbClient() {
119
+ const cfg = getMcpConfig();
120
+ if (cfg.persistenceDriver === 'postgres') {
121
+ return connectPostgres();
122
+ }
123
+ // Default to pglite for local development
124
+ return connectPglite();
125
+ }
126
+ export default { connectPglite, connectPostgres, createMcpDbClient };
127
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../../../src/adapters/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export type McpMetricsMode = 'logs' | 'otel' | 'prometheus';
2
+ export interface McpConfig {
3
+ persistenceDriver: 'pglite' | 'postgres';
4
+ electricDatabaseUrl: string | null;
5
+ electricApiKey: string | null;
6
+ metricsMode: McpMetricsMode;
7
+ pgvectorEnabled: boolean;
8
+ }
9
+ export declare function getMcpConfig(): McpConfig;
10
+ export default getMcpConfig;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/config/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,CAAA;AAE3D,MAAM,WAAW,SAAS;IACxB,iBAAiB,EAAE,QAAQ,GAAG,UAAU,CAAA;IACxC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,WAAW,EAAE,cAAc,CAAA;IAC3B,eAAe,EAAE,OAAO,CAAA;CACzB;AAOD,wBAAgB,YAAY,IAAI,SAAS,CAYxC;AAED,eAAe,YAAY,CAAA"}
@@ -0,0 +1,18 @@
1
+ function boolFromEnv(v, fallback = false) {
2
+ if (v === undefined)
3
+ return fallback;
4
+ return ['1', 'true', 'yes'].includes(v.toLowerCase());
5
+ }
6
+ export function getMcpConfig() {
7
+ const persistenceDriver = process.env.MCP_PERSISTENCE_DRIVER || 'pglite';
8
+ const metricsMode = process.env.MCP_METRICS_MODE || 'logs';
9
+ return {
10
+ persistenceDriver,
11
+ electricDatabaseUrl: process.env.ELECTRIC_DATABASE_URL || null,
12
+ electricApiKey: process.env.ELECTRIC_API_KEY || null,
13
+ metricsMode,
14
+ pgvectorEnabled: boolFromEnv(process.env.PGVECTOR_ENABLED, false),
15
+ };
16
+ }
17
+ export default getMcpConfig;
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/config/index.ts"],"names":[],"mappings":"AAUA,SAAS,WAAW,CAAC,CAAqB,EAAE,QAAQ,GAAG,KAAK;IAC1D,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAA;IACpC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,iBAAiB,GACpB,OAAO,CAAC,GAAG,CAAC,sBAAgD,IAAI,QAAQ,CAAA;IAC3E,MAAM,WAAW,GAAI,OAAO,CAAC,GAAG,CAAC,gBAAmC,IAAI,MAAM,CAAA;IAE9E,OAAO;QACL,iBAAiB;QACjB,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,IAAI;QAC9D,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI;QACpD,WAAW;QACX,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC;KAClE,CAAA;AACH,CAAC;AAED,eAAe,YAAY,CAAA"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * MCP Contracts
3
+ *
4
+ * Zod schemas for MCP-specific types, built on top of @revealui/contracts.
5
+ * These provide runtime validation for MCP request/response payloads
6
+ * and bridge MCP SDK tool definitions to contracts ToolDefinition.
7
+ */
8
+ import { type A2AAgentCard, type A2AAuth, type AgentDefinition, type ToolDefinition, z } from '@revealui/contracts';
9
+ /**
10
+ * Schema for MCP request options (idempotency, retry, dry-run)
11
+ */
12
+ export declare const MCPRequestOptionsSchema: z.ZodObject<{
13
+ timeout: z.ZodOptional<z.ZodNumber>;
14
+ retries: z.ZodOptional<z.ZodNumber>;
15
+ dryRun: z.ZodOptional<z.ZodBoolean>;
16
+ idempotencyKey: z.ZodOptional<z.ZodString>;
17
+ idempotencyTTL: z.ZodOptional<z.ZodNumber>;
18
+ }, z.core.$strip>;
19
+ export type MCPRequestOptions = z.infer<typeof MCPRequestOptionsSchema>;
20
+ /**
21
+ * Schema for an MCP request payload
22
+ */
23
+ export declare const MCPRequestSchema: z.ZodObject<{
24
+ action: z.ZodString;
25
+ parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
26
+ options: z.ZodOptional<z.ZodObject<{
27
+ timeout: z.ZodOptional<z.ZodNumber>;
28
+ retries: z.ZodOptional<z.ZodNumber>;
29
+ dryRun: z.ZodOptional<z.ZodBoolean>;
30
+ idempotencyKey: z.ZodOptional<z.ZodString>;
31
+ idempotencyTTL: z.ZodOptional<z.ZodNumber>;
32
+ }, z.core.$strip>>;
33
+ }, z.core.$strip>;
34
+ export type MCPRequest = z.infer<typeof MCPRequestSchema>;
35
+ /**
36
+ * Schema for MCP response metadata
37
+ */
38
+ export declare const MCPResponseMetadataSchema: z.ZodObject<{
39
+ duration: z.ZodNumber;
40
+ retries: z.ZodNumber;
41
+ service: z.ZodString;
42
+ cached: z.ZodOptional<z.ZodBoolean>;
43
+ idempotencyKey: z.ZodOptional<z.ZodString>;
44
+ }, z.core.$strip>;
45
+ export type MCPResponseMetadata = z.infer<typeof MCPResponseMetadataSchema>;
46
+ /**
47
+ * Schema for an MCP response payload
48
+ */
49
+ export declare const MCPResponseSchema: z.ZodObject<{
50
+ success: z.ZodBoolean;
51
+ data: z.ZodOptional<z.ZodUnknown>;
52
+ error: z.ZodOptional<z.ZodString>;
53
+ metadata: z.ZodOptional<z.ZodObject<{
54
+ duration: z.ZodNumber;
55
+ retries: z.ZodNumber;
56
+ service: z.ZodString;
57
+ cached: z.ZodOptional<z.ZodBoolean>;
58
+ idempotencyKey: z.ZodOptional<z.ZodString>;
59
+ }, z.core.$strip>>;
60
+ }, z.core.$strip>;
61
+ export type MCPResponse = z.infer<typeof MCPResponseSchema>;
62
+ /**
63
+ * Schema for MCP adapter configuration
64
+ */
65
+ export declare const MCPAdapterConfigSchema: z.ZodObject<{
66
+ apiKey: z.ZodOptional<z.ZodString>;
67
+ baseUrl: z.ZodOptional<z.ZodString>;
68
+ timeout: z.ZodOptional<z.ZodNumber>;
69
+ retries: z.ZodOptional<z.ZodNumber>;
70
+ environment: z.ZodOptional<z.ZodEnum<{
71
+ development: "development";
72
+ production: "production";
73
+ }>>;
74
+ }, z.core.$strip>;
75
+ export type MCPAdapterConfig = z.infer<typeof MCPAdapterConfigSchema>;
76
+ /**
77
+ * Converts an MCP SDK tool definition (JSON Schema-based) to a contracts ToolDefinition.
78
+ *
79
+ * The MCP SDK uses JSON Schema for tool `inputSchema`, while contracts uses
80
+ * a structured ToolParameter format. This bridge maps between them.
81
+ */
82
+ export declare function mcpToolToContractsToolDefinition(mcpTool: {
83
+ name: string;
84
+ description?: string;
85
+ inputSchema?: {
86
+ type: string;
87
+ properties?: Record<string, {
88
+ type?: string;
89
+ description?: string;
90
+ default?: unknown;
91
+ enum?: string[];
92
+ }>;
93
+ required?: string[];
94
+ };
95
+ }): ToolDefinition;
96
+ /**
97
+ * Converts a contracts ToolDefinition back to an MCP SDK-compatible tool shape.
98
+ * Useful for registering contracts-defined tools with MCP servers.
99
+ */
100
+ export declare function contractsToolDefinitionToMcpTool(tool: ToolDefinition): {
101
+ name: string;
102
+ description: string;
103
+ inputSchema: {
104
+ type: 'object';
105
+ properties: Record<string, {
106
+ type: string;
107
+ description: string;
108
+ default?: unknown;
109
+ enum?: string[];
110
+ }>;
111
+ required: string[];
112
+ };
113
+ };
114
+ /**
115
+ * Converts a RevealUI AgentDefinition to a Google A2A AgentCard.
116
+ * Wraps the contracts-level `agentDefinitionToCard` with optional MCP-specific overrides.
117
+ *
118
+ * @param agent - The agent definition (source of truth)
119
+ * @param baseUrl - The server base URL (e.g. https://api.revealui.com)
120
+ * @param opts - Optional overrides for auth scheme and streaming capability
121
+ */
122
+ export declare function agentDefinitionToAgentCard(agent: AgentDefinition, baseUrl: string, opts?: {
123
+ authScheme?: A2AAuth;
124
+ streaming?: boolean;
125
+ }): A2AAgentCard;
126
+ /**
127
+ * Converts all tools in a RevealUI AgentDefinition to MCP tool specs.
128
+ * Uses `contractsToolDefinitionToMcpTool` for each tool.
129
+ */
130
+ export declare function agentDefinitionToMcpTools(agent: AgentDefinition): ReturnType<typeof contractsToolDefinitionToMcpTool>[];
131
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../../src/contracts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,eAAe,EAEpB,KAAK,cAAc,EAGnB,CAAC,EACF,MAAM,qBAAqB,CAAA;AAM5B;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;iBAMlC,CAAA;AAEF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAEvE;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;iBAI3B,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAEzD;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;iBAMpC,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE3E;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;iBAK5B,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;iBAMjC,CAAA;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAMrE;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE;IACxD,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,CAAC,EAAE,MAAM,CACjB,MAAM,EACN;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAC5E,CAAA;QACD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KACpB,CAAA;CACF,GAAG,cAAc,CAuBjB;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,cAAc,GAAG;IACtE,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAA;QACd,UAAU,EAAE,MAAM,CAChB,MAAM,EACN;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAC1E,CAAA;QACD,QAAQ,EAAE,MAAM,EAAE,CAAA;KACnB,CAAA;CACF,CA6BA;AAMD;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GACnD,YAAY,CAiBd;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,eAAe,GACrB,UAAU,CAAC,OAAO,gCAAgC,CAAC,EAAE,CAEvD"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * MCP Contracts
3
+ *
4
+ * Zod schemas for MCP-specific types, built on top of @revealui/contracts.
5
+ * These provide runtime validation for MCP request/response payloads
6
+ * and bridge MCP SDK tool definitions to contracts ToolDefinition.
7
+ */
8
+ import { agentDefinitionToCard, ToolDefinitionSchema, z, } from '@revealui/contracts';
9
+ // =============================================================================
10
+ // MCP Request / Response Schemas
11
+ // =============================================================================
12
+ /**
13
+ * Schema for MCP request options (idempotency, retry, dry-run)
14
+ */
15
+ export const MCPRequestOptionsSchema = z.object({
16
+ timeout: z.number().positive().optional(),
17
+ retries: z.number().int().nonnegative().optional(),
18
+ dryRun: z.boolean().optional(),
19
+ idempotencyKey: z.string().optional(),
20
+ idempotencyTTL: z.number().positive().optional(),
21
+ });
22
+ /**
23
+ * Schema for an MCP request payload
24
+ */
25
+ export const MCPRequestSchema = z.object({
26
+ action: z.string().min(1),
27
+ parameters: z.record(z.string(), z.unknown()).optional(),
28
+ options: MCPRequestOptionsSchema.optional(),
29
+ });
30
+ /**
31
+ * Schema for MCP response metadata
32
+ */
33
+ export const MCPResponseMetadataSchema = z.object({
34
+ duration: z.number().nonnegative(),
35
+ retries: z.number().int().nonnegative(),
36
+ service: z.string(),
37
+ cached: z.boolean().optional(),
38
+ idempotencyKey: z.string().optional(),
39
+ });
40
+ /**
41
+ * Schema for an MCP response payload
42
+ */
43
+ export const MCPResponseSchema = z.object({
44
+ success: z.boolean(),
45
+ data: z.unknown().optional(),
46
+ error: z.string().optional(),
47
+ metadata: MCPResponseMetadataSchema.optional(),
48
+ });
49
+ /**
50
+ * Schema for MCP adapter configuration
51
+ */
52
+ export const MCPAdapterConfigSchema = z.object({
53
+ apiKey: z.string().optional(),
54
+ baseUrl: z.string().url().optional(),
55
+ timeout: z.number().positive().optional(),
56
+ retries: z.number().int().nonnegative().optional(),
57
+ environment: z.enum(['development', 'production']).optional(),
58
+ });
59
+ // =============================================================================
60
+ // Tool Definition Bridge
61
+ // =============================================================================
62
+ /**
63
+ * Converts an MCP SDK tool definition (JSON Schema-based) to a contracts ToolDefinition.
64
+ *
65
+ * The MCP SDK uses JSON Schema for tool `inputSchema`, while contracts uses
66
+ * a structured ToolParameter format. This bridge maps between them.
67
+ */
68
+ export function mcpToolToContractsToolDefinition(mcpTool) {
69
+ const parameters = {};
70
+ if (mcpTool.inputSchema?.properties) {
71
+ const required = new Set(mcpTool.inputSchema.required ?? []);
72
+ for (const [key, prop] of Object.entries(mcpTool.inputSchema.properties)) {
73
+ parameters[key] = {
74
+ type: prop.type ?? 'string',
75
+ description: prop.description ?? '',
76
+ required: required.has(key),
77
+ ...(prop.default !== undefined && { default: prop.default }),
78
+ ...(prop.enum && { enum: prop.enum }),
79
+ };
80
+ }
81
+ }
82
+ return ToolDefinitionSchema.parse({
83
+ name: mcpTool.name,
84
+ description: mcpTool.description ?? `MCP tool: ${mcpTool.name}`,
85
+ parameters,
86
+ destructive: false,
87
+ });
88
+ }
89
+ /**
90
+ * Converts a contracts ToolDefinition back to an MCP SDK-compatible tool shape.
91
+ * Useful for registering contracts-defined tools with MCP servers.
92
+ */
93
+ export function contractsToolDefinitionToMcpTool(tool) {
94
+ const properties = {};
95
+ const required = [];
96
+ for (const [key, param] of Object.entries(tool.parameters)) {
97
+ properties[key] = {
98
+ type: param.type,
99
+ description: param.description,
100
+ ...(param.default !== undefined && { default: param.default }),
101
+ ...(param.enum && { enum: param.enum }),
102
+ };
103
+ if (param.required) {
104
+ required.push(key);
105
+ }
106
+ }
107
+ return {
108
+ name: tool.name,
109
+ description: tool.description,
110
+ inputSchema: {
111
+ type: 'object',
112
+ properties,
113
+ required,
114
+ },
115
+ };
116
+ }
117
+ // =============================================================================
118
+ // Agent Card Bridge
119
+ // =============================================================================
120
+ /**
121
+ * Converts a RevealUI AgentDefinition to a Google A2A AgentCard.
122
+ * Wraps the contracts-level `agentDefinitionToCard` with optional MCP-specific overrides.
123
+ *
124
+ * @param agent - The agent definition (source of truth)
125
+ * @param baseUrl - The server base URL (e.g. https://api.revealui.com)
126
+ * @param opts - Optional overrides for auth scheme and streaming capability
127
+ */
128
+ export function agentDefinitionToAgentCard(agent, baseUrl, opts) {
129
+ const card = agentDefinitionToCard(agent, baseUrl);
130
+ if (!opts)
131
+ return card;
132
+ const { authScheme, streaming } = opts;
133
+ return {
134
+ ...card,
135
+ ...(authScheme !== undefined && { authentication: authScheme }),
136
+ capabilities: {
137
+ ...(card.capabilities ?? {
138
+ streaming: false,
139
+ pushNotifications: false,
140
+ stateTransitionHistory: false,
141
+ }),
142
+ streaming: streaming ?? card.capabilities?.streaming ?? false,
143
+ },
144
+ };
145
+ }
146
+ /**
147
+ * Converts all tools in a RevealUI AgentDefinition to MCP tool specs.
148
+ * Uses `contractsToolDefinitionToMcpTool` for each tool.
149
+ */
150
+ export function agentDefinitionToMcpTools(agent) {
151
+ return agent.tools.map(contractsToolDefinitionToMcpTool);
152
+ }
153
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../../src/contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * MCP Hypervisor
3
+ *
4
+ * Manages N running MCP server processes, pings them for liveness, and
5
+ * dynamically exposes their tools at runtime. Inspired by the
6
+ * MCPCompatibilityLayer/MCPHypervisor pattern from AnythingLLM.
7
+ *
8
+ * Architecture:
9
+ * - Singleton: one hypervisor per process manages all MCP servers
10
+ * - Each server is spawned with piped stdio for JSON-RPC communication
11
+ * - Tool names are namespaced: @@mcp_{serverName}_{toolName}
12
+ * - Health check loop: every 60s, process.exitCode check + tools/list probe
13
+ *
14
+ * Wire format: newline-delimited JSON-RPC 2.0 (stdin/stdout)
15
+ */
16
+ export interface MCPServerConfig {
17
+ /** Unique name for this server (used in tool namespacing) */
18
+ name: string;
19
+ /** Executable to run (e.g. 'node', 'pnpm') */
20
+ command: string;
21
+ /** Arguments to the command */
22
+ args: string[];
23
+ /** Additional environment variables */
24
+ env?: Record<string, string>;
25
+ }
26
+ export interface MCPTool {
27
+ name: string;
28
+ description: string;
29
+ inputSchema: {
30
+ type: 'object';
31
+ properties?: Record<string, unknown>;
32
+ required?: string[];
33
+ };
34
+ }
35
+ export interface NamespacedTool {
36
+ /** Namespaced name: @@mcp_{serverName}_{toolName} */
37
+ namespacedName: string;
38
+ serverName: string;
39
+ tool: MCPTool;
40
+ }
41
+ /**
42
+ * Singleton that manages MCP server processes and their tool registries.
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * const hypervisor = MCPHypervisor.getInstance()
47
+ *
48
+ * hypervisor.registerServer({
49
+ * name: 'stripe',
50
+ * command: 'pnpm',
51
+ * args: ['dlx', '@stripe/mcp', '--tools=all', '--api-key=sk_...'],
52
+ * })
53
+ *
54
+ * await hypervisor.startServer('stripe')
55
+ * const tools = hypervisor.getAllTools()
56
+ * // tools[0].namespacedName === '@@mcp_stripe_create_payment_intent'
57
+ * ```
58
+ */
59
+ export declare class MCPHypervisor {
60
+ private static instance;
61
+ private servers;
62
+ private requestCounter;
63
+ private pendingRequests;
64
+ private healthCheckTimer;
65
+ private constructor();
66
+ static getInstance(): MCPHypervisor;
67
+ /**
68
+ * Register an MCP server configuration without starting it.
69
+ */
70
+ registerServer(config: MCPServerConfig): void;
71
+ /**
72
+ * Unregister a server (stops it first if running).
73
+ */
74
+ unregisterServer(name: string): Promise<void>;
75
+ /**
76
+ * Spawn the MCP server process with piped stdio.
77
+ * Tools are discovered via `listServerTools()` after startup.
78
+ */
79
+ startServer(name: string): Promise<void>;
80
+ /**
81
+ * Stop a running MCP server process.
82
+ */
83
+ stopServer(name: string): Promise<void>;
84
+ /**
85
+ * Stop all running servers.
86
+ */
87
+ stopAll(): Promise<void>;
88
+ /**
89
+ * Send a JSON-RPC request to a running server and await the response.
90
+ */
91
+ private sendRequest;
92
+ private handleResponse;
93
+ /**
94
+ * Ping a server — checks process liveness and sends a JSON-RPC `ping`.
95
+ * Updates `entry.healthy`.
96
+ */
97
+ pingServer(name: string): Promise<boolean>;
98
+ /**
99
+ * Discover tools from a running server via JSON-RPC `tools/list`.
100
+ * Caches the result in the server entry.
101
+ */
102
+ listServerTools(name: string): Promise<MCPTool[]>;
103
+ /**
104
+ * Return all tools from all healthy servers, namespaced as
105
+ * `@@mcp_{serverName}_{toolName}` to avoid collisions.
106
+ */
107
+ getAllTools(): NamespacedTool[];
108
+ /**
109
+ * Call a tool on a running MCP server via JSON-RPC `tools/call`.
110
+ *
111
+ * @param serverName - The registered server name
112
+ * @param toolName - The tool name (without namespace prefix)
113
+ * @param args - Arguments to pass to the tool
114
+ */
115
+ callTool(serverName: string, toolName: string, args: unknown): Promise<unknown>;
116
+ /**
117
+ * Return the health status of all registered servers.
118
+ */
119
+ getStatus(): Record<string, {
120
+ healthy: boolean;
121
+ toolCount: number;
122
+ pid: number | null;
123
+ }>;
124
+ private startHealthCheckLoop;
125
+ private stopHealthCheckLoop;
126
+ /**
127
+ * Reset the singleton (for testing only).
128
+ * @internal
129
+ */
130
+ static _resetForTests(): void;
131
+ }
132
+ //# sourceMappingURL=hypervisor.d.ts.map