@revealui/mcp 0.8.0 → 0.8.2

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 (53) hide show
  1. package/README.md +26 -39
  2. package/dist/audit-sink.d.ts +36 -0
  3. package/dist/audit-sink.d.ts.map +1 -0
  4. package/dist/audit-sink.js +13 -0
  5. package/dist/audit-sink.js.map +1 -0
  6. package/dist/cli.d.ts +5 -2
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +10 -8
  9. package/dist/cli.js.map +1 -1
  10. package/dist/config/index.d.ts +6 -10
  11. package/dist/config/index.d.ts.map +1 -1
  12. package/dist/config/index.js +6 -17
  13. package/dist/config/index.js.map +1 -1
  14. package/dist/hypervisor.d.ts +23 -0
  15. package/dist/hypervisor.d.ts.map +1 -1
  16. package/dist/hypervisor.js +77 -0
  17. package/dist/hypervisor.js.map +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +0 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/servers/_email-provider.d.ts.map +1 -1
  23. package/dist/servers/_email-provider.js +2 -1
  24. package/dist/servers/_email-provider.js.map +1 -1
  25. package/dist/servers/_launcher-utils.d.ts +12 -0
  26. package/dist/servers/_launcher-utils.d.ts.map +1 -1
  27. package/dist/servers/_launcher-utils.js +26 -0
  28. package/dist/servers/_launcher-utils.js.map +1 -1
  29. package/dist/servers/factories/contracts.d.ts +242 -0
  30. package/dist/servers/factories/contracts.d.ts.map +1 -1
  31. package/dist/servers/factories/revealui-content.d.ts +26 -0
  32. package/dist/servers/factories/revealui-content.d.ts.map +1 -1
  33. package/dist/servers/factories/revealui-content.js +169 -12
  34. package/dist/servers/factories/revealui-content.js.map +1 -1
  35. package/dist/servers/neon.js +5 -2
  36. package/dist/servers/neon.js.map +1 -1
  37. package/dist/servers/next-devtools.js +4 -2
  38. package/dist/servers/next-devtools.js.map +1 -1
  39. package/dist/servers/playwright.js +4 -2
  40. package/dist/servers/playwright.js.map +1 -1
  41. package/dist/servers/stripe.js +4 -2
  42. package/dist/servers/stripe.js.map +1 -1
  43. package/dist/servers/vercel.js +4 -2
  44. package/dist/servers/vercel.js.map +1 -1
  45. package/dist/streamable-http.d.ts +10 -1
  46. package/dist/streamable-http.d.ts.map +1 -1
  47. package/dist/streamable-http.js +2 -2
  48. package/dist/streamable-http.js.map +1 -1
  49. package/package.json +56 -33
  50. package/dist/servers/supabase.d.ts +0 -15
  51. package/dist/servers/supabase.d.ts.map +0 -1
  52. package/dist/servers/supabase.js +0 -139
  53. package/dist/servers/supabase.js.map +0 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@revealui/mcp",
3
- "version": "0.8.0",
4
- "description": "Model Context Protocol framework — MCP server hypervisor, adapter pattern, tool discovery, and adapters for Stripe, Supabase, and Vercel.",
3
+ "version": "0.8.2",
4
+ "description": "Model Context Protocol framework — first-party server launchers, adapter pattern, tool discovery, and an incubating multi-server hypervisor (not app-mounted by default; ADR-007).",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/RevealUIStudio/revealui.git",
@@ -16,22 +16,23 @@
16
16
  "@modelcontextprotocol/sdk": "^1.29.0",
17
17
  "dotenv": "^17.4.1",
18
18
  "jose": "^5.10.0",
