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