snow-flow 1.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.
- package/.env.example +49 -0
- package/.mcp.json +106 -0
- package/.mcp.json.template +106 -0
- package/LICENSE +21 -0
- package/README.md +236 -0
- package/bin/snow-flow +4 -0
- package/bin/snow-flow.js +3 -0
- package/claude-flow +79 -0
- package/claude-flow.bat +18 -0
- package/claude-flow.config.json +20 -0
- package/claude-flow.ps1 +24 -0
- package/dist/agents/app-creator.agent.d.ts +55 -0
- package/dist/agents/app-creator.agent.d.ts.map +1 -0
- package/dist/agents/app-creator.agent.js +1292 -0
- package/dist/agents/app-creator.agent.js.map +1 -0
- package/dist/agents/base-snow-agent.d.ts +63 -0
- package/dist/agents/base-snow-agent.d.ts.map +1 -0
- package/dist/agents/base-snow-agent.js +296 -0
- package/dist/agents/base-snow-agent.js.map +1 -0
- package/dist/agents/script-generator.agent.d.ts +32 -0
- package/dist/agents/script-generator.agent.d.ts.map +1 -0
- package/dist/agents/script-generator.agent.js +772 -0
- package/dist/agents/script-generator.agent.js.map +1 -0
- package/dist/agents/ui-builder.agent.d.ts +50 -0
- package/dist/agents/ui-builder.agent.d.ts.map +1 -0
- package/dist/agents/ui-builder.agent.js +1539 -0
- package/dist/agents/ui-builder.agent.js.map +1 -0
- package/dist/agents/widget-builder.agent.d.ts +32 -0
- package/dist/agents/widget-builder.agent.d.ts.map +1 -0
- package/dist/agents/widget-builder.agent.js +439 -0
- package/dist/agents/widget-builder.agent.js.map +1 -0
- package/dist/agents/workflow-designer.agent.d.ts +31 -0
- package/dist/agents/workflow-designer.agent.d.ts.map +1 -0
- package/dist/agents/workflow-designer.agent.js +583 -0
- package/dist/agents/workflow-designer.agent.js.map +1 -0
- package/dist/api/error-handling.d.ts +214 -0
- package/dist/api/error-handling.d.ts.map +1 -0
- package/dist/api/error-handling.js +594 -0
- package/dist/api/error-handling.js.map +1 -0
- package/dist/api/flow-designer-api.d.ts +167 -0
- package/dist/api/flow-designer-api.d.ts.map +1 -0
- package/dist/api/flow-designer-api.js +555 -0
- package/dist/api/flow-designer-api.js.map +1 -0
- package/dist/api/natural-language-mapper.d.ts +126 -0
- package/dist/api/natural-language-mapper.d.ts.map +1 -0
- package/dist/api/natural-language-mapper.js +498 -0
- package/dist/api/natural-language-mapper.js.map +1 -0
- package/dist/api/performance-optimizer.d.ts +240 -0
- package/dist/api/performance-optimizer.d.ts.map +1 -0
- package/dist/api/performance-optimizer.js +701 -0
- package/dist/api/performance-optimizer.js.map +1 -0
- package/dist/api/transaction-manager.d.ts +189 -0
- package/dist/api/transaction-manager.d.ts.map +1 -0
- package/dist/api/transaction-manager.js +576 -0
- package/dist/api/transaction-manager.js.map +1 -0
- package/dist/cli/deploy-artifact.d.ts +7 -0
- package/dist/cli/deploy-artifact.d.ts.map +1 -0
- package/dist/cli/deploy-artifact.js +279 -0
- package/dist/cli/deploy-artifact.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +2057 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/managers/scope-manager.d.ts +75 -0
- package/dist/managers/scope-manager.d.ts.map +1 -0
- package/dist/managers/scope-manager.js +448 -0
- package/dist/managers/scope-manager.js.map +1 -0
- package/dist/mcp/mcp-wrapper.d.ts +8 -0
- package/dist/mcp/mcp-wrapper.d.ts.map +1 -0
- package/dist/mcp/mcp-wrapper.js +77 -0
- package/dist/mcp/mcp-wrapper.js.map +1 -0
- package/dist/mcp/servicenow-automation-mcp.d.ts +8 -0
- package/dist/mcp/servicenow-automation-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-automation-mcp.js +683 -0
- package/dist/mcp/servicenow-automation-mcp.js.map +1 -0
- package/dist/mcp/servicenow-deployment-mcp.d.ts +7 -0
- package/dist/mcp/servicenow-deployment-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-deployment-mcp.js +972 -0
- package/dist/mcp/servicenow-deployment-mcp.js.map +1 -0
- package/dist/mcp/servicenow-flow-composer-mcp.d.ts +7 -0
- package/dist/mcp/servicenow-flow-composer-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-flow-composer-mcp.js +1121 -0
- package/dist/mcp/servicenow-flow-composer-mcp.js.map +1 -0
- package/dist/mcp/servicenow-graph-memory-mcp.d.ts +7 -0
- package/dist/mcp/servicenow-graph-memory-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-graph-memory-mcp.js +703 -0
- package/dist/mcp/servicenow-graph-memory-mcp.js.map +1 -0
- package/dist/mcp/servicenow-integration-mcp.d.ts +8 -0
- package/dist/mcp/servicenow-integration-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-integration-mcp.js +689 -0
- package/dist/mcp/servicenow-integration-mcp.js.map +1 -0
- package/dist/mcp/servicenow-intelligent-mcp.d.ts +7 -0
- package/dist/mcp/servicenow-intelligent-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-intelligent-mcp.js +1138 -0
- package/dist/mcp/servicenow-intelligent-mcp.js.map +1 -0
- package/dist/mcp/servicenow-mcp-server.d.ts +37 -0
- package/dist/mcp/servicenow-mcp-server.d.ts.map +1 -0
- package/dist/mcp/servicenow-mcp-server.js +648 -0
- package/dist/mcp/servicenow-mcp-server.js.map +1 -0
- package/dist/mcp/servicenow-operations-mcp.d.ts +15 -0
- package/dist/mcp/servicenow-operations-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-operations-mcp.js +1287 -0
- package/dist/mcp/servicenow-operations-mcp.js.map +1 -0
- package/dist/mcp/servicenow-platform-development-mcp.d.ts +8 -0
- package/dist/mcp/servicenow-platform-development-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-platform-development-mcp.js +557 -0
- package/dist/mcp/servicenow-platform-development-mcp.js.map +1 -0
- package/dist/mcp/servicenow-progressive-indexer.d.ts +79 -0
- package/dist/mcp/servicenow-progressive-indexer.d.ts.map +1 -0
- package/dist/mcp/servicenow-progressive-indexer.js +320 -0
- package/dist/mcp/servicenow-progressive-indexer.js.map +1 -0
- package/dist/mcp/servicenow-reporting-analytics-mcp.d.ts +8 -0
- package/dist/mcp/servicenow-reporting-analytics-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-reporting-analytics-mcp.js +888 -0
- package/dist/mcp/servicenow-reporting-analytics-mcp.js.map +1 -0
- package/dist/mcp/servicenow-security-compliance-mcp.d.ts +8 -0
- package/dist/mcp/servicenow-security-compliance-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-security-compliance-mcp.js +812 -0
- package/dist/mcp/servicenow-security-compliance-mcp.js.map +1 -0
- package/dist/mcp/servicenow-update-set-mcp.d.ts +7 -0
- package/dist/mcp/servicenow-update-set-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-update-set-mcp.js +599 -0
- package/dist/mcp/servicenow-update-set-mcp.js.map +1 -0
- package/dist/mcp/start-all-mcp-servers.d.ts +6 -0
- package/dist/mcp/start-all-mcp-servers.d.ts.map +1 -0
- package/dist/mcp/start-all-mcp-servers.js +65 -0
- package/dist/mcp/start-all-mcp-servers.js.map +1 -0
- package/dist/mcp/start-servicenow-mcp.d.ts +7 -0
- package/dist/mcp/start-servicenow-mcp.d.ts.map +1 -0
- package/dist/mcp/start-servicenow-mcp.js +64 -0
- package/dist/mcp/start-servicenow-mcp.js.map +1 -0
- package/dist/mcp/test-simple-mcp.d.ts +6 -0
- package/dist/mcp/test-simple-mcp.d.ts.map +1 -0
- package/dist/mcp/test-simple-mcp.js +64 -0
- package/dist/mcp/test-simple-mcp.js.map +1 -0
- package/dist/orchestrator/flow-composer.d.ts +269 -0
- package/dist/orchestrator/flow-composer.d.ts.map +1 -0
- package/dist/orchestrator/flow-composer.js +2221 -0
- package/dist/orchestrator/flow-composer.js.map +1 -0
- package/dist/orchestrator/flow-pattern-templates.d.ts +260 -0
- package/dist/orchestrator/flow-pattern-templates.d.ts.map +1 -0
- package/dist/orchestrator/flow-pattern-templates.js +906 -0
- package/dist/orchestrator/flow-pattern-templates.js.map +1 -0
- package/dist/orchestrator/flow-subflow-decision-engine.d.ts +202 -0
- package/dist/orchestrator/flow-subflow-decision-engine.d.ts.map +1 -0
- package/dist/orchestrator/flow-subflow-decision-engine.js +769 -0
- package/dist/orchestrator/flow-subflow-decision-engine.js.map +1 -0
- package/dist/orchestrator/flow-validation-engine.d.ts +145 -0
- package/dist/orchestrator/flow-validation-engine.d.ts.map +1 -0
- package/dist/orchestrator/flow-validation-engine.js +663 -0
- package/dist/orchestrator/flow-validation-engine.js.map +1 -0
- package/dist/orchestrator/snow-orchestrator.d.ts +49 -0
- package/dist/orchestrator/snow-orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/snow-orchestrator.js +235 -0
- package/dist/orchestrator/snow-orchestrator.js.map +1 -0
- package/dist/orchestrator/subflow-creation-handler.d.ts +230 -0
- package/dist/orchestrator/subflow-creation-handler.d.ts.map +1 -0
- package/dist/orchestrator/subflow-creation-handler.js +791 -0
- package/dist/orchestrator/subflow-creation-handler.js.map +1 -0
- package/dist/strategies/global-scope-strategy.d.ts +123 -0
- package/dist/strategies/global-scope-strategy.d.ts.map +1 -0
- package/dist/strategies/global-scope-strategy.js +585 -0
- package/dist/strategies/global-scope-strategy.js.map +1 -0
- package/dist/types/index.d.ts +138 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/servicenow.types.d.ts +260 -0
- package/dist/types/servicenow.types.d.ts.map +1 -0
- package/dist/types/servicenow.types.js +3 -0
- package/dist/types/servicenow.types.js.map +1 -0
- package/dist/types/snow-flow.types.d.ts +114 -0
- package/dist/types/snow-flow.types.d.ts.map +1 -0
- package/dist/types/snow-flow.types.js +3 -0
- package/dist/types/snow-flow.types.js.map +1 -0
- package/dist/utils/action-type-cache.d.ts +66 -0
- package/dist/utils/action-type-cache.d.ts.map +1 -0
- package/dist/utils/action-type-cache.js +237 -0
- package/dist/utils/action-type-cache.js.map +1 -0
- package/dist/utils/agent-detector.d.ts +35 -0
- package/dist/utils/agent-detector.d.ts.map +1 -0
- package/dist/utils/agent-detector.js +353 -0
- package/dist/utils/agent-detector.js.map +1 -0
- package/dist/utils/flow-api-discovery.d.ts +151 -0
- package/dist/utils/flow-api-discovery.d.ts.map +1 -0
- package/dist/utils/flow-api-discovery.js +440 -0
- package/dist/utils/flow-api-discovery.js.map +1 -0
- package/dist/utils/flow-xml-generator.d.ts +41 -0
- package/dist/utils/flow-xml-generator.d.ts.map +1 -0
- package/dist/utils/flow-xml-generator.js +258 -0
- package/dist/utils/flow-xml-generator.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +51 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/mcp-auth-middleware.d.ts +58 -0
- package/dist/utils/mcp-auth-middleware.d.ts.map +1 -0
- package/dist/utils/mcp-auth-middleware.js +227 -0
- package/dist/utils/mcp-auth-middleware.js.map +1 -0
- package/dist/utils/mcp-config-manager.d.ts +126 -0
- package/dist/utils/mcp-config-manager.d.ts.map +1 -0
- package/dist/utils/mcp-config-manager.js +209 -0
- package/dist/utils/mcp-config-manager.js.map +1 -0
- package/dist/utils/mcp-server-manager.d.ts +91 -0
- package/dist/utils/mcp-server-manager.d.ts.map +1 -0
- package/dist/utils/mcp-server-manager.js +338 -0
- package/dist/utils/mcp-server-manager.js.map +1 -0
- package/dist/utils/scope-utils.d.ts +72 -0
- package/dist/utils/scope-utils.d.ts.map +1 -0
- package/dist/utils/scope-utils.js +386 -0
- package/dist/utils/scope-utils.js.map +1 -0
- package/dist/utils/servicenow-client.d.ts +233 -0
- package/dist/utils/servicenow-client.d.ts.map +1 -0
- package/dist/utils/servicenow-client.js +1465 -0
- package/dist/utils/servicenow-client.js.map +1 -0
- package/dist/utils/snow-oauth-old.d.ts +65 -0
- package/dist/utils/snow-oauth-old.d.ts.map +1 -0
- package/dist/utils/snow-oauth-old.js +345 -0
- package/dist/utils/snow-oauth-old.js.map +1 -0
- package/dist/utils/snow-oauth.d.ts +85 -0
- package/dist/utils/snow-oauth.d.ts.map +1 -0
- package/dist/utils/snow-oauth.js +512 -0
- package/dist/utils/snow-oauth.js.map +1 -0
- package/dist/utils/template-engine.d.ts +76 -0
- package/dist/utils/template-engine.d.ts.map +1 -0
- package/dist/utils/template-engine.js +391 -0
- package/dist/utils/template-engine.js.map +1 -0
- package/dist/version.d.ts +35 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +72 -0
- package/dist/version.js.map +1 -0
- package/mcp-wrapper.sh +12 -0
- package/package.json +77 -0
- package/reports/swarm-auto-centralized-1752649029776.json +13 -0
- package/scripts/postinstall.js +30 -0
- package/scripts/setup-mcp.js +89 -0
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Centralized MCP Authentication Middleware
|
|
4
|
+
* Handles ServiceNow OAuth authentication across all MCP servers
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.mcpAuth = exports.MCPAuthenticationMiddleware = void 0;
|
|
8
|
+
const snow_oauth_js_1 = require("./snow-oauth.js");
|
|
9
|
+
const mcp_config_manager_js_1 = require("./mcp-config-manager.js");
|
|
10
|
+
const logger_js_1 = require("./logger.js");
|
|
11
|
+
class MCPAuthenticationMiddleware {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.lastAuthCheck = null;
|
|
14
|
+
this.authCheckInterval = 5 * 60 * 1000; // 5 minutes
|
|
15
|
+
this.logger = new logger_js_1.Logger('MCPAuthMiddleware');
|
|
16
|
+
this.oauth = new snow_oauth_js_1.ServiceNowOAuth();
|
|
17
|
+
}
|
|
18
|
+
static getInstance() {
|
|
19
|
+
if (!MCPAuthenticationMiddleware.instance) {
|
|
20
|
+
MCPAuthenticationMiddleware.instance = new MCPAuthenticationMiddleware();
|
|
21
|
+
}
|
|
22
|
+
return MCPAuthenticationMiddleware.instance;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Ensure authentication is valid before MCP operations
|
|
26
|
+
*/
|
|
27
|
+
async ensureAuthenticated() {
|
|
28
|
+
try {
|
|
29
|
+
// Check if we need to refresh authentication
|
|
30
|
+
if (this.shouldCheckAuth()) {
|
|
31
|
+
this.logger.debug('Checking authentication status...');
|
|
32
|
+
const isAuthenticated = await this.oauth.isAuthenticated();
|
|
33
|
+
if (!isAuthenticated) {
|
|
34
|
+
this.logger.warn('Authentication expired or invalid');
|
|
35
|
+
return {
|
|
36
|
+
success: false,
|
|
37
|
+
error: 'ServiceNow authentication expired. Please run "snow-flow auth login" again.',
|
|
38
|
+
needsReauth: true
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
this.lastAuthCheck = new Date();
|
|
42
|
+
}
|
|
43
|
+
// Get current token
|
|
44
|
+
const token = await this.oauth.getAccessToken();
|
|
45
|
+
if (!token) {
|
|
46
|
+
return {
|
|
47
|
+
success: false,
|
|
48
|
+
error: 'No access token available. Please authenticate first.',
|
|
49
|
+
needsReauth: true
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
success: true,
|
|
54
|
+
token
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
this.logger.error('Authentication check failed:', error);
|
|
59
|
+
return {
|
|
60
|
+
success: false,
|
|
61
|
+
error: error instanceof Error ? error.message : 'Authentication check failed',
|
|
62
|
+
needsReauth: true
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check if authentication status should be verified
|
|
68
|
+
*/
|
|
69
|
+
shouldCheckAuth() {
|
|
70
|
+
if (!this.lastAuthCheck)
|
|
71
|
+
return true;
|
|
72
|
+
const timeSinceLastCheck = Date.now() - this.lastAuthCheck.getTime();
|
|
73
|
+
return timeSinceLastCheck > this.authCheckInterval;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Handle authentication errors with automatic retry
|
|
77
|
+
*/
|
|
78
|
+
async handleAuthError(error) {
|
|
79
|
+
this.logger.warn('Handling authentication error:', error);
|
|
80
|
+
// Check if this is an authentication-related error
|
|
81
|
+
if (this.isAuthError(error)) {
|
|
82
|
+
// Try to refresh token
|
|
83
|
+
try {
|
|
84
|
+
const credentials = await this.oauth.loadCredentials();
|
|
85
|
+
if (credentials) {
|
|
86
|
+
const refreshResult = await this.oauth.refreshAccessToken(credentials);
|
|
87
|
+
if (refreshResult.success) {
|
|
88
|
+
this.logger.info('Token refreshed successfully');
|
|
89
|
+
return {
|
|
90
|
+
success: true,
|
|
91
|
+
token: refreshResult.accessToken
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (refreshError) {
|
|
97
|
+
this.logger.error('Token refresh failed:', refreshError);
|
|
98
|
+
}
|
|
99
|
+
// If refresh failed, require re-authentication
|
|
100
|
+
return {
|
|
101
|
+
success: false,
|
|
102
|
+
error: 'Authentication failed. Please run "snow-flow auth login" again.',
|
|
103
|
+
needsReauth: true
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
// Not an auth error, return original error
|
|
107
|
+
return {
|
|
108
|
+
success: false,
|
|
109
|
+
error: error instanceof Error ? error.message : String(error)
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Check if an error is authentication-related
|
|
114
|
+
*/
|
|
115
|
+
isAuthError(error) {
|
|
116
|
+
if (!error)
|
|
117
|
+
return false;
|
|
118
|
+
const errorMessage = error.message || error.toString() || '';
|
|
119
|
+
const errorCode = error.status || error.code || 0;
|
|
120
|
+
// Check for common authentication error patterns
|
|
121
|
+
const authErrorPatterns = [
|
|
122
|
+
'unauthorized',
|
|
123
|
+
'authentication',
|
|
124
|
+
'expired',
|
|
125
|
+
'invalid token',
|
|
126
|
+
'access denied',
|
|
127
|
+
'forbidden'
|
|
128
|
+
];
|
|
129
|
+
const isAuthMessage = authErrorPatterns.some(pattern => errorMessage.toLowerCase().includes(pattern));
|
|
130
|
+
const isAuthCode = [401, 403].includes(errorCode);
|
|
131
|
+
return isAuthMessage || isAuthCode;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get ServiceNow instance information
|
|
135
|
+
*/
|
|
136
|
+
async getInstanceInfo() {
|
|
137
|
+
const config = mcp_config_manager_js_1.mcpConfig.getServiceNowConfig();
|
|
138
|
+
const authenticated = await this.oauth.isAuthenticated();
|
|
139
|
+
return {
|
|
140
|
+
instance: config.instanceUrl || 'Not configured',
|
|
141
|
+
authenticated
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Wrapper for MCP operations with authentication
|
|
146
|
+
*/
|
|
147
|
+
async withAuth(operation) {
|
|
148
|
+
const authResult = await this.ensureAuthenticated();
|
|
149
|
+
if (!authResult.success) {
|
|
150
|
+
throw new Error(authResult.error || 'Authentication failed');
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
return await operation(authResult.token);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
// Handle potential authentication errors during operation
|
|
157
|
+
const authErrorResult = await this.handleAuthError(error);
|
|
158
|
+
if (authErrorResult.needsReauth) {
|
|
159
|
+
throw new Error(authErrorResult.error || 'Authentication required');
|
|
160
|
+
}
|
|
161
|
+
// If we successfully refreshed the token, retry the operation
|
|
162
|
+
if (authErrorResult.success && authErrorResult.token) {
|
|
163
|
+
return await operation(authErrorResult.token);
|
|
164
|
+
}
|
|
165
|
+
// Re-throw original error if not auth-related
|
|
166
|
+
throw error;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Get authentication headers for HTTP requests
|
|
171
|
+
*/
|
|
172
|
+
async getAuthHeaders() {
|
|
173
|
+
const authResult = await this.ensureAuthenticated();
|
|
174
|
+
if (!authResult.success) {
|
|
175
|
+
throw new Error(authResult.error || 'Authentication failed');
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
'Authorization': `Bearer ${authResult.token}`,
|
|
179
|
+
'Content-Type': 'application/json',
|
|
180
|
+
'Accept': 'application/json'
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Force authentication refresh
|
|
185
|
+
*/
|
|
186
|
+
async forceRefresh() {
|
|
187
|
+
this.logger.info('Forcing authentication refresh...');
|
|
188
|
+
this.lastAuthCheck = null;
|
|
189
|
+
try {
|
|
190
|
+
const credentials = await this.oauth.loadCredentials();
|
|
191
|
+
if (credentials) {
|
|
192
|
+
const refreshResult = await this.oauth.refreshAccessToken(credentials);
|
|
193
|
+
if (refreshResult.success) {
|
|
194
|
+
return {
|
|
195
|
+
success: true,
|
|
196
|
+
token: refreshResult.accessToken
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
return {
|
|
201
|
+
success: false,
|
|
202
|
+
error: 'Token refresh failed',
|
|
203
|
+
needsReauth: true
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
return {
|
|
209
|
+
success: false,
|
|
210
|
+
error: 'No credentials available',
|
|
211
|
+
needsReauth: true
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
return {
|
|
217
|
+
success: false,
|
|
218
|
+
error: error instanceof Error ? error.message : 'Refresh failed',
|
|
219
|
+
needsReauth: true
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
exports.MCPAuthenticationMiddleware = MCPAuthenticationMiddleware;
|
|
225
|
+
// Export singleton instance
|
|
226
|
+
exports.mcpAuth = MCPAuthenticationMiddleware.getInstance();
|
|
227
|
+
//# sourceMappingURL=mcp-auth-middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-auth-middleware.js","sourceRoot":"","sources":["../../src/utils/mcp-auth-middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized MCP Configuration Manager
|
|
3
|
+
* Handles dynamic configuration loading for all MCP servers
|
|
4
|
+
*/
|
|
5
|
+
export interface MCPConfig {
|
|
6
|
+
servicenow: {
|
|
7
|
+
instanceUrl?: string;
|
|
8
|
+
clientId?: string;
|
|
9
|
+
clientSecret?: string;
|
|
10
|
+
oauthRedirectUri?: string;
|
|
11
|
+
maxRetries?: number;
|
|
12
|
+
timeout?: number;
|
|
13
|
+
};
|
|
14
|
+
neo4j?: {
|
|
15
|
+
uri?: string;
|
|
16
|
+
username?: string;
|
|
17
|
+
password?: string;
|
|
18
|
+
database?: string;
|
|
19
|
+
};
|
|
20
|
+
memory: {
|
|
21
|
+
provider: 'file' | 'neo4j' | 'redis';
|
|
22
|
+
path?: string;
|
|
23
|
+
connectionString?: string;
|
|
24
|
+
maxSize?: number;
|
|
25
|
+
ttl?: number;
|
|
26
|
+
};
|
|
27
|
+
performance: {
|
|
28
|
+
connectionPoolSize?: number;
|
|
29
|
+
requestTimeout?: number;
|
|
30
|
+
retryAttempts?: number;
|
|
31
|
+
cacheEnabled?: boolean;
|
|
32
|
+
cacheTtl?: number;
|
|
33
|
+
};
|
|
34
|
+
logging: {
|
|
35
|
+
level: 'debug' | 'info' | 'warn' | 'error';
|
|
36
|
+
enableFileLogging?: boolean;
|
|
37
|
+
logPath?: string;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export declare class MCPConfigManager {
|
|
41
|
+
private static instance;
|
|
42
|
+
private config;
|
|
43
|
+
private logger;
|
|
44
|
+
private constructor();
|
|
45
|
+
static getInstance(): MCPConfigManager;
|
|
46
|
+
/**
|
|
47
|
+
* Load configuration from environment variables and config files
|
|
48
|
+
*/
|
|
49
|
+
private loadConfiguration;
|
|
50
|
+
/**
|
|
51
|
+
* Merge base configuration with file configuration
|
|
52
|
+
*/
|
|
53
|
+
private mergeConfigs;
|
|
54
|
+
/**
|
|
55
|
+
* Get the complete configuration
|
|
56
|
+
*/
|
|
57
|
+
getConfig(): MCPConfig;
|
|
58
|
+
/**
|
|
59
|
+
* Get ServiceNow configuration
|
|
60
|
+
*/
|
|
61
|
+
getServiceNowConfig(): {
|
|
62
|
+
instanceUrl?: string;
|
|
63
|
+
clientId?: string;
|
|
64
|
+
clientSecret?: string;
|
|
65
|
+
oauthRedirectUri?: string;
|
|
66
|
+
maxRetries?: number;
|
|
67
|
+
timeout?: number;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Get Neo4j configuration
|
|
71
|
+
*/
|
|
72
|
+
getNeo4jConfig(): {
|
|
73
|
+
uri?: string;
|
|
74
|
+
username?: string;
|
|
75
|
+
password?: string;
|
|
76
|
+
database?: string;
|
|
77
|
+
} | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Get memory configuration
|
|
80
|
+
*/
|
|
81
|
+
getMemoryConfig(): {
|
|
82
|
+
provider: "file" | "neo4j" | "redis";
|
|
83
|
+
path?: string;
|
|
84
|
+
connectionString?: string;
|
|
85
|
+
maxSize?: number;
|
|
86
|
+
ttl?: number;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Get performance configuration
|
|
90
|
+
*/
|
|
91
|
+
getPerformanceConfig(): {
|
|
92
|
+
connectionPoolSize?: number;
|
|
93
|
+
requestTimeout?: number;
|
|
94
|
+
retryAttempts?: number;
|
|
95
|
+
cacheEnabled?: boolean;
|
|
96
|
+
cacheTtl?: number;
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Get logging configuration
|
|
100
|
+
*/
|
|
101
|
+
getLoggingConfig(): {
|
|
102
|
+
level: "debug" | "info" | "warn" | "error";
|
|
103
|
+
enableFileLogging?: boolean;
|
|
104
|
+
logPath?: string;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Validate configuration
|
|
108
|
+
*/
|
|
109
|
+
validateConfig(): {
|
|
110
|
+
valid: boolean;
|
|
111
|
+
errors: string[];
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Hot reload configuration
|
|
115
|
+
*/
|
|
116
|
+
reloadConfig(): Promise<void>;
|
|
117
|
+
/**
|
|
118
|
+
* Get environment-specific configuration
|
|
119
|
+
*/
|
|
120
|
+
getEnvironmentConfig(): {
|
|
121
|
+
environment: string;
|
|
122
|
+
config: MCPConfig;
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
export declare const mcpConfig: MCPConfigManager;
|
|
126
|
+
//# sourceMappingURL=mcp-config-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config-manager.d.ts","sourceRoot":"","sources":["../../src/utils/mcp-config-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE;QACV,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;QACrC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,WAAW,EAAE;QACX,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,EAAE;QACP,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAC3C,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmB;IAC1C,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO;WAKO,WAAW,IAAI,gBAAgB;IAO7C;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoDzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACI,SAAS,IAAI,SAAS;IAI7B;;OAEG;IACI,mBAAmB;sBAjIV,MAAM;mBACT,MAAM;uBACF,MAAM;2BACF,MAAM;qBACZ,MAAM;kBACT,MAAM;;IAgIlB;;OAEG;IACI,cAAc;cAhIb,MAAM;mBACD,MAAM;mBACN,MAAM;mBACN,MAAM;;IAiInB;;OAEG;IACI,eAAe;kBAjIV,MAAM,GAAG,OAAO,GAAG,OAAO;eAC7B,MAAM;2BACM,MAAM;kBACf,MAAM;cACV,MAAM;;IAiId;;OAEG;IACI,oBAAoB;6BAjIJ,MAAM;yBACV,MAAM;wBACP,MAAM;uBACP,OAAO;mBACX,MAAM;;IAiInB;;OAEG;IACI,gBAAgB;eAjId,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO;4BACtB,OAAO;kBACjB,MAAM;;IAmIlB;;OAEG;IACI,cAAc,IAAI;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAsC7D;;OAEG;IACU,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAa1C;;OAEG;IACI,oBAAoB,IAAI;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE;CA6B1E;AAGD,eAAO,MAAM,SAAS,kBAAiC,CAAC"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Centralized MCP Configuration Manager
|
|
4
|
+
* Handles dynamic configuration loading for all MCP servers
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.mcpConfig = exports.MCPConfigManager = void 0;
|
|
8
|
+
const dotenv_1 = require("dotenv");
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const path_1 = require("path");
|
|
11
|
+
const logger_js_1 = require("./logger.js");
|
|
12
|
+
// Load environment variables
|
|
13
|
+
(0, dotenv_1.config)();
|
|
14
|
+
class MCPConfigManager {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.logger = new logger_js_1.Logger('MCPConfigManager');
|
|
17
|
+
this.config = this.loadConfiguration();
|
|
18
|
+
}
|
|
19
|
+
static getInstance() {
|
|
20
|
+
if (!MCPConfigManager.instance) {
|
|
21
|
+
MCPConfigManager.instance = new MCPConfigManager();
|
|
22
|
+
}
|
|
23
|
+
return MCPConfigManager.instance;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Load configuration from environment variables and config files
|
|
27
|
+
*/
|
|
28
|
+
loadConfiguration() {
|
|
29
|
+
const baseConfig = {
|
|
30
|
+
servicenow: {
|
|
31
|
+
instanceUrl: process.env.SERVICENOW_INSTANCE_URL || process.env.SERVICENOW_INSTANCE,
|
|
32
|
+
clientId: process.env.SERVICENOW_CLIENT_ID,
|
|
33
|
+
clientSecret: process.env.SERVICENOW_CLIENT_SECRET,
|
|
34
|
+
oauthRedirectUri: process.env.SERVICENOW_OAUTH_REDIRECT_URI || 'http://localhost:8080/auth/callback',
|
|
35
|
+
maxRetries: parseInt(process.env.SERVICENOW_MAX_RETRIES || '3'),
|
|
36
|
+
timeout: parseInt(process.env.SERVICENOW_TIMEOUT || '30000')
|
|
37
|
+
},
|
|
38
|
+
neo4j: {
|
|
39
|
+
uri: process.env.NEO4J_URI || process.env.NEO4J_URL,
|
|
40
|
+
username: process.env.NEO4J_USERNAME || process.env.NEO4J_USER,
|
|
41
|
+
password: process.env.NEO4J_PASSWORD || process.env.NEO4J_PASS,
|
|
42
|
+
database: process.env.NEO4J_DATABASE || 'neo4j'
|
|
43
|
+
},
|
|
44
|
+
memory: {
|
|
45
|
+
provider: process.env.MEMORY_PROVIDER || 'file',
|
|
46
|
+
path: process.env.MEMORY_PATH || (0, path_1.join)(process.cwd(), '.snow-flow', 'memory'),
|
|
47
|
+
connectionString: process.env.MEMORY_CONNECTION_STRING,
|
|
48
|
+
maxSize: parseInt(process.env.MEMORY_MAX_SIZE || '1000'),
|
|
49
|
+
ttl: parseInt(process.env.MEMORY_TTL || '86400') // 24 hours
|
|
50
|
+
},
|
|
51
|
+
performance: {
|
|
52
|
+
connectionPoolSize: parseInt(process.env.CONNECTION_POOL_SIZE || '10'),
|
|
53
|
+
requestTimeout: parseInt(process.env.REQUEST_TIMEOUT || '30000'),
|
|
54
|
+
retryAttempts: parseInt(process.env.RETRY_ATTEMPTS || '3'),
|
|
55
|
+
cacheEnabled: process.env.CACHE_ENABLED !== 'false',
|
|
56
|
+
cacheTtl: parseInt(process.env.CACHE_TTL || '300') // 5 minutes
|
|
57
|
+
},
|
|
58
|
+
logging: {
|
|
59
|
+
level: process.env.LOG_LEVEL || 'info',
|
|
60
|
+
enableFileLogging: process.env.ENABLE_FILE_LOGGING === 'true',
|
|
61
|
+
logPath: process.env.LOG_PATH || (0, path_1.join)(process.cwd(), '.snow-flow', 'logs')
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
// Try to load from config file if it exists
|
|
65
|
+
const configPath = (0, path_1.join)(process.cwd(), '.snow-flow', 'config.json');
|
|
66
|
+
if ((0, fs_1.existsSync)(configPath)) {
|
|
67
|
+
try {
|
|
68
|
+
const fileConfig = JSON.parse((0, fs_1.readFileSync)(configPath, 'utf8'));
|
|
69
|
+
this.logger.info('Loaded configuration from config.json');
|
|
70
|
+
return this.mergeConfigs(baseConfig, fileConfig);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
this.logger.warn('Failed to load config.json, using environment variables');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return baseConfig;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Merge base configuration with file configuration
|
|
80
|
+
*/
|
|
81
|
+
mergeConfigs(base, override) {
|
|
82
|
+
return {
|
|
83
|
+
servicenow: { ...base.servicenow, ...override.servicenow },
|
|
84
|
+
neo4j: { ...base.neo4j, ...override.neo4j },
|
|
85
|
+
memory: { ...base.memory, ...override.memory },
|
|
86
|
+
performance: { ...base.performance, ...override.performance },
|
|
87
|
+
logging: { ...base.logging, ...override.logging }
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get the complete configuration
|
|
92
|
+
*/
|
|
93
|
+
getConfig() {
|
|
94
|
+
return this.config;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get ServiceNow configuration
|
|
98
|
+
*/
|
|
99
|
+
getServiceNowConfig() {
|
|
100
|
+
return this.config.servicenow;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get Neo4j configuration
|
|
104
|
+
*/
|
|
105
|
+
getNeo4jConfig() {
|
|
106
|
+
return this.config.neo4j;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get memory configuration
|
|
110
|
+
*/
|
|
111
|
+
getMemoryConfig() {
|
|
112
|
+
return this.config.memory;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get performance configuration
|
|
116
|
+
*/
|
|
117
|
+
getPerformanceConfig() {
|
|
118
|
+
return this.config.performance;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get logging configuration
|
|
122
|
+
*/
|
|
123
|
+
getLoggingConfig() {
|
|
124
|
+
return this.config.logging;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Validate configuration
|
|
128
|
+
*/
|
|
129
|
+
validateConfig() {
|
|
130
|
+
const errors = [];
|
|
131
|
+
// Validate ServiceNow configuration
|
|
132
|
+
if (!this.config.servicenow.instanceUrl) {
|
|
133
|
+
errors.push('ServiceNow instance URL is required (SERVICENOW_INSTANCE_URL)');
|
|
134
|
+
}
|
|
135
|
+
if (!this.config.servicenow.clientId) {
|
|
136
|
+
errors.push('ServiceNow client ID is required (SERVICENOW_CLIENT_ID)');
|
|
137
|
+
}
|
|
138
|
+
if (!this.config.servicenow.clientSecret) {
|
|
139
|
+
errors.push('ServiceNow client secret is required (SERVICENOW_CLIENT_SECRET)');
|
|
140
|
+
}
|
|
141
|
+
// Validate Neo4j configuration if enabled
|
|
142
|
+
if (this.config.memory.provider === 'neo4j') {
|
|
143
|
+
if (!this.config.neo4j?.uri) {
|
|
144
|
+
errors.push('Neo4j URI is required when using Neo4j memory provider (NEO4J_URI)');
|
|
145
|
+
}
|
|
146
|
+
if (!this.config.neo4j?.username) {
|
|
147
|
+
errors.push('Neo4j username is required when using Neo4j memory provider (NEO4J_USERNAME)');
|
|
148
|
+
}
|
|
149
|
+
if (!this.config.neo4j?.password) {
|
|
150
|
+
errors.push('Neo4j password is required when using Neo4j memory provider (NEO4J_PASSWORD)');
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Validate memory configuration
|
|
154
|
+
if (!['file', 'neo4j', 'redis'].includes(this.config.memory.provider)) {
|
|
155
|
+
errors.push('Memory provider must be one of: file, neo4j, redis');
|
|
156
|
+
}
|
|
157
|
+
return {
|
|
158
|
+
valid: errors.length === 0,
|
|
159
|
+
errors
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Hot reload configuration
|
|
164
|
+
*/
|
|
165
|
+
async reloadConfig() {
|
|
166
|
+
this.logger.info('Reloading configuration...');
|
|
167
|
+
this.config = this.loadConfiguration();
|
|
168
|
+
const validation = this.validateConfig();
|
|
169
|
+
if (!validation.valid) {
|
|
170
|
+
this.logger.error('Configuration validation failed:', validation.errors);
|
|
171
|
+
throw new Error(`Configuration validation failed: ${validation.errors.join(', ')}`);
|
|
172
|
+
}
|
|
173
|
+
this.logger.info('Configuration reloaded successfully');
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Get environment-specific configuration
|
|
177
|
+
*/
|
|
178
|
+
getEnvironmentConfig() {
|
|
179
|
+
const environment = process.env.NODE_ENV || 'development';
|
|
180
|
+
// Environment-specific overrides
|
|
181
|
+
const envOverrides = {};
|
|
182
|
+
if (environment === 'production') {
|
|
183
|
+
envOverrides.logging = {
|
|
184
|
+
...this.config.logging,
|
|
185
|
+
level: 'warn',
|
|
186
|
+
enableFileLogging: true
|
|
187
|
+
};
|
|
188
|
+
envOverrides.performance = {
|
|
189
|
+
...this.config.performance,
|
|
190
|
+
cacheEnabled: true,
|
|
191
|
+
connectionPoolSize: 20
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
else if (environment === 'development') {
|
|
195
|
+
envOverrides.logging = {
|
|
196
|
+
...this.config.logging,
|
|
197
|
+
level: 'debug'
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
environment,
|
|
202
|
+
config: this.mergeConfigs(this.config, envOverrides)
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
exports.MCPConfigManager = MCPConfigManager;
|
|
207
|
+
// Export singleton instance
|
|
208
|
+
exports.mcpConfig = MCPConfigManager.getInstance();
|
|
209
|
+
//# sourceMappingURL=mcp-config-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config-manager.js","sourceRoot":"","sources":["../../src/utils/mcp-config-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Manager - Manages background MCP servers for Claude Code integration
|
|
3
|
+
*/
|
|
4
|
+
import { ChildProcess } from 'child_process';
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
export interface MCPServer {
|
|
7
|
+
name: string;
|
|
8
|
+
script: string;
|
|
9
|
+
port?: number;
|
|
10
|
+
host?: string;
|
|
11
|
+
process?: ChildProcess;
|
|
12
|
+
pid?: number;
|
|
13
|
+
status: 'stopped' | 'starting' | 'running' | 'error';
|
|
14
|
+
startedAt?: Date;
|
|
15
|
+
lastError?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface MCPServerConfig {
|
|
18
|
+
name: string;
|
|
19
|
+
script: string;
|
|
20
|
+
port?: number;
|
|
21
|
+
host?: string;
|
|
22
|
+
autoStart?: boolean;
|
|
23
|
+
env?: Record<string, string>;
|
|
24
|
+
}
|
|
25
|
+
export declare class MCPServerManager extends EventEmitter {
|
|
26
|
+
private servers;
|
|
27
|
+
private configPath;
|
|
28
|
+
private logPath;
|
|
29
|
+
constructor(configPath?: string);
|
|
30
|
+
/**
|
|
31
|
+
* Initialize MCP server manager
|
|
32
|
+
*/
|
|
33
|
+
initialize(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Load MCP server configuration
|
|
36
|
+
*/
|
|
37
|
+
loadConfiguration(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Create default MCP server configuration
|
|
40
|
+
*/
|
|
41
|
+
createDefaultConfiguration(): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Save MCP server configuration
|
|
44
|
+
*/
|
|
45
|
+
saveConfiguration(configs: MCPServerConfig[]): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Start a specific MCP server
|
|
48
|
+
*/
|
|
49
|
+
startServer(name: string): Promise<boolean>;
|
|
50
|
+
/**
|
|
51
|
+
* Stop a specific MCP server
|
|
52
|
+
*/
|
|
53
|
+
stopServer(name: string): Promise<boolean>;
|
|
54
|
+
/**
|
|
55
|
+
* Start all configured MCP servers
|
|
56
|
+
*/
|
|
57
|
+
startAllServers(): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Stop all running MCP servers
|
|
60
|
+
*/
|
|
61
|
+
stopAllServers(): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Get status of all servers
|
|
64
|
+
*/
|
|
65
|
+
getServerStatus(): MCPServer[];
|
|
66
|
+
/**
|
|
67
|
+
* Get status of a specific server
|
|
68
|
+
*/
|
|
69
|
+
getServer(name: string): MCPServer | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* Check if all servers are running
|
|
72
|
+
*/
|
|
73
|
+
areAllServersRunning(): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Get running servers count
|
|
76
|
+
*/
|
|
77
|
+
getRunningServersCount(): number;
|
|
78
|
+
/**
|
|
79
|
+
* Add a new server configuration
|
|
80
|
+
*/
|
|
81
|
+
addServer(config: MCPServerConfig): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Remove a server configuration
|
|
84
|
+
*/
|
|
85
|
+
removeServer(name: string): Promise<void>;
|
|
86
|
+
/**
|
|
87
|
+
* Cleanup - stop all servers and clean up resources
|
|
88
|
+
*/
|
|
89
|
+
cleanup(): Promise<void>;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=mcp-server-manager.d.ts.map
|