19
- "@revealui/contracts": "0.7.0",
20
- "@revealui/core": "0.11.1",
21
- "@revealui/config": "0.5.1",
22
- "@revealui/db": "0.8.0",
23
- "@revealui/knowledge-graph": "0.1.2",
24
- "@revealui/security": "0.4.3",
25
- "@revealui/setup": "0.6.0"
19
+ "@revealui/config": "0.6.0",
20
+ "@revealui/contracts": "0.8.1",
21
+ "@revealui/core": "0.12.1",
22
+ "@revealui/db": "0.9.0",
23
+ "@revealui/knowledge-graph": "0.1.4",
24
+ "@revealui/security": "0.5.1",
25
+ "@revealui/setup": "0.7.1"
26
26
  },
27
27
  "optionalDependencies": {
28
- "@revealui/ai": "0.7.0"
28
+ "@revealui/ai": "0.8.1"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@electric-sql/pglite": "^0.5.4",
32
32
  "pg": "^8.22.0",
33
33
  "typescript": "^6.0.3",
34
- "vitest": "^4.1.10"
34
+ "vitest": "^4.1.10",
35
+ "@revealui/dev": "0.1.0"
35
36
  },
36
37
  "engines": {
37
38
  "node": ">=24.13.0"
@@ -39,91 +40,113 @@
39
40
  "exports": {
40
41
  ".": {
41
42
  "types": "./dist/index.d.ts",
42
- "import": "./dist/index.js"
43
+ "import": "./dist/index.js",
44
+ "default": "./dist/index.js"
43
45
  },
44
46
  "./adapter": {
45
47
  "types": "./dist/servers/adapter.d.ts",
46
- "import": "./dist/servers/adapter.js"
48
+ "import": "./dist/servers/adapter.js",
49
+ "default": "./dist/servers/adapter.js"
47
50
  },
48
51
  "./author": {
49
52
  "types": "./dist/author/index.d.ts",
50
- "import": "./dist/author/index.js"
53
+ "import": "./dist/author/index.js",
54
+ "default": "./dist/author/index.js"
51
55
  },
52
56
  "./author/scaffold": {
53
57
  "types": "./dist/author/scaffold.d.ts",
54
- "import": "./dist/author/scaffold.js"
58
+ "import": "./dist/author/scaffold.js",
59
+ "default": "./dist/author/scaffold.js"
55
60
  },
56
61
  "./author/test": {
57
62
  "types": "./dist/author/test.d.ts",
58
- "import": "./dist/author/test.js"
63
+ "import": "./dist/author/test.js",
64
+ "default": "./dist/author/test.js"
59
65
  },
60
66
  "./author/publish": {
61
67
  "types": "./dist/author/publish.d.ts",
62
- "import": "./dist/author/publish.js"
68
+ "import": "./dist/author/publish.js",
69
+ "default": "./dist/author/publish.js"
63
70
  },
64
71
  "./contracts": {
65
72
  "types": "./dist/contracts.d.ts",
66
- "import": "./dist/contracts.js"
73
+ "import": "./dist/contracts.js",
74
+ "default": "./dist/contracts.js"
67
75
  },
68
76
  "./contracts-server": {
69
77
  "types": "./dist/servers/factories/contracts.d.ts",
70
- "import": "./dist/servers/factories/contracts.js"
78
+ "import": "./dist/servers/factories/contracts.js",
79
+ "default": "./dist/servers/factories/contracts.js"
71
80
  },
72
81
  "./revealui-content-factory": {
73
82
  "types": "./dist/servers/factories/revealui-content.d.ts",
74
- "import": "./dist/servers/factories/revealui-content.js"
83
+ "import": "./dist/servers/factories/revealui-content.js",
84
+ "default": "./dist/servers/factories/revealui-content.js"
75
85
  },
76
86
  "./docs-server": {
77
87
  "types": "./dist/servers/factories/docs.d.ts",
78
- "import": "./dist/servers/factories/docs.js"
88
+ "import": "./dist/servers/factories/docs.js",
89
+ "default": "./dist/servers/factories/docs.js"
79
90
  },
80
91
  "./kg-server": {
81
92
  "types": "./dist/servers/factories/knowledge-graph.d.ts",
82
- "import": "./dist/servers/factories/knowledge-graph.js"
93
+ "import": "./dist/servers/factories/knowledge-graph.js",
94
+ "default": "./dist/servers/factories/knowledge-graph.js"
83
95
  },
84
96
  "./hypervisor": {
85
97
  "types": "./dist/hypervisor.d.ts",
86
- "import": "./dist/hypervisor.js"
98
+ "import": "./dist/hypervisor.js",
99
+ "default": "./dist/hypervisor.js"
87
100
  },
88
101
  "./db": {
89
102
  "types": "./dist/adapters/db.d.ts",
90
- "import": "./dist/adapters/db.js"
103
+ "import": "./dist/adapters/db.js",
104
+ "default": "./dist/adapters/db.js"
91
105
  },
92
106
  "./config": {
93
107
  "types": "./dist/config/index.d.ts",
94
- "import": "./dist/config/index.js"
108
+ "import": "./dist/config/index.js",
109
+ "default": "./dist/config/index.js"
95
110
  },
96
111
  "./pipeline": {
97
112
  "types": "./dist/pipeline.d.ts",
98
- "import": "./dist/pipeline.js"
113
+ "import": "./dist/pipeline.js",
114
+ "default": "./dist/pipeline.js"
99
115
  },
100
116
  "./rate-limiter": {
101
117
  "types": "./dist/rate-limiter.d.ts",
102
- "import": "./dist/rate-limiter.js"
118
+ "import": "./dist/rate-limiter.js",
119
+ "default": "./dist/rate-limiter.js"
103
120
  },
104
121
  "./telemetry": {
105
122
  "types": "./dist/telemetry.d.ts",
106
- "import": "./dist/telemetry.js"
123
+ "import": "./dist/telemetry.js",
124
+ "default": "./dist/telemetry.js"
107
125
  },
108
126
  "./auth": {
109
127
  "types": "./dist/auth.d.ts",
110
- "import": "./dist/auth.js"
128
+ "import": "./dist/auth.js",
129
+ "default": "./dist/auth.js"
111
130
  },
112
131
  "./streamable-http": {
113
132
  "types": "./dist/streamable-http.d.ts",
114
- "import": "./dist/streamable-http.js"
133
+ "import": "./dist/streamable-http.js",
134
+ "default": "./dist/streamable-http.js"
115
135
  },
116
136
  "./oauth": {
117
137
  "types": "./dist/oauth.d.ts",
118
- "import": "./dist/oauth.js"
138
+ "import": "./dist/oauth.js",
139
+ "default": "./dist/oauth.js"
119
140
  },
120
141
  "./client": {
121
142
  "types": "./dist/client.d.ts",
122
- "import": "./dist/client.js"
143
+ "import": "./dist/client.js",
144
+ "default": "./dist/client.js"
123
145
  },
124
146
  "./remote-client": {
125
147
  "types": "./dist/remote-client.d.ts",
126
- "import": "./dist/remote-client.js"
148
+ "import": "./dist/remote-client.js",
149
+ "default": "./dist/remote-client.js"
127
150
  }
128
151
  },
129
152
  "files": [
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env tsx
2
- /**
3
- * Supabase MCP Server Launcher
4
- *
5
- * Starts the Supabase MCP server for AI-powered database management.
6
- *
7
- * Usage:
8
- * pnpm mcp:supabase
9
- */
10
- /**
11
- * Launch the Supabase MCP server.
12
- * Exported for programmatic use by the Hypervisor.
13
- */
14
- export declare function launchSupabaseMcp(): Promise<void>;
15
- //# sourceMappingURL=supabase.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../src/servers/supabase.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAgIH;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEvD"}
@@ -1,139 +0,0 @@
1
- #!/usr/bin/env tsx
2
- /**
3
- * Supabase MCP Server Launcher
4
- *
5
- * Starts the Supabase MCP server for AI-powered database management.
6
- *
7
- * Usage:
8
- * pnpm mcp:supabase
9
- */
10
- import { spawn } from 'node:child_process';
11
- import { randomBytes } from 'node:crypto';
12
- import { config } from 'dotenv';
13
- import { createLauncherLogger, ExitCode } from './_launcher-utils.js';
14
- const logger = createLauncherLogger();
15
- // Load environment variables
16
- config();
17
- async function startSupabaseMCP() {
18
- // Supabase MCP uses local package supabase-mcp
19
- // Verified: Package expects SUPABASE_URL, SUPABASE_ANON_KEY, and SUPABASE_SERVICE_ROLE_KEY
20
- // Source: node_modules/supabase-mcp/dist/esm/config.js and services/supabase.js
21
- //
22
- // NEW API KEY SUPPORT (2025):
23
- // Supabase introduced new API keys: sb_publishable_... (replaces anon) and sb_secret_... (replaces service_role)
24
- // Legacy keys (anon/service_role JWT) still work but will be deprecated in Nov 2025
25
- // The @supabase/supabase-js client accepts any key format, so we support both
26
- // Reference: https://github.com/orgs/supabase/discussions/29260
27
- const supabaseUrl = process.env.SUPABASE_URL;
28
- // Support both legacy and new API key formats
29
- // New format: SUPABASE_PUBLISHABLE_KEY (sb_publishable_...) or SUPABASE_ANON_KEY (legacy)
30
- // New format: SUPABASE_SECRET_KEY (sb_secret_...) or SUPABASE_SERVICE_ROLE_KEY (legacy)
31
- const supabaseAnonKey = process.env.SUPABASE_PUBLISHABLE_KEY || process.env.SUPABASE_ANON_KEY;
32
- const supabaseServiceRoleKey = process.env.SUPABASE_SECRET_KEY || process.env.SUPABASE_SERVICE_ROLE_KEY;
33
- if (!supabaseUrl) {
34
- logger.error('SUPABASE_URL is required');
35
- logger.info(' Get your credentials from: https://supabase.com/dashboard → Settings → API');
36
- process.exit(ExitCode.CONFIG_ERROR);
37
- }
38
- if (!supabaseAnonKey) {
39
- logger.error('SUPABASE_ANON_KEY or SUPABASE_PUBLISHABLE_KEY is required');
40
- logger.info(' Legacy: SUPABASE_ANON_KEY (anon JWT key)');
41
- logger.info(' New: SUPABASE_PUBLISHABLE_KEY (sb_publishable_... key)');
42
- logger.info(' Get from: https://supabase.com/dashboard → Settings → API');
43
- process.exit(ExitCode.CONFIG_ERROR);
44
- }
45
- if (!supabaseServiceRoleKey) {
46
- logger.error('SUPABASE_SERVICE_ROLE_KEY or SUPABASE_SECRET_KEY is required');
47
- logger.info(' Legacy: SUPABASE_SERVICE_ROLE_KEY (service_role JWT key)');
48
- logger.info(' New: SUPABASE_SECRET_KEY (sb_secret_... key)');
49
- logger.info(' Note: Required for MCP server operations (full database access)');
50
- logger.info(' Get from: https://supabase.com/dashboard → Settings → API');
51
- process.exit(ExitCode.CONFIG_ERROR);
52
- }
53
- // MCP_API_KEY is required by supabase-mcp package for server authentication
54
- // This is NOT a Supabase key - it's a key you generate yourself to secure the MCP server
55
- let mcpApiKey = process.env.MCP_API_KEY;
56
- if (!mcpApiKey) {
57
- // Auto-generate a secure random key if not provided
58
- mcpApiKey = randomBytes(32).toString('hex');
59
- logger.warning('MCP_API_KEY not set - auto-generated a secure key');
60
- logger.warning(' Add this to your .env file to persist it:');
61
- logger.warning(` MCP_API_KEY=${mcpApiKey}`);
62
- logger.warning(' (This key secures your MCP server endpoint)');
63
- }
64
- const withRestart = process.argv.includes('--restart');
65
- logger.header('Starting Supabase MCP Server (Local)');
66
- logger.info(` Supabase URL: ${supabaseUrl}`);
67
- if (withRestart)
68
- logger.info(' Restart mode: enabled (up to 3 attempts)');
69
- // Detect key format for logging
70
- const usingNewKeys = process.env.SUPABASE_PUBLISHABLE_KEY || process.env.SUPABASE_SECRET_KEY;
71
- if (usingNewKeys) {
72
- logger.info(' Using new API key format (sb_publishable_/sb_secret_)');
73
- }
74
- else {
75
- logger.info(' Using legacy API key format (anon/service_role JWT)');
76
- logger.warning(' Consider migrating to new keys before Nov 2025');
77
- logger.info(' See: https://github.com/orgs/supabase/discussions/29260');
78
- }
79
- // Build env once - used for all spawn attempts
80
- // Package validates: SUPABASE_URL, SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY, MCP_API_KEY
81
- // We map new keys to legacy variable names for package compatibility
82
- const spawnEnv = {
83
- ...process.env,
84
- SUPABASE_URL: supabaseUrl,
85
- SUPABASE_ANON_KEY: supabaseAnonKey,
86
- SUPABASE_SERVICE_ROLE_KEY: supabaseServiceRoleKey,
87
- MCP_API_KEY: mcpApiKey,
88
- SUPABASE_PUBLISHABLE_KEY: process.env.SUPABASE_PUBLISHABLE_KEY,
89
- SUPABASE_SECRET_KEY: process.env.SUPABASE_SECRET_KEY,
90
- };
91
- const MaxRestarts = 3;
92
- const RestartDelaysMs = [2000, 4000, 8000];
93
- const spawnSupabase = () => new Promise((resolve) => {
94
- const child = spawn('pnpm', ['dlx', 'supabase-mcp'], { stdio: 'inherit', env: spawnEnv });
95
- child.on('error', (error) => {
96
- logger.error(`Failed to start Supabase MCP server: ${error.message}`);
97
- resolve(ExitCode.CONFIG_ERROR);
98
- });
99
- child.on('exit', (code) => resolve(code ?? 0));
100
- process.on('SIGINT', () => {
101
- child.kill('SIGINT');
102
- });
103
- process.on('SIGTERM', () => {
104
- child.kill('SIGTERM');
105
- });
106
- });
107
- let attempt = 0;
108
- while (true) {
109
- const code = await spawnSupabase();
110
- if (!withRestart || attempt >= MaxRestarts) {
111
- process.exit(code ?? 0);
112
- }
113
- const delay = RestartDelaysMs[attempt] ?? 8000;
114
- attempt++;
115
- logger.warning(` Server exited (code ${code}). Restarting in ${delay / 1000}s (attempt ${attempt}/${MaxRestarts})...`);
116
- await new Promise((resolve) => setTimeout(resolve, delay));
117
- }
118
- }
119
- /**
120
- * Launch the Supabase MCP server.
121
- * Exported for programmatic use by the Hypervisor.
122
- */
123
- export async function launchSupabaseMcp() {
124
- await startSupabaseMCP();
125
- }
126
- /**
127
- * Main function (CLI entrypoint)
128
- */
129
- async function main() {
130
- try {
131
- await launchSupabaseMcp();
132
- }
133
- catch (error) {
134
- logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`);
135
- process.exit(ExitCode.EXECUTION_ERROR);
136
- }
137
- }
138
- main();
139
- //# sourceMappingURL=supabase.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"supabase.js","sourceRoot":"","sources":["../../src/servers/supabase.ts"],"names":[],"mappings":"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"